diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 index 680d8cc..fdfd2b6 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ .svn *.DS_Store +*.odp# +*.pdf# xCode4_commandline/dumps/XCODE4_LEGACY_VARIABLES.txt xCode4_commandline/dumps/XCODE4_VARIABLES.txt diff --git a/CodeStyle/.gitignore b/1-CodeStyle/.gitignore old mode 100644 new mode 100755 similarity index 100% rename from CodeStyle/.gitignore rename to 1-CodeStyle/.gitignore diff --git a/CodeStyle/ObjectiveC.cfg b/1-CodeStyle/ObjectiveC.cfg old mode 100644 new mode 100755 similarity index 100% rename from CodeStyle/ObjectiveC.cfg rename to 1-CodeStyle/ObjectiveC.cfg diff --git a/1-CodeStyle/ObjectiveC_Coding_Standard.odt b/1-CodeStyle/ObjectiveC_Coding_Standard.odt new file mode 100755 index 0000000..68eec36 Binary files /dev/null and b/1-CodeStyle/ObjectiveC_Coding_Standard.odt differ diff --git a/1-CodeStyle/ObjectiveC_Coding_Standard.pdf b/1-CodeStyle/ObjectiveC_Coding_Standard.pdf new file mode 100755 index 0000000..c3feef0 Binary files /dev/null and b/1-CodeStyle/ObjectiveC_Coding_Standard.pdf differ diff --git a/1-CodeStyle/images/1-ViewControllerNaming.png b/1-CodeStyle/images/1-ViewControllerNaming.png new file mode 100644 index 0000000..29832db Binary files /dev/null and b/1-CodeStyle/images/1-ViewControllerNaming.png differ diff --git a/CodeStyle/images/EditActiveProject.png b/1-CodeStyle/images/EditActiveProject.png old mode 100644 new mode 100755 similarity index 100% rename from CodeStyle/images/EditActiveProject.png rename to 1-CodeStyle/images/EditActiveProject.png diff --git a/CodeStyle/images/EditActiveTarger.png b/1-CodeStyle/images/EditActiveTarger.png old mode 100644 new mode 100755 similarity index 100% rename from CodeStyle/images/EditActiveTarger.png rename to 1-CodeStyle/images/EditActiveTarger.png diff --git a/CodeStyle/images/header_search_path.png b/1-CodeStyle/images/header_search_path.png old mode 100644 new mode 100755 similarity index 100% rename from CodeStyle/images/header_search_path.png rename to 1-CodeStyle/images/header_search_path.png diff --git a/CodeStyle/references/CodingGuidelines.pdf b/1-CodeStyle/references/CodingGuidelines.pdf old mode 100644 new mode 100755 similarity index 100% rename from CodeStyle/references/CodingGuidelines.pdf rename to 1-CodeStyle/references/CodingGuidelines.pdf diff --git a/CodeStyle/references/Indent style - Wikipedia, the free encyclopedia.mht b/1-CodeStyle/references/Indent style-Wikipedia.mht old mode 100644 new mode 100755 similarity index 100% rename from CodeStyle/references/Indent style - Wikipedia, the free encyclopedia.mht rename to 1-CodeStyle/references/Indent style-Wikipedia.mht diff --git a/CodeStyle/references/Games from Within | The Care and Feeding of Pre-Compiled Headers.mht b/1-CodeStyle/references/Pre-Compiled-Headers.mht old mode 100644 new mode 100755 similarity index 100% rename from CodeStyle/references/Games from Within | The Care and Feeding of Pre-Compiled Headers.mht rename to 1-CodeStyle/references/Pre-Compiled-Headers.mht diff --git a/CodeStyle/references/Cocoa with Love: A sample iPhone application with complete unit tests.mht b/1-CodeStyle/references/UnitTestsSample.mht old mode 100644 new mode 100755 similarity index 100% rename from CodeStyle/references/Cocoa with Love: A sample iPhone application with complete unit tests.mht rename to 1-CodeStyle/references/UnitTestsSample.mht diff --git a/CodeStyle/references/camelCase - Wikipedia, the free encyclopedia.mht b/1-CodeStyle/references/camelCase-Wikipedia.mht old mode 100644 new mode 100755 similarity index 100% rename from CodeStyle/references/camelCase - Wikipedia, the free encyclopedia.mht rename to 1-CodeStyle/references/camelCase-Wikipedia.mht diff --git a/CodeStyle/references/core data in a static library for the iPhone - Stack Overflow.mht b/1-CodeStyle/references/core-data-static-library.mht old mode 100644 new mode 100755 similarity index 100% rename from CodeStyle/references/core data in a static library for the iPhone - Stack Overflow.mht rename to 1-CodeStyle/references/core-data-static-library.mht diff --git "a/CodeStyle/references/Easy, Modular Code Sharing Across iPhone Apps: Static Libraries and Cross-Project References \342\200\224 ClintHarris.net.mht" b/1-CodeStyle/references/librariesHowto.mht old mode 100644 new mode 100755 similarity index 100% rename from "CodeStyle/references/Easy, Modular Code Sharing Across iPhone Apps: Static Libraries and Cross-Project References \342\200\224 ClintHarris.net.mht" rename to 1-CodeStyle/references/librariesHowto.mht diff --git a/xCode4_commandline/dumps/dump_xcode_variables.sh b/2-xCode4_commandline/dumps/dump_xcode_variables.sh old mode 100644 new mode 100755 similarity index 100% rename from xCode4_commandline/dumps/dump_xcode_variables.sh rename to 2-xCode4_commandline/dumps/dump_xcode_variables.sh diff --git a/2-xCode4_commandline/images/._BuildActions.png b/2-xCode4_commandline/images/._BuildActions.png new file mode 100755 index 0000000..73d15b6 Binary files /dev/null and b/2-xCode4_commandline/images/._BuildActions.png differ diff --git a/2-xCode4_commandline/images/._BuildAndArchive.png b/2-xCode4_commandline/images/._BuildAndArchive.png new file mode 100755 index 0000000..73d15b6 Binary files /dev/null and b/2-xCode4_commandline/images/._BuildAndArchive.png differ diff --git a/2-xCode4_commandline/images/._BuildDirectory.png b/2-xCode4_commandline/images/._BuildDirectory.png new file mode 100755 index 0000000..4f48843 Binary files /dev/null and b/2-xCode4_commandline/images/._BuildDirectory.png differ diff --git a/2-xCode4_commandline/images/._BuildDirectoryContents.png b/2-xCode4_commandline/images/._BuildDirectoryContents.png new file mode 100755 index 0000000..4f48843 Binary files /dev/null and b/2-xCode4_commandline/images/._BuildDirectoryContents.png differ diff --git a/2-xCode4_commandline/images/._BuildDirectoryContents4.0.2.png b/2-xCode4_commandline/images/._BuildDirectoryContents4.0.2.png new file mode 100755 index 0000000..4f48843 Binary files /dev/null and b/2-xCode4_commandline/images/._BuildDirectoryContents4.0.2.png differ diff --git a/2-xCode4_commandline/images/._DeveloperIdentity.png b/2-xCode4_commandline/images/._DeveloperIdentity.png new file mode 100755 index 0000000..73d15b6 Binary files /dev/null and b/2-xCode4_commandline/images/._DeveloperIdentity.png differ diff --git a/2-xCode4_commandline/images/._OrganizerWindow.png b/2-xCode4_commandline/images/._OrganizerWindow.png new file mode 100755 index 0000000..73d15b6 Binary files /dev/null and b/2-xCode4_commandline/images/._OrganizerWindow.png differ diff --git a/2-xCode4_commandline/images/._active_configuration_selection.png b/2-xCode4_commandline/images/._active_configuration_selection.png new file mode 100755 index 0000000..cde5f58 Binary files /dev/null and b/2-xCode4_commandline/images/._active_configuration_selection.png differ diff --git a/2-xCode4_commandline/images/._active_target.png b/2-xCode4_commandline/images/._active_target.png new file mode 100755 index 0000000..73d15b6 Binary files /dev/null and b/2-xCode4_commandline/images/._active_target.png differ diff --git a/2-xCode4_commandline/images/._configurations_list_clear.png b/2-xCode4_commandline/images/._configurations_list_clear.png new file mode 100755 index 0000000..73d15b6 Binary files /dev/null and b/2-xCode4_commandline/images/._configurations_list_clear.png differ diff --git a/2-xCode4_commandline/images/._scheme_settings.png b/2-xCode4_commandline/images/._scheme_settings.png new file mode 100755 index 0000000..b182aad Binary files /dev/null and b/2-xCode4_commandline/images/._scheme_settings.png differ diff --git a/2-xCode4_commandline/images/._sdk_list.png b/2-xCode4_commandline/images/._sdk_list.png new file mode 100755 index 0000000..73d15b6 Binary files /dev/null and b/2-xCode4_commandline/images/._sdk_list.png differ diff --git a/2-xCode4_commandline/images/._targets_list.png b/2-xCode4_commandline/images/._targets_list.png new file mode 100755 index 0000000..73d15b6 Binary files /dev/null and b/2-xCode4_commandline/images/._targets_list.png differ diff --git a/2-xCode4_commandline/images/._xcode_main_project.png b/2-xCode4_commandline/images/._xcode_main_project.png new file mode 100755 index 0000000..73d15b6 Binary files /dev/null and b/2-xCode4_commandline/images/._xcode_main_project.png differ diff --git a/xCode4_commandline/images/AccessBuildDir.png b/2-xCode4_commandline/images/AccessBuildDir.png old mode 100644 new mode 100755 similarity index 100% rename from xCode4_commandline/images/AccessBuildDir.png rename to 2-xCode4_commandline/images/AccessBuildDir.png diff --git a/xCode4_commandline/images/BuildActions.png b/2-xCode4_commandline/images/BuildActions.png old mode 100644 new mode 100755 similarity index 100% rename from xCode4_commandline/images/BuildActions.png rename to 2-xCode4_commandline/images/BuildActions.png diff --git a/xCode4_commandline/images/BuildAndArchive.png b/2-xCode4_commandline/images/BuildAndArchive.png old mode 100644 new mode 100755 similarity index 100% rename from xCode4_commandline/images/BuildAndArchive.png rename to 2-xCode4_commandline/images/BuildAndArchive.png diff --git a/xCode4_commandline/images/BuildDirectories3.png b/2-xCode4_commandline/images/BuildDirectories3.png old mode 100644 new mode 100755 similarity index 100% rename from xCode4_commandline/images/BuildDirectories3.png rename to 2-xCode4_commandline/images/BuildDirectories3.png diff --git a/xCode4_commandline/images/BuildDirectories4.png b/2-xCode4_commandline/images/BuildDirectories4.png old mode 100644 new mode 100755 similarity index 100% rename from xCode4_commandline/images/BuildDirectories4.png rename to 2-xCode4_commandline/images/BuildDirectories4.png diff --git a/xCode4_commandline/images/BuildDirectory.png b/2-xCode4_commandline/images/BuildDirectory.png old mode 100644 new mode 100755 similarity index 100% rename from xCode4_commandline/images/BuildDirectory.png rename to 2-xCode4_commandline/images/BuildDirectory.png diff --git a/xCode4_commandline/images/BuildDirectoryContents.png b/2-xCode4_commandline/images/BuildDirectoryContents.png old mode 100644 new mode 100755 similarity index 100% rename from xCode4_commandline/images/BuildDirectoryContents.png rename to 2-xCode4_commandline/images/BuildDirectoryContents.png diff --git a/xCode4_commandline/images/BuildDirectoryContents4.0.2.png b/2-xCode4_commandline/images/BuildDirectoryContents4.0.2.png old mode 100644 new mode 100755 similarity index 100% rename from xCode4_commandline/images/BuildDirectoryContents4.0.2.png rename to 2-xCode4_commandline/images/BuildDirectoryContents4.0.2.png diff --git a/xCode4_commandline/images/DerivedDataLocation.png b/2-xCode4_commandline/images/DerivedDataLocation.png old mode 100644 new mode 100755 similarity index 100% rename from xCode4_commandline/images/DerivedDataLocation.png rename to 2-xCode4_commandline/images/DerivedDataLocation.png diff --git a/xCode4_commandline/images/DerivedDataStructure.png b/2-xCode4_commandline/images/DerivedDataStructure.png old mode 100644 new mode 100755 similarity index 100% rename from xCode4_commandline/images/DerivedDataStructure.png rename to 2-xCode4_commandline/images/DerivedDataStructure.png diff --git a/xCode4_commandline/images/DeveloperIdentity.png b/2-xCode4_commandline/images/DeveloperIdentity.png old mode 100644 new mode 100755 similarity index 100% rename from xCode4_commandline/images/DeveloperIdentity.png rename to 2-xCode4_commandline/images/DeveloperIdentity.png diff --git a/xCode4_commandline/images/InvokingOrganizer.png b/2-xCode4_commandline/images/InvokingOrganizer.png old mode 100644 new mode 100755 similarity index 100% rename from xCode4_commandline/images/InvokingOrganizer.png rename to 2-xCode4_commandline/images/InvokingOrganizer.png diff --git a/xCode4_commandline/images/OrganizerShare.png b/2-xCode4_commandline/images/OrganizerShare.png old mode 100644 new mode 100755 similarity index 100% rename from xCode4_commandline/images/OrganizerShare.png rename to 2-xCode4_commandline/images/OrganizerShare.png diff --git a/xCode4_commandline/images/OrganizerWindow.png b/2-xCode4_commandline/images/OrganizerWindow.png old mode 100644 new mode 100755 similarity index 100% rename from xCode4_commandline/images/OrganizerWindow.png rename to 2-xCode4_commandline/images/OrganizerWindow.png diff --git a/xCode4_commandline/images/XCode4_legacy_setup.png b/2-xCode4_commandline/images/XCode4_legacy_setup.png old mode 100644 new mode 100755 similarity index 100% rename from xCode4_commandline/images/XCode4_legacy_setup.png rename to 2-xCode4_commandline/images/XCode4_legacy_setup.png diff --git a/xCode4_commandline/images/active_configuration_selection.png b/2-xCode4_commandline/images/active_configuration_selection.png old mode 100644 new mode 100755 similarity index 100% rename from xCode4_commandline/images/active_configuration_selection.png rename to 2-xCode4_commandline/images/active_configuration_selection.png diff --git a/xCode4_commandline/images/active_target.png b/2-xCode4_commandline/images/active_target.png old mode 100644 new mode 100755 similarity index 100% rename from xCode4_commandline/images/active_target.png rename to 2-xCode4_commandline/images/active_target.png diff --git a/xCode4_commandline/images/configurations_list_clear.png b/2-xCode4_commandline/images/configurations_list_clear.png old mode 100644 new mode 100755 similarity index 100% rename from xCode4_commandline/images/configurations_list_clear.png rename to 2-xCode4_commandline/images/configurations_list_clear.png diff --git a/xCode4_commandline/images/edit_scheme_menu.png b/2-xCode4_commandline/images/edit_scheme_menu.png old mode 100644 new mode 100755 similarity index 100% rename from xCode4_commandline/images/edit_scheme_menu.png rename to 2-xCode4_commandline/images/edit_scheme_menu.png diff --git a/xCode4_commandline/images/scheme_settings.png b/2-xCode4_commandline/images/scheme_settings.png old mode 100644 new mode 100755 similarity index 100% rename from xCode4_commandline/images/scheme_settings.png rename to 2-xCode4_commandline/images/scheme_settings.png diff --git a/xCode4_commandline/images/sdk_list.png b/2-xCode4_commandline/images/sdk_list.png old mode 100644 new mode 100755 similarity index 100% rename from xCode4_commandline/images/sdk_list.png rename to 2-xCode4_commandline/images/sdk_list.png diff --git a/xCode4_commandline/images/targets_list.png b/2-xCode4_commandline/images/targets_list.png old mode 100644 new mode 100755 similarity index 100% rename from xCode4_commandline/images/targets_list.png rename to 2-xCode4_commandline/images/targets_list.png diff --git a/xCode4_commandline/images/xcode_main_project.png b/2-xCode4_commandline/images/xcode_main_project.png old mode 100644 new mode 100755 similarity index 100% rename from xCode4_commandline/images/xcode_main_project.png rename to 2-xCode4_commandline/images/xcode_main_project.png diff --git "a/xCode4_commandline/references/Xcode \"Build and Archive\" from command line - Stack Overflow.mht" b/2-xCode4_commandline/references/BuildAndArchive-cli.mht old mode 100644 new mode 100755 similarity index 100% rename from "xCode4_commandline/references/Xcode \"Build and Archive\" from command line - Stack Overflow.mht" rename to 2-xCode4_commandline/references/BuildAndArchive-cli.mht diff --git "a/xCode4_commandline/references/OCTO talks ! \302\273 Automating Over The Air Deployment for iPhone.mht" "b/2-xCode4_commandline/references/OCTO talks ! \302\273 Automating Over The Air Deployment for iPhone.mht" old mode 100644 new mode 100755 similarity index 100% rename from "xCode4_commandline/references/OCTO talks ! \302\273 Automating Over The Air Deployment for iPhone.mht" rename to "2-xCode4_commandline/references/OCTO talks ! \302\273 Automating Over The Air Deployment for iPhone.mht" diff --git a/xCode4_commandline/references/Xcode_Build_Setting_Reference.pdf b/2-xCode4_commandline/references/Xcode_Build_Setting_Reference.pdf old mode 100644 new mode 100755 similarity index 100% rename from xCode4_commandline/references/Xcode_Build_Setting_Reference.pdf rename to 2-xCode4_commandline/references/Xcode_Build_Setting_Reference.pdf diff --git a/xCode4_commandline/references/How to automate your iPhone app builds with Hudson | iOS_Web Developer's Life in Beta.mht b/2-xCode4_commandline/references/iOS-And-Hudson.mht old mode 100644 new mode 100755 similarity index 100% rename from xCode4_commandline/references/How to automate your iPhone app builds with Hudson | iOS_Web Developer's Life in Beta.mht rename to 2-xCode4_commandline/references/iOS-And-Hudson.mht diff --git a/xCode4_commandline/references/iOS_Development_Guide.pdf b/2-xCode4_commandline/references/iOS_Development_Guide.pdf old mode 100644 new mode 100755 similarity index 100% rename from xCode4_commandline/references/iOS_Development_Guide.pdf rename to 2-xCode4_commandline/references/iOS_Development_Guide.pdf diff --git a/xCode4_commandline/references/man page xcodebuild section 1.mht b/2-xCode4_commandline/references/man page xcodebuild section 1.mht old mode 100644 new mode 100755 similarity index 100% rename from xCode4_commandline/references/man page xcodebuild section 1.mht rename to 2-xCode4_commandline/references/man page xcodebuild section 1.mht diff --git a/xCode4_commandline/xCode4.x_commandline.odt b/2-xCode4_commandline/xCode4.x_commandline.odt old mode 100644 new mode 100755 similarity index 100% rename from xCode4_commandline/xCode4.x_commandline.odt rename to 2-xCode4_commandline/xCode4.x_commandline.odt diff --git a/xCode4_commandline/xCode4.x_commandline.pdf b/2-xCode4_commandline/xCode4.x_commandline.pdf old mode 100644 new mode 100755 similarity index 100% rename from xCode4_commandline/xCode4.x_commandline.pdf rename to 2-xCode4_commandline/xCode4.x_commandline.pdf diff --git a/3-iContiniousIntegration/GithubCommonScreenshots/._1-ReferencedProjectOptions.png b/3-iContiniousIntegration/GithubCommonScreenshots/._1-ReferencedProjectOptions.png new file mode 100755 index 0000000..b182aad Binary files /dev/null and b/3-iContiniousIntegration/GithubCommonScreenshots/._1-ReferencedProjectOptions.png differ diff --git a/3-iContiniousIntegration/GithubCommonScreenshots/._10.1-LinkerFlags.png b/3-iContiniousIntegration/GithubCommonScreenshots/._10.1-LinkerFlags.png new file mode 100755 index 0000000..cde5f58 Binary files /dev/null and b/3-iContiniousIntegration/GithubCommonScreenshots/._10.1-LinkerFlags.png differ diff --git a/3-iContiniousIntegration/GithubCommonScreenshots/._10.2-EditLinkerFlags.png b/3-iContiniousIntegration/GithubCommonScreenshots/._10.2-EditLinkerFlags.png new file mode 100755 index 0000000..cde5f58 Binary files /dev/null and b/3-iContiniousIntegration/GithubCommonScreenshots/._10.2-EditLinkerFlags.png differ diff --git a/3-iContiniousIntegration/GithubCommonScreenshots/._11.1-NoLinkDependenciesForTheLibrary.png b/3-iContiniousIntegration/GithubCommonScreenshots/._11.1-NoLinkDependenciesForTheLibrary.png new file mode 100755 index 0000000..cde5f58 Binary files /dev/null and b/3-iContiniousIntegration/GithubCommonScreenshots/._11.1-NoLinkDependenciesForTheLibrary.png differ diff --git a/3-iContiniousIntegration/GithubCommonScreenshots/._11.2-NoLinkDependenciesForTheLibrary.png b/3-iContiniousIntegration/GithubCommonScreenshots/._11.2-NoLinkDependenciesForTheLibrary.png new file mode 100755 index 0000000..b182aad Binary files /dev/null and b/3-iContiniousIntegration/GithubCommonScreenshots/._11.2-NoLinkDependenciesForTheLibrary.png differ diff --git a/3-iContiniousIntegration/GithubCommonScreenshots/._2-AddLibraryProjectWithContextMenu.png b/3-iContiniousIntegration/GithubCommonScreenshots/._2-AddLibraryProjectWithContextMenu.png new file mode 100755 index 0000000..b182aad Binary files /dev/null and b/3-iContiniousIntegration/GithubCommonScreenshots/._2-AddLibraryProjectWithContextMenu.png differ diff --git a/3-iContiniousIntegration/GithubCommonScreenshots/._3-AddReferencedProjectFromFinder.png b/3-iContiniousIntegration/GithubCommonScreenshots/._3-AddReferencedProjectFromFinder.png new file mode 100755 index 0000000..b182aad Binary files /dev/null and b/3-iContiniousIntegration/GithubCommonScreenshots/._3-AddReferencedProjectFromFinder.png differ diff --git a/3-iContiniousIntegration/GithubCommonScreenshots/._4-SetBuildTimeDependencies.png b/3-iContiniousIntegration/GithubCommonScreenshots/._4-SetBuildTimeDependencies.png new file mode 100755 index 0000000..cde5f58 Binary files /dev/null and b/3-iContiniousIntegration/GithubCommonScreenshots/._4-SetBuildTimeDependencies.png differ diff --git a/3-iContiniousIntegration/GithubCommonScreenshots/._5-NavigateToBuildTimeDependencies.png b/3-iContiniousIntegration/GithubCommonScreenshots/._5-NavigateToBuildTimeDependencies.png new file mode 100755 index 0000000..cde5f58 Binary files /dev/null and b/3-iContiniousIntegration/GithubCommonScreenshots/._5-NavigateToBuildTimeDependencies.png differ diff --git a/3-iContiniousIntegration/GithubCommonScreenshots/._6-AddLinkerDependencies.png b/3-iContiniousIntegration/GithubCommonScreenshots/._6-AddLinkerDependencies.png new file mode 100755 index 0000000..cde5f58 Binary files /dev/null and b/3-iContiniousIntegration/GithubCommonScreenshots/._6-AddLinkerDependencies.png differ diff --git a/3-iContiniousIntegration/GithubCommonScreenshots/._6.1-AddLinkerDependencies.png b/3-iContiniousIntegration/GithubCommonScreenshots/._6.1-AddLinkerDependencies.png new file mode 100755 index 0000000..cde5f58 Binary files /dev/null and b/3-iContiniousIntegration/GithubCommonScreenshots/._6.1-AddLinkerDependencies.png differ diff --git a/3-iContiniousIntegration/GithubCommonScreenshots/._7-NavigateToLibraryPathDirectory.png b/3-iContiniousIntegration/GithubCommonScreenshots/._7-NavigateToLibraryPathDirectory.png new file mode 100755 index 0000000..cde5f58 Binary files /dev/null and b/3-iContiniousIntegration/GithubCommonScreenshots/._7-NavigateToLibraryPathDirectory.png differ diff --git a/3-iContiniousIntegration/GithubCommonScreenshots/._8-AdjustLibraryHeaderSearchPath.png b/3-iContiniousIntegration/GithubCommonScreenshots/._8-AdjustLibraryHeaderSearchPath.png new file mode 100755 index 0000000..cde5f58 Binary files /dev/null and b/3-iContiniousIntegration/GithubCommonScreenshots/._8-AdjustLibraryHeaderSearchPath.png differ diff --git a/3-iContiniousIntegration/GithubCommonScreenshots/._9.1-PrecompiledHeader.png b/3-iContiniousIntegration/GithubCommonScreenshots/._9.1-PrecompiledHeader.png new file mode 100755 index 0000000..cde5f58 Binary files /dev/null and b/3-iContiniousIntegration/GithubCommonScreenshots/._9.1-PrecompiledHeader.png differ diff --git a/3-iContiniousIntegration/GithubCommonScreenshots/._9.2-PrecompiledHeader.png b/3-iContiniousIntegration/GithubCommonScreenshots/._9.2-PrecompiledHeader.png new file mode 100755 index 0000000..b182aad Binary files /dev/null and b/3-iContiniousIntegration/GithubCommonScreenshots/._9.2-PrecompiledHeader.png differ diff --git a/3-iContiniousIntegration/GithubCommonScreenshots/._Screen shot 2011-05-31 at 2.13.30 PM.png b/3-iContiniousIntegration/GithubCommonScreenshots/._Screen shot 2011-05-31 at 2.13.30 PM.png new file mode 100755 index 0000000..cde5f58 Binary files /dev/null and b/3-iContiniousIntegration/GithubCommonScreenshots/._Screen shot 2011-05-31 at 2.13.30 PM.png differ diff --git a/3-iContiniousIntegration/GithubCommonScreenshots/1-ReferencedProjectOptions.png b/3-iContiniousIntegration/GithubCommonScreenshots/1-ReferencedProjectOptions.png new file mode 100755 index 0000000..78331ed Binary files /dev/null and b/3-iContiniousIntegration/GithubCommonScreenshots/1-ReferencedProjectOptions.png differ diff --git a/3-iContiniousIntegration/GithubCommonScreenshots/10.1-LinkerFlags.png b/3-iContiniousIntegration/GithubCommonScreenshots/10.1-LinkerFlags.png new file mode 100755 index 0000000..d9fd89f Binary files /dev/null and b/3-iContiniousIntegration/GithubCommonScreenshots/10.1-LinkerFlags.png differ diff --git a/3-iContiniousIntegration/GithubCommonScreenshots/10.2-EditLinkerFlags.png b/3-iContiniousIntegration/GithubCommonScreenshots/10.2-EditLinkerFlags.png new file mode 100755 index 0000000..c526dfb Binary files /dev/null and b/3-iContiniousIntegration/GithubCommonScreenshots/10.2-EditLinkerFlags.png differ diff --git a/3-iContiniousIntegration/GithubCommonScreenshots/11.1-NoLinkDependenciesForTheLibrary.png b/3-iContiniousIntegration/GithubCommonScreenshots/11.1-NoLinkDependenciesForTheLibrary.png new file mode 100755 index 0000000..ddcc4f3 Binary files /dev/null and b/3-iContiniousIntegration/GithubCommonScreenshots/11.1-NoLinkDependenciesForTheLibrary.png differ diff --git a/3-iContiniousIntegration/GithubCommonScreenshots/11.2-NoLinkDependenciesForTheLibrary.png b/3-iContiniousIntegration/GithubCommonScreenshots/11.2-NoLinkDependenciesForTheLibrary.png new file mode 100755 index 0000000..50cb9ef Binary files /dev/null and b/3-iContiniousIntegration/GithubCommonScreenshots/11.2-NoLinkDependenciesForTheLibrary.png differ diff --git a/3-iContiniousIntegration/GithubCommonScreenshots/2-AddLibraryProjectWithContextMenu.png b/3-iContiniousIntegration/GithubCommonScreenshots/2-AddLibraryProjectWithContextMenu.png new file mode 100755 index 0000000..2907191 Binary files /dev/null and b/3-iContiniousIntegration/GithubCommonScreenshots/2-AddLibraryProjectWithContextMenu.png differ diff --git a/3-iContiniousIntegration/GithubCommonScreenshots/3-AddReferencedProjectFromFinder.png b/3-iContiniousIntegration/GithubCommonScreenshots/3-AddReferencedProjectFromFinder.png new file mode 100755 index 0000000..3c6333e Binary files /dev/null and b/3-iContiniousIntegration/GithubCommonScreenshots/3-AddReferencedProjectFromFinder.png differ diff --git a/3-iContiniousIntegration/GithubCommonScreenshots/4-SetBuildTimeDependencies.png b/3-iContiniousIntegration/GithubCommonScreenshots/4-SetBuildTimeDependencies.png new file mode 100755 index 0000000..0f220e1 Binary files /dev/null and b/3-iContiniousIntegration/GithubCommonScreenshots/4-SetBuildTimeDependencies.png differ diff --git a/3-iContiniousIntegration/GithubCommonScreenshots/5-NavigateToBuildTimeDependencies.png b/3-iContiniousIntegration/GithubCommonScreenshots/5-NavigateToBuildTimeDependencies.png new file mode 100755 index 0000000..f91fb11 Binary files /dev/null and b/3-iContiniousIntegration/GithubCommonScreenshots/5-NavigateToBuildTimeDependencies.png differ diff --git a/3-iContiniousIntegration/GithubCommonScreenshots/6-AddLinkerDependencies.png b/3-iContiniousIntegration/GithubCommonScreenshots/6-AddLinkerDependencies.png new file mode 100755 index 0000000..52a54e9 Binary files /dev/null and b/3-iContiniousIntegration/GithubCommonScreenshots/6-AddLinkerDependencies.png differ diff --git a/3-iContiniousIntegration/GithubCommonScreenshots/6.1-AddLinkerDependencies.png b/3-iContiniousIntegration/GithubCommonScreenshots/6.1-AddLinkerDependencies.png new file mode 100755 index 0000000..15b33ad Binary files /dev/null and b/3-iContiniousIntegration/GithubCommonScreenshots/6.1-AddLinkerDependencies.png differ diff --git a/3-iContiniousIntegration/GithubCommonScreenshots/7-NavigateToLibraryPathDirectory.png b/3-iContiniousIntegration/GithubCommonScreenshots/7-NavigateToLibraryPathDirectory.png new file mode 100755 index 0000000..8f011d9 Binary files /dev/null and b/3-iContiniousIntegration/GithubCommonScreenshots/7-NavigateToLibraryPathDirectory.png differ diff --git a/3-iContiniousIntegration/GithubCommonScreenshots/8-AdjustLibraryHeaderSearchPath.png b/3-iContiniousIntegration/GithubCommonScreenshots/8-AdjustLibraryHeaderSearchPath.png new file mode 100755 index 0000000..d68797f Binary files /dev/null and b/3-iContiniousIntegration/GithubCommonScreenshots/8-AdjustLibraryHeaderSearchPath.png differ diff --git a/3-iContiniousIntegration/GithubCommonScreenshots/9.1-PrecompiledHeader.png b/3-iContiniousIntegration/GithubCommonScreenshots/9.1-PrecompiledHeader.png new file mode 100755 index 0000000..9174abe Binary files /dev/null and b/3-iContiniousIntegration/GithubCommonScreenshots/9.1-PrecompiledHeader.png differ diff --git a/3-iContiniousIntegration/GithubCommonScreenshots/9.2-PrecompiledHeader.png b/3-iContiniousIntegration/GithubCommonScreenshots/9.2-PrecompiledHeader.png new file mode 100755 index 0000000..d13a539 Binary files /dev/null and b/3-iContiniousIntegration/GithubCommonScreenshots/9.2-PrecompiledHeader.png differ diff --git a/3-iContiniousIntegration/GithubCommonScreenshots/Screen shot 2011-05-31 at 2.13.30 PM.png b/3-iContiniousIntegration/GithubCommonScreenshots/Screen shot 2011-05-31 at 2.13.30 PM.png new file mode 100755 index 0000000..ae0bf4c Binary files /dev/null and b/3-iContiniousIntegration/GithubCommonScreenshots/Screen shot 2011-05-31 at 2.13.30 PM.png differ diff --git a/3-iContiniousIntegration/ciPresentation.odp b/3-iContiniousIntegration/ciPresentation.odp new file mode 100644 index 0000000..3e43fc9 Binary files /dev/null and b/3-iContiniousIntegration/ciPresentation.odp differ diff --git a/3-iContiniousIntegration/ciPresentation.pdf b/3-iContiniousIntegration/ciPresentation.pdf new file mode 100644 index 0000000..a93f484 Binary files /dev/null and b/3-iContiniousIntegration/ciPresentation.pdf differ diff --git a/3-iContiniousIntegration/habr_ci.txt b/3-iContiniousIntegration/habr_ci.txt new file mode 100644 index 0000000..d633586 --- /dev/null +++ b/3-iContiniousIntegration/habr_ci.txt @@ -0,0 +1,10 @@ +Что вы используете для Continuous Integration? + +0.78% (7)Apache Continuum +3.12% (28)Bamboo +9.7% (87)CruiseControl +18.17% (163)Hudson / Jenkins +11.04% (99)TeamCity +6.91% (62)Другой вариант +50.28% (451)Работаем без Continuous Integration +Проголосовало 897 человек. Воздержалось 386 человек. \ No newline at end of file diff --git a/3-iContiniousIntegration/habr_lib_usage.txt b/3-iContiniousIntegration/habr_lib_usage.txt new file mode 100644 index 0000000..1074c5e --- /dev/null +++ b/3-iContiniousIntegration/habr_lib_usage.txt @@ -0,0 +1,18 @@ + Apple iOS > iOS ? +4.76% +(1) + . "Cocoa touch->static library project" +9.52% +(2) + . . framework, SDK "Universal Binary". +23.81% +(5) + . +28.57% +(6) + . , "Cocoa touch->static library project", framework, SDK "Universal Binary". +33.33% +(7) + . frameworks, Apple + + 21 . 95 . \ No newline at end of file diff --git a/3-iContiniousIntegration/habr_test_usage.txt b/3-iContiniousIntegration/habr_test_usage.txt new file mode 100644 index 0000000..32228cc --- /dev/null +++ b/3-iContiniousIntegration/habr_test_usage.txt @@ -0,0 +1,18 @@ + Apple iOS > unit testing framework iOS ? +7.14% +(3) +Sen Testing Kit (, iOS SDK) +2.38% +(1) +Google toolbox +2.38% +(1) +GHUnit +2.38% +(1) + Unit test framework +85.71% +(36) + Unit tests iOS + + 42 . 110 . \ No newline at end of file diff --git a/3-iContiniousIntegration/iContiniousIntegration.odt b/3-iContiniousIntegration/iContiniousIntegration.odt new file mode 100755 index 0000000..1c46eb0 Binary files /dev/null and b/3-iContiniousIntegration/iContiniousIntegration.odt differ diff --git a/3-iContiniousIntegration/iContiniousIntegration.pdf b/3-iContiniousIntegration/iContiniousIntegration.pdf new file mode 100755 index 0000000..6f341ed Binary files /dev/null and b/3-iContiniousIntegration/iContiniousIntegration.pdf differ diff --git a/3-iContiniousIntegration/images-analyzer/clang-graph.png b/3-iContiniousIntegration/images-analyzer/clang-graph.png new file mode 100644 index 0000000..58ef04c Binary files /dev/null and b/3-iContiniousIntegration/images-analyzer/clang-graph.png differ diff --git a/3-iContiniousIntegration/images-analyzer/test-trend.png b/3-iContiniousIntegration/images-analyzer/test-trend.png new file mode 100644 index 0000000..e29e1fd Binary files /dev/null and b/3-iContiniousIntegration/images-analyzer/test-trend.png differ diff --git a/3-iContiniousIntegration/images-background/Presentation_Background.png b/3-iContiniousIntegration/images-background/Presentation_Background.png new file mode 100644 index 0000000..f12f07b Binary files /dev/null and b/3-iContiniousIntegration/images-background/Presentation_Background.png differ diff --git a/3-iContiniousIntegration/images-background/Presentation_Background_1.png b/3-iContiniousIntegration/images-background/Presentation_Background_1.png new file mode 100644 index 0000000..0e1b593 Binary files /dev/null and b/3-iContiniousIntegration/images-background/Presentation_Background_1.png differ diff --git a/3-iContiniousIntegration/images-background/Presentation_Background_2.png b/3-iContiniousIntegration/images-background/Presentation_Background_2.png new file mode 100644 index 0000000..5876220 Binary files /dev/null and b/3-iContiniousIntegration/images-background/Presentation_Background_2.png differ diff --git a/3-iContiniousIntegration/images-background/epam_footer.png b/3-iContiniousIntegration/images-background/epam_footer.png new file mode 100644 index 0000000..d41e256 Binary files /dev/null and b/3-iContiniousIntegration/images-background/epam_footer.png differ diff --git a/3-iContiniousIntegration/images-presentation.zip b/3-iContiniousIntegration/images-presentation.zip new file mode 100644 index 0000000..04d4658 Binary files /dev/null and b/3-iContiniousIntegration/images-presentation.zip differ diff --git a/3-iContiniousIntegration/images-presentation/0-appleLogo.jpg b/3-iContiniousIntegration/images-presentation/0-appleLogo.jpg new file mode 100755 index 0000000..19efee3 Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/0-appleLogo.jpg differ diff --git "a/3-iContiniousIntegration/images-presentation/0.1-apple_logo.jpg (250\303\227291).jpg" "b/3-iContiniousIntegration/images-presentation/0.1-apple_logo.jpg (250\303\227291).jpg" new file mode 100755 index 0000000..3df90f0 Binary files /dev/null and "b/3-iContiniousIntegration/images-presentation/0.1-apple_logo.jpg (250\303\227291).jpg" differ diff --git a/3-iContiniousIntegration/images-presentation/1-StaticLibrary.png b/3-iContiniousIntegration/images-presentation/1-StaticLibrary.png new file mode 100755 index 0000000..e6e301a Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/1-StaticLibrary.png differ diff --git a/3-iContiniousIntegration/images-presentation/10.1-AlienPredator.jpg b/3-iContiniousIntegration/images-presentation/10.1-AlienPredator.jpg new file mode 100755 index 0000000..e475738 Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/10.1-AlienPredator.jpg differ diff --git a/3-iContiniousIntegration/images-presentation/10.2-AlienPredator.jpg b/3-iContiniousIntegration/images-presentation/10.2-AlienPredator.jpg new file mode 100755 index 0000000..c5d9937 Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/10.2-AlienPredator.jpg differ diff --git a/3-iContiniousIntegration/images-presentation/11-iPhone-Device.jpg b/3-iContiniousIntegration/images-presentation/11-iPhone-Device.jpg new file mode 100644 index 0000000..18b660f Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/11-iPhone-Device.jpg differ diff --git a/3-iContiniousIntegration/images-presentation/11-iPhone-Device.png b/3-iContiniousIntegration/images-presentation/11-iPhone-Device.png new file mode 100755 index 0000000..73c2f6d Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/11-iPhone-Device.png differ diff --git "a/3-iContiniousIntegration/images-presentation/13-Computer-icon.png (128\303\227128).png" "b/3-iContiniousIntegration/images-presentation/13-Computer-icon.png (128\303\227128).png" new file mode 100755 index 0000000..1a0c63b Binary files /dev/null and "b/3-iContiniousIntegration/images-presentation/13-Computer-icon.png (128\303\227128).png" differ diff --git a/3-iContiniousIntegration/images-presentation/14-build_and_run_xcode.jpg b/3-iContiniousIntegration/images-presentation/14-build_and_run_xcode.jpg new file mode 100644 index 0000000..7acd4fb Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/14-build_and_run_xcode.jpg differ diff --git a/3-iContiniousIntegration/images-presentation/14-build_and_run_xcode.png b/3-iContiniousIntegration/images-presentation/14-build_and_run_xcode.png new file mode 100755 index 0000000..8402158 Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/14-build_and_run_xcode.png differ diff --git a/3-iContiniousIntegration/images-presentation/14-svn.png b/3-iContiniousIntegration/images-presentation/14-svn.png new file mode 100755 index 0000000..ab9de23 Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/14-svn.png differ diff --git a/3-iContiniousIntegration/images-presentation/15-git.png b/3-iContiniousIntegration/images-presentation/15-git.png new file mode 100755 index 0000000..d1fb4d9 Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/15-git.png differ diff --git a/3-iContiniousIntegration/images-presentation/15-itunes10logo.jpg b/3-iContiniousIntegration/images-presentation/15-itunes10logo.jpg new file mode 100644 index 0000000..43df738 Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/15-itunes10logo.jpg differ diff --git a/3-iContiniousIntegration/images-presentation/15-itunes10logo.png b/3-iContiniousIntegration/images-presentation/15-itunes10logo.png new file mode 100755 index 0000000..dfcd1c4 Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/15-itunes10logo.png differ diff --git a/3-iContiniousIntegration/images-presentation/16-UniversalLibraryDependencies.png b/3-iContiniousIntegration/images-presentation/16-UniversalLibraryDependencies.png new file mode 100755 index 0000000..e40c453 Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/16-UniversalLibraryDependencies.png differ diff --git a/3-iContiniousIntegration/images-presentation/17-BuildOptionsDevice.png b/3-iContiniousIntegration/images-presentation/17-BuildOptionsDevice.png new file mode 100755 index 0000000..ae1f254 Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/17-BuildOptionsDevice.png differ diff --git a/3-iContiniousIntegration/images-presentation/17-BuildOptionsSim.png b/3-iContiniousIntegration/images-presentation/17-BuildOptionsSim.png new file mode 100755 index 0000000..e2c35b6 Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/17-BuildOptionsSim.png differ diff --git a/3-iContiniousIntegration/images-presentation/18-LibrariesInProject.png b/3-iContiniousIntegration/images-presentation/18-LibrariesInProject.png new file mode 100755 index 0000000..8f71b73 Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/18-LibrariesInProject.png differ diff --git a/3-iContiniousIntegration/images-presentation/19-BuildAndRun.png b/3-iContiniousIntegration/images-presentation/19-BuildAndRun.png new file mode 100755 index 0000000..94c73ae Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/19-BuildAndRun.png differ diff --git a/3-iContiniousIntegration/images-presentation/199431-ios4logo_original.jpg b/3-iContiniousIntegration/images-presentation/199431-ios4logo_original.jpg new file mode 100755 index 0000000..8466aba Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/199431-ios4logo_original.jpg differ diff --git a/3-iContiniousIntegration/images-presentation/2-chuck.jpg b/3-iContiniousIntegration/images-presentation/2-chuck.jpg new file mode 100755 index 0000000..e171e7b Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/2-chuck.jpg differ diff --git a/3-iContiniousIntegration/images-presentation/20-AddLibraryToProject.png b/3-iContiniousIntegration/images-presentation/20-AddLibraryToProject.png new file mode 100755 index 0000000..1c35d42 Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/20-AddLibraryToProject.png differ diff --git a/3-iContiniousIntegration/images-presentation/21-BuildAndArchive.png b/3-iContiniousIntegration/images-presentation/21-BuildAndArchive.png new file mode 100755 index 0000000..fed95b2 Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/21-BuildAndArchive.png differ diff --git a/3-iContiniousIntegration/images-presentation/3.1-Big_Red_Button.jpg b/3-iContiniousIntegration/images-presentation/3.1-Big_Red_Button.jpg new file mode 100644 index 0000000..dd935c4 Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/3.1-Big_Red_Button.jpg differ diff --git a/3-iContiniousIntegration/images-presentation/3.1-Big_Red_Button.png b/3-iContiniousIntegration/images-presentation/3.1-Big_Red_Button.png new file mode 100755 index 0000000..fa25e10 Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/3.1-Big_Red_Button.png differ diff --git "a/3-iContiniousIntegration/images-presentation/3.2-red_button.jpg (500\303\227400).jpg" "b/3-iContiniousIntegration/images-presentation/3.2-red_button.jpg (500\303\227400).jpg" new file mode 100644 index 0000000..1455380 Binary files /dev/null and "b/3-iContiniousIntegration/images-presentation/3.2-red_button.jpg (500\303\227400).jpg" differ diff --git "a/3-iContiniousIntegration/images-presentation/3.2-red_button.jpg (500\303\227400).png" "b/3-iContiniousIntegration/images-presentation/3.2-red_button.jpg (500\303\227400).png" new file mode 100755 index 0000000..8da9825 Binary files /dev/null and "b/3-iContiniousIntegration/images-presentation/3.2-red_button.jpg (500\303\227400).png" differ diff --git a/3-iContiniousIntegration/images-presentation/4-iphone-simulator-3-2-icon.png b/3-iContiniousIntegration/images-presentation/4-iphone-simulator-3-2-icon.png new file mode 100755 index 0000000..6b03284 Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/4-iphone-simulator-3-2-icon.png differ diff --git a/3-iContiniousIntegration/images-presentation/5-NO-xcodeLogo.png b/3-iContiniousIntegration/images-presentation/5-NO-xcodeLogo.png new file mode 100755 index 0000000..9052e84 Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/5-NO-xcodeLogo.png differ diff --git a/3-iContiniousIntegration/images-presentation/6.1-AddLibrary1.png b/3-iContiniousIntegration/images-presentation/6.1-AddLibrary1.png new file mode 100755 index 0000000..f9a9dc0 Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/6.1-AddLibrary1.png differ diff --git a/3-iContiniousIntegration/images-presentation/6.2-AddLibrary.png b/3-iContiniousIntegration/images-presentation/6.2-AddLibrary.png new file mode 100755 index 0000000..e83a83c Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/6.2-AddLibrary.png differ diff --git a/3-iContiniousIntegration/images-presentation/7.1-AddLibrary1.png b/3-iContiniousIntegration/images-presentation/7.1-AddLibrary1.png new file mode 100755 index 0000000..f9a9dc0 Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/7.1-AddLibrary1.png differ diff --git a/3-iContiniousIntegration/images-presentation/7.2-AddLibrary.png b/3-iContiniousIntegration/images-presentation/7.2-AddLibrary.png new file mode 100755 index 0000000..5fcca06 Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/7.2-AddLibrary.png differ diff --git a/3-iContiniousIntegration/images-presentation/8.1-OneShot-Title.jpg b/3-iContiniousIntegration/images-presentation/8.1-OneShot-Title.jpg new file mode 100644 index 0000000..25bdcbc Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/8.1-OneShot-Title.jpg differ diff --git a/3-iContiniousIntegration/images-presentation/8.1-OneShot-Title.png b/3-iContiniousIntegration/images-presentation/8.1-OneShot-Title.png new file mode 100755 index 0000000..9698b72 Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/8.1-OneShot-Title.png differ diff --git "a/3-iContiniousIntegration/images-presentation/8.2-lasttarget.jpg (709\303\227709).jpg" "b/3-iContiniousIntegration/images-presentation/8.2-lasttarget.jpg (709\303\227709).jpg" new file mode 100755 index 0000000..1a5ce3d Binary files /dev/null and "b/3-iContiniousIntegration/images-presentation/8.2-lasttarget.jpg (709\303\227709).jpg" differ diff --git "a/3-iContiniousIntegration/images-presentation/8.2-lasttarget.jpg (709\303\227709).png" "b/3-iContiniousIntegration/images-presentation/8.2-lasttarget.jpg (709\303\227709).png" new file mode 100755 index 0000000..7a2b6d9 Binary files /dev/null and "b/3-iContiniousIntegration/images-presentation/8.2-lasttarget.jpg (709\303\227709).png" differ diff --git a/3-iContiniousIntegration/images-presentation/9.1-screenshot_xcode_add_projectref.jpg b/3-iContiniousIntegration/images-presentation/9.1-screenshot_xcode_add_projectref.jpg new file mode 100755 index 0000000..6194a1b Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/9.1-screenshot_xcode_add_projectref.jpg differ diff --git a/3-iContiniousIntegration/images-presentation/9.2-screenshot_xcode_addproject-1.jpg b/3-iContiniousIntegration/images-presentation/9.2-screenshot_xcode_addproject-1.jpg new file mode 100755 index 0000000..f3605f6 Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/9.2-screenshot_xcode_addproject-1.jpg differ diff --git a/3-iContiniousIntegration/images-presentation/9.3-screenshot_xcode_subproject.jpg b/3-iContiniousIntegration/images-presentation/9.3-screenshot_xcode_subproject.jpg new file mode 100755 index 0000000..ed02163 Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/9.3-screenshot_xcode_subproject.jpg differ diff --git a/3-iContiniousIntegration/images-presentation/Background.jpg b/3-iContiniousIntegration/images-presentation/Background.jpg new file mode 100755 index 0000000..d30c8e6 Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/Background.jpg differ diff --git "a/3-iContiniousIntegration/images-presentation/LeatherHoles-Apple.png (1920\303\2271200).png" "b/3-iContiniousIntegration/images-presentation/LeatherHoles-Apple.png (1920\303\2271200).png" new file mode 100755 index 0000000..f6415e1 Binary files /dev/null and "b/3-iContiniousIntegration/images-presentation/LeatherHoles-Apple.png (1920\303\2271200).png" differ diff --git a/3-iContiniousIntegration/images-presentation/Mac_Logo.jpg b/3-iContiniousIntegration/images-presentation/Mac_Logo.jpg new file mode 100755 index 0000000..a8bb97a Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/Mac_Logo.jpg differ diff --git a/3-iContiniousIntegration/images-presentation/TouchXmlInstall.mht b/3-iContiniousIntegration/images-presentation/TouchXmlInstall.mht new file mode 100755 index 0000000..b4fc56a --- /dev/null +++ b/3-iContiniousIntegration/images-presentation/TouchXmlInstall.mht @@ -0,0 +1,3066 @@ +Content-Type: multipart/related; start=; boundary=----------i2L0fMUSDUR5fcpX3sh9hH +Content-Location: http://foobarpig.com/iphone/touchxml-installation-guide.html +Subject: =?utf-8?Q?TouchXML=20installation=20guide=20|=20foobarpig.com?= +MIME-Version: 1.0 + +------------i2L0fMUSDUR5fcpX3sh9hH +Content-Disposition: inline; filename=touchxml-installation-guide.html +Content-Type: text/html; charset=UTF-8; name=touchxml-installation-guide.html +Content-ID: +Content-Location: http://foobarpig.com/iphone/touchxml-installation-guide.html +Content-Transfer-Encoding: 8bit + + + + + + + +TouchXML installation guide | foobarpig.com + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+ + +
+

TouchXML installation guide

+ +
+

TouchXML is a libxml API wrapper written in Objective-C and usually helps with all your project XML needs. While writing my post about parsing XML element attributes and putting up demo project I realized that I tend to forget how to add TouchXML to new project, so here goes step-by-step of that procedure:

+

1. Get TouchXML

+

You can find archives to download in touchcode project downloads . Go to TouchCode github page and download TouchXML archive and extract it anywhere you like. It’s common practice to keep such libraries and classes in Developer/ExtraLibs directory.

+

2. Enable libxml2 library

+

First things first, before we actually add TouchXML files, we need to do some project configuration changes, so our project could use libxml library.

+

1. Go to “Project -> Edit project settings”

+

2. Activate “Build” tab

+

3. Search for “Header search paths” setting and add /usr/include/libxml2 value to it

+

libxml header search paths

+

4. Search for “Other linker flags” setting and add -lxml2 value

+

touchxml other linker flags

+

P.s. notice that search function is really useful for finding settings you need faster.

+

3. Add TouchXML classes

+

1. Right click (option click) on your projects “Classes” folder and go to “Add -> Existing files…”

+

+

2. Navigate to the directory where extracted TouchXML is kept and browse  deeper to “Common -> Source”. Select everything! And click “Add” obviously.

+

touchxml classes

+

3. Confirm.

+

+

Now you should see a bunch of new files in your project. I usually group them by selecting files I wish to group and then selecting “Group” in context (right click/option click) menu.

+

4. Import TouchXML to your project

+
#import "TouchXML.h"
+

That is all the “magic” and you’re good to go. Since, I am not going to write about actually using TouchXML, you can see a nice working example in my previous post.

+

5. Common errors

+

Error: libxml/tree.h: No such file or directory

+

… and hundreds of something missing errors. It means that something went wrong with “Header search paths”. Maybe you didn’t added /usr/include/libxml2
+
or added incorrectly? Check it.

+

Error: “_xmlDocDumpFormatMemory”, referenced from:- [CXMLDocument description] in CXMLDocument.o

+

… and tens of errors like this. While errors by them selfs aren’t very expressive, they wish to inform you, that you did not added -lxml2 flag to “Other linker flags”

+

And that is all for now!

+ + +
+ + + + +
+ +

Tags: , ,

+ + +
+
+ + + + +

26 responses

+ + + +
    +
  1. +
    +
    sathya
    +
    Posted April 28, 2010 at 11:47 | Permalink
    +
    +

    Hi, i got this error,

    +

    “Error: libxml/tree.h: No such file or directory ” with 356 errors,

    +

    even after correctly added /usr/include/libxml2 to “Header search paths”. what to do?

    +
  2. +
  3. +
    +
    sathya
    +
    Posted April 28, 2010 at 11:51 | Permalink
    +
    +

    hi, i follow everything above , but i got “Error: libxml/tree.h: No such file or directory” with 356 errors.help me.

    +
  4. +
  5. +
    +
    Key
    +
    Posted May 6, 2010 at 03:44 | Permalink
    +
    +

    I got the same problem too, but i found a solution is that…..
    +Please check your Configuration (Release / Debug) in Project Settings
    +It is damn shit that default is release mode …. but you compile in debug mode

    +
  6. +
  7. +
    +
    Bill
    +
    Posted May 17, 2010 at 06:25 | Permalink
    +
    +

    Another possible solution for those having trouble:

    +

    instead of going to “Project -> Edit project settings” try making the changes in “Project -> Edit active target ” instead.

    +

    And do pay attention to the Configuration setting in the upper-left of the settings window. Change it to “All Configurations”.

    +
  8. +
  9. +
    +
    masch
    +
    Posted June 14, 2010 at 11:25 | Permalink
    +
    +

    It works very well except for one warning: CXMLDocument.m:229: warning: no ‘-_XMLStringWithOptions:appendingToString:’ method found

    +
  10. +
  11. +
    +
    zenwheel
    +
    Posted June 15, 2010 at 06:00 | Permalink
    +
    +

    @masch – I just changed line 229 to be: [xmlString appendString:[root XMLStringWithOptions:options]];

    +
  12. +
  13. +
    +
    Martijn
    +
    Posted July 14, 2010 at 23:04 | Permalink
    +
    +

    And how do you install libxml2 if you don’t got it?

    +
  14. +
  15. +
    +
    Joel
    +
    Posted August 18, 2010 at 19:50 | Permalink
    +
    +

    If you still get the libxml/tree.h errors you probably have devices specified under library search paths, like I had device and simulator (you may have one or the other). If you modify the library search path above these, it has no effect. You have to add it for each of these line items.

    +

    Also build->clean

    +
  16. +
  17. +
    +
    Sean Langley
    +
    Posted August 20, 2010 at 13:12 | Permalink
    +
    +

    I ran into the libxml/tree.h errors issue, and solved it for me. Remember that if you have multiple targets in your Xcode project, that you need to edit the configurations for all targets. For instance, I’ve got an App target, and a Tests target. I needed to add the /usr/include/libxml2 to the Header Search paths for “All configurations” in both of the targets.

    +
  18. +
  19. +
    +
    andi aja
    +
    Posted September 7, 2010 at 15:07 | Permalink
    +
    +

    you need to add libxml2 framework into the project too

    +
  20. +
  21. +
    +
    kiran
    +
    Posted November 13, 2010 at 06:48 | Permalink
    +
    +

    HI…

    +

    great job you down…..

    +

    I configure but i got 24 errors in my application…..
    +_xmlDocSetRootElement
    +XmlNodeListGetString
    +xmlAddChild
    +xmlNewText…
    +xmlXPathFreeContext…
    +xmlReadMemory
    +xmlDocGetRootElement…….
    +……..
    +xmlFree

    +
  22. +
  23. +
    +
    Tristan
    +
    Posted January 14, 2011 at 14:29 | Permalink
    +
    +

    Great guide, good job!

    +
  24. +
  25. +
    +
    Robert
    +
    Posted January 25, 2011 at 01:20 | Permalink
    +
    +

    Hi,

    +

    I have an error with TouchXML, Opening and Ending tag mismatch at the start of the CXMLDocument, and I haven’t even tried to parse it I, was just loading the data into the document and it crashed,

    +
  26. +
  27. +
    +
    Pramod Jain
    +
    Posted February 23, 2011 at 08:21 | Permalink
    +
    +

    @Robert, did you find any solution for validating the xml content (Opening and Ending tag mismatch) using TouchXML . Please share..

    +
  28. +
  29. +
    + +
    Posted February 25, 2011 at 11:03 | Permalink
    +
    +

    archive missing

    +
  30. +
  31. +
    + +
    Posted April 2, 2011 at 01:19 | Permalink
    +
    +

    Both solitary cell phone number listed in the United States includes a full profile while features; names, age anthology, address, along with sexual category info.

    +
  32. +
  33. +
    +
    Mike S.
    +
    Posted April 6, 2011 at 19:37 | Permalink
    +
    +

    The URL for the download isn’t working – looks like it needs updated to the new site. I was able to dig around and find a depreciated version of TouchXML for use.

    +
  34. +
  35. +
    + +
    Posted April 26, 2011 at 14:12 | Permalink
    +
    +

    pleasant post, i certainly love this url, proceed it

    +
  36. +
  37. +
    +
    Arun
    +
    Posted May 11, 2011 at 11:16 | Permalink
    +
    +

    Everything is ok . What about the target .

    +
  38. +
  39. +
    + +
    Posted May 17, 2011 at 18:01 | Permalink
    +
    +

    Superb post, not often can I read such magnificance. Do you have any forums with similar content?

    +
  40. +
+ + + + + +
+ +

Leave a Reply

+ + + + +
+ + +

+

+ +

+

+ +

+

+ + + + +

+ +

+ + +

+

+
+ +
+ + + +
+ + +
+ + + + + + +
+ + + +------------i2L0fMUSDUR5fcpX3sh9hH +Content-Disposition: inline +Content-Type: text/css; charset=UTF-8 +Content-Location: http://foobarpig.com/wp-content/themes/pig/style/reset.css +Content-Transfer-Encoding: 8bit + +/* CSS reset is from Eric Meyer: http://meyerweb.com/eric/tools/css/reset/index.html */ + + +/**Start Reset*********************************/ + +body { + width: 100%; + height: 100%; +} + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, font, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + vertical-align: baseline; + background: transparent; +} +body { + line-height: 1; +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} + +/* remember to define focus styles! */ +:focus { + outline: 0; +} + +/* remember to highlight inserts somehow! */ +ins { + text-decoration: none; +} +del { + text-decoration: line-through; +} + +/* tables still need 'cellspacing="0"' in the markup */ +table { + border-collapse: collapse; + border-spacing: 0; +} + +/**End Reset*********************************/ + +.clearfix:after { + content: "."; + display: block; + clear: both; + visibility: hidden; + line-height: 0; + height: 0; +} + +.clearfix { + display: inline-block; +} + +html[xmlns] .clearfix { + display: block; +} + +* html .clearfix { + height: 1%; +} +------------i2L0fMUSDUR5fcpX3sh9hH +Content-Disposition: inline; filename=style.css +Content-Type: text/css; charset=UTF-8; name=style.css +Content-Location: http://foobarpig.com/wp-content/themes/pig/style.css +Content-Transfer-Encoding: 8bit + +/* +Theme Name: blankSlate +Theme URI: http://shawncope.com +Description: A theme completely stripped of all styling. Functionality is based on the kubrick theme. +Version: 1.0 +Author: Shawn Cope +Author URI: http://shawncope.com +Tags: blankSlate, no style, clean, empty + +This theme was designed and built by Shawn Cope, +whose blog you will find at http://shawncope.com/ + +The CSS, XHTML and design is released under GPL: +http://www.opensource.org/licenses/gpl-license.php +*/ + +@import "style/reset.css"; + +/*Utility Styles************************/ +.alignright { + float:right; +} +.alignleft { + float:left; +} +.aligncenter { + display:block; + margin:0 auto; +} + + +body { + font-family: Tahoma; + font-size: 14px; +} + +#content { + width: 900px; + position: relative; + margin: 0 auto; +} + +#header { + background: #f7f7f7; + border-bottom: 1px solid #eee; + margin-bottom: 20px; +} + +#header-inner { + width: 900px; + position: relative; + margin: 0 auto; + padding: 30px 0; + padding-top: 45px; +} + +#footer { + margin-top: 45px; + position: relative; + width: 100%; +} + +#footer-inner { + padding: 10px 0; + width: 900px; + position: relative; + margin: 0 auto; +} + +#header #logo { + font-size:30px; + font-family: Helvetica, Arial; +} + +#header #logo a { + color:#444; + text-decoration: none; +} + +#header .description { + margin-top: 5px; + color: #555; + font-family: Helvetica, Arial; +} + +#header #search-form { + position: absolute; + top:50px; + right: 10px; +} + + +a, a:visited, a:active { + color: #444; +} + +a:hover { + text-decoration: none; +} + +li.about { + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + background:#eee; + font-size:12px; + line-height:130%; + margin-bottom:10px; + padding-bottom:0; +} + +li.about .inner { + padding:15px; + padding-bottom:10px; +} + +li.feedlink { + margin-bottom:5px; +} + + +div.entry p, +.comment-body p { + margin-bottom: 10px; + line-height: 160%; +} + +.comment-gravatar { + width:40px; + float:left; +} + +.comment-meta, .comment-author { + margin-bottom: 5px; + float:left; + line-height:34px; +} + +.comment-author { + font-size: 16px; + color: #444; + font-weight: bold; + margin-left:8px; +} + +.comment-meta { + font-size: 12px; + position: absolute; + top:0; + right: 0; + color: #777; +} + +.comment-body { + position: relative; + margin-bottom: 15px; +} + +.comment-content { + clear:both; + padding-top:5px; + margin-bottom:10px; + padding-bottom:15px; + border-bottom:1px solid #ddd; +} + +.comment-body ul.children { + margin-top:10px; + padding-left:20px; +} + +.comment-reply-link { + padding-top:5px; +} + +.comment-reply-link a, +.cancel-comment-reply a { + background:#bbb; + color:white; + padding:2px 4px; + text-decoration:none; + font-size:11px; + font-weight:bold; +} + +.cancel-comment-reply { + position:absolute; + top:5px; + right:5px; +} + +#respond { + position:relative; +} + +.entry { + margin-bottom: 20px; +} + +.entry img { + border:5px solid #f7f7f7; + margin-top:5px; +} + +p { + margin-bottom: 5px; +} + + +.front-post { + margin-bottom: 20px; +} + +.post h1 { + font-size: 22px; + font-family: Helvetica, Arial; + margin-bottom: 10px; +} + +.post h1 a { + text-decoration: none; + color: #555; +} + +.post h1 a:hover { + color: #777; +} + + +#right { + float:right; + width: 200px; +} + +#left { + width: 650px; + float:left; + position: relative; +} + + + + +#sidebar ul { + margin-bottom: 10px; + padding-bottom: 10px; + border-bottom: 1px dashed #ddd; +} + +#sidebar h2 { + margin-bottom: 5px; +} + +#sidebar ul li { + padding: 2px 0; +} + +.postmetadata { + background: #f7f7f7; + padding: 10px; + font-size: 12px; +} + +.other-post { + margin-bottom: 10px; +} + +h2.pagetitle { + font-size: 18px; + font-family: Helvetica, Arial; + margin-bottom: 10px; +} + +.other-post h2, h3, h2 { + font-size: 18px; + font-family: Helvetica, Arial; + margin-bottom: 10px; +} + +.entry h2 { + margin-top: 10px; + color: #444; + line-height: 26px; + margin-bottom: 5px; +} + +.other-post h2 a, +h3 a { + text-decoration: none; + color: #555; +} + +.other-post h2 a:hover, +h3 a:hover { + color: #777; +} + +li.msg { + background: #eee; + padding: 10px; + font-size: 12px; + margin-bottom: 20px; +} + +li.msg p { + padding: 10px; +} + +#comment { + font-size: 14px; + font-family: Arial; + padding: 5px; + width: 600px; +} + +h3#comments { + margin-bottom: 15px; +} + +.commentlist { + margin-bottom: 30px; +} + + +.sorryforthis { + text-align:center; + margin-bottom:10px; +} +------------i2L0fMUSDUR5fcpX3sh9hH +Content-Disposition: inline; filename=l10n.js +Content-Type: application/javascript; charset=UTF-8; name=l10n.js +Content-Location: http://foobarpig.com/wp-includes/js/l10n.js?ver=20101110 +Content-Transfer-Encoding: Base64 + +ZnVuY3Rpb24gY29udmVydEVudGl0aWVzKGIpe3ZhciBkLGE7ZD1mdW5jdGlvbihj +KXtpZigvJlteO10rOy8udGVzdChjKSl7dmFyIGY9ZG9jdW1lbnQuY3JlYXRlRWxl +bWVudCgiZGl2Iik7Zi5pbm5lckhUTUw9YztyZXR1cm4gIWYuZmlyc3RDaGlsZD9j +OmYuZmlyc3RDaGlsZC5ub2RlVmFsdWV9cmV0dXJuIGN9O2lmKHR5cGVvZiBiPT09 +InN0cmluZyIpe3JldHVybiBkKGIpfWVsc2V7aWYodHlwZW9mIGI9PT0ib2JqZWN0 +Iil7Zm9yKGEgaW4gYil7aWYodHlwZW9mIGJbYV09PT0ic3RyaW5nIil7YlthXT1k +KGJbYV0pfX19fXJldHVybiBifTs= + +------------i2L0fMUSDUR5fcpX3sh9hH +Content-Disposition: inline; filename=comment-reply.js +Content-Type: application/javascript; charset=UTF-8; name=comment-reply.js +Content-Location: http://foobarpig.com/wp-includes/js/comment-reply.js?ver=20090102 +Content-Transfer-Encoding: Base64 + +YWRkQ29tbWVudD17bW92ZUZvcm06ZnVuY3Rpb24oZCxmLGksYyl7dmFyIG09dGhp +cyxhLGg9bS5JKGQpLGI9bS5JKGkpLGw9bS5JKCJjYW5jZWwtY29tbWVudC1yZXBs +eS1saW5rIiksaj1tLkkoImNvbW1lbnRfcGFyZW50Iiksaz1tLkkoImNvbW1lbnRf +cG9zdF9JRCIpO2lmKCFofHwhYnx8IWx8fCFqKXtyZXR1cm59bS5yZXNwb25kSWQ9 +aTtjPWN8fGZhbHNlO2lmKCFtLkkoIndwLXRlbXAtZm9ybS1kaXYiKSl7YT1kb2N1 +bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTthLmlkPSJ3cC10ZW1wLWZvcm0tZGl2 +IjthLnN0eWxlLmRpc3BsYXk9Im5vbmUiO2IucGFyZW50Tm9kZS5pbnNlcnRCZWZv +cmUoYSxiKX1oLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGIsaC5uZXh0U2libGlu +Zyk7aWYoayYmYyl7ay52YWx1ZT1jfWoudmFsdWU9ZjtsLnN0eWxlLmRpc3BsYXk9 +IiI7bC5vbmNsaWNrPWZ1bmN0aW9uKCl7dmFyIG49YWRkQ29tbWVudCxlPW4uSSgi +d3AtdGVtcC1mb3JtLWRpdiIpLG89bi5JKG4ucmVzcG9uZElkKTtpZighZXx8IW8p +e3JldHVybn1uLkkoImNvbW1lbnRfcGFyZW50IikudmFsdWU9IjAiO2UucGFyZW50 +Tm9kZS5pbnNlcnRCZWZvcmUobyxlKTtlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQo +ZSk7dGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIjt0aGlzLm9uY2xpY2s9bnVsbDty +ZXR1cm4gZmFsc2V9O3RyeXttLkkoImNvbW1lbnQiKS5mb2N1cygpfWNhdGNoKGcp +e31yZXR1cm4gZmFsc2V9LEk6ZnVuY3Rpb24oYSl7cmV0dXJuIGRvY3VtZW50Lmdl +dEVsZW1lbnRCeUlkKGEpfX07 + +------------i2L0fMUSDUR5fcpX3sh9hH +Content-Disposition: inline; filename=header-search-paths.webp +Content-Type: image/webp; name=header-search-paths.webp +Content-Location: http://foobarpig.com/wp-content/uploads/2010/02/header-search-paths.png +Content-Transfer-Encoding: Base64 + +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 + +------------i2L0fMUSDUR5fcpX3sh9hH +Content-Disposition: inline; filename=other-linker-flags.webp +Content-Type: image/webp; name=other-linker-flags.webp +Content-Location: http://foobarpig.com/wp-content/uploads/2010/02/other-linker-flags.png +Content-Transfer-Encoding: Base64 + +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 +WPRhoykPt1adWTDigFoAAA== + +------------i2L0fMUSDUR5fcpX3sh9hH +Content-Disposition: inline; filename=Screen-shot-2010-02-05-at-13.19.03.webp +Content-Type: image/webp; name=Screen-shot-2010-02-05-at-13.19.03.webp +Content-Location: http://foobarpig.com/wp-content/uploads/2010/02/Screen-shot-2010-02-05-at-13.19.03.png +Content-Transfer-Encoding: Base64 + +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 +qiF0+AtgBSyKFbxiTH7zSV4H164YAA== + +------------i2L0fMUSDUR5fcpX3sh9hH +Content-Disposition: inline; filename=Screen-shot-2010-02-05-at-13.24.23.webp +Content-Type: image/webp; name=Screen-shot-2010-02-05-at-13.24.23.webp +Content-Location: http://foobarpig.com/wp-content/uploads/2010/02/Screen-shot-2010-02-05-at-13.24.23.png +Content-Transfer-Encoding: Base64 + +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 + +------------i2L0fMUSDUR5fcpX3sh9hH +Content-Disposition: inline; filename=Screen-shot-2010-02-05-at-13.25.37.webp +Content-Type: image/webp; name=Screen-shot-2010-02-05-at-13.25.37.webp +Content-Location: http://foobarpig.com/wp-content/uploads/2010/02/Screen-shot-2010-02-05-at-13.25.37.png +Content-Transfer-Encoding: Base64 + +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 +gAA= + +------------i2L0fMUSDUR5fcpX3sh9hH +Content-Disposition: inline; filename=show_ads.js +Content-Type: text/javascript; charset=UTF-8; name=show_ads.js +Content-Location: http://pagead2.googlesyndication.com/pagead/show_ads.js +Content-Transfer-Encoding: Quoted-Printable + + +(function(){var g=3Dnull,h=3D(new Date).getTime();var i=3Dthis,aa=3Dfunc= +tion(a,b){var c=3Da.split("."),d=3Di;!(c[0]in d)&&d.execScript&&d.execSc= +ript("var "+c[0]);for(var e;c.length&&(e=3Dc.shift());)!c.length&&b!=3D=3D= +void 0?d[e]=3Db:d=3Dd[e]?d[e]:d[e]=3D{}},ba=3Dfunction(a,b,c){return a.c= +all.apply(a.bind,arguments)},ca=3Dfunction(a,b,c){var d=3Db||i;if(argume= +nts.length>2){var e=3DArray.prototype.slice.call(arguments,2);return fun= +ction(){var b=3DArray.prototype.slice.call(arguments);Array.prototype.un= +shift.apply(b,e);return a.apply(d,b)}}else return function(){return a.ap= +ply(d, +arguments)}},j=3Dfunction(a,b,c){j=3DFunction.prototype.bind&&Function.p= +rototype.bind.toString().indexOf("native code")!=3D-1?ba:ca;return j.app= +ly(g,arguments)};var ea=3D/&/g,fa=3D//g,ha=3D/\"/g,k=3D{"\0":= +"\\0","\u0008":"\\b","\u000c":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\u= +000b":"\\x0B",'"':'\\"',"\\":"\\\\"},n=3D{"'":"\\'"},q=3Dfunction(a,b){i= +f(ab)return 1;return 0};var s,v,w,y,ia=3Dfunction(= +){return i.navigator?i.navigator.userAgent:g};y=3Dw=3Dv=3Ds=3D!1;var z;i= +f(z=3Dia()){var ja=3Di.navigator;s=3Dz.indexOf("Opera")=3D=3D0;v=3D!s&&z= +.indexOf("MSIE")!=3D-1;w=3D!s&&z.indexOf("WebKit")!=3D-1;y=3D!s&&!w&&ja.= +product=3D=3D"Gecko"}var A=3Dv,C=3Dy,ka=3Dw,D; +a:{var E=3D"",F;if(s&&i.opera)var G=3Di.opera.version,E=3Dtypeof G=3D=3D= +"function"?G():G;else if(C?F=3D/rv\:([^\);]+)(\)|;)/:A?F=3D/MSIE\s+([^\)= +;]+)(\)|;)/:ka&&(F=3D/WebKit\/(\S+)/),F)var la=3DF.exec(ia()),E=3Dla?la[= +1]:"";if(A){var H,ma=3Di.document;H=3Dma?ma.documentMode:void 0;if(H>par= +seFloat(E)){D=3DString(H);break a}}D=3DE} +var na=3DD,oa=3D{},I=3Dfunction(a){var b;if(!(b=3Doa[a])){b=3D0;for(var = +c=3DString(na).replace(/^[\s\xa0]+|[\s\xa0]+$/g,"").split("."),d=3DStrin= +g(a).replace(/^[\s\xa0]+|[\s\xa0]+$/g,"").split("."),e=3DMath.max(c.leng= +th,d.length),f=3D0;b=3D=3D0&&f=3D0}r= +eturn b};var pa=3Ddocument,J=3Dwindow;var K=3Dfunction(a){a=3DparseFloat= +(a);return isNaN(a)||a>1||a<0?0:a},L=3Dfunction(a){return a=3D=3D"true"?= +!0:a=3D=3D"false"?!1:!1},qa=3D/^([\w-]+\.)*([\w-]{2,})(\:[0-9]+)?$/,M=3D= +function(a){return!a?"pagead2.googlesyndication.com":(a=3Da.match(qa))?a= +[0]:"pagead2.googlesyndication.com"};var ra=3DK("0"),ta=3DK("0"),ua=3DK(= +"0.2"),va=3DK("0.02");var wa=3DL("false"),xa=3DL("false"),ya=3DL("false"= +);var za=3Dfunction(){return M("")};!A||I("9");!C&&!A||A&&I("9")||C&&I("= +1.9.1");A&&I("9");M("");var N=3Dfunction(a){return!!a&&typeof a=3D=3D"fu= +nction"&&!!a.call},Aa=3Dfunction(a,b){if(!(arguments.length<2))for(var c= +=3D1,d=3Darguments.length;c");b=3D"border:none;height:"+c+"px;m= +argin:0;padding:0;position:relative;visibility:visible;width:"+b+"px";re= +turn['',d.join(" "), +""].join("")};var Qa=3Dfunction(){},Sa=3Dfunction(a,b,c){swi= +tch(typeof b){case "string":Ra(b,c);break;case "number":c.push(isFinite(= +b)&&!isNaN(b)?b:"null");break;case "boolean":c.push(b);break;case "undef= +ined":c.push("null");break;case "object":if(b=3D=3Dg){c.push("null");bre= +ak}if(b instanceof Array){var d=3Db.length;c.push("[");for(var e=3D"",f=3D= +0;f\"]/.test(X)&&(X.indexOf("&")!=3D-1&&(X=3DX.replace(ea,"&")),X.= +indexOf("<")!=3D-1&&(X=3DX.replace(fa,"<")),X.indexOf(">")!=3D-1&&(X=3D= +X.replace(ga,">")),X.indexOf('"')!=3D-1&&(X=3DX.replace(ha,"""))= +);Va=3DX;W.prototype.set=3Dfunction(a,b){this.e.handlers[a]=3Db;this.a.a= +ddEventListener&&this.a.addEventListener("load",j(this.j,this,a),!1)};W.= +prototype.j=3Dfunction(a){var a=3Dthis.a.document.getElementById(a),b=3D= +a.contentWindow.document;if(a.onload&&b&&(!b.body||!b.body.firstChild))a= +.onload()}; +W.prototype.k=3Dfunction(){if(this.e.img){var a=3Dthis.e.log,b=3Dthis.a.= +document;if(a.length)b=3D["http://",za(),"/pagead/gen_204?id=3Diframecop= +y&log=3D",O(a.join("-")),"&url=3D",O(b.URL.substring(0,512)),"&ref=3D",O= +(b.referrer.substring(0,512))].join(""),a.length=3D0,a=3Dnew Image,this.= +e.img.push(a),a.src=3Db}};var Wa=3Dfunction(){var a=3D"script";return["<= +",a,' src=3D"http://',M(""),'/pagead/js/r20110608/r20110616/show_ads_imp= +l.js">"].join("")},Xa=3Dfunction(a,b,c,d){return function(){var = +e=3D!1;d&&Ja().al(3E4);try{var f;try{f=3D!!a.document.getElementById(b).= +contentWindow.document}catch(sa){f=3D!1}if(f){var r=3Da.document.getElem= +entById(b).contentWindow, +l=3Dr.document;if(!l.body||!l.body.firstChild)l.open(),r.google_async_if= +rame_close=3D!0,l.write(c)}else{var x=3Da.document.getElementById(b).con= +tentWindow,o;f=3Dc;f=3DString(f);if(f.quote)o=3Df.quote();else{r=3D['"']= +;for(l=3D0;l31&&Fa<127)B=3Dm;else{var p=3D= +m;if(p in n)B=3Dn[p];else if(p in k)B=3Dn[p]=3Dk[p];else{var t=3Dp,u=3Dp= +.charCodeAt(0);if(u>31&&u<127)t=3Dp;else{if(u<256){if(t=3D"\\x",u<16||u>= +256)t+=3D"0"}else t=3D"\\u",u<4096&&(t+=3D"0"); +t+=3Du.toString(16).toUpperCase()}B=3Dn[p]=3Dt}}da=3DB}ob[pb]=3Dda}r.pus= +h('"');o=3Dr.join("")}x.location.replace("javascript:"+o)}e=3D!0}catch(v= +b){x=3DEa().google_jobrunner,Ia(x)&&x.rl()}e&&(new W(a)).set(b,Xa(a,b,c,= +!1))}},Ya=3Dfunction(){return ra&&ta/ra||typeof window.google_hash_ratio= +=3D=3D"number"&&window.google_hash_ratio||g};window.google_loader_used=3D= +!0;(function(a){if(!("google_onload_fired"in a))a.google_onload_fired=3D= +!1,Ba(a,function(){a.google_onload_fired=3D!0})})(window);if(!window.goo= +gle_loader_experiment)window.google_loader_experiment=3DCa(["async_good_= +black","block_good_black"],ua)||Ca(["async_bad_black","block_bad_black"]= +,va)||"launch";var Za;a:{try{if(window.google_enable_async!=3D=3D!0&&win= +dow.google_loader_experiment=3D=3D"blockodd"&&window.top.location.hostna= +me.length%2=3D=3D1){Za=3D!1;break a}}catch($a){}Za=3D!0}var ab; +if(ab=3DZa){var bb;if(window.google_enable_async=3D=3D=3D!1)bb=3D0;else{= +var cb=3Dnavigator.userAgent,db=3Dwindow.google_loader_experiment;bb=3D(= +Na.test(cb)?!1:Oa.test(cb)?db=3D=3D"async_bad_black":Ma.test(cb)?!0:db=3D= +=3D"async_good_black")&&!window.google_container_id&&(!window.google_ad_= +output||window.google_ad_output=3D=3D"html")}ab=3Dbb} +if(ab){var eb=3Dwindow;eb.google_unique_id?++eb.google_unique_id:eb.goog= +le_unique_id=3D1;for(var Y=3Dwindow,_script$$inline_180=3D"script",Z,U=3D= +Y,T=3D{allowtransparency:'"true"',frameborder:'"0"',height:'"'+Y.google_= +ad_height+'"',hspace:'"0"',marginwidth:'"0"',marginheight:'"0"',onload:'= +"'+Va+'"',scrolling:'"no"',vspace:'"0"',width:'"'+Y.google_ad_width+'"'}= +,fb=3DU.document,$=3DT.id,gb=3D0;!$||U.document.getElementById($);)$=3D"= +aswift_"+gb++;T.id=3D$;T.name=3D$;fb.write(Pa());Z=3D$;var hb;Y.google_p= +age_url&&(Y.google_page_url=3D +String(Y.google_page_url));for(var ib=3D[],jb=3D0,kb=3DV.length;jb<",_script$$inline_180,">",hb,"google_show_ads= +_impl=3Dtrue;google_unique_id=3D",Y.google_unique_id,';google_async_ifra= +me_id=3D"',Z,'";google_start_time=3D', +h,";",ub?"google_hash_ratio=3D"+ub+";":"",wb?'google_loader_experiment=3D= +"'+wb+'";':"","google_bpp=3D",tb>h?tb-h:1,";",= +Wa(),""].join("");(Y.document.getElementById(Z)?Ka:La)(Xa(= +Y,Z,xb,!0))}else window.google_start_time=3Dh,window.google_hash_ratio=3D= +Ya(),document.write(Wa());})(); + +------------i2L0fMUSDUR5fcpX3sh9hH +Content-Disposition: inline; filename=ad516503a11cd5ca435acc9bb6523536.webp +Content-Type: text/html; name=ad516503a11cd5ca435acc9bb6523536.webp +Content-Location: http://1.gravatar.com/avatar/50a6cc818b380c1dba8cb46b01890a20?s=34&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D34&r=G +Content-Transfer-Encoding: Base64 + +UklGRqIAAABXRUJQVlA4IJYAAADQBACdASoiACIAAscIhYWIhYSICQIAD5Wc+/Ti +Li9JtLD6k8lAI4F0ro7paN86AAD++Wk1QjZcJr97L96WYFDPGvi637rjgCSeOS25 +C/oFb6kq5Yi/WGNtqQw7+7K/RuW1G+M/D2OaLWz+5HuCXjYriklV7aCtLmPVF9xh +lDkY/qJJLfiM2z7jjwscmgzarsB+YjlLgAA= + +------------i2L0fMUSDUR5fcpX3sh9hH +Content-Disposition: inline; filename=ad516503a11cd5ca435acc9bb6523536.webp +Content-Type: text/html; name=ad516503a11cd5ca435acc9bb6523536.webp +Content-Location: http://0.gravatar.com/avatar/ee4cfc138d516732162a79ae92fd9827?s=34&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D34&r=G +Content-Transfer-Encoding: Base64 + +UklGRqIAAABXRUJQVlA4IJYAAADQBACdASoiACIAAscIhYWIhYSICQIAD5Wc+/Ti +Li9JtLD6k8lAI4F0ro7paN86AAD++Wk1QjZcJr97L96WYFDPGvi637rjgCSeOS25 +C/oFb6kq5Yi/WGNtqQw7+7K/RuW1G+M/D2OaLWz+5HuCXjYriklV7aCtLmPVF9xh +lDkY/qJJLfiM2z7jjwscmgzarsB+YjlLgAA= + +------------i2L0fMUSDUR5fcpX3sh9hH +Content-Disposition: inline; filename=ad516503a11cd5ca435acc9bb6523536.webp +Content-Type: text/html; name=ad516503a11cd5ca435acc9bb6523536.webp +Content-Location: http://1.gravatar.com/avatar/1d226b7b1a4815f9f76c0be9753980e3?s=34&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D34&r=G +Content-Transfer-Encoding: Base64 + +UklGRqIAAABXRUJQVlA4IJYAAADQBACdASoiACIAAscIhYWIhYSICQIAD5Wc+/Ti +Li9JtLD6k8lAI4F0ro7paN86AAD++Wk1QjZcJr97L96WYFDPGvi637rjgCSeOS25 +C/oFb6kq5Yi/WGNtqQw7+7K/RuW1G+M/D2OaLWz+5HuCXjYriklV7aCtLmPVF9xh +lDkY/qJJLfiM2z7jjwscmgzarsB+YjlLgAA= + +------------i2L0fMUSDUR5fcpX3sh9hH +Content-Disposition: inline; filename=ad516503a11cd5ca435acc9bb6523536.webp +Content-Type: text/html; name=ad516503a11cd5ca435acc9bb6523536.webp +Content-Location: http://1.gravatar.com/avatar/793b06359a12a2d4a7afdf33055ec809?s=34&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D34&r=G +Content-Transfer-Encoding: Base64 + +UklGRqIAAABXRUJQVlA4IJYAAADQBACdASoiACIAAscIhYWIhYSICQIAD5Wc+/Ti +Li9JtLD6k8lAI4F0ro7paN86AAD++Wk1QjZcJr97L96WYFDPGvi637rjgCSeOS25 +C/oFb6kq5Yi/WGNtqQw7+7K/RuW1G+M/D2OaLWz+5HuCXjYriklV7aCtLmPVF9xh +lDkY/qJJLfiM2z7jjwscmgzarsB+YjlLgAA= + +------------i2L0fMUSDUR5fcpX3sh9hH +Content-Disposition: inline; filename=ac6e23c0c22cc2731e13a6913dbbb6b9.webp +Content-Type: image/webp; name=ac6e23c0c22cc2731e13a6913dbbb6b9.webp +Content-Location: http://0.gravatar.com/avatar/ac6e23c0c22cc2731e13a6913dbbb6b9?s=34&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D34&r=G +Content-Transfer-Encoding: Base64 + +UklGRtgCAABXRUJQVlA4IMwCAADwCwCdASoiACIAAIcIhYWIhYSICQIB4W/br1u0 +wetXbXG1cZwyb2gV4TeEYA9xFp8/QD/2vLj9OewT5QHsb6cg7sII2Dal6+GTKEVV +LDjy2xTNfwY9X+GCjOBsXtOwCcugPpIOMYJt2AD+/wCr8amsj+DplfrzVXfflfYb +U06zH89ZdT6JYMt+DWHf6Q60T9zxVcs501l/2Ros2NM/9n3KfpiwaM+nHvSEfSi3 +ANJlKG+QMKoN1dBIf6eEWQkofoc14Z54lnS+lGHZy15//OlY/xaXHS5iP7rFSz2P +/hP5BZzP7mUbELk0Yk1Op5Gk1Ui+NLoqjZJ6M/vnndT+Ljlk8c4JT9bb7aBhR4wi +QD/xBj/VQW0+0dgv1HFNyYcoHKK18L7c5M/8PL13K4m7M0dWHJy6QTk8OYtEtydk +0HS27ABTa2bV7cmSwMqkFOLempUQL3Jn1+brnD4EmkIsZV+AklMmFZfAbXb/cNaU +AgmaDDKR97C7jZCxXMwMnxCepuo5qITP1kTGFoneSaIb1929CuVHJvlYOAbgVv5c +iLmUzagXzImhdJ2atN4R9ztQbuFhkCA6D3a+cV/NSKs+azZehe/5Vrah20e3qEGu +3YeWZDnRLDvXgZq0jvRq96+YAXMxPkqoLIpniQ/6jg+YxXYFQY+xBauC/q7SfWc3 +ZCvU9ZJuU/9slMl/r/i+xxfo/3kzIWqjStNsRsYuj2xHlllZMeLMMYxYZicB0wjE +QKbgwqS8Tef9E3F5NzA7zlTmMoL/RllvxKSkY2XuMTyySQTMUoXCGoksaJOI8C4A +R9gRMgQVwwTSlmerYJudvEnVnWgLa4JzumvxdCl/y36VYEZJ2bHIhrXLFCz4PhMY +vOSKEKAVEsWhkRSIihZRqZD+SRQSqzdf8nrXx75zcIup3sZCV9IIpP6QX/KyH/4c +BGx2Rz1mddsQnh3zy7AAAA== + +------------i2L0fMUSDUR5fcpX3sh9hH +Content-Disposition: inline; filename=ad516503a11cd5ca435acc9bb6523536.webp +Content-Type: text/html; name=ad516503a11cd5ca435acc9bb6523536.webp +Content-Location: http://0.gravatar.com/avatar/a9bb448766036df54e03faef0d1c5310?s=34&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D34&r=G +Content-Transfer-Encoding: Base64 + +UklGRqIAAABXRUJQVlA4IJYAAADQBACdASoiACIAAscIhYWIhYSICQIAD5Wc+/Ti +Li9JtLD6k8lAI4F0ro7paN86AAD++Wk1QjZcJr97L96WYFDPGvi637rjgCSeOS25 +C/oFb6kq5Yi/WGNtqQw7+7K/RuW1G+M/D2OaLWz+5HuCXjYriklV7aCtLmPVF9xh +lDkY/qJJLfiM2z7jjwscmgzarsB+YjlLgAA= + +------------i2L0fMUSDUR5fcpX3sh9hH +Content-Disposition: inline; filename=ad516503a11cd5ca435acc9bb6523536.webp +Content-Type: text/html; name=ad516503a11cd5ca435acc9bb6523536.webp +Content-Location: http://1.gravatar.com/avatar/d999eacbd3da8b62619be401650ff6a7?s=34&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D34&r=G +Content-Transfer-Encoding: Base64 + +UklGRqIAAABXRUJQVlA4IJYAAADQBACdASoiACIAAscIhYWIhYSICQIAD5Wc+/Ti +Li9JtLD6k8lAI4F0ro7paN86AAD++Wk1QjZcJr97L96WYFDPGvi637rjgCSeOS25 +C/oFb6kq5Yi/WGNtqQw7+7K/RuW1G+M/D2OaLWz+5HuCXjYriklV7aCtLmPVF9xh +lDkY/qJJLfiM2z7jjwscmgzarsB+YjlLgAA= + +------------i2L0fMUSDUR5fcpX3sh9hH +Content-Disposition: inline; filename=bf2fa8c9f290896d895ce81e41f97168.webp +Content-Type: image/webp; name=bf2fa8c9f290896d895ce81e41f97168.webp +Content-Location: http://1.gravatar.com/avatar/bf2fa8c9f290896d895ce81e41f97168?s=34&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D34&r=G +Content-Transfer-Encoding: Base64 + +UklGRhQCAABXRUJQVlA4IAgCAAAwCACdASoiACIAAUcIhYWIhYSICQIA+VZ3hmUb +Y5riBdDPv9EZOhXcX07ujnDMmaKMKpGwlDjMgKYzygCUIrYhVgL6hhvxL+UIqGD+ +9nXnwf5zHXKVqUWjP0WqL8/wvTumhg1kvx8RfQ1+hgcCzpo95/2gRDP4ao6d8Lbf +5/nXjBfaLtH/+lqT4hw0HHc3bpWXfpdIFUy+bGzkvT87YaaTYxWXeh+rMWPNTwio +DE9xvXS9zvrNTdl7B/k0Z+Fc0SKS5/4lTOjr+2urb3b0jIvHy34PH6UsdELXBdd/ +Q1pe//0of/AWfoheFdGp9w42d6gqCngV2e88LRLC/QkV/hu/2m7yEpZqLS17/mVo +KGxpF4Flabmc0/TPIIxbjvMFQXCFsxpjGLeZ/6xg3SjzZGeGuqOP/byj3fR2qbcl +DsBVcPVGaP83qXLpV8aP+tu15D8J4ecqiKrnUBNo9Vls/8ft/lNyf7Zvbev9SwQZ +C5a2OxtTu3bwdVG/2PBBbowFLIWuPgWtcBVHQtffkW+uLGx9TLa3nc3yULIL1Tt2 +q8DpyQNQL00TxQIU0wbKaYOj20GfYhlFifqz/0gw6PvDYo6AdJ8U6G45e7F5WlP8 +2a4qzQcl/AwrigKBJqh531WIBeZV1l+kjnoYRrHCcA9U9pcPb0mhUXGgRiuVUUfe +tL29gvITJffbcRAA + +------------i2L0fMUSDUR5fcpX3sh9hH +Content-Disposition: inline; filename=ad516503a11cd5ca435acc9bb6523536.webp +Content-Type: text/html; name=ad516503a11cd5ca435acc9bb6523536.webp +Content-Location: http://1.gravatar.com/avatar/9d193f0266625642f8608957fdac1110?s=34&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D34&r=G +Content-Transfer-Encoding: Base64 + +UklGRqIAAABXRUJQVlA4IJYAAADQBACdASoiACIAAscIhYWIhYSICQIAD5Wc+/Ti +Li9JtLD6k8lAI4F0ro7paN86AAD++Wk1QjZcJr97L96WYFDPGvi637rjgCSeOS25 +C/oFb6kq5Yi/WGNtqQw7+7K/RuW1G+M/D2OaLWz+5HuCXjYriklV7aCtLmPVF9xh +lDkY/qJJLfiM2z7jjwscmgzarsB+YjlLgAA= + +------------i2L0fMUSDUR5fcpX3sh9hH +Content-Disposition: inline; filename=ad516503a11cd5ca435acc9bb6523536.webp +Content-Type: text/html; name=ad516503a11cd5ca435acc9bb6523536.webp +Content-Location: http://1.gravatar.com/avatar/7a873ca9437c1a4514ad30d8f18e95c8?s=34&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D34&r=G +Content-Transfer-Encoding: Base64 + +UklGRqIAAABXRUJQVlA4IJYAAADQBACdASoiACIAAscIhYWIhYSICQIAD5Wc+/Ti +Li9JtLD6k8lAI4F0ro7paN86AAD++Wk1QjZcJr97L96WYFDPGvi637rjgCSeOS25 +C/oFb6kq5Yi/WGNtqQw7+7K/RuW1G+M/D2OaLWz+5HuCXjYriklV7aCtLmPVF9xh +lDkY/qJJLfiM2z7jjwscmgzarsB+YjlLgAA= + +------------i2L0fMUSDUR5fcpX3sh9hH +Content-Disposition: inline; filename=4852aa3750654698bca82233a3239900.webp +Content-Type: image/webp; name=4852aa3750654698bca82233a3239900.webp +Content-Location: http://0.gravatar.com/avatar/4852aa3750654698bca82233a3239900?s=34&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D34&r=G +Content-Transfer-Encoding: Base64 + +UklGRuoBAABXRUJQVlA4IN4BAACwCACdASoiACIAAccIhYWIhYSICQIC7OcC/kJF +d5XQWu93aCyo3ry/c3EqLp90wESuGyAT6L2RNddzykE3Qj8UF9GdiC0QnRUzpBKg +wn+A/vUzA3/YJ/uuji/ESNpJaBf9SEQnBI7otwP6Y1ofr1LQY1+zX2+kopB4g1Ze +gblkB6XE2sD3bzT6GA1BQNOW55L6uRUY8ZQvMQ1ikPWPgzU3qUninH3rbor2jhnt +TqTz1OIP7Rs+942unl/mp7h7iEuQLMhy3q7ZP12ckGncPz+75d+FeocFnCGvdg9Y +ol5eL72dOHe99iR9HuN68RdeiBpuIYCPo+R9EMhcuT282gUr8u22RYDoMX5DpFhP +2l59v/qh4nJ3uzW9/28SyT7VE8aJsx3ZPp4YlI/5pjToeIBcEGvNLCoW8W9X8JOc +4mbc15HYpA6fP1nqeYVGbGoq6QoZff8I0ZNjc2o6dIOp8LJrUW4eWr6xfhamdbXo +kUpbDmN7GOw1qEIfNbkMFroqJUHXah/vuFFZ0OLJG1SpyBxM+dHGQfiuhkfw1/ei +ca7gNJ66ml2e6Uc/qBbtsS8WJBat97QjRnfQTj0ksZfBxfKaTy5Qc2wHpb1BE3DH +sE0JVcKe+n+w8tjg8WRGAn2w + +------------i2L0fMUSDUR5fcpX3sh9hH +Content-Disposition: inline; filename=ad516503a11cd5ca435acc9bb6523536.webp +Content-Type: text/html; name=ad516503a11cd5ca435acc9bb6523536.webp +Content-Location: http://0.gravatar.com/avatar/4e07df86fb06de8481033661fed10193?s=34&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D34&r=G +Content-Transfer-Encoding: Base64 + +UklGRqIAAABXRUJQVlA4IJYAAADQBACdASoiACIAAscIhYWIhYSICQIAD5Wc+/Ti +Li9JtLD6k8lAI4F0ro7paN86AAD++Wk1QjZcJr97L96WYFDPGvi637rjgCSeOS25 +C/oFb6kq5Yi/WGNtqQw7+7K/RuW1G+M/D2OaLWz+5HuCXjYriklV7aCtLmPVF9xh +lDkY/qJJLfiM2z7jjwscmgzarsB+YjlLgAA= + +------------i2L0fMUSDUR5fcpX3sh9hH +Content-Disposition: inline; filename=ad516503a11cd5ca435acc9bb6523536.webp +Content-Type: text/html; name=ad516503a11cd5ca435acc9bb6523536.webp +Content-Location: http://1.gravatar.com/avatar/5be1c57b766937dd73a3ba851c60b5ee?s=34&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D34&r=G +Content-Transfer-Encoding: Base64 + +UklGRqIAAABXRUJQVlA4IJYAAADQBACdASoiACIAAscIhYWIhYSICQIAD5Wc+/Ti +Li9JtLD6k8lAI4F0ro7paN86AAD++Wk1QjZcJr97L96WYFDPGvi637rjgCSeOS25 +C/oFb6kq5Yi/WGNtqQw7+7K/RuW1G+M/D2OaLWz+5HuCXjYriklV7aCtLmPVF9xh +lDkY/qJJLfiM2z7jjwscmgzarsB+YjlLgAA= + +------------i2L0fMUSDUR5fcpX3sh9hH +Content-Disposition: inline; filename=ad516503a11cd5ca435acc9bb6523536.webp +Content-Type: text/html; name=ad516503a11cd5ca435acc9bb6523536.webp +Content-Location: http://1.gravatar.com/avatar/3518fe7be711f47e91bf8e5a38a6b15c?s=34&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D34&r=G +Content-Transfer-Encoding: Base64 + +UklGRqIAAABXRUJQVlA4IJYAAADQBACdASoiACIAAscIhYWIhYSICQIAD5Wc+/Ti +Li9JtLD6k8lAI4F0ro7paN86AAD++Wk1QjZcJr97L96WYFDPGvi637rjgCSeOS25 +C/oFb6kq5Yi/WGNtqQw7+7K/RuW1G+M/D2OaLWz+5HuCXjYriklV7aCtLmPVF9xh +lDkY/qJJLfiM2z7jjwscmgzarsB+YjlLgAA= + +------------i2L0fMUSDUR5fcpX3sh9hH +Content-Disposition: inline; filename=ad516503a11cd5ca435acc9bb6523536.webp +Content-Type: text/html; name=ad516503a11cd5ca435acc9bb6523536.webp +Content-Location: http://1.gravatar.com/avatar/d802b1e5b0705942331c3001609eb46b?s=34&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D34&r=G +Content-Transfer-Encoding: Base64 + +UklGRqIAAABXRUJQVlA4IJYAAADQBACdASoiACIAAscIhYWIhYSICQIAD5Wc+/Ti +Li9JtLD6k8lAI4F0ro7paN86AAD++Wk1QjZcJr97L96WYFDPGvi637rjgCSeOS25 +C/oFb6kq5Yi/WGNtqQw7+7K/RuW1G+M/D2OaLWz+5HuCXjYriklV7aCtLmPVF9xh +lDkY/qJJLfiM2z7jjwscmgzarsB+YjlLgAA= + +------------i2L0fMUSDUR5fcpX3sh9hH +Content-Disposition: inline; filename=ad516503a11cd5ca435acc9bb6523536.webp +Content-Type: text/html; name=ad516503a11cd5ca435acc9bb6523536.webp +Content-Location: http://1.gravatar.com/avatar/d0d84a81faa35e09c00aa8922dc63c26?s=34&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D34&r=G +Content-Transfer-Encoding: Base64 + +UklGRqIAAABXRUJQVlA4IJYAAADQBACdASoiACIAAscIhYWIhYSICQIAD5Wc+/Ti +Li9JtLD6k8lAI4F0ro7paN86AAD++Wk1QjZcJr97L96WYFDPGvi637rjgCSeOS25 +C/oFb6kq5Yi/WGNtqQw7+7K/RuW1G+M/D2OaLWz+5HuCXjYriklV7aCtLmPVF9xh +lDkY/qJJLfiM2z7jjwscmgzarsB+YjlLgAA= + +------------i2L0fMUSDUR5fcpX3sh9hH +Content-Disposition: inline; filename=ad516503a11cd5ca435acc9bb6523536.webp +Content-Type: text/html; name=ad516503a11cd5ca435acc9bb6523536.webp +Content-Location: http://0.gravatar.com/avatar/4d795266ef2de591b6e1ebf0b97533e8?s=34&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D34&r=G +Content-Transfer-Encoding: Base64 + +UklGRqIAAABXRUJQVlA4IJYAAADQBACdASoiACIAAscIhYWIhYSICQIAD5Wc+/Ti +Li9JtLD6k8lAI4F0ro7paN86AAD++Wk1QjZcJr97L96WYFDPGvi637rjgCSeOS25 +C/oFb6kq5Yi/WGNtqQw7+7K/RuW1G+M/D2OaLWz+5HuCXjYriklV7aCtLmPVF9xh +lDkY/qJJLfiM2z7jjwscmgzarsB+YjlLgAA= + +------------i2L0fMUSDUR5fcpX3sh9hH +Content-Disposition: inline; filename=ad516503a11cd5ca435acc9bb6523536.webp +Content-Type: text/html; name=ad516503a11cd5ca435acc9bb6523536.webp +Content-Location: http://0.gravatar.com/avatar/21c524d75387cd234c98e25e8f82baef?s=34&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D34&r=G +Content-Transfer-Encoding: Base64 + +UklGRqIAAABXRUJQVlA4IJYAAADQBACdASoiACIAAscIhYWIhYSICQIAD5Wc+/Ti +Li9JtLD6k8lAI4F0ro7paN86AAD++Wk1QjZcJr97L96WYFDPGvi637rjgCSeOS25 +C/oFb6kq5Yi/WGNtqQw7+7K/RuW1G+M/D2OaLWz+5HuCXjYriklV7aCtLmPVF9xh +lDkY/qJJLfiM2z7jjwscmgzarsB+YjlLgAA= + +------------i2L0fMUSDUR5fcpX3sh9hH +Content-Disposition: inline; filename=ad516503a11cd5ca435acc9bb6523536.webp +Content-Type: text/html; name=ad516503a11cd5ca435acc9bb6523536.webp +Content-Location: http://0.gravatar.com/avatar/e9634014469e44fd6407d19b8489bc16?s=34&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D34&r=G +Content-Transfer-Encoding: Base64 + +UklGRqIAAABXRUJQVlA4IJYAAADQBACdASoiACIAAscIhYWIhYSICQIAD5Wc+/Ti +Li9JtLD6k8lAI4F0ro7paN86AAD++Wk1QjZcJr97L96WYFDPGvi637rjgCSeOS25 +C/oFb6kq5Yi/WGNtqQw7+7K/RuW1G+M/D2OaLWz+5HuCXjYriklV7aCtLmPVF9xh +lDkY/qJJLfiM2z7jjwscmgzarsB+YjlLgAA= + +------------i2L0fMUSDUR5fcpX3sh9hH +Content-Disposition: inline; filename=foobarpig.gif +Content-Type: image/gif; name=foobarpig.gif +Content-Location: http://feeds.feedburner.com/~fc/foobarpig?bg=DDDDDD&fg=444444&anim=0 +Content-Transfer-Encoding: Base64 + +R0lGODlhWAAaAPcAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz +/wBmAABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDM +mQDMzADM/wD/AAD/MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMz +MzMzZjMzmTMzzDMz/zNmADNmMzNmZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ +/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/mTP/zDP//2YAAGYAM2YAZmYA +mWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZmzGZm/2aZAGaZ +M2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/ +/5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplm +mZlmzJlm/5mZAJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/ +M5n/Zpn/mZn/zJn//8wAAMwAM8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz +/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZZsyZmcyZzMyZ/8zMAMzMM8zMZszM +mczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8Amf8AzP8A//8zAP8z +M/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+ZzP+Z +///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///xISEhgYGB4eHiQk +JCoqKjAwMDY2Njw8PEJCQkhISE5OTlRUVFpaWmBgYGZmZmxsbHJycnh4eH5+foSE +hIqKipCQkJaWlpycnKKioqioqK6urrS0tLq6usDAwMbGxszMzNLS0tjY2N7e3uTk +5Orq6vDw8Pb29vz8/CH5BAEAALgAIf8LTkVUU0NBUEUyLjADAQAAACwAAAAAWAAa +AEcI/wCvCRxIsKDBgwgTKlzIcKE+ffH6SZxIsaLFfuAmZsTIceK1hw/B6RM5EhzJ +kidNmgy5cqRLlicfBvoIsqbNmzhz6tzJs+fOQLiCmjtnLqhRXOeOKsVV9Kg5ck2Z +EjX6NOrQqEKTUg2qFanRrkTJGRXLNCjNiBfTql3bj6bPt3BlnmVLV2XFjRLdvoRJ +UmVflXz3orwJNCtWsmWXSrVqzupUoVCpPhZKWWjjo2C/Xg4KtevZeKBDix5NurTp +eHFT+5z5EC1dtXYp4m2r+mbM1KwhvoatEaNfjzVT+g2cEuXK2y1r5na9uzlFvbWj +g5wZqLr169iza9/Ovbv379ypRrdWiljxufFSu1bdiovseaxaHXdt7xVxZ82IoUvf +zx/ucucAAtefdP8FCKB+qt0WV4EGduSgSc/1p6B/czUoUWwbzaZXS8UFt5dIxSU3 +oT4MGojXbBp6GJJNIYIEIos43VaihWwhOOBbyzWko0I3Rpdbj0AGWZhiRBZp5JFI +JqmkUvFhlph5SmHllVNcVflkU1ZVhhSWX0WpJWdWskeklFKWlxiXU06ZJVZYIiZl +UlIuKeecdNaJS0AAOw== + +------------i2L0fMUSDUR5fcpX3sh9hH +Content-Disposition: inline; filename=shCore.js +Content-Type: application/javascript; charset=UTF-8; name=shCore.js +Content-Location: http://foobarpig.com/wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/scripts/shCore.js?ver=3.0.83b +Content-Transfer-Encoding: Base64 + +LyoqCiAqIFN5bnRheEhpZ2hsaWdodGVyCiAqIGh0dHA6Ly9hbGV4Z29yYmF0Y2hl +di5jb20vU3ludGF4SGlnaGxpZ2h0ZXIKICoKICogU3ludGF4SGlnaGxpZ2h0ZXIg +aXMgZG9uYXRpb253YXJlLiBJZiB5b3UgYXJlIHVzaW5nIGl0LCBwbGVhc2UgZG9u +YXRlLgogKiBodHRwOi8vYWxleGdvcmJhdGNoZXYuY29tL1N5bnRheEhpZ2hsaWdo +dGVyL2RvbmF0ZS5odG1sCiAqCiAqIEB2ZXJzaW9uCiAqIDMuMC44MyAoSnVseSAw +MiAyMDEwKQogKiAKICogQGNvcHlyaWdodAogKiBDb3B5cmlnaHQgKEMpIDIwMDQt +MjAxMCBBbGV4IEdvcmJhdGNoZXYuCiAqCiAqIEBsaWNlbnNlCiAqIER1YWwgbGlj +ZW5zZWQgdW5kZXIgdGhlIE1JVCBhbmQgR1BMIGxpY2Vuc2VzLgogKi8KZXZhbChm +dW5jdGlvbihwLGEsYyxrLGUsZCl7ZT1mdW5jdGlvbihjKXtyZXR1cm4oYzxhPycn +OmUocGFyc2VJbnQoYy9hKSkpKygoYz1jJWEpPjM1P1N0cmluZy5mcm9tQ2hhckNv +ZGUoYysyOSk6Yy50b1N0cmluZygzNikpfTtpZighJycucmVwbGFjZSgvXi8sU3Ry +aW5nKSl7d2hpbGUoYy0tKXtkW2UoYyldPWtbY118fGUoYyl9az1bZnVuY3Rpb24o +ZSl7cmV0dXJuIGRbZV19XTtlPWZ1bmN0aW9uKCl7cmV0dXJuJ1xcdysnfTtjPTF9 +O3doaWxlKGMtLSl7aWYoa1tjXSl7cD1wLnJlcGxhY2UobmV3IFJlZ0V4cCgnXFxi +JytlKGMpKydcXGInLCdnJyksa1tjXSl9fXJldHVybiBwfSgnSyBNO0koTSkxUyAy +VSgiMmFcJ3QgNGsgTSA0SyAyZyAzbCA0RyA0SCIpOyg2KCl7NiByKGYsZSl7SSgh +TS4xUihmKSkxUyAzbSgiM3MgMTUgNFIiKTtLIGE9Zi4xdztmPU0oZi4xbSx0KGYp +KyhlfHwiIikpO0koYSlmLjF3PXsxbTphLjFtLDE5OmEuMTk/YS4xOS4xYSgwKTpO +fTtIIGZ9NiB0KGYpe0goZi4xSj8iZyI6IiIpKyhmLjRzPyJpIjoiIikrKGYuNHA/ +Im0iOiIiKSsoZi40dj8ieCI6IiIpKyhmLjNuPyJ5IjoiIil9NiBCKGYsZSxhLGIp +e0sgYz11LkwsZCxoLGc7dj1SOzVLe08oO2MtLTspe2c9dVtjXTtJKGEmZy4zciYm +KCFnLjJwfHxnLjJwLlcoYikpKXtnLjJxLjEyPWU7SSgoaD1nLjJxLlgoZikpJiZo +LlA9PT1lKXtkPXszazpnLjJiLlcoYixoLGEpLDFDOmh9OzFOfX19fTV2KGkpezFT +IGl9NXF7dj0xMX1IIGR9NiBwKGYsZSxhKXtJKDNiLlouMWkpSCBmLjFpKGUsYSk7 +TyhhPWF8fDA7YTxmLkw7YSsrKUkoZlthXT09PWUpSCBhO0gtMX1NPTYoZixlKXtL +IGE9W10sYj1NLjFCLGM9MCxkLGg7SShNLjFSKGYpKXtJKGUhPT0xZCkxUyAzbSgi +MmFcJ3QgNXIgNUkgNUYgNUIgNUMgMTUgNUUgNXAiKTtIIHIoZil9SSh2KTFTIDJV +KCIyYVwndCBXIDNsIE0gNTkgNW0gNWcgNXggNWkiKTtlPWV8fCIiO08oZD17Mk46 +MTEsMTk6W10sMks6NihnKXtIIGUuMWkoZyk+LTF9LDNkOjYoZyl7ZSs9Z319O2M8 +Zi5MOylJKGg9QihmLGMsYixkKSl7YS5VKGguM2spO2MrPWguMUNbMF0uTHx8MX1Z +IEkoaD1uLlguVyh6W2JdLGYuMWEoYykpKXthLlUoaFswXSk7Yys9aFswXS5MfVl7 +aD1mLjNhKGMpO0koaD09PSJbIiliPU0uMkk7WSBJKGg9PT0iXSIpYj1NLjFCO2Eu +VShoKTtjKyt9YT0xNShhLjFLKCIiKSxuLlEuVyhlLHcsIiIpKTthLjF3PXsxbTpm +LDE5OmQuMk4/ZC4xOTpOfTtIIGF9O00uM3Y9IjEuNS4wIjtNLjJJPTE7TS4xQj0y +O0sgQz0vXFwkKD86KFxcZFxcZD98WyQmYFwnXSl8eyhbJFxcd10rKX0pL2csdz0v +W141aF0rfChbXFxzXFxTXSkoPz1bXFxzXFxTXSpcXDEpL2csQT0vXig/Ols/Kitd +fHtcXGQrKD86LFxcZCopP30pXFw/Py8sdj0xMSx1PVtdLG49e1g6MTUuWi5YLDFB +OjE1LlouMUEsMUM6MXIuWi4xQyxROjFyLlouUSwxZToxci5aLjFlfSx4PW4uWC5X +KC8oKT8/LywiIilbMV09PT0xZCxEPTYoKXtLIGY9L14vZztuLjFBLlcoZiwiIik7 +SCFmLjEyfSgpLHk9Nigpe0sgZj0veC9nO24uUS5XKCJ4IixmLCIiKTtIIWYuMTJ9 +KCksRT0xNS5aLjNuIT09MWQsej17fTt6W00uMkldPS9eKD86XFxcXCg/OlswLTNd +WzAtN117MCwyfXxbNC03XVswLTddP3x4W1xcMjktMjYtZl17Mn18dVtcXDI5LTI2 +LWZdezR9fGNbQS0zby16XXxbXFxzXFxTXSkpLzt6W00uMUJdPS9eKD86XFxcXCg/ +OjAoPzpbMC0zXVswLTddezAsMn18WzQtN11bMC03XT8pP3xbMS05XVxcZCp8eFtc +XDI5LTI2LWZdezJ9fHVbXFwyOS0yNi1mXXs0fXxjW0EtM28tel18W1xcc1xcU10p +fFxcKFxcP1s6PSFdfFs/KitdXFw/fHtcXGQrKD86LFxcZCopP31cXD8/KS87TS4x +aD02KGYsZSxhLGIpe3UuVSh7MnE6cihmLCJnIisoRT8ieSI6IiIpKSwyYjplLDNy +OmF8fE0uMUIsMnA6Ynx8Tn0pfTtNLjJuPTYoZixlKXtLIGE9ZisiLyIrKGV8fCIi +KTtIIE0uMm5bYV18fChNLjJuW2FdPU0oZixlKSl9O00uM2M9NihmKXtIIHIoZiwi +ZyIpfTtNLjVsPTYoZil7SCBmLlEoL1stW1xcXXt9KCkqKz8uLFxcXFxeJHwjXFxz +XS9nLCJcXFxcJCYiKX07TS41ZT02KGYsZSxhLGIpe2U9cihlLCJnIisoYiYmRT8i +eSI6IiIpKTtlLjEyPWE9YXx8MDtmPWUuWChmKTtIIGI/ZiYmZi5QPT09YT9mOk46 +Zn07TS4zcT02KCl7TS4xaD02KCl7MVMgMlUoIjJhXCd0IDU1IDFoIDU0IDNxIil9 +fTtNLjFSPTYoZil7SCA1My5aLjFxLlcoZik9PT0iWzJtIDE1XSJ9O00uM3A9Nihm +LGUsYSxiKXtPKEsgYz1yKGUsImciKSxkPS0xLGg7aD1jLlgoZik7KXthLlcoYixo +LCsrZCxmLGMpO2MuMTI9PT1oLlAmJmMuMTIrK31JKGUuMUopZS4xMj0wfTtNLjU3 +PTYoZixlKXtIIDYgYShiLGMpe0sgZD1lW2NdLjFJP2VbY106ezFJOmVbY119LGg9 +cihkLjFJLCJnIiksZz1bXSxpO08oaT0wO2k8Yi5MO2krKylNLjNwKGJbaV0saCw2 +KGspe2cuVShkLjNqP2tbZC4zal18fCIiOmtbMF0pfSk7SCBjPT09ZS5MLTF8fCFn +Lkw/ZzphKGcsYysxKX0oW2ZdLDApfTsxNS5aLjFwPTYoZixlKXtIIEouWChlWzBd +KX07MTUuWi5XPTYoZixlKXtIIEouWChlKX07MTUuWi5YPTYoZil7SyBlPW4uWC4x +cChKLDE0KSxhO0koZSl7SSgheCYmZS5MPjEmJnAoZSwiIik+LTEpe2E9MTUoSi4x +bSxuLlEuVyh0KEopLCJnIiwiIikpO24uUS5XKGYuMWEoZS5QKSxhLDYoKXtPKEsg +Yz0xO2M8MTQuTC0yO2MrKylJKDE0W2NdPT09MWQpZVtjXT0xZH0pfUkoSi4xdyYm +Si4xdy4xOSlPKEsgYj0xO2I8ZS5MO2IrKylJKGE9Si4xdy4xOVtiLTFdKWVbYV09 +ZVtiXTshRCYmSi4xSiYmIWVbMF0uTCYmSi4xMj5lLlAmJkouMTItLX1IIGV9O0ko +IUQpMTUuWi4xQT02KGYpeyhmPW4uWC5XKEosZikpJiZKLjFKJiYhZlswXS5MJiZK +LjEyPmYuUCYmSi4xMi0tO0ghIWZ9OzFyLlouMUM9NihmKXtNLjFSKGYpfHwoZj0x +NShmKSk7SShmLjFKKXtLIGU9bi4xQy4xcChKLDE0KTtmLjEyPTA7SCBlfUggZi5Y +KEopfTsxci5aLlE9NihmLGUpe0sgYT1NLjFSKGYpLGIsYztJKGEmJjFqIGUuNTgo +KT09PSIzZiImJmUuMWkoIiR7Iik9PT0tMSYmeSlIIG4uUS4xcChKLDE0KTtJKGEp +e0koZi4xdyliPWYuMXcuMTl9WSBmKz0iIjtJKDFqIGU9PT0iNiIpYz1uLlEuVyhK +LGYsNigpe0koYil7MTRbMF09MWYgMXIoMTRbMF0pO08oSyBkPTA7ZDxiLkw7ZCsr +KUkoYltkXSkxNFswXVtiW2RdXT0xNFtkKzFdfUkoYSYmZi4xSilmLjEyPTE0WzE0 +LkwtMl0rMTRbMF0uTDtIIGUuMXAoTiwxNCl9KTtZe2M9SisiIjtjPW4uUS5XKGMs +Ziw2KCl7SyBkPTE0O0ggbi5RLlcoZSxDLDYoaCxnLGkpe0koZyk1YihnKXsyNCIk +IjpIIiQiOzI0IiYiOkggZFswXTsyNCJgIjpIIGRbZC5MLTFdLjFhKDAsZFtkLkwt +Ml0pOzI0IlwnIjpIIGRbZC5MLTFdLjFhKGRbZC5MLTJdK2RbMF0uTCk7NWE6aT0i +IjtnPStnO0koIWcpSCBoO08oO2c+ZC5MLTM7KXtpPTFyLlouMWEuVyhnLC0xKStp +O2c9MVEuM2koZy8xMCl9SChnP2RbZ118fCIiOiIkIikraX1Ze2c9K2k7SShnPD1k +LkwtMylIIGRbZ107Zz1iP3AoYixpKTotMTtIIGc+LTE/ZFtnKzFdOmh9fSl9KX1J +KGEmJmYuMUopZi4xMj0wO0ggY307MXIuWi4xZT02KGYsZSl7SSghTS4xUihmKSlI +IG4uMWUuMXAoSiwxNCk7SyBhPUorIiIsYj1bXSxjPTAsZCxoO0koZT09PTFkfHwr +ZTwwKWU9NUQ7WXtlPTFRLjNpKCtlKTtJKCFlKUhbXX1PKGY9TS4zYyhmKTtkPWYu +WChhKTspe0koZi4xMj5jKXtiLlUoYS4xYShjLGQuUCkpO2QuTD4xJiZkLlA8YS5M +JiYzYi5aLlUuMXAoYixkLjFhKDEpKTtoPWRbMF0uTDtjPWYuMTI7SShiLkw+PWUp +MU59Zi4xMj09PWQuUCYmZi4xMisrfUkoYz09PWEuTCl7SSghbi4xQS5XKGYsIiIp +fHxoKWIuVSgiIil9WSBiLlUoYS4xYShjKSk7SCBiLkw+ZT9iLjFhKDAsZSk6Yn07 +TS4xaCgvXFwoXFw/I1teKV0qXFwpLyw2KGYpe0ggbi4xQS5XKEEsZi4yUy4xYShm +LlArZlswXS5MKSk/IiI6Iig/OikifSk7TS4xaCgvXFwoKD8hXFw/KS8sNigpe0ou +MTkuVShOKTtIIigifSk7TS4xaCgvXFwoXFw/PChbJFxcd10rKT4vLDYoZil7Si4x +OS5VKGZbMV0pO0ouMk49UjtIIigifSk7TS4xaCgvXFxcXGs8KFtcXHckXSspPi8s +NihmKXtLIGU9cChKLjE5LGZbMV0pO0ggZT4tMT8iXFxcXCIrKGUrMSkrKDNSKGYu +MlMuM2EoZi5QK2ZbMF0uTCkpPyIiOiIoPzopIik6ZlswXX0pO00uMWgoL1xcW1xc +Xj9dLyw2KGYpe0ggZlswXT09PSJbXSI/IlxcXFxiXFxcXEIiOiJbXFxcXHNcXFxc +U10ifSk7TS4xaCgvXlxcKFxcPyhbNUFdKylcXCkvLDYoZil7Si4zZChmWzFdKTtI +IiJ9KTtNLjFoKC8oPzpcXHMrfCMuKikrLyw2KGYpe0ggbi4xQS5XKEEsZi4yUy4x +YShmLlArZlswXS5MKSk/IiI6Iig/OikifSxNLjFCLDYoKXtIIEouMksoIngiKX0p +O00uMWgoL1xcLi8sNigpe0giW1xcXFxzXFxcXFNdIn0sTS4xQiw2KCl7SCBKLjJL +KCJzIil9KX0pKCk7MWogMmUhPSIxZCImJigyZS5NPU0pO0sgMXY9NigpezYgcihh +LGIpe2EuMWwuMWkoYikhPS0xfHwoYS4xbCs9IiAiK2IpfTYgdChhKXtIIGEuMWko +IjNlIik9PTA/YToiM2UiK2F9NiBCKGEpe0ggZS4xWS4yQVt0KGEpXX02IHAoYSxi +LGMpe0koYT09TilIIE47SyBkPWMhPVI/YS4zRzpbYS4yR10saD17IiMiOiIxYyIs +Ii4iOiIxbCJ9W2IuMW8oMCwxKV18fCIzaCIsZyxpO2c9aCE9IjNoIj9iLjFvKDEp +OmIuNXUoKTtJKChhW2hdfHwiIikuMWkoZykhPS0xKUggYTtPKGE9MDtkJiZhPGQu +TCYmaT09TjthKyspaT1wKGRbYV0sYixjKTtIIGl9NiBDKGEsYil7SyBjPXt9LGQ7 +TyhkIDJnIGEpY1tkXT1hW2RdO08oZCAyZyBiKWNbZF09YltkXTtIIGN9NiB3KGEs +YixjLGQpezYgaChnKXtnPWd8fDFQLjV5O0koIWcuMUYpe2cuMUY9Zy41MjtnLjNO +PTYoKXtKLjV3PTExfX1jLlcoZHx8MVAsZyl9YS4zZz9hLjNnKCI0VSIrYixoKTph +LjR5KGIsaCwxMSl9NiBBKGEsYil7SyBjPWUuMVkuMmosZD1OO0koYz09Til7Yz17 +fTtPKEsgaCAyZyBlLjFVKXtLIGc9ZS4xVVtoXTtkPWcuNHg7SShkIT1OKXtnLjFW +PWguNHcoKTtPKGc9MDtnPGQuTDtnKyspY1tkW2ddXT1ofX1lLjFZLjJqPWN9ZD1l +LjFVW2NbYV1dO2Q9PU4mJmIhPTExJiYxUC4xWChlLjEzLjF4LjFYKyhlLjEzLjF4 +LjNFK2EpKTtIIGR9NiB2KGEsYil7TyhLIGM9YS4xZSgiXFxuIiksZD0wO2Q8Yy5M +O2QrKyljW2RdPWIoY1tkXSxkKTtIIGMuMUsoIlxcbiIpfTYgdShhLGIpe0koYT09 +Tnx8YS5MPT0wfHxhPT0iXFxuIilIIGE7YT1hLlEoLzwvZywiJjF5OyIpO2E9YS5R +KC8gezIsfS9nLDYoYyl7TyhLIGQ9IiIsaD0wO2g8Yy5MLTE7aCsrKWQrPWUuMTMu +MVc7SCBkKyIgIn0pO0koYiE9TilhPXYoYSw2KGMpe0koYy5MPT0wKUgiIjtLIGQ9 +IiI7Yz1jLlEoL14oJjJzO3wgKSsvLDYoaCl7ZD1oO0giIn0pO0koYy5MPT0wKUgg +ZDtIIGQrXCc8MTcgMWc9IlwnK2IrXCciPlwnK2MrIjwvMTc+In0pO0ggYX02IG4o +YSxiKXthLjFlKCJcXG4iKTtPKEsgYz0iIixkPTA7ZDw1MDtkKyspYys9IiAgICAg +ICAgICAgICAgICAgICAgIjtIIGE9dihhLDYoaCl7SShoLjFpKCJcXHQiKT09LTEp +SCBoO08oSyBnPTA7KGc9aC4xaSgiXFx0IikpIT0tMTspaD1oLjFvKDAsZykrYy4x +bygwLGItZyViKStoLjFvKGcrMSxoLkwpO0ggaH0pfTYgeChhKXtIIGEuUSgvXlxc +cyt8XFxzKyQvZywiIil9NiBEKGEsYil7SShhLlA8Yi5QKUgtMTtZIEkoYS5QPmIu +UClIIDE7WSBJKGEuTDxiLkwpSC0xO1kgSShhLkw+Yi5MKUggMTtIIDB9NiB5KGEs +Yil7NiBjKGspe0gga1swXX1PKEsgZD1OLGg9W10sZz1iLjJEP2IuMkQ6YzsoZD1i +LjFJLlgoYSkpIT1OOyl7SyBpPWcoZCxiKTtJKDFqIGk9PSIzZiIpaT1bMWYgZS4y +TChpLGQuUCxiLjIzKV07aD1oLjFPKGkpfUggaH02IEUoYSl7SyBiPS8oLiopKCgm +MUc7fCYxeTspLiopLztIIGEuUShlLjNBLjNNLDYoYyl7SyBkPSIiLGg9TjtJKGg9 +Yi5YKGMpKXtjPWhbMV07ZD1oWzJdfUhcJzxhIDJoPSJcJytjK1wnIj5cJytjKyI8 +L2E+IitkfSl9NiB6KCl7TyhLIGE9MUUuMzYoIjFrIiksYj1bXSxjPTA7YzxhLkw7 +YysrKWFbY10uM3M9PSIyMCImJmIuVShhW2NdKTtIIGJ9NiBmKGEpe2E9YS4xRjtL +IGI9cChhLCIuMjAiLFIpO2E9cChhLCIuM08iLFIpO0sgYz0xRS40aSgiM3QiKTtJ +KCEoIWF8fCFifHxwKGEsIjN0IikpKXtCKGIuMWMpO3IoYiwiMW0iKTtPKEsgZD1h +LjNHLGg9W10sZz0wO2c8ZC5MO2crKyloLlUoZFtnXS40enx8ZFtnXS40QSk7aD1o +LjFLKCJcXHIiKTtjLjM5KDFFLjREKGgpKTthLjM5KGMpO2MuMkMoKTtjLjRDKCk7 +dyhjLCI0dSIsNigpe2MuMkcuNEUoYyk7Yi4xbD1iLjFsLlEoIjFtIiwiIil9KX19 +SSgxaiAzRiE9IjFkIiYmMWogTT09IjFkIilNPTNGKCJNIikuTTtLIGU9ezJ2Onsi +MWctMjciOiIiLCIyaS0xcyI6MSwiMnotMXMtMnQiOjExLDFNOk4sMXQ6TiwiNDIt +NDUiOlIsIjQzLTIyIjo0LDF1OlIsMTY6UiwiM1YtMTciOlIsMmw6MTEsIjQxLTQw +IjpSLDJrOjExLCIxei0xayI6MTF9LDEzOnsxVzoiJjJzOyIsMk06Uiw0NjoxMSw0 +NDoxMSwzNDoiNG4iLDF4OnsyMToiNG8gMW0iLDJQOiI/IiwxWDoiMXZcXG5cXG4i +LDNFOiI0clwndCA0dCAxRCBPOiAiLDRnOiI0bSA0QlwndCA1MSBPIDF6LTFrIDRG +OiAiLDM3OlwnPCE0VCAxeiA0UyAiLS8vNFYvLzNIIDRXIDEuMCA0Wi8vNFkiICIx +WjovLzJ5LjNMLjNLLzRYLzNJLzNILzNJLTRQLjRKIj48MXogNEk9IjFaOi8vMnku +M0wuM0svNEwvNUwiPjwzSj48NE4gMVotNE09IjVHLTVNIiA2Sz0iMk8vMXo7IDZK +PTZJLTgiIC8+PDF0PjZMIDF2PC8xdD48LzNKPjwzQiAxTD0iMjUtNk06NlEsNlAs +Nk8sNk4tNkY7NnktMmY6IzZ4OzJmOiM2dzsyNS0yMjo2djsyTy0zRDozQzsiPjxU +IDFMPSIyTy0zRDozQzszdy0zMjoxLjZ6OyI+PFQgMUw9IjI1LTIyOjZBLTZFOyI+ +MXY8L1Q+PFQgMUw9IjI1LTIyOi42Qzszdy02Qjo2UjsiPjxUPjN2IDMuMC43NiAo +NzIgNzMgM3gpPC9UPjxUPjxhIDJoPSIxWjovLzN1LjJ3LzF2IiAxRj0iMzgiIDFM +PSIyZjojM3kiPjFaOi8vM3UuMncvMXY8L2E+PC9UPjxUPjcwIDE3IDZVIDcxLjwv +VD48VD42VCA2WC0zeCA2WSA2RC48L1Q+PC9UPjxUPjZ0IDYxIDYwIEogMWssIDVa +IDxhIDJoPSI2dTovLzJ5LjYyLjJ3LzYzLTY2LzY1PzY0PTVYLTVXJjVQPTVPIiAx +TD0iMmY6IzN5Ij41UjwvYT4gNVYgPDJSLz41VSA1VCA1UyE8L1Q+PC9UPjwvM0I+ +PC8xej5cJ319LDFZOnsyajpOLDJBOnt9fSwxVTp7fSwzQTp7Nm46L1xcL1xcKltc +XHNcXFNdKj9cXCpcXC8vMmMsNm06L1xcL1xcLy4qJC8yYyw2bDovIy4qJC8yYyw2 +azovIihbXlxcXFwiXFxuXXxcXFxcLikqIi9nLDZvOi9cJyhbXlxcXFxcJ1xcbl18 +XFxcXC4pKlwnL2csNnA6MWYgTShcJyIoW15cXFxcXFxcXCJdfFxcXFxcXFxcLikq +IlwnLCIzeiIpLDZzOjFmIE0oIlwnKFteXFxcXFxcXFxcJ118XFxcXFxcXFwuKSpc +JyIsIjN6IiksNnE6LygmMXk7fDwpIS0tW1xcc1xcU10qPy0tKCYxRzt8PikvMmMs +M006L1xcdys6XFwvXFwvW1xcdy0uXFwvPyUmPTpAO10qL2csNmE6ezE4Oi8oJjF5 +O3w8KVxcPz0/L2csMWI6L1xcPygmMUc7fD4pL2d9LDY5OnsxODovKCYxeTt8PCkl +PT8vZywxYjovJSgmMUc7fD4pL2d9LDZkOnsxODovKCYxeTt8PClcXHMqMWsuKj8o +JjFHO3w+KS8yVCwxYjovKCYxeTt8PClcXC9cXHMqMWtcXHMqKCYxRzt8PikvMlR9 +fSwxNjp7MUg6NihhKXs2IGIoaSxrKXtIIGUuMTYuMm8oaSxrLGUuMTMuMXhba10p +fU8oSyBjPVwnPFQgMWc9IjE2Ij5cJyxkPWUuMTYuMngsaD1kLjJYLGc9MDtnPGgu +TDtnKyspYys9KGRbaFtnXV0uMUh8fGIpKGEsaFtnXSk7Yys9IjwvVD4iO0ggY30s +Mm86NihhLGIsYyl7SFwnPDJXPjxhIDJoPSIjIiAxZz0iNmUgNmhcJytiKyIgIiti +K1wnIj5cJytjKyI8L2E+PC8yVz4ifSwyYjo2KGEpe0sgYj1hLjFGLGM9Yi4xbHx8 +IiI7Yj1CKHAoYiwiLjIwIixSKS4xYyk7SyBkPTYoaCl7SChoPTE1KGgrIjZmKFxc +XFx3KykiKS5YKGMpKT9oWzFdOk59KCI2ZyIpO2ImJmQmJmUuMTYuMnhbZF0uMkIo +Yik7YS4zTigpfSwyeDp7Mlg6WyIyMSIsIjJQIl0sMjE6ezFIOjYoYSl7SShhLlYo +IjJsIikhPVIpSCIiO0sgYj1hLlYoIjF0Iik7SCBlLjE2LjJvKGEsIjIxIixiP2I6 +ZS4xMy4xeC4yMSl9LDJCOjYoYSl7YT0xRS42aih0KGEuMWMpKTthLjFsPWEuMWwu +USgiNDciLCIiKX19LDJQOnsyQjo2KCl7SyBhPSI2OD0wIjthKz0iLCAxOD0iKygz +MS4zMC0zMykvMisiLCAzMj0iKygzMS4yWi0yWSkvMisiLCAzMD0zMywgMlo9Mlki +O2E9YS5RKC9eLC8sIiIpO2E9MVAuNlooIiIsIjM4IixhKTthLjJDKCk7SyBiPWEu +MUU7Yi42VyhlLjEzLjF4LjM3KTtiLjZWKCk7YS4yQygpfX19fSwzNTo2KGEsYil7 +SyBjO0koYiljPVtiXTtZe2M9MUUuMzYoZS4xMy4zNCk7TyhLIGQ9W10saD0wO2g8 +Yy5MO2grKylkLlUoY1toXSk7Yz1kfWM9YztkPVtdO0koZS4xMy4yTSljPWMuMU8o +eigpKTtJKGMuTD09PTApSCBkO08oaD0wO2g8Yy5MO2grKyl7TyhLIGc9Y1toXSxp +PWEsaz1jW2hdLjFsLGo9M1cgMCxsPXt9LG09MWYgTSgiXlxcXFxbKD88MlY+KC4q +PykpXFxcXF0kIikscz0xZiBNKCIoPzwyNz5bXFxcXHctXSspXFxcXHMqOlxcXFxz +Kig/PDFUPltcXFxcdy0lI10rfFxcXFxbLio/XFxcXF18XFwiLio/XFwifFwnLio/ +XCcpXFxcXHMqOz8iLCJnIik7KGo9cy5YKGspKSE9Tjspe0sgbz1qLjFULlEoL15b +XCciXXxbXCciXSQvZywiIik7SShvIT1OJiZtLjFBKG8pKXtvPW0uWChvKTtvPW8u +MlYuTD4wP28uMlYuMWUoL1xccyosXFxzKi8pOltdfWxbai4yN109b31nPXsxRjpn +LDFuOkMoaSxsKX07Zy4xbi4xRCE9TiYmZC5VKGcpfUggZH0sMU06NihhLGIpe0sg +Yz1KLjM1KGEsYiksZD1OLGg9ZS4xMztJKGMuTCE9PTApTyhLIGc9MDtnPGMuTDtn +Kyspe2I9Y1tnXTtLIGk9Yi4xRixrPWIuMW4saj1rLjFELGw7SShqIT1OKXtJKGtb +IjF6LTFrIl09PSJSInx8ZS4ydlsiMXotMWsiXT09Uil7ZD0xZiBlLjRsKGopO2o9 +IjRPIn1ZIEkoZD1BKGopKWQ9MWYgZDtZIDZIO2w9aS4zWDtJKGguMk0pe2w9bDtL +IG09eChsKSxzPTExO0kobS4xaSgiPCFbNkdbIik9PTApe209bS40aCg5KTtzPVJ9 +SyBvPW0uTDtJKG0uMWkoIl1dXFw+Iik9PW8tMyl7bT1tLjRoKDAsby0zKTtzPVJ9 +bD1zP206bH1JKChpLjF0fHwiIikhPSIiKWsuMXQ9aS4xdDtrLjFEPWo7ZC4yUShr +KTtiPWQuMkYobCk7SSgoaS4xY3x8IiIpIT0iIiliLjFjPWkuMWM7aS4yRy43NChi +LGkpfX19LDJFOjYoYSl7dygxUCwiNGsiLDYoKXtlLjFNKGEpfSl9fTtlLjJFPWUu +MkU7ZS4xTT1lLjFNO2UuMkw9NihhLGIsYyl7Si4xVD1hO0ouUD1iO0ouTD1hLkw7 +Si4yMz1jO0ouMVY9Tn07ZS4yTC5aLjFxPTYoKXtIIEouMVR9O2UuNGw9NihhKXs2 +IGIoaixsKXtPKEsgbT0wO208ai5MO20rKylqW21dLlArPWx9SyBjPUEoYSksZCxo +PTFmIGUuMVUuNVksZz1KLGk9IjJGIDFIIDJRIi4xZSgiICIpO0koYyE9Til7ZD0x +ZiBjO08oSyBrPTA7azxpLkw7aysrKSg2KCl7SyBqPWlba107Z1tqXT02KCl7SCBo +W2pdLjFwKGgsMTQpfX0pKCk7ZC4yOD09Tj8xUC4xWChlLjEzLjF4LjFYKyhlLjEz +LjF4LjRnK2EpKTpoLjJKLlUoezFJOmQuMjguMTcsMkQ6NihqKXtPKEsgbD1qLjE3 +LG09W10scz1kLjJKLG89ai5QK2ouMTguTCxGPWQuMjgscSxHPTA7RzxzLkw7Rysr +KXtxPXkobCxzW0ddKTtiKHEsbyk7bT1tLjFPKHEpfUkoRi4xOCE9TiYmai4xOCE9 +Til7cT15KGouMTgsRi4xOCk7YihxLGouUCk7bT1tLjFPKHEpfUkoRi4xYiE9TiYm +ai4xYiE9Til7cT15KGouMWIsRi4xYik7YihxLGouUCtqWzBdLjVRKGouMWIpKTtt +PW0uMU8ocSl9TyhqPTA7ajxtLkw7aisrKW1bal0uMVY9Yy4xVjtIIG19fSl9fTtl +LjRqPTYoKXt9O2UuNGouWj17Vjo2KGEsYil7SyBjPUouMW5bYV07Yz1jPT1OP2I6 +YztLIGQ9eyJSIjpSLCIxMSI6MTF9W2NdO0ggZD09Tj9jOmR9LDNZOjYoYSl7SCAx +RS40aShhKX0sNGM6NihhLGIpe0sgYz1bXTtJKGEhPU4pTyhLIGQ9MDtkPGEuTDtk +KyspSSgxaiBhW2RdPT0iMm0iKWM9Yy4xTyh5KGIsYVtkXSkpO0ggSi40ZShjLjZi +KEQpKX0sNGU6NihhKXtPKEsgYj0wO2I8YS5MO2IrKylJKGFbYl0hPT1OKU8oSyBj +PWFbYl0sZD1jLlArYy5MLGg9YisxO2g8YS5MJiZhW2JdIT09TjtoKyspe0sgZz1h +W2hdO0koZyE9PU4pSShnLlA+ZCkxTjtZIEkoZy5QPT1jLlAmJmcuTD5jLkwpYVti +XT1OO1kgSShnLlA+PWMuUCYmZy5QPGQpYVtoXT1OfUggYX0sNGQ6NihhKXtLIGI9 +W10sYz0ydShKLlYoIjJpLTFzIikpO3YoYSw2KGQsaCl7Yi5VKGgrYyl9KTtIIGJ9 +LDNVOjYoYSl7SyBiPUouVigiMU0iLFtdKTtJKDFqIGIhPSIybSImJmIuVT09Tili +PVtiXTthOnthPWEuMXEoKTtLIGM9M1cgMDtPKGM9Yz0xUS42YyhjfHwwLDApO2M8 +Yi5MO2MrKylJKGJbY109PWEpe2I9YzsxTiBhfWI9LTF9SCBiIT0tMX0sMnI6Nihh +LGIsYyl7YT1bIjFzIiwiNmkiK2IsIlAiK2EsIjZyIisoYiUyPT0wPzE6MikuMXEo +KV07Si4zVShiKSYmYS5VKCI2NyIpO2I9PTAmJmEuVSgiMU4iKTtIXCc8VCAxZz0i +XCcrYS4xSygiICIpK1wnIj5cJytjKyI8L1Q+In0sM1E6NihhLGIpe0sgYz0iIixk +PWEuMWUoIlxcbiIpLkwsaD0ydShKLlYoIjJpLTFzIikpLGc9Si5WKCIyei0xcy0y +dCIpO0koZz09UilnPShoK2QtMSkuMXEoKS5MO1kgSSgzUihnKT09UilnPTA7TyhL +IGk9MDtpPGQ7aSsrKXtLIGs9Yj9iW2ldOmgraSxqO0koaz09MClqPWUuMTMuMVc7 +WXtqPWc7TyhLIGw9ay4xcSgpO2wuTDxqOylsPSIwIitsO2o9bH1hPWo7Yys9Si4y +cihpLGssYSl9SCBjfSw0OTo2KGEsYil7YT14KGEpO0sgYz1hLjFlKCJcXG4iKTtK +LlYoIjJ6LTFzLTJ0Iik7SyBkPTJ1KEouVigiMmktMXMiKSk7YT0iIjtPKEsgaD1K +LlYoIjFEIiksZz0wO2c8Yy5MO2crKyl7SyBpPWNbZ10saz0vXigmMnM7fFxccykr +Ly5YKGkpLGo9TixsPWI/YltnXTpkK2c7SShrIT1OKXtqPWtbMF0uMXEoKTtpPWku +MW8oai5MKTtqPWouUSgiICIsZS4xMy4xVyl9aT14KGkpO0koaS5MPT0wKWk9ZS4x +My4xVzthKz1KLjJyKGcsbCwoaiE9Tj9cJzwxNyAxZz0iXCcraCtcJyA1TiI+XCcr +aisiPC8xNz4iOiIiKStpKX1IIGF9LDRmOjYoYSl7SCBhPyI8NGE+IithKyI8LzRh +PiI6IiJ9LDRiOjYoYSxiKXs2IGMobCl7SChsPWw/bC4xVnx8ZzpnKT9sKyIgIjoi +In1PKEsgZD0wLGg9IiIsZz1KLlYoIjFEIiwiIiksaT0wO2k8Yi5MO2krKyl7SyBr +PWJbaV0sajtJKCEoaz09PU58fGsuTD09PTApKXtqPWMoayk7aCs9dShhLjFvKGQs +ay5QLWQpLGorIjQ4IikrdShrLjFULGoray4yMyk7ZD1rLlAray5MKyhrLjc1fHww +KX19aCs9dShhLjFvKGQpLGMoKSsiNDgiKTtIIGh9LDFIOjYoYSl7SyBiPSIiLGM9 +WyIyMCJdLGQ7SShKLlYoIjJrIik9PVIpSi4xbi4xNj1KLjFuLjF1PTExOzFsPSIy +MCI7Si5WKCIybCIpPT1SJiZjLlUoIjQ3Iik7SSgoMXU9Si5WKCIxdSIpKT09MTEp +Yy5VKCI2UyIpO2MuVShKLlYoIjFnLTI3IikpO2MuVShKLlYoIjFEIikpO2E9YS5R +KC9eWyBdKltcXG5dK3xbXFxuXSpbIF0qJC9nLCIiKS5RKC9cXHIvZywiICIpO2I9 +Si5WKCI0My0yMiIpO0koSi5WKCI0Mi00NSIpPT1SKWE9bihhLGIpO1l7TyhLIGg9 +IiIsZz0wO2c8YjtnKyspaCs9IiAiO2E9YS5RKC9cXHQvZyxoKX1hPWE7YTp7Yj1h +PWE7aD0vPDJSXFxzKlxcLz8+fCYxeTsyUlxccypcXC8/JjFHOy8yVDtJKGUuMTMu +NDY9PVIpYj1iLlEoaCwiXFxuIik7SShlLjEzLjQ0PT1SKWI9Yi5RKGgsIiIpO2I9 +Yi4xZSgiXFxuIik7aD0vXlxccyovO2c9NFE7TyhLIGk9MDtpPGIuTCYmZz4wO2kr +Kyl7SyBrPWJbaV07SSh4KGspLkwhPTApe2s9aC5YKGspO0koaz09Til7YT1hOzFO +IGF9Zz0xUS40cShrWzBdLkwsZyl9fUkoZz4wKU8oaT0wO2k8Yi5MO2krKyliW2ld +PWJbaV0uMW8oZyk7YT1iLjFLKCJcXG4iKX1JKDF1KWQ9Si40ZChhKTtiPUouNGMo +Si4ySixhKTtiPUouNGIoYSxiKTtiPUouNDkoYixkKTtJKEouVigiNDEtNDAiKSli +PUUoYik7MWogMkghPSIxZCImJjJILjNTJiYySC4zUy4xQygvNXMvKSYmYy5VKCI1 +dCIpO0ggYj1cJzxUIDFjPSJcJyt0KEouMWMpK1wnIiAxZz0iXCcrYy4xSygiICIp +K1wnIj5cJysoSi5WKCIxNiIpP2UuMTYuMUgoSik6IiIpK1wnPDNaIDV6PSIwIiA1 +SD0iMCIgNUo9IjAiPlwnK0ouNGYoSi5WKCIxdCIpKSsiPDNUPjwzUD4iKygxdT9c +JzwyZCAxZz0iMXUiPlwnK0ouM1EoYSkrIjwvMmQ+IjoiIikrXCc8MmQgMWc9IjE3 +Ij48VCAxZz0iM08iPlwnK2IrIjwvVD48LzJkPjwvM1A+PC8zVD48LzNaPjwvVD4i +fSwyRjo2KGEpe0koYT09PU4pYT0iIjtKLjE3PWE7SyBiPUouM1koIlQiKTtiLjNY +PUouMUgoYSk7Si5WKCIxNiIpJiZ3KHAoYiwiLjE2IiksIjVjIixlLjE2LjJiKTtK +LlYoIjNWLTE3IikmJncocChiLCIuMTciKSwiNTYiLGYpO0ggYn0sMlE6NihhKXtK +LjFjPSIiKzFRLjVkKDFRLjVuKCkqNWspLjFxKCk7ZS4xWS4yQVt0KEouMWMpXT1K +O0ouMW49QyhlLjJ2LGF8fHt9KTtJKEouVigiMmsiKT09UilKLjFuLjE2PUouMW4u +MXU9MTF9LDVqOjYoYSl7YT1hLlEoL15cXHMrfFxccyskL2csIiIpLlEoL1xccysv +ZywifCIpO0giXFxcXGIoPzoiK2ErIilcXFxcYiJ9LDVmOjYoYSl7Si4yOD17MTg6 +ezFJOmEuMTgsMjM6IjFrIn0sMWI6ezFJOmEuMWIsMjM6IjFrIn0sMTc6MWYgTSgi +KD88MTg+IithLjE4LjFtKyIpKD88MTc+Lio/KSg/PDFiPiIrYS4xYi4xbSsiKSIs +IjVvIil9fX07SCBlfSgpOzFqIDJlIT0iMWQiJiYoMmUuMXY9MXYpOycsNjIsNDQx +LCd8fHx8fHxmdW5jdGlvbnx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8 +fHx8fHxyZXR1cm58aWZ8dGhpc3x2YXJ8bGVuZ3RofFhSZWdFeHB8bnVsbHxmb3J8 +aW5kZXh8cmVwbGFjZXx0cnVlfHxkaXZ8cHVzaHxnZXRQYXJhbXxjYWxsfGV4ZWN8 +ZWxzZXxwcm90b3R5cGV8fGZhbHNlfGxhc3RJbmRleHxjb25maWd8YXJndW1lbnRz +fFJlZ0V4cHx0b29sYmFyfGNvZGV8bGVmdHxjYXB0dXJlTmFtZXN8c2xpY2V8cmln +aHR8aWR8dW5kZWZpbmVkfHNwbGl0fG5ld3xjbGFzc3xhZGRUb2tlbnxpbmRleE9m +fHR5cGVvZnxzY3JpcHR8Y2xhc3NOYW1lfHNvdXJjZXxwYXJhbXN8c3Vic3RyfGFw +cGx5fHRvU3RyaW5nfFN0cmluZ3xsaW5lfHRpdGxlfGd1dHRlcnxTeW50YXhIaWdo +bGlnaHRlcnxfeHJlZ2V4cHxzdHJpbmdzfGx0fGh0bWx8dGVzdHxPVVRTSURFX0NM +QVNTfG1hdGNofGJydXNofGRvY3VtZW50fHRhcmdldHxndHxnZXRIdG1sfHJlZ2V4 +fGdsb2JhbHxqb2lufHN0eWxlfGhpZ2hsaWdodHxicmVha3xjb25jYXR8d2luZG93 +fE1hdGh8aXNSZWdFeHB8dGhyb3d8dmFsdWV8YnJ1c2hlc3xicnVzaE5hbWV8c3Bh +Y2V8YWxlcnR8dmFyc3xodHRwfHN5bnRheGhpZ2hsaWdodGVyfGV4cGFuZFNvdXJj +ZXxzaXplfGNzc3xjYXNlfGZvbnR8RmF8bmFtZXxodG1sU2NyaXB0fGRBfGNhbnxo +YW5kbGVyfGdtfHRkfGV4cG9ydHN8Y29sb3J8aW58aHJlZnxmaXJzdHxkaXNjb3Zl +cmVkQnJ1c2hlc3xsaWdodHxjb2xsYXBzZXxvYmplY3R8Y2FjaGV8Z2V0QnV0dG9u +SHRtbHx0cmlnZ2VyfHBhdHRlcm58Z2V0TGluZUh0bWx8bmJzcHxudW1iZXJzfHBh +cnNlSW50fGRlZmF1bHRzfGNvbXxpdGVtc3x3d3d8cGFkfGhpZ2hsaWdodGVyc3xl +eGVjdXRlfGZvY3VzfGZ1bmN8YWxsfGdldERpdnxwYXJlbnROb2RlfG5hdmlnYXRv +cnxJTlNJREVfQ0xBU1N8cmVnZXhMaXN0fGhhc0ZsYWd8TWF0Y2h8dXNlU2NyaXB0 +VGFnc3xoYXNOYW1lZENhcHR1cmV8dGV4dHxoZWxwfGluaXR8YnJ8aW5wdXR8Z2l8 +RXJyb3J8dmFsdWVzfHNwYW58bGlzdHwyNTB8aGVpZ2h0fHdpZHRofHNjcmVlbnx0 +b3B8NTAwfHRhZ05hbWV8ZmluZEVsZW1lbnRzfGdldEVsZW1lbnRzQnlUYWdOYW1l +fGFib3V0RGlhbG9nfF9ibGFua3xhcHBlbmRDaGlsZHxjaGFyQXR8QXJyYXl8Y29w +eUFzR2xvYmFsfHNldEZsYWd8aGlnaGxpZ2h0ZXJffHN0cmluZ3xhdHRhY2hFdmVu +dHxub2RlTmFtZXxmbG9vcnxiYWNrcmVmfG91dHB1dHx0aGV8VHlwZUVycm9yfHN0 +aWNreXxaYXxpdGVyYXRlfGZyZWV6ZVRva2Vuc3xzY29wZXx0eXBlfHRleHRhcmVh +fGFsZXhnb3JiYXRjaGV2fHZlcnNpb258bWFyZ2lufDIwMTB8MDA1ODk2fGdzfHJl +Z2V4TGlifGJvZHl8Y2VudGVyfGFsaWdufG5vQnJ1c2h8cmVxdWlyZXxjaGlsZE5v +ZGVzfERURHx4aHRtbDF8aGVhZHxvcmd8dzN8dXJsfHByZXZlbnREZWZhdWx0fGNv +bnRhaW5lcnx0cnxnZXRMaW5lTnVtYmVyc0h0bWx8aXNOYU58dXNlckFnZW50fHRi +b2R5fGlzTGluZUhpZ2hsaWdodGVkfHF1aWNrfHZvaWR8aW5uZXJIVE1MfGNyZWF0 +ZXx0YWJsZXxsaW5rc3xhdXRvfHNtYXJ0fHRhYnxzdHJpcEJyc3x0YWJzfGJsb2dn +ZXJNb2RlfGNvbGxhcHNlZHxwbGFpbnxnZXRDb2RlTGluZXNIdG1sfGNhcHRpb258 +Z2V0TWF0Y2hlc0h0bWx8ZmluZE1hdGNoZXN8ZmlndXJlT3V0TGluZU51bWJlcnN8 +cmVtb3ZlTmVzdGVkTWF0Y2hlc3xnZXRUaXRsZUh0bWx8YnJ1c2hOb3RIdG1sU2Ny +aXB0fHN1YnN0cmluZ3xjcmVhdGVFbGVtZW50fEhpZ2hsaWdodGVyfGxvYWR8SHRt +bFNjcmlwdHxCcnVzaHxwcmV8ZXhwYW5kfG11bHRpbGluZXxtaW58Q2FufGlnbm9y +ZUNhc2V8ZmluZHxibHVyfGV4dGVuZGVkfHRvTG93ZXJDYXNlfGFsaWFzZXN8YWRk +RXZlbnRMaXN0ZW5lcnxpbm5lclRleHR8dGV4dENvbnRlbnR8d2FzbnxzZWxlY3R8 +Y3JlYXRlVGV4dE5vZGV8cmVtb3ZlQ2hpbGR8b3B0aW9ufHNhbWV8ZnJhbWV8eG1s +bnN8ZHRkfHR3aWNlfDE5OTl8ZXF1aXZ8bWV0YXxodG1sc2NyaXB0fHRyYW5zaXRp +b25hbHwxRTN8ZXhwZWN0ZWR8UFVCTElDfERPQ1RZUEV8b258VzNDfFhIVE1MfFRS +fEVOfFRyYW5zaXRpb25hbHx8Y29uZmlndXJlZHxzcmNFbGVtZW50fE9iamVjdHxh +ZnRlcnxydW58ZGJsY2xpY2t8bWF0Y2hDaGFpbnx2YWx1ZU9mfGNvbnN0cnVjdG9y +fGRlZmF1bHR8c3dpdGNofGNsaWNrfHJvdW5kfGV4ZWNBdHxmb3JIdG1sU2NyaXB0 +fHRva2VufGdpbXl8ZnVuY3Rpb25zfGdldEtleXdvcmRzfDFFNnxlc2NhcGV8d2l0 +aGlufHJhbmRvbXxzZ2l8YW5vdGhlcnxmaW5hbGx5fHN1cHBseXxNU0lFfGllfHRv +VXBwZXJDYXNlfGNhdGNofHJldHVyblZhbHVlfGRlZmluaXRpb258ZXZlbnR8Ym9y +ZGVyfGltc3h8Y29uc3RydWN0aW5nfG9uZXxJbmZpbml0eXxmcm9tfHdoZW58Q29u +dGVudHxjZWxscGFkZGluZ3xmbGFnc3xjZWxsc3BhY2luZ3x0cnl8eGh0bWx8VHlw +ZXxzcGFjZXN8MjkzMDQwMnxob3N0ZWRfYnV0dG9uX2lkfGxhc3RJbmRleE9mfGRv +bmF0ZXxhY3RpdmV8ZGV2ZWxvcG1lbnR8a2VlcHx0b3x4Y2xpY2t8X3N8WG1sfHBs +ZWFzZXxsaWtlfHlvdXxwYXlwYWx8Y2dpfGNtZHx3ZWJzY3J8YmlufGhpZ2hsaWdo +dGVkfHNjcm9sbGJhcnN8YXNwU2NyaXB0VGFnc3xwaHBTY3JpcHRUYWdzfHNvcnR8 +bWF4fHNjcmlwdFNjcmlwdFRhZ3N8dG9vbGJhcl9pdGVtfF98Y29tbWFuZHxjb21t +YW5kX3xudW1iZXJ8Z2V0RWxlbWVudEJ5SWR8ZG91YmxlUXVvdGVkU3RyaW5nfHNp +bmdsZUxpbmVQZXJsQ29tbWVudHN8c2luZ2xlTGluZUNDb21tZW50c3xtdWx0aUxp +bmVDQ29tbWVudHN8c2luZ2xlUXVvdGVkU3RyaW5nfG11bHRpTGluZURvdWJsZVF1 +b3RlZFN0cmluZ3x4bWxDb21tZW50c3xhbHR8bXVsdGlMaW5lU2luZ2xlUXVvdGVk +U3RyaW5nfElmfGh0dHBzfDFlbXwwMDB8ZmZmfGJhY2tncm91bmR8NWVtfHh4fGJv +dHRvbXw3NWVtfEdvcmJhdGNoZXZ8bGFyZ2V8c2VyaWZ8Q0RBVEF8Y29udGludWV8 +dXRmfGNoYXJzZXR8Y29udGVudHxBYm91dHxmYW1pbHl8c2Fuc3xIZWx2ZXRpY2F8 +QXJpYWx8R2VuZXZhfDNlbXxub2d1dHRlcnxDb3B5cmlnaHR8c3ludGF4fGNsb3Nl +fHdyaXRlfDIwMDR8QWxleHxvcGVufEphdmFTY3JpcHR8aGlnaGxpZ2h0ZXJ8SnVs +eXwwMnxyZXBsYWNlQ2hpbGR8b2Zmc2V0fDgzJy5zcGxpdCgnfCcpLDAse30pKQo= + +------------i2L0fMUSDUR5fcpX3sh9hH +Content-Disposition: inline; filename=shBrushCpp.js +Content-Type: application/javascript; charset=UTF-8; name=shBrushCpp.js +Content-Location: http://foobarpig.com/wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/scripts/shBrushCpp.js?ver=3.0.83b +Content-Transfer-Encoding: Base64 + +LyoqCiAqIFN5bnRheEhpZ2hsaWdodGVyCiAqIGh0dHA6Ly9hbGV4Z29yYmF0Y2hl +di5jb20vU3ludGF4SGlnaGxpZ2h0ZXIKICoKICogU3ludGF4SGlnaGxpZ2h0ZXIg +aXMgZG9uYXRpb253YXJlLiBJZiB5b3UgYXJlIHVzaW5nIGl0LCBwbGVhc2UgZG9u +YXRlLgogKiBodHRwOi8vYWxleGdvcmJhdGNoZXYuY29tL1N5bnRheEhpZ2hsaWdo +dGVyL2RvbmF0ZS5odG1sCiAqCiAqIEB2ZXJzaW9uCiAqIDMuMC44MyAoSnVseSAw +MiAyMDEwKQogKiAKICogQGNvcHlyaWdodAogKiBDb3B5cmlnaHQgKEMpIDIwMDQt +MjAxMCBBbGV4IEdvcmJhdGNoZXYuCiAqCiAqIEBsaWNlbnNlCiAqIER1YWwgbGlj +ZW5zZWQgdW5kZXIgdGhlIE1JVCBhbmQgR1BMIGxpY2Vuc2VzLgogKi8KOyhmdW5j +dGlvbigpCnsKCS8vIENvbW1vbkpTCgl0eXBlb2YocmVxdWlyZSkgIT0gJ3VuZGVm +aW5lZCcgPyBTeW50YXhIaWdobGlnaHRlciA9IHJlcXVpcmUoJ3NoQ29yZScpLlN5 +bnRheEhpZ2hsaWdodGVyIDogbnVsbDsKCglmdW5jdGlvbiBCcnVzaCgpCgl7CgkJ +Ly8gQ29weXJpZ2h0IDIwMDYgU2hpbiwgWW91bmdKaW4KCQoJCXZhciBkYXRhdHlw +ZXMgPQknQVRPTSBCT09MIEJPT0xFQU4gQllURSBDSEFSIENPTE9SUkVGIERXT1JE +IERXT1JETE9ORyBEV09SRF9QVFIgJyArCgkJCQkJCSdEV09SRDMyIERXT1JENjQg +RkxPQVQgSEFDQ0VMIEhBTEZfUFRSIEhBTkRMRSBIQklUTUFQIEhCUlVTSCAnICsK +CQkJCQkJJ0hDT0xPUlNQQUNFIEhDT05WIEhDT05WTElTVCBIQ1VSU09SIEhEQyBI +RERFREFUQSBIREVTSyBIRFJPUCBIRFdQICcgKwoJCQkJCQknSEVOSE1FVEFGSUxF +IEhGSUxFIEhGT05UIEhHRElPQkogSEdMT0JBTCBISE9PSyBISUNPTiBISU5TVEFO +Q0UgSEtFWSAnICsKCQkJCQkJJ0hLTCBITE9DQUwgSE1FTlUgSE1FVEFGSUxFIEhN +T0RVTEUgSE1PTklUT1IgSFBBTEVUVEUgSFBFTiBIUkVTVUxUICcgKwoJCQkJCQkn +SFJHTiBIUlNSQyBIU1ogSFdJTlNUQSBIV05EIElOVCBJTlRfUFRSIElOVDMyIElO +VDY0IExBTkdJRCBMQ0lEIExDVFlQRSAnICsKCQkJCQkJJ0xHUlBJRCBMT05HIExP +TkdMT05HIExPTkdfUFRSIExPTkczMiBMT05HNjQgTFBBUkFNIExQQk9PTCBMUEJZ +VEUgTFBDT0xPUlJFRiAnICsKCQkJCQkJJ0xQQ1NUUiBMUENUU1RSIExQQ1ZPSUQg +TFBDV1NUUiBMUERXT1JEIExQSEFORExFIExQSU5UIExQTE9ORyBMUFNUUiBMUFRT +VFIgJyArCgkJCQkJCSdMUFZPSUQgTFBXT1JEIExQV1NUUiBMUkVTVUxUIFBCT09M +IFBCT09MRUFOIFBCWVRFIFBDSEFSIFBDU1RSIFBDVFNUUiBQQ1dTVFIgJyArCgkJ +CQkJCSdQRFdPUkRMT05HIFBEV09SRF9QVFIgUERXT1JEMzIgUERXT1JENjQgUEZM +T0FUIFBIQUxGX1BUUiBQSEFORExFIFBIS0VZIFBJTlQgJyArCgkJCQkJCSdQSU5U +X1BUUiBQSU5UMzIgUElOVDY0IFBMQ0lEIFBMT05HIFBMT05HTE9ORyBQTE9OR19Q +VFIgUExPTkczMiBQTE9ORzY0IFBPSU5URVJfMzIgJyArCgkJCQkJCSdQT0lOVEVS +XzY0IFBTSE9SVCBQU0laRV9UIFBTU0laRV9UIFBTVFIgUFRCWVRFIFBUQ0hBUiBQ +VFNUUiBQVUNIQVIgUFVIQUxGX1BUUiAnICsKCQkJCQkJJ1BVSU5UIFBVSU5UX1BU +UiBQVUlOVDMyIFBVSU5UNjQgUFVMT05HIFBVTE9OR0xPTkcgUFVMT05HX1BUUiBQ +VUxPTkczMiBQVUxPTkc2NCAnICsKCQkJCQkJJ1BVU0hPUlQgUFZPSUQgUFdDSEFS +IFBXT1JEIFBXU1RSIFNDX0hBTkRMRSBTQ19MT0NLIFNFUlZJQ0VfU1RBVFVTX0hB +TkRMRSBTSE9SVCAnICsKCQkJCQkJJ1NJWkVfVCBTU0laRV9UIFRCWVRFIFRDSEFS +IFVDSEFSIFVIQUxGX1BUUiBVSU5UIFVJTlRfUFRSIFVJTlQzMiBVSU5UNjQgVUxP +TkcgJyArCgkJCQkJCSdVTE9OR0xPTkcgVUxPTkdfUFRSIFVMT05HMzIgVUxPTkc2 +NCBVU0hPUlQgVVNOIFZPSUQgV0NIQVIgV09SRCBXUEFSQU0gV1BBUkFNIFdQQVJB +TSAnICsKCQkJCQkJJ2NoYXIgYm9vbCBzaG9ydCBpbnQgX19pbnQzMiBfX2ludDY0 +IF9faW50OCBfX2ludDE2IGxvbmcgZmxvYXQgZG91YmxlIF9fd2NoYXJfdCAnICsK +CQkJCQkJJ2Nsb2NrX3QgX2NvbXBsZXggX2Rldl90IF9kaXNrZnJlZV90IGRpdl90 +IGxkaXZfdCBfZXhjZXB0aW9uIF9FWENFUFRJT05fUE9JTlRFUlMgJyArCgkJCQkJ +CSdGSUxFIF9maW5kZGF0YV90IF9maW5kZGF0YWk2NF90IF93ZmluZGRhdGFfdCBf +d2ZpbmRkYXRhaTY0X3QgX19maW5kZGF0YTY0X3QgJyArCgkJCQkJCSdfX3dmaW5k +ZGF0YTY0X3QgX0ZQSUVFRV9SRUNPUkQgZnBvc190IF9IRUFQSU5GTyBfSEZJTEUg +bGNvbnYgaW50cHRyX3QgJyArCgkJCQkJCSdqbXBfYnVmIG1ic3RhdGVfdCBfb2Zm +X3QgX29uZXhpdF90IF9QTkggcHRyZGlmZl90IF9wdXJlY2FsbF9oYW5kbGVyICcg +KwoJCQkJCQknc2lnX2F0b21pY190IHNpemVfdCBfc3RhdCBfX3N0YXQ2NCBfc3Rh +dGk2NCB0ZXJtaW5hdGVfZnVuY3Rpb24gJyArCgkJCQkJCSd0aW1lX3QgX190aW1l +NjRfdCBfdGltZWIgX190aW1lYjY0IHRtIHVpbnRwdHJfdCBfdXRpbWJ1ZiAnICsK +CQkJCQkJJ3ZhX2xpc3Qgd2NoYXJfdCB3Y3RyYW5zX3Qgd2N0eXBlX3Qgd2ludF90 +IHNpZ25lZCc7CgoJCXZhciBrZXl3b3JkcyA9CSdicmVhayBjYXNlIGNhdGNoIGNs +YXNzIGNvbnN0IF9fZmluYWxseSBfX2V4Y2VwdGlvbiBfX3RyeSAnICsKCQkJCQkJ +J2NvbnN0X2Nhc3QgY29udGludWUgcHJpdmF0ZSBwdWJsaWMgcHJvdGVjdGVkIF9f +ZGVjbHNwZWMgJyArCgkJCQkJCSdkZWZhdWx0IGRlbGV0ZSBkZXByZWNhdGVkIGRs +bGV4cG9ydCBkbGxpbXBvcnQgZG8gZHluYW1pY19jYXN0ICcgKwoJCQkJCQknZWxz +ZSBlbnVtIGV4cGxpY2l0IGV4dGVybiBpZiBmb3IgZnJpZW5kIGdvdG8gaW5saW5l +ICcgKwoJCQkJCQknbXV0YWJsZSBuYWtlZCBuYW1lc3BhY2UgbmV3IG5vaW5saW5l +IG5vcmV0dXJuIG5vdGhyb3cgJyArCgkJCQkJCSdyZWdpc3RlciByZWludGVycHJl +dF9jYXN0IHJldHVybiBzZWxlY3RhbnkgJyArCgkJCQkJCSdzaXplb2Ygc3RhdGlj +IHN0YXRpY19jYXN0IHN0cnVjdCBzd2l0Y2ggdGVtcGxhdGUgdGhpcyAnICsKCQkJ +CQkJJ3RocmVhZCB0aHJvdyB0cnVlIGZhbHNlIHRyeSB0eXBlZGVmIHR5cGVpZCB0 +eXBlbmFtZSB1bmlvbiAnICsKCQkJCQkJJ3VzaW5nIHV1aWQgdmlydHVhbCB2b2lk +IHZvbGF0aWxlIHdoY2FyX3Qgd2hpbGUnOwoJCQkJCQoJCXZhciBmdW5jdGlvbnMg +PQknYXNzZXJ0IGlzYWxudW0gaXNhbHBoYSBpc2NudHJsIGlzZGlnaXQgaXNncmFw +aCBpc2xvd2VyIGlzcHJpbnQnICsKCQkJCQkJJ2lzcHVuY3QgaXNzcGFjZSBpc3Vw +cGVyIGlzeGRpZ2l0IHRvbG93ZXIgdG91cHBlciBlcnJubyBsb2NhbGVjb252ICcg +KwoJCQkJCQknc2V0bG9jYWxlIGFjb3MgYXNpbiBhdGFuIGF0YW4yIGNlaWwgY29z +IGNvc2ggZXhwIGZhYnMgZmxvb3IgZm1vZCAnICsKCQkJCQkJJ2ZyZXhwIGxkZXhw +IGxvZyBsb2cxMCBtb2RmIHBvdyBzaW4gc2luaCBzcXJ0IHRhbiB0YW5oIGptcF9i +dWYgJyArCgkJCQkJCSdsb25nam1wIHNldGptcCByYWlzZSBzaWduYWwgc2lnX2F0 +b21pY190IHZhX2FyZyB2YV9lbmQgdmFfc3RhcnQgJyArCgkJCQkJCSdjbGVhcmVy +ciBmY2xvc2UgZmVvZiBmZXJyb3IgZmZsdXNoIGZnZXRjIGZnZXRwb3MgZmdldHMg +Zm9wZW4gJyArCgkJCQkJCSdmcHJpbnRmIGZwdXRjIGZwdXRzIGZyZWFkIGZyZW9w +ZW4gZnNjYW5mIGZzZWVrIGZzZXRwb3MgZnRlbGwgJyArCgkJCQkJCSdmd3JpdGUg +Z2V0YyBnZXRjaGFyIGdldHMgcGVycm9yIHByaW50ZiBwdXRjIHB1dGNoYXIgcHV0 +cyByZW1vdmUgJyArCgkJCQkJCSdyZW5hbWUgcmV3aW5kIHNjYW5mIHNldGJ1ZiBz +ZXR2YnVmIHNwcmludGYgc3NjYW5mIHRtcGZpbGUgdG1wbmFtICcgKwoJCQkJCQkn +dW5nZXRjIHZmcHJpbnRmIHZwcmludGYgdnNwcmludGYgYWJvcnQgYWJzIGF0ZXhp +dCBhdG9mIGF0b2kgYXRvbCAnICsKCQkJCQkJJ2JzZWFyY2ggY2FsbG9jIGRpdiBl +eGl0IGZyZWUgZ2V0ZW52IGxhYnMgbGRpdiBtYWxsb2MgbWJsZW4gbWJzdG93Y3Mg +JyArCgkJCQkJCSdtYnRvd2MgcXNvcnQgcmFuZCByZWFsbG9jIHNyYW5kIHN0cnRv +ZCBzdHJ0b2wgc3RydG91bCBzeXN0ZW0gJyArCgkJCQkJCSd3Y3N0b21icyB3Y3Rv +bWIgbWVtY2hyIG1lbWNtcCBtZW1jcHkgbWVtbW92ZSBtZW1zZXQgc3RyY2F0IHN0 +cmNociAnICsKCQkJCQkJJ3N0cmNtcCBzdHJjb2xsIHN0cmNweSBzdHJjc3BuIHN0 +cmVycm9yIHN0cmxlbiBzdHJuY2F0IHN0cm5jbXAgJyArCgkJCQkJCSdzdHJuY3B5 +IHN0cnBicmsgc3RycmNociBzdHJzcG4gc3Ryc3RyIHN0cnRvayBzdHJ4ZnJtIGFz +Y3RpbWUgJyArCgkJCQkJCSdjbG9jayBjdGltZSBkaWZmdGltZSBnbXRpbWUgbG9j +YWx0aW1lIG1rdGltZSBzdHJmdGltZSB0aW1lJzsKCgkJdGhpcy5yZWdleExpc3Qg +PSBbCgkJCXsgcmVnZXg6IFN5bnRheEhpZ2hsaWdodGVyLnJlZ2V4TGliLnNpbmds +ZUxpbmVDQ29tbWVudHMsCWNzczogJ2NvbW1lbnRzJyB9LAkJCS8vIG9uZSBsaW5l +IGNvbW1lbnRzCgkJCXsgcmVnZXg6IFN5bnRheEhpZ2hsaWdodGVyLnJlZ2V4TGli +Lm11bHRpTGluZUNDb21tZW50cywJCWNzczogJ2NvbW1lbnRzJyB9LAkJCS8vIG11 +bHRpbGluZSBjb21tZW50cwoJCQl7IHJlZ2V4OiBTeW50YXhIaWdobGlnaHRlci5y +ZWdleExpYi5kb3VibGVRdW90ZWRTdHJpbmcsCQljc3M6ICdzdHJpbmcnIH0sCQkJ +Ly8gc3RyaW5ncwoJCQl7IHJlZ2V4OiBTeW50YXhIaWdobGlnaHRlci5yZWdleExp +Yi5zaW5nbGVRdW90ZWRTdHJpbmcsCQljc3M6ICdzdHJpbmcnIH0sCQkJLy8gc3Ry +aW5ncwoJCQl7IHJlZ2V4OiAvXiAqIy4qL2dtLAkJCQkJCQkJCQljc3M6ICdwcmVw +cm9jZXNzb3InIH0sCgkJCXsgcmVnZXg6IG5ldyBSZWdFeHAodGhpcy5nZXRLZXl3 +b3JkcyhkYXRhdHlwZXMpLCAnZ20nKSwJCWNzczogJ2NvbG9yMSBib2xkJyB9LAoJ +CQl7IHJlZ2V4OiBuZXcgUmVnRXhwKHRoaXMuZ2V0S2V5d29yZHMoZnVuY3Rpb25z +KSwgJ2dtJyksCQljc3M6ICdmdW5jdGlvbnMgYm9sZCcgfSwKCQkJeyByZWdleDog +bmV3IFJlZ0V4cCh0aGlzLmdldEtleXdvcmRzKGtleXdvcmRzKSwgJ2dtJyksCQlj +c3M6ICdrZXl3b3JkIGJvbGQnIH0KCQkJXTsKCX07CgoJQnJ1c2gucHJvdG90eXBl +CT0gbmV3IFN5bnRheEhpZ2hsaWdodGVyLkhpZ2hsaWdodGVyKCk7CglCcnVzaC5h +bGlhc2VzCT0gWydjcHAnLCAnYyddOwoKCVN5bnRheEhpZ2hsaWdodGVyLmJydXNo +ZXMuQ3BwID0gQnJ1c2g7CgoJLy8gQ29tbW9uSlMKCXR5cGVvZihleHBvcnRzKSAh +PSAndW5kZWZpbmVkJyA/IGV4cG9ydHMuQnJ1c2ggPSBCcnVzaCA6IG51bGw7Cn0p +KCk7Cg== + +------------i2L0fMUSDUR5fcpX3sh9hH-- diff --git a/3-iContiniousIntegration/images-presentation/apple-background1.jpg b/3-iContiniousIntegration/images-presentation/apple-background1.jpg new file mode 100755 index 0000000..f87786c Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/apple-background1.jpg differ diff --git a/3-iContiniousIntegration/images-presentation/hudson.png b/3-iContiniousIntegration/images-presentation/hudson.png new file mode 100755 index 0000000..0535292 Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/hudson.png differ diff --git a/3-iContiniousIntegration/images-presentation/logo_universal.jpg b/3-iContiniousIntegration/images-presentation/logo_universal.jpg new file mode 100644 index 0000000..c6747b5 Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/logo_universal.jpg differ diff --git a/3-iContiniousIntegration/images-presentation/logo_universal.png b/3-iContiniousIntegration/images-presentation/logo_universal.png new file mode 100755 index 0000000..20f770b Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/logo_universal.png differ diff --git a/3-iContiniousIntegration/images-presentation/objective-c-logo.jpg b/3-iContiniousIntegration/images-presentation/objective-c-logo.jpg new file mode 100755 index 0000000..e0bfad9 Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/objective-c-logo.jpg differ diff --git a/3-iContiniousIntegration/images-presentation/terminal-logo-small.png b/3-iContiniousIntegration/images-presentation/terminal-logo-small.png new file mode 100755 index 0000000..c3aef53 Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/terminal-logo-small.png differ diff --git a/3-iContiniousIntegration/images-presentation/terminal1.png b/3-iContiniousIntegration/images-presentation/terminal1.png new file mode 100755 index 0000000..4296f61 Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/terminal1.png differ diff --git a/3-iContiniousIntegration/images-presentation/xcodeLogo.png b/3-iContiniousIntegration/images-presentation/xcodeLogo.png new file mode 100755 index 0000000..62e681b Binary files /dev/null and b/3-iContiniousIntegration/images-presentation/xcodeLogo.png differ diff --git a/3-iContiniousIntegration/images/0xFF-HudsonJob1.png b/3-iContiniousIntegration/images/0xFF-HudsonJob1.png new file mode 100755 index 0000000..d8abe53 Binary files /dev/null and b/3-iContiniousIntegration/images/0xFF-HudsonJob1.png differ diff --git a/3-iContiniousIntegration/images/0xFF-HudsonJob2.png b/3-iContiniousIntegration/images/0xFF-HudsonJob2.png new file mode 100755 index 0000000..f424410 Binary files /dev/null and b/3-iContiniousIntegration/images/0xFF-HudsonJob2.png differ diff --git a/3-iContiniousIntegration/images/1-CreateMainProject.png b/3-iContiniousIntegration/images/1-CreateMainProject.png new file mode 100755 index 0000000..a615705 Binary files /dev/null and b/3-iContiniousIntegration/images/1-CreateMainProject.png differ diff --git a/3-iContiniousIntegration/images/10-AddDependence.png b/3-iContiniousIntegration/images/10-AddDependence.png new file mode 100755 index 0000000..21460dd Binary files /dev/null and b/3-iContiniousIntegration/images/10-AddDependence.png differ diff --git a/3-iContiniousIntegration/images/11-AddBuildDependence.png b/3-iContiniousIntegration/images/11-AddBuildDependence.png new file mode 100755 index 0000000..4239aeb Binary files /dev/null and b/3-iContiniousIntegration/images/11-AddBuildDependence.png differ diff --git a/3-iContiniousIntegration/images/11-ProjectDirectoriesStructure.png b/3-iContiniousIntegration/images/11-ProjectDirectoriesStructure.png new file mode 100644 index 0000000..f5d731f Binary files /dev/null and b/3-iContiniousIntegration/images/11-ProjectDirectoriesStructure.png differ diff --git a/3-iContiniousIntegration/images/12-UnitTestProjectFiles.png b/3-iContiniousIntegration/images/12-UnitTestProjectFiles.png new file mode 100644 index 0000000..b95c687 Binary files /dev/null and b/3-iContiniousIntegration/images/12-UnitTestProjectFiles.png differ diff --git a/3-iContiniousIntegration/images/13-NoMainNibFile.png b/3-iContiniousIntegration/images/13-NoMainNibFile.png new file mode 100644 index 0000000..fe3e6b1 Binary files /dev/null and b/3-iContiniousIntegration/images/13-NoMainNibFile.png differ diff --git a/3-iContiniousIntegration/images/14-CreateStaticLibrary1.png b/3-iContiniousIntegration/images/14-CreateStaticLibrary1.png new file mode 100644 index 0000000..3eb8a39 Binary files /dev/null and b/3-iContiniousIntegration/images/14-CreateStaticLibrary1.png differ diff --git a/3-iContiniousIntegration/images/14-CreateStaticLibrary2.png b/3-iContiniousIntegration/images/14-CreateStaticLibrary2.png new file mode 100644 index 0000000..5e738cf Binary files /dev/null and b/3-iContiniousIntegration/images/14-CreateStaticLibrary2.png differ diff --git a/3-iContiniousIntegration/images/14-CreateStaticLibrary3.png b/3-iContiniousIntegration/images/14-CreateStaticLibrary3.png new file mode 100644 index 0000000..c163405 Binary files /dev/null and b/3-iContiniousIntegration/images/14-CreateStaticLibrary3.png differ diff --git a/3-iContiniousIntegration/images/15-FixHeaderSearchPath.png b/3-iContiniousIntegration/images/15-FixHeaderSearchPath.png new file mode 100644 index 0000000..06f9d0e Binary files /dev/null and b/3-iContiniousIntegration/images/15-FixHeaderSearchPath.png differ diff --git a/3-iContiniousIntegration/images/16-UniversalLibraryDependencies.png b/3-iContiniousIntegration/images/16-UniversalLibraryDependencies.png new file mode 100644 index 0000000..f7c4664 Binary files /dev/null and b/3-iContiniousIntegration/images/16-UniversalLibraryDependencies.png differ diff --git a/3-iContiniousIntegration/images/17-EditLinkerFlags.png b/3-iContiniousIntegration/images/17-EditLinkerFlags.png new file mode 100644 index 0000000..5395837 Binary files /dev/null and b/3-iContiniousIntegration/images/17-EditLinkerFlags.png differ diff --git a/3-iContiniousIntegration/images/18-DeploymentResults.png b/3-iContiniousIntegration/images/18-DeploymentResults.png new file mode 100644 index 0000000..f0938d4 Binary files /dev/null and b/3-iContiniousIntegration/images/18-DeploymentResults.png differ diff --git a/3-iContiniousIntegration/images/2-NoLocalGit.png b/3-iContiniousIntegration/images/2-NoLocalGit.png new file mode 100755 index 0000000..d94182f Binary files /dev/null and b/3-iContiniousIntegration/images/2-NoLocalGit.png differ diff --git a/3-iContiniousIntegration/images/3.1-DeploymentTarget.png b/3-iContiniousIntegration/images/3.1-DeploymentTarget.png new file mode 100755 index 0000000..03b2e32 Binary files /dev/null and b/3-iContiniousIntegration/images/3.1-DeploymentTarget.png differ diff --git a/3-iContiniousIntegration/images/3.2-DeploymentTarget.png b/3-iContiniousIntegration/images/3.2-DeploymentTarget.png new file mode 100755 index 0000000..f5b976c Binary files /dev/null and b/3-iContiniousIntegration/images/3.2-DeploymentTarget.png differ diff --git a/3-iContiniousIntegration/images/4-CompilerSelection.png b/3-iContiniousIntegration/images/4-CompilerSelection.png new file mode 100755 index 0000000..3ca11c6 Binary files /dev/null and b/3-iContiniousIntegration/images/4-CompilerSelection.png differ diff --git a/3-iContiniousIntegration/images/5-AddRunScriptStep.png b/3-iContiniousIntegration/images/5-AddRunScriptStep.png new file mode 100755 index 0000000..f18e9ca Binary files /dev/null and b/3-iContiniousIntegration/images/5-AddRunScriptStep.png differ diff --git a/3-iContiniousIntegration/images/6-EditRunScript.png b/3-iContiniousIntegration/images/6-EditRunScript.png new file mode 100755 index 0000000..d4e6eb5 Binary files /dev/null and b/3-iContiniousIntegration/images/6-EditRunScript.png differ diff --git a/3-iContiniousIntegration/images/7.1-AddSubProject.png b/3-iContiniousIntegration/images/7.1-AddSubProject.png new file mode 100755 index 0000000..08a00c0 Binary files /dev/null and b/3-iContiniousIntegration/images/7.1-AddSubProject.png differ diff --git a/3-iContiniousIntegration/images/7.2-AddSubProject.png b/3-iContiniousIntegration/images/7.2-AddSubProject.png new file mode 100755 index 0000000..44d02d6 Binary files /dev/null and b/3-iContiniousIntegration/images/7.2-AddSubProject.png differ diff --git a/3-iContiniousIntegration/images/8-AddFramework.png b/3-iContiniousIntegration/images/8-AddFramework.png new file mode 100755 index 0000000..395e658 Binary files /dev/null and b/3-iContiniousIntegration/images/8-AddFramework.png differ diff --git a/3-iContiniousIntegration/images/9-DumpLibraryPath.png b/3-iContiniousIntegration/images/9-DumpLibraryPath.png new file mode 100755 index 0000000..daa88f2 Binary files /dev/null and b/3-iContiniousIntegration/images/9-DumpLibraryPath.png differ diff --git a/3-iContiniousIntegration/images/Screen shot 2011-06-04 at 8.57.03 PM.png b/3-iContiniousIntegration/images/Screen shot 2011-06-04 at 8.57.03 PM.png new file mode 100755 index 0000000..1449f51 Binary files /dev/null and b/3-iContiniousIntegration/images/Screen shot 2011-06-04 at 8.57.03 PM.png differ diff --git a/3-iContiniousIntegration/images/Screen shot 2011-06-04 at 8.57.21 PM.png b/3-iContiniousIntegration/images/Screen shot 2011-06-04 at 8.57.21 PM.png new file mode 100755 index 0000000..7804ec0 Binary files /dev/null and b/3-iContiniousIntegration/images/Screen shot 2011-06-04 at 8.57.21 PM.png differ diff --git a/3-iContiniousIntegration/images/Screen shot 2011-06-04 at 8.57.39 PM.png b/3-iContiniousIntegration/images/Screen shot 2011-06-04 at 8.57.39 PM.png new file mode 100755 index 0000000..f1ff7f3 Binary files /dev/null and b/3-iContiniousIntegration/images/Screen shot 2011-06-04 at 8.57.39 PM.png differ diff --git a/3-iContiniousIntegration/images/Screen shot 2011-06-04 at 8.57.55 PM.png b/3-iContiniousIntegration/images/Screen shot 2011-06-04 at 8.57.55 PM.png new file mode 100755 index 0000000..dab4e8e Binary files /dev/null and b/3-iContiniousIntegration/images/Screen shot 2011-06-04 at 8.57.55 PM.png differ diff --git a/3-iContiniousIntegration/images/Screen shot 2011-06-04 at 8.58.12 PM.png b/3-iContiniousIntegration/images/Screen shot 2011-06-04 at 8.58.12 PM.png new file mode 100755 index 0000000..e074cf3 Binary files /dev/null and b/3-iContiniousIntegration/images/Screen shot 2011-06-04 at 8.58.12 PM.png differ diff --git a/3-iContiniousIntegration/speech.odt b/3-iContiniousIntegration/speech.odt new file mode 100644 index 0000000..02ba6ee Binary files /dev/null and b/3-iContiniousIntegration/speech.odt differ diff --git a/3-iContiniousIntegration/speech.pdf b/3-iContiniousIntegration/speech.pdf new file mode 100644 index 0000000..c9a2cb3 Binary files /dev/null and b/3-iContiniousIntegration/speech.pdf differ diff --git a/3-iContiniousIntegration/speech.txt b/3-iContiniousIntegration/speech.txt new file mode 100644 index 0000000..575ad80 --- /dev/null +++ b/3-iContiniousIntegration/speech.txt @@ -0,0 +1,324 @@ +Slide1 + +Всем привет. +Меня зовут Александр Додатко. Я работаю в компании EPAM system. + +Сейчас я расскажу вам о нашем опыте Continuous integration для iOS приложений. +------------------------------------- + + + + + +Slide2 + +Речь пойдет о работе с проектами в xCode, сборке из командной строки (без запуска GUI), создании библиотек для iOS (как обычных, так и "Universal binary" ), а также поставке версий для тестирования (deployment). +------------------------------------- + + + + +Slide3 + +Также мы рассмотрим unit-testing с помощью GHUnit и настройку hudson build server. +Запуск приложений без запуска xCode будет полезен вашим тестировщикам (QA). +------------------------------------- + + + + + +Slide4 +Изначально build servers были нацелены на сборку Java и .NET проектов. Поддержка сборок для C и C++ выполнена гораздо хуже. +Однакоко каждый из них может и исполняет свои основные функции : + * получение исходных кодов из SVN + * сборка проекта. (для c, c++ это запуск скрипта или makefile) + * публикация результатов сборки (продуктов и unit tests) +------------------------------------- + + + + + +Slide5 + +Теперь разберемся, что же должен делать build script. +В нашем случае он + * собирает основной проект + * собирает и запускает unit tests + * подготавливает собранные продукты и test reports к обработке с помощью build server. + * выкладывает сборку в директорию с общим доступом. ( наша команда использует dropbox. В зависимости от своих нужд вы можете использовать ftp или другие средства ) +------------------------------------- + + + + + +Slide6 + +Для начала давайте вспомним, каким образом ОБЫЧНО осуществляется повторное использование кода в iOS проектах. +На примере TouchXML мы видим что исходники просто копируются в основной проект. +------------------------------------- + + + + + +Slide7 + +Так делать не следует. Надеюсь, всем понятно почему. +В особенности если код будет использоваться в нескольких проектах. +------------------------------------- + + + + + +Slide8 + +Вместо копирования следует использовать статические библиотеки, выделяя их в отдельные *.xcodeproj +------------------------------------- + + + + + +Slide9 +Slide10 + +Для этого мы добавляем library sub-project. +------------------------------------- + + + + + +Slide11 + +После чего следует добавить зависимости компоновщика и заголовков интерфейсов. +(linker and header dependencies) +------------------------------------- + + + + + + +Slide12 + +Вот и дошла очередь до Universal binaries. А что это? +Это специальным образом собранная библиотека, которая содержит символы как для device, так и для simulator. +Она используется для предоставления библиотеки сторонним разработчикам, не открывая своего драгоценного кода. +В сегодняшнем докладе о техниках защиты от дизассемблирования речь идти не будет. + +В MacOS для этих целей также используют frameworks и SDK. Однако Universal binary является их важной составляющей. + +Использовать Universal binary так же просто, как и обычные static libraries в вашей любимой Mac OS X/Linux/Windows. +А вот собрать ее куда сложнее. +------------------------------------- + + + + + +Slide13 + +Для этого нужно собрать отдельные версии для device и simulator. А затем специальным образом объединить их. +Вот она - эта "уличная магия". +------------------------------------- + + + + + + + +Slide14 + +Теперь поговорим о процедуре deployment под iOS. +Процедура "выкладывания в App Store" хорошо изучена и описана в документации Apple. +Поэтому мы поговорим о поставке версий для тестирования. +------------------------------------- + + + + + + + +Slide15 + +Особенностью desktop applications является тот факт что сборка и исполнение производится на одной и той же системе. +Поэтому организовать Continuous Integration сравнительно просто. Для таких приложений существует множество CI tools и литературы, описывающей процесс сборки. +------------------------------------- + + + + + +Slide16 + +Для iOS ситуация немного другая. Программы исполняются либо на реальном устройстве с iOS, либо на симуляторе. +Ситуация дополнительно усложняется системой provisioning profiles, которую навязывает apple. + +Посему автоматический запуск программ, сбор результатов тестов ( *.xml JUnit reports ) будет несколько труднее чем "написать имя программы в shell script" и "открыть файл на чтение". +------------------------------------- + + + + + +Slide17 + +Если с этим всем не разобраться, то вашим QA прийдется доставать исходные коды из системы контроля версий (SVN, GIT, mercurial), КОМПИЛИРОВАТЬ их, настраивать у себя provisioning profiles. +Наши QA одно время этим занимались. + +Это неправильно. CI script должен собирать *.ipa файл, который может быть установлен на устройство с помощью iTunes. +*.ipa файл содержит в себе приложение, собранное для iPhone, iPod или iPad. А также provisioning profiles, необходимые для установки. +В принципе, profiles и application можно устанавливать на устройства отдельно. Однако с моей точки зрения, *.ipa файлы более удобны. +------------------------------------- + + + + + +Slide18 + +Итак, приступим к сборке. Данный слайд иллюстрирует взаимосвязь между xCode command line interface и GUI. +Screenshot был взят из xCode3. Надеюсь, соответствие с xCode4 GUI вы сможете найти самостоятельно. (к моему сожалению, эти настройки разбросали по разным частям новой IDE). +------------------------------------- + + + + + +Slide19 + +После успешной сборки проекта соберем *.ipa файл для наших любимых QA и клиентов. +Для этого нам нужно 3 вещи : + * собранный *.app для iOS устройства + * DeveloperName -- строка с информацией о developer profile. Пример -- в нижней части слайда. + * Provisioning Profile -- это файл. Да-да. Тот самый файл который вы импортировали в свой Organizer. +------------------------------------- + + + + + +Slide20 + +Следующая тема -- модульное тестирование. Мы рассмотрим + * вопрос выбора testing framework. + * технику автоматического запуска тестов на iOS simulator. + * получение результатов тестирования по завершении работы iOS simulator. +------------------------------------- + + + + + +Slide21 + +Выбор unit test framework очень важен. Мы рассмотрели трех основных "игроков" для ObjectiveC. +SenTestingKit, GoogleToolbox, GHUnit. + +SenTestingKit разрабатывается в Apple и поставляется вместе с SDK. +Он всем хорош кроме 2х вещей : + 1. Отсутствие Debug. (с помощью некоторых ухищрений этого можно добиться, пожертвовав корректной работой Assert) + 2. Отстутствие работы с Bundles. (для нас это важно, так как наши приложения активно взаимодействуют с web services) +Если честно, мне немного непонятен подход Apple к данному вопросу. + +Google toolbox пытается быть совместимым с ним. Поэтому страдает от тех же проблем. +Хотя он содержит некоторые полезные функции. Такие как возможность сравнения screenshots приложения на предмет соответствия спецификации (при условии что она у вас есть). + +GHUnit же избрал иной путь. Unit tests оформляются в виде отдельного iOS application. При желании его можно даже отправить в App Store ;) +Таким образом, эти тесты избавлены от описанных недостатков. +Однако не все так радужно. Их гораздо труднее использовать в CI из-за отсутствия интеграции с xCode и их "Application origin". + + +Учитывая данную сравнительную таблицу, мы выбрали для себя GHUnit. Поскольку мы не готовы жертвовать возможностями отладки тестов и работы с bundles. +------------------------------------- + + + + + +Slide22 + +Но и это еще не все. Для использования в рамках CI приложение нужно правильно сконфигурировать. +Эта конфигурация отличается от интерактивной, используемой при development. + +На слайде показано как сделать необходимые вещи : + * GHUNIT_AUTORUN -- запускать без повеления пользователя. + * WRITE_JUNIT_XML -- получить результаты теста в формате *.xml + * GHUNIT_AUTOEXIT -- завершиться после выполнения (и не мешать дальнейшей работе сценария сборки) + +(** запустить проект и показать действие флагов. **) +------------------------------------- + + + + + +Slide23 + +Здесь показана команда запуска теста. Данная утилита не входит в состав SDK. Однако вы с легкостью сможете найти ее на github и собрать самостоятельно. +Ее интерфейс до безобразия прост. +Однако следует быть осторожным с передачей пути к приложению. Программа отказывается работать с относительными путями и выдает не вполне внятные сообщения об ошибках. +------------------------------------- + + + + + +Slide24 + +Сбор результатов тестов также достаточно прост. GHUnit записывает их во временную папку. Вот в эту (** показать **). +Теперь осталось только переместиться в нее и скопировать тесты в нужную папку. +------------------------------------- + + + + + +Slide25 + +Еще один неочевидный момент -- необходимость "убить" процесс симулятора. Если этого не делать, то следующий тест может вообще не запуститься (это bug/feature apple SDK). +Я советую делать это перед и после запуска очередного UnitTestXXX.app +------------------------------------- + + + + + + + + + +Slide26 + +В своих проектах мы используем следующую структуру директорий. + app - для продуктов, поставляемых в App Store + lib, lib-third-party - для библиотек. Своих и сторонних соответственно. + frameworks - для сторонних *.framework. Также в этот каталог выполняется deployment своих библиотек, оформленных как Universal Binary или framework + deployment - здесь build server будет искать собранные версии продуктов. + tests - для Unit test всех видов. + demo - для пробных проектов-прототипов, не поставляемых в App Store. + tools - для программ-утилит Mac OS X, используемых при сборке. + + [остальное и так ясно] +------------------------------------- + + + + + +Slide27 + +Спасибо за внимание. +Рабочий пример проекта и сценариев сборки можно найти на нашей странице github. Равно как и эту статью. +Те, кто не уснул, могут задать свои вопросы. +------------------------------------- + + + diff --git a/4-JffArticles/0-BlocksIosBelow4/BlocksBelow4.mht b/4-JffArticles/0-BlocksIosBelow4/BlocksBelow4.mht new file mode 100644 index 0000000..142e388 --- /dev/null +++ b/4-JffArticles/0-BlocksIosBelow4/BlocksBelow4.mht @@ -0,0 +1,16195 @@ +Content-Type: multipart/related; start=; boundary=----------mfBaGQEBbcbD9fsootn3NY +Content-Location: http://habrahabr.ru/blogs/macosxdev/119472/ +Subject: =?utf-8?Q?=D0=98=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D1=83=D0=B5=D0=BC=20=D0=B1=D0=BB=D0=BE=D0=BA=D0=B8=20=D0=B2=20IOS=20<=204.0=20/=20=D0=A0=D0=B0=D0=B7=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B0=20=D0=BF=D0=BE=D0=B4=20Apple=20iOS=20/=20=D0=A5=D0=B0=D0=B1=D1=80=D0=B0=D1=85=D0=B0=D0=B1=D1=80?= +MIME-Version: 1.0 + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline; filename=default.htm +Content-Type: text/html; charset=utf-8; name=default.htm +Content-ID: +Content-Location: http://habrahabr.ru/blogs/macosxdev/119472/ +Content-Transfer-Encoding: 8bit + + + + + + + + Используем блоки в IOS < 4.0 / Разработка под Apple iOS / Хабрахабр + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
войти зарегистрироваться
+
+ + +
+ + +
+ + + +
    + + + + +
  • Посты
  • + + + + + + + + +
  • Q&A
  • + + + + + +
  • Блоги
  • + + + + + +
  • Люди
  • + + + + + +
  • Компании
  • + + + + + + +
  • + + + + +
  • +
  • + + + +
  • + + + +
+ +
+ + +
+
+ + +
+ + + +
+
+

+ Разработка под Apple iOS + + +

+
+
индекс
+
154,10
+
+
+
+ + + + + + + + + + + + + + + +
+ +

+ + + + + + + + + + + Используем блоки в IOS < 4.0 + + + + + + + +

+ + + +
+ Для тех кто знаком с блоками в Objective-C, но не может пока их использовать в силу необходимости поддержки приложений для ios младше 4.0 версии, либо сторонится патченого компилера PLBlocks, предлагаю рантайм блоков в виде статической либы libESBlocksRuntime.a
+
+Сам рантайм был выдернут с исходников проекта compiler-rt, и завернут в блоковые классы ESBlock. Добавлены недостающие методы -[ NSArray enumerateObjectsUsingBlock: ] и т.д. также UIView блоковые екстеншены.
+
+Для подключения в проект достаточно скачать исходники проекта, и добавить его в dependencies например так.
+
+Вопросы и предложения пишите в личку — с радостью отвечу каждому заинтересовавшемуся.
+
+Здесь можно почитать о терии блоков на хабре. + + + + + + +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+

комментарии (14)

+ +
    + +
  • + +
    +
    + + +
    + +
    +
    + круто! ") +
    + +
    + +
    + + +
    + + + + + + + + +
  • + +
  • + +
    +
    + + +
    + +
    +
    + Хотелось бы статью по блокам. Как они появились, что они дают, как использовать ESBlock в <4.0 и т.п. +
    + +
    + +
    + + +
    + + + + + + + +
      + +
    • + +
      +
      + + +
      + +
      +
      + Если Вы считаете что такая статья нужна — могу написать, просто мне казалось таких достаточно. Использовать в ios < 4.0 так же как и в ios >= 4.0, только нельзя вызывать сишные Block_copy и Block_release, вместо них [ block_ copy ] и [ block_ release ]. +
      + +
      + +
      + + +
      + + + + + + + +
        + +
      • + +
        +
        + + +
        + +
        +
        + на хабре не было :) а так же описание своего опыта не повредит :) +
        + +
        + +
        + + +
        + + + + + + + +
          + +
        • + +
          +
          + + +
          + +
          +
          + Хорошо, оформим :) +
          + +
          + +
          + + +
          + + + + + + + + +
        • + +
        • + +
          +
          + + +
          + +
          +
          + habrahabr.ru/blogs/macosxdev/66632/ +
          + +
          + +
          + + +
          + + + + + + + +
            + +
          • + +
            +
            + + +
            + +
            +
            + там про snow leopard :)
            +а если серьёзно, то я бегло смотрел видео с wwdc`10, и там показывали как блоки используются дл анимации и т.п.
            +
            +т.е. хотелось бы по русски прочитать о том, как и где и в каких случаях используются блоки именно в iOS +
            + +
            + +
            + + +
            + + + + + + + + +
          • + +
          • + +
            +
            + + +
            + +
            +
            + testblock = ^(char *s) { printf("String is %s\n", s); };
            +testblock("TEST!");

            +
            +почему это не сделать в виде функции? это из примера по ссылке.
            +
            +тут — landonf.bikemonkey.org/code/iphone/Using_Blocks_1.20090704.html — для примера UIAlertView
            +
            +Вопрос — для чего? ведь и селекторами можно было всё тоже самое сделать +
            + +
            + +
            + + +
            + + + + + + + +
              + +
            • + +
              +
              + + +
              + +
              +
              + Об этом в следующей статье постараюсь доступно рассказать. +
              + +
              + +
              + + +
              + + + + + + + + +
            • + +
            + + + +
          • + +
          + + + +
        • + +
        + + + +
      • + +
      + + + +
    • + +
    + + + +
  • + +
  • + +
    +
    + + +
    + +
    +
    + поправить теги не мешало бы. +
    + +
    + +
    + + +
    + + + + + + + +
      + +
    • + +
      +
      + + +
      + +
      +
      + спасибо +
      + +
      + +
      + + +
      + + + + + + + + +
    • + +
    + + + +
  • + +
  • + +
    +
    + + +
    + +
    +
    + Афигеть. Спасибо! Вернуть поддержку 3.x в pushme.to, что ли? +
    + +
    + +
    + + +
    + + + + + + + + +
  • + +
  • + +
    +
    + + +
    + +
    +
    + Гм. Я так понимаю в случае поключения данной либы, она перекроет стандартную реализацию методов в UIView и т.п?
    +То есть. по сути. если мы поддерживаем девайсы с 3.0+ и вплоть до 4.0+ то для данной либы нужно отписать еще кучу проверок, чтобы ESBlock'и выполнялись исключительно на девайсах 4.0?
    +
    +Я к чему веду, в случае запуска на 4.0 и выше не будет конфликтов с нативной реализацией блоков? +
    + +
    + +
    + + +
    + + + + + + + +
      + +
    • + +
      +
      + + +
      + +
      +
      + Не будет, насчет UIView например, недостающие методы добавлены в категории UIView, и проверено, что в 4-ке например все равно вызываются нативные методы вместо переопределенных (самого такое поведение удивило, но обрадовало). В NSArray например недостающие методы для работы с блоками добавляются только в случае если их нет. В самом рантайме блоков добавленные метод Block_release и Block_retain переименованы, что бы избежать конфликтов. +
      + +
      + +
      + + +
      + + + + + + + + +
    • + +
    + + + +
  • + +
+ + + + + + + +
Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.
+ +
+ + + + + + + + + + + + + +
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + + + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-page-nav-left.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhCgAKALMAAPf49/P08/j4+PDy8Ovt6+3v7f7+/vHz8fj5+Ozu7P///+rs +6gAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAKAAoAAAQeUElpwEhrKoCXn4EnZko4 +fsgpKp0qqOIBe8W8EHYEADs= + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-page-nav-current-left.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhCgAKAMQAAOPt9tbk8dbk8e3z+O3z+P7+/uHr9P3+/t/q9Njk8v7+/u70 ++tjm8u/0+tXk8f///9Pi8IqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqK +ioqKioqKioqKioqKiiwAAAAACgAKAAAFI+AjiseABND4EALkpo8CvK840+7T4G+R +8K4F0GUYQhhGhzEEADs= + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-page-nav-right.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhCgAKAKIAAPLz8vDy8P7+/vf39+zu7P///+rs6gAAACH5BAAAAAAALAAA +AAAKAAoAAAMaaBQj9c9INWCZE0CcI5fVJxGCCJpGgBKokQAAOw== + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-page-nav-current-right.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhCgAKAPcAAOPt9tbk8dbk8e3z+O3z+P7+/uHr9P3+/t/q9Njk8v7+/u70 ++tjm8u/0+tXk8f///9Pi8IqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqK +ioqKioqKioqKioqKigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAKAAoAAAgyAB0wMLBAwYODByEohJCg +AcIHCxcCMAgxokIACS0qJFBRo4ADGhcSCKkQAUkIAk5CCAgAOw== + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-page-subnav-corner-bottom-left.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhCgAKAPcAAOPt9tbk8dbk8e3z+O3z+P7+/uHr9P3+/t/q9Njk8v7+/u70 ++tjm8u/0+tXk8f///9Pi8IqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqK +ioqKioqKioqKioqKigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAKAAoAAAgtACEIHEhQAMGDCA4SJKBw +4AGDDR8wjPgAAEUFFg8+2PigQQKCHDcqWGCAgYOAADs= + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-page-subnav-corner-bottom-right.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhCgAKAPcAAOPt9tbk8dbk8e3z+O3z+P7+/uHr9P3+/t/q9Njk8v7+/u70 ++tjm8u/0+tXk8f///9Pi8IqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqK +ioqKioqKioqKioqKigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAKAAoAAAgwACEIHDjQAcGDDA4SNKBw +4IKGEBIogNjgQUMADyweBKAgI0EBBDJ6FICAwAGRGQMCADs= + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/png +Content-Location: http://habrahabr.ru/i/icon_asterisk_24.png +Content-Transfer-Encoding: Base64 + +iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2Fy +ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAA +AAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5U +Y3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6 +eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8w +Mi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRw +Oi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpE +ZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRv +YmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv +bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20v +eGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRv +YmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9Inht +cC5paWQ6OUJFNDFFODU1M0NCMTFFMDg4MzdEMjY1MEM4OTlCREEiIHhtcE1NOkRv +Y3VtZW50SUQ9InhtcC5kaWQ6OUJFNDFFODY1M0NCMTFFMDg4MzdEMjY1MEM4OTlC +REEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlp +ZDo5QkU0MUU4MzUzQ0IxMUUwODgzN0QyNjUwQzg5OUJEQSIgc3RSZWY6ZG9jdW1l +bnRJRD0ieG1wLmRpZDo5QkU0MUU4NDUzQ0IxMUUwODgzN0QyNjUwQzg5OUJEQSIv +PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94 +cGFja2V0IGVuZD0iciI/PrQg4+wAAAJaSURBVHjabFNNbxJRFL3zwZuBUEQSgRrQ +0DRCu6D1NxCMstAdG5u0OxduXGjSxJgYjYkL0/gLDKzVjSYijvwGTcF+bAopRiAV +BjIDMwzM1LlTp+GJL7nJeeece++8O+8x8M/6IklPzKl5mxDPdiaTqSBXqVQyhjF5 +yfHchxvZ7PNZP+MCNOljo+D1+mI+rxd6cu8gd+vmCmqfSp/3QxdDqZGmgaaNfooC +2XKL826BydTcCAQCsVQyCZZlgqIqKUn6ev+sDZNKJK4Cy3JwcHgYGw6HG9gTJdYt +4OG5HVnugyzLMB6PIR6Lgd3xGQZi5FBDD3rdvPMC9idVeZ4t1BsN0HUdRFEEv98f +wkCMHGroQe9cAVyiIGyriqp3uz07QYPLi1EnECOHGnqoIb59916zrFNxlhQEAlfi +cfD5vM5+NNLguNm0j2FQf4xlGZ23SfH6eho4jqNEVVVBUZS/M2QglbxG6aZpwrfv +uyJvGGfDmUymlIFh6PuhKCq193h4wFzevjT6brUm0iKxzx6hEn61OnYT+giCIOhU +H0mSont7+/XEUkKcGAb0+wOHDwYvgIcQqB/V9dXVlUQ2m23/9y+0251XhBDx1LKc +83e7XScQI4caeqhBuqBcLqcbjcbdcPiSk3Ry8humU3OAgRg51NBTKpXW5wrYhoeE +CM6wBoOBc+OWl5eeYiBGDjX0tFrtR3MFgsFg0b4w7WqtBq12BxYW/Ef5fP41BmLk +UENPNBp54+adP6ZcLoePY7FQLL5oHjfvrK2lH7iaje/Vaj92wpHwx63NzcezM/gj +wAAc5D2eLLpI7AAAAABJRU5ErkJggg== + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-user2.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhDAAMAOYAANPe5Pz//4KkutDb4szY3/b+/5u5z/3//3KWrfn//8rk8naa +sYGkuszY4Mbg8qG+0dzv9tXg5sTg8t/o7vP8/4iqv9ft9NPe5qfD1Mfc56O/0YKl +u+Lr8M3Z4JCwxuj2/Of0+eDz9+rw9Z68z8/n8sHe8sbT3Ju6zuDv96nE1Onw9Nbh +6cvX39Hq89Hq8u77/srW3tbh54Kku8ba56TD1u37/vL8/vL8/9ft9ebu8+Ps8bzM +1Ymsw7XR4Nnj6Yanvsnj8qrI2Or2/NTf5tvl68vY3+r3/HqdtNji6OXt8eDz+dLc +477c7bDO3t7n7d7v9s3Z4dbs9N/y98Pd6PX+/8/b4f7//+Hp7tDo8vv//+fu84Gj +unKWro6uxHqctOfu9P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAMAAwAAAeEgCJfg4RfWlo5KlpgjI2O +OklWBwcBAVmXCQlXHAUFVBkGBjMUNzZOEy81IF2sXUZCH0QrDyhPGzICAkohUj4X +HhoQKQsLGDgWUTFIJxUjUy0uWNIkQxE9W9gMDD9BCgpLAEBNXl5H5F40DlUDEkxc +71wICDwlDQBQHQ0EBEUsJjswBgQCADs= + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/png +Content-Location: http://habrahabr.ru/i/icon_asterisk_16.png +Content-Transfer-Encoding: Base64 + +iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAGXRFWHRTb2Z0d2Fy +ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAA +AAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5U +Y3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6 +eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8w +Mi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRw +Oi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpE +ZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRv +YmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv +bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20v +eGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRv +YmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9Inht +cC5paWQ6OUJFNDFFODE1M0NCMTFFMDg4MzdEMjY1MEM4OTlCREEiIHhtcE1NOkRv +Y3VtZW50SUQ9InhtcC5kaWQ6OUJFNDFFODI1M0NCMTFFMDg4MzdEMjY1MEM4OTlC +REEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlp +ZDo5QkU0MUU3RjUzQ0IxMUUwODgzN0QyNjUwQzg5OUJEQSIgc3RSZWY6ZG9jdW1l +bnRJRD0ieG1wLmRpZDo5QkU0MUU4MDUzQ0IxMUUwODgzN0QyNjUwQzg5OUJEQSIv +PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94 +cGFja2V0IGVuZD0iciI/Pgl861QAAAHoSURBVHjaLJFBb9MwGIY/x3bStIEmXUFs +tOk4sAOCA2ckfgASEkiIG2f+AkxwA1TxDzhxg8uk9oDEgf0CLggh7TA0RjcgJcua +hCRtVccxnwOWLNmf38fv+9lk98Mu4OBlJa8RII8IIUvcP4R/45VSqqFADZlBv+Be +MBRAKeV1xs1R/2JvI0liiOP4nVZ7nvfAdT04/vnjhhTiLqP0I1uuVsAYywlA0mza +G7ZtwSyOhxpYX78AhBigz3CR19qiKIBzcw+Ntg++Hbz2+763tta5pIGylHB0fBhn +WbatFOwJgQDWn+V5YXNOnTBcKYTh/Llu3UAwnUIYnqiqqm4JIW9aFl+Q0Wi82twc +cCkVAMGJVxmGUQMoxBoGUgQoJfD9cCLYfD6HKIqgFBJ0WMY5cEZrQGCkUggEdJ3C +fDEHlqTpy5Mosp0zjiNLec/z3A797yDRYRYnM86MnSwrcsuyFqzVaj3RAs75HSHE +fQMjTCZHNeD7fWjZtmFy/p5RNpYVxnXbZwGf80qa/nmBidwgmIKUcqJnEAS6BTdO +0iFeeLVp24B/QbFP5WA+FP8CdIGtrcuPtcP+/tc3p6czaLfbbrfbaeF/AdMvgtAn +0+S3semnvV5v2Wg0xhoYDPy3we/Q5iZ/juLPGvgrwAAFU9Nnla+h0wAAAABJRU5E +rkJggg== + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/png +Content-Location: http://habrahabr.ru/i/bg-folding-dot-light.png +Content-Transfer-Encoding: Base64 + +iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAIAAADKYVtkAAAAGXRFWHRTb2Z0d2Fy +ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFFJREFUeNpi/P//PwMDw88/f9lZmBlI +BCxAvPfa46tPX2tLizpryZKkmQlo59UnrwW5OYDk15+/SdMMdK22rOj7Lz+AJDc7 +K0maGSnxM0CAAQBHCiEG+qfxeAAAAABJRU5ErkJggg== + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/comments/bar/refresh.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhHAA6AOYAAN7yzV+1GajqcajfemC1GkF8E37GRHrDP0t8JG6JWpGWjT17 +DJHZVnaMZYSSeo7XUnS8OoPORen522GvIur63OT21sTfsIuUhTl1CXTEMo+VikmC +HJrgYZjeXpbdXJ3iZEZ6HmO1IeL30Wm8JVSqDpXcW0WFE2qHUpPbWZaYk+f42YnT +TJSXkYKQdnKKX6TnbKDlaarKj1itFFqBO1eMLW7ALEaAGZiZl5/kZ1qxE1+DQzt3 +DDx2DoCPc4TQRmS4H0R5GZzhY32PcGWFTKPnbHrIOn7MP4OtYUuZDLfdmXyObj6B +CE6SF3G3OE+GJJDOXYW+V2iuMN/1zlCcE0B3FT53ETh3B1umIIvOVa/QlGe6JGuz +L4/FYtDnvZXUYHjHN2uIVLDTk7fUn7PaklR/MsrpsUyKG+P11Njtxsfgs+X318/p +u4fBV4rBW2iZQY3LWqDDhHekU12RNFqPMFihHX7LPmSWPIXOSW+7Mm2gRYHIR7nW +orzYpr7aqDd0B5mZmSH5BAAAAAAALAAAAAAcADoAAAf/gH+Cg4SFhoeIiYqLjI2O +j5CRghoOF40JIH6am5o6Ghs0TiAgJwqICjZpFWoqKhIUsH5/Fxt5YXtHBSeICQsG +JR0fMC8CFLKzvRN4XHNDiC4LeigdQThEEseCLnIQORM2LYcNJncP09XYhTxjATlT +M4cIED4rDwweHCp+NzeDIH0jAsigYqiFmSJGItRjUEKNHwwYeggCYuHADwLZBs24 +kqFInQhRIDCo4KdAjB1CGtAAYGBECB6GgISokeFLG4hNzpSUAmUHBjFlMtSYgMAQ +hh8jamCx00AIhpMFpDBgAweAlyIZ6OgolMIKgR9akmDo1wNiARElGAwYEMFIERMO +/wxVkRFASxeYgm6kWCCCgwcGD1b42ELm0AwkOX6gKcCCkB81OIJ0QPEgQgElhxws +IJFjjZsEjiUQiTzZwAIXiIYsITGGTwEwpv74oSDgBYwPHUq8sQH60AkrTLJYiFPA +1GwBtW9zKPFkgwZELBIgAALKhgIdnDiB6L2IUmxJ4MOLH0++vPnz6NOrP0/JEiNM +2Td52jDHCRBS3wsp2NAFln//slzgRBxppJHLLockUMAASSRRxoNlUICBIBcoyAWD +djhzCDQMCpCEABFOOIgLdozxgRdOhGNIA2aACKKDxqhTxlpQwGMIAl4IMIaLSRjD +jz9pDPDBE1UURMMAO35YRtwxGPgk0R9AoDHGWhkJMgMUa+34hBchFpAFSipJsJYX +eBEChBcDIBcDDzw8YUwBFMDhUx8ijFlUIRisxWAeDSjxEw9wThkDBUmsFcdWhKSw +wwtrobFACn+UhQGcSYzxoI4C0KAiIVV4wSgAZeq1AKEfNiiAF4UZMkMcaErAGCEY +0HbpGGNsgFlBZnjxwRmfwUrBpWUUugRqhwyRaxdp2FCKILMt6ayOGyTQjyEn8OCG +BV3EYd0fsULo7JTOQScddXNYpwMGS6Sb7gILIMCdIt79MW0hP65n7734RhIIADs= + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-tags2.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhDAAPAOYAAP3///j//83r9czp9c7s9Yuqv9Tx9b7b4b/X5vH//+H4+tr0 +9t72+Ov8/bjY4cvo9fX//9Lv9fT///n//8fm9eH1/+L1/7PT4dPx9cbl9cXk9ef6 +/LnY4cnm9b/d4ej7/N/2+Zi2yoyrwI+tw7/X57rZ4bjR4e36/bLR4Zq3yr3b4ZWy +x+T2/9Dt9ejw9ZGwxNTy9eXx+YurwNHt9ej7/5e0x6/J29v1+LfP4Ov8/6rF2Njz +9eL2/9Hu9abD1bXN3snc6vv8/cDe4tfz9bPS4cTi9e37/Yqqv9n09py5zaS/07LM +3KjD1qvG2LXU4eDu9qXA08LY6OX5/87h7cXa58DY55Wzx5+90MTb6ebu9LLS4crf +65OwxLfX4eL5+snn9fv//77W5fH8//L//6C7z/f6/NPv9djl7525zcrn9dbj7dvx +9ez9/+f6/+v7/e///5Gwxdby9dLu9aO/0uD0/42swf///wAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAMAA8AAAetgHZ2QVhVJAgIUWWCgkAx +jHZPVIxnU3YAmBMBW2p2LmEQAWIFKWAJbiZZOCdjCUZQPwEfG2tLNhMNsxIQDQog +DDpNEl6+DDcLSDtDPkxvC0IeHgcHKgYYc0pscTDWZhFyPTNkVzkRJRwcDg5dBAJo +STQtBO0CAwMPDyEhbQNOFxdEtKDoQGGFFSlpvhDMkEGDhiIv4LDgYcFChQp0MtKp +U2PEiDogRYiQUeAIl0AAOw== + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/icos/entry-info-t-l.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhBQAFALMAAPv7+/X19fz8/Ozs7Pn5+enp6fr6+vT09P7+/vDw8Orq6v// +/wAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAFAAUAAAQQcC0UxhIqEVSMPIm0KIAY +AQA7 + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/icos/entry-info-t-r.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhBQAFALMAAPv7+/X19fz8/Ozs7Pn5+enp6fr6+vT09P7+/vDw8Orq6v// +/wAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAFAAUAAAQPcAS0FklK1GUKrcmxAUoE +ADs= + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/icos/entry-info-b-l.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhBQAFALMAAPHx8fv7++zs7Pn5+fPz8/Dw8Orq6vT09P7+/vz8/Onp6f// +/wAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAFAAUAAAQP0KRFCaALqYCTKgOFHEIE +ADs= + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/icos/entry-info-b-r.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhBQAFALMAAPHx8fv7++zs7Pn5+fPz8/Dw8Orq6vT09P7+/vz8/Onp6f// +/wAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAFAAUAAAQQcMlk5AJEBoVGUckiHIgU +AQA7 + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/icos/icons_vote_posts.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhIQAeAOZ/AOjo6PHx8cjIyPT09O3t7fr6+sXFxeXl5fj4+N7e3urq6vLy +8sPDw/b29s3NzdjY2NXV1dDQ0O7u7s7Ozs3o8fb+/9Lr8ev6+4fKVdnyxrzS4Zi0 +xq3G1pKvw/2JWLy8vJ65zOTt89H+fdvb2+fn5/v//9Hc5aO9z8nm8ajB0t7x9rTL +25Syxd3u+P1iMf+dfMb5bfS5s2atOdfw8/yEaO9lTs3Z4v+yf3udsr71YuxaReH2 +9+by+Of3+lukLv99Rfd7Wdzp8XK5QuHw+4fSF5fdI5LSYNLS0qDcbuRJNJjVaavp +QMHW5P+kcPGxrP+Tc4Kitoyrv/++kP/Kn/ZTKP+WY3zBTP+kg8Xi8ZveMLfxUaPk +M/39/fD7/Mb4d8v8cvxtPb/d8ez3+6zmdOhEJ+lVPv/Yr5u3yf9xOrPuRO+uqev3 +4vP+//RiOdf/i5Csv9n/lPhfM/JuVN06KYakurjnkaXjbd9cVcbZ58fa6M7f6/D1 ++MP2X9Tg5////////yH5BAEAAH8ALAAAAAAhAB4AAAf/gH+Cfxl1GYOIVy+LV4iD +BCMSBY6EY3Bjh45XZlNTT5QSIwiRjhlIcG5udpmDL2ZSUp+IoQgFCAkBg2tIIr0i +Xkqsfy9TNzc0iAMjAwXNCA8Kf7teX18w1zlGrE9STU3IggMPAQPl5QEQBEpevjnu +1kaDNDdVVUCDEAvNBQEB+gMRlGDAYASGFi0DCcq74cGDHHwRIkBAQICAg4sRBmHg +s2QJBkpAmvz4UYNShAYAADighEHLli1W5NWY+QMNGh04Hwo6mdIAJStpihQRMqhG +lR8ukiYF40HHoAkDFCjw6QioUKKCYpTxAIaK1zgeysR4GnUqJSFLiBCRgShGEg9t +/8iATTJ2kIABBw4wOLtFLdu2SYC0AULGiSMDC/J+oCQji2MflJzMkTPH8OEFmBc7 +kuGj819Hau6oofTng2nTpEPoCeGHEhMNsDVQSkCbNqUQeUrgCeHaj+8Vs337eeAo +hIYKfkow4Y1IQ/ISwB0l8MOFC/FBezSIqcC9y4ogzUtUYMOB0gguzSBgX8Hjgnv3 +KjiAF7SigvsUlB4UaNDgyCAOPHBXwQ479MAGD/gJwkEXBJ5ACQQFYOafgiecsOAM +M4CgoYMKXoAhCA82UNFKjqRwgQUWnEFJCj2guAElRzQglQCUnCAGBRSwMEgKG7Cw +wQwostBBByAcIcCRBMxogJQBJP4BQg84djBIB0GogOOVFqiwgQEEBJDSlwoEQKMg +Z/SAAgpRDNJHB1meiQIFWpoAAJdefikmCYNswAMWWNCBiAlRBNECFhS0wIIJgpDA +QJckAHAnIh0MEUYYUDhiAgstZNoBooOQIEA/ARiAJyJvDGEqDpTY8IYFUdhAiV4E +MHAAJVDgYGulqW7gKmkHCDDrIIEAADs= + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/gif +Content-Location: data:image/gif;base64,R0lGODlhDwAaAOZ/APr7/LnO3bXL2uK7Vvz58NLu9friZ/z69arD0tXl7eHr8uL1+tLv89v09921Uf3phfzjcMra5dvl68nX4ef1+fz589rt9e79/+v7/Ka+zs7h6tny9d3EmqjAz+rQc+ft8d/1+PTjttSycvb///f6+/vx0rzR3vL2+P/////4rub5+/3qjf/zlu/0+fH5/MmdQtLh7PfYWP3oe83a4u/jzdi9ke3Ma8aaSbvN2r/T4PXdfunXs+LGivHWh/jbWuT4+a7K2dy2X8qbO8PW4sTc6fjaX/bUU/fUXOr6+9+5Y9bx89u1V//ukOLz9v/2usfV3uTAZ/z369GmQv/yr9yyRNDr9c3r87+RPP/4pPjgbPHWfOfCW8ygQ/zsl+jMc+jKeN719vLZgPjdXPP//7nL19yzUP/wjdCtbvzmcuXIb///x9Ho8vjkou/WgJy3x/HUafznd/nlh9WmPLXQ3fv48t67XdDj7P3pgPnx4Mrd6fjcWtewW/fw3/z46+LCcwAAACH5BAEAAH8ALAAAAAAPABoAAAf/gH+Cgy0KLYOIiTAuMImOJBEoESSOiAoJIwkKjkMmAZ8UF00CpAI5gjkuIxhIKio/CyAYFAGCJwEJYz9gDRsNFxoCJ4MAESYgSgwMGwETAIkACAwFDQVWGc+JEnMFC3YLVUASjjhrFgg4CBZEZI4dGh0ffx8ZeW6OMzPZfwATT5WCSrApARBRDyc9CgrqY0ONjSgKQ4RJoSVEIgJfBmgcsIJFHAcgy/ghQADKlBRMVjy4IwMOBDNdghD4gydJGywyIBjYycLDHj6DDvCog0aMHh9ZlvCokKiClBg+IMQwIoSOox1Uijzw8OCInB2ORLzRwUXECx1bzghCMeiFlxs0EP7QuJHmiiMOHA4ErVFjUCAAOw== +Content-Transfer-Encoding: Base64 + +R0lGODlhDwAaAOZ/APr7/LnO3bXL2uK7Vvz58NLu9friZ/z69arD0tXl7eHr8uL1 ++tLv89v09921Uf3phfzjcMra5dvl68nX4ef1+fz589rt9e79/+v7/Ka+zs7h6tny +9d3EmqjAz+rQc+ft8d/1+PTjttSycvb///f6+/vx0rzR3vL2+P/////4rub5+/3q +jf/zlu/0+fH5/MmdQtLh7PfYWP3oe83a4u/jzdi9ke3Ma8aaSbvN2r/T4PXdfunX +s+LGivHWh/jbWuT4+a7K2dy2X8qbO8PW4sTc6fjaX/bUU/fUXOr6+9+5Y9bx89u1 +V//ukOLz9v/2usfV3uTAZ/z369GmQv/yr9yyRNDr9c3r87+RPP/4pPjgbPHWfOfC +W8ygQ/zsl+jMc+jKeN719vLZgPjdXPP//7nL19yzUP/wjdCtbvzmcuXIb///x9Ho +8vjkou/WgJy3x/HUafznd/nlh9WmPLXQ3fv48t67XdDj7P3pgPnx4Mrd6fjcWtew +W/fw3/z46+LCcwAAACH5BAEAAH8ALAAAAAAPABoAAAf/gH+Cgy0KLYOIiTAuMImO +JBEoESSOiAoJIwkKjkMmAZ8UF00CpAI5gjkuIxhIKio/CyAYFAGCJwEJYz9gDRsN +FxoCJ4MAESYgSgwMGwETAIkACAwFDQVWGc+JEnMFC3YLVUASjjhrFgg4CBZEZI4d +Gh0ffx8ZeW6OMzPZfwATT5WCSrApARBRDyc9CgrqY0ONjSgKQ4RJoSVEIgJfBmgc +sIJFHAcgy/ghQADKlBRMVjy4IwMOBDNdghD4gydJGywyIBjYycLDHj6DDvCog0aM +Hh9ZlvCokKiClBg+IMQwIoSOox1Uijzw8OCInB2ORLzRwUXECx1bzghCMeiFlxs0 +EP7QuJHmiiMOHA4ErVFjUCAAOw== + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-comments2.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhDAAOAOYAANDf6tbt9oWludPi7NHg6sPh8Mvb59Li7IiovLnM2bjM2NHh +6+Pq74SjuNLh64GhtcDV47fL17LG0+jv9cfY47/V46m+zMLT37vO2+rx9oCgtuju +8fz//83d56zBzvv//+ju8uPz+rjM2b/c8M/e6rzP2+/z9dvv+ouou8LV4OPz+4uo +vNXr+srb5sbX4sPY5LXI1sjZ5Njt+omovIinu+Hp7r/R3YmpvNTv8szn8Oz6++r3 +/sHU2q7L0qbE0cjk8N/09tDr8Pf//////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAMAA4AAAdwgBkDAwcOCwQEAAAkEwAc +Q5CRkB8GHUKXmJkxLTo6PJ+gnS4UQKWmpxcpODg9ra6rNiVBs7S1GCI5OT67vLkK +CQE/wsPCATARKjvKJwUFyiESDDczCDQvMiMCAg01kiArECwakpIbKBUP5JImHhaR +gQA7 + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-author-link.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhBQAHAIABAJ2dnf///yH5BAEAAAEALAAAAAAFAAcAAAIKDA5ht8ioTFRJ +FQA7 + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-icon-twitter.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhDgAQAOZGAP///3PU/HLU/HHU/HDU/NfX12/T/Nvb2+jo6Nzc3NbW1t7e +3t3d3d/f39LS0u/v79ra2oHZ/O7u7tPT04jb/fz+/+bm5uPj4/r6+n3X/PT09PHx +8dXV1efn5/z8/Pj4+Pf39+3t7djY2Ljp/enp6eLi4v3+/+Xl5cDs/u35/5zh/f39 +/dHx/uTk5Ob3/vb29qbk/evr65Pe/W7T/Pn5+cnu/tfz/qvm/ZHd/f7+/tnZ2XjW +/OX3/nXV/OHh4Ynb/Ozs7PX19eT3/o/d/fX8/43c/f///wAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAACH5BAEAAEYALAAAAAAOABAAQAeigEYIDRAJIUaIiYgFAAIC +MgCRkR8nB0aMBgYUkpEYHRCCFigBpKWkMA8XCzQRMyobJYqJjAO1trY3QC0iHhmk +NRWSQRcMiBoKJB4pwZErMRwYCB1EQhsLh7JGCgCZFCA6B+EMCIsABOfo5xE2DQ+M +jvDwPy4Q7jk9AUMvnAkWiAwgipgqhYNHAgnaTIzwZWoHCx8IjWhowEHEBAcYJyz4 +YCQQADs= + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/png +Content-Location: http://habrahabr.ru/i/bg-icon-facebook.png +Content-Transfer-Encoding: Base64 + +iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAA +AJ9JREFUOMtjYKAQMDIwMDAkVq75f+vBG5I0qimIMMxvD2FkYmBgYCBVM7IeFmIU +q8oLM3SXeTKICHIzMDAwMNhEzYTLMRFjALJmdECUC7DZTJIL8AG8LjiyLB0rH9kl +eA148/4rihdgfKJdEJC9BMVmGJ+qYUCdQOTiZGPQUBIjqNhIWwbOvnHvFRVdICPO +x3Du6hOcirAlIDUFEQaqAAAnVClioBN0DAAAAABJRU5ErkJggg== + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/link_icon2.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhFAAUAOYAAIGiu+ft8o2xy8nm9YmtxcLe7KnL3u3///r+/5G0zYisyYWp +xnyivc7i79Lu+53B2NLm9Nvt9tHs87nW6pa60mSKpJ3B1pS20PT2+OX8/3ufu+D5 +/+j+/9jy/nCVr7nZ6dXx/s/r+Zi40d74//P+/4+uw8Lh8Zq81Lza7Z2/1rXR5r/b +667N4KLF2uf7/qPB17ra7fX4+pi808nd64ClwL7e7u/z9q7D0YKow8Hg767O5bHT +7dr0/4mqwPb//8Xi8cbg7qnG256909/1/8Ph9LTU5bLT5a/Q4naeuf3///T5/tzl +6qTG28Da8LDR4snW37XW5snl74eow6TD2b7S4L/X5qa8yrfY57/g8rnY55WuwZ67 +0OD4+W2TrOX6+7fZ68vo+sXk8931+Iimu+r8/XmZsMTX5rnO3bHN5JKtv8Th9Mfl ++Mfl9NTx9IOoxXabtczn9qnL5Njz9a/L4LfR6LXW74uyx6PA2L/d66PH3bPH1rTJ +17DM3pSzx7rX4v///yH5BAAAAAAALAAAAAAUABQAAAf/gH+CgkoQTTuIO00QSoOO +ghB1YBsHlQdDazsQj38ITUQcBxwZG6WlQzATCI4TaqOlIzw8HR0gDh0TKoMNKC4j +YEREWFg1MDBfWHAhOjN/MXFDPCA6jZx5Jjk/DxgzKB0OITUtDQgISYMPKB8fLGZz +cHADbGE5Dw1/PuZ/FFBFRkUvZIT4kSNHjSJV8B0gkU+AkyMsjAigAAQFjA9X+Pxx +wcULmYUEDIhkQeACnn5GWkTw0UaOGD8HyOBg0qKFARwCsjxkkeBPBAkS7CChcoDB +gxQpDNDYwkLkzSRRoljAkQJJAAYyKFBI0eeMCJotaJAoAIQGBRkJNGi4kOAEAT02 +b2gEOUojwooVDC6wVaBAgAAhb2z82UPgDgUFQYBMWOBXAF8FIhjcGFSixwkBDJqo +uLCgsxvIGsY4itEDgIgFGuigSUBjQQIhHgDE4HSjCwApAATcmSKkRwUrjjBgCBBg +yRMtZSoor1AmzZMlxIUHAgA7 + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/double-lock.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhIgAUAOZ/AN/t9s7o9tnv+qnI3L7Z6ZG1ztru9s7m8L/h8+36//r//7TG +0rrS4pq60cre7IGlv8rp+M7h7bzY6LnO3LrZ6eP0+6C+04qrwqjI2pa81KHA1bPP +35WzyXieuPX8/7PP4ef2/Of1+6vH267C0cji7rXQ4KfG2/f///X+/5Kzy93x+93w ++Mfn97fT5J6/1M3q+nGXsWSKpGqQqqbF28Tc7V6Fn4mtx1qBmuXu9dLp9LrW5+n3 +/LDN3eDz+oWmvcTZ6KXF2qfF2Orw9bDL3Mvn9dbk7uT0/czq+LjU5rvV5qHB2KPE +2aTC2bTI16bG3XSYsnCVrvD6/vH9/77W5L/U4bTJ2M/n86zL263L3KfC1fj6/P7/ +/4+uxniaspy808Dh8a7N4Nvw+t/x/ODz/Nrm7qXE2Ze3zaXG2uP1/KbG2Zi3zbXS +4bTS467M3LjS4X+kvsLb6L7S4Oj0+pGwxu3z+N/x+4KkvLLJ2rfQ4dXg6NXt+LHO +3Zq+2FZ8lv///////yH5BAEAAH8ALAAAAAAiABQAAAf/gH+CgnQOhg4Ag4qLhYeJ +i4IAAwAKfpYALRGQkZOVl5mLRQ6WCh4eJ1t+AAyQoqSmqKqsgloiKFFUHBcXc3dy +Hj9CirW3ubu9v8GCZBE7WU2KeVwhAHGKzM7Qg9LU1n8TBiF2in5/PiEGHIrg4uTm +6OrfBxVPkCMrB2/r8/WL9/mCqhCoAMUeCAIdFAkkaBChoAk0EnSBtMAIjXGDIEqk +aHEcDj58nIAcSRIkDkEfQ5ZciaMAAhYQIBx5QfPFEQgsWCAoIMglTJk1beLUWcDG +lwB6BKioM0aMijACchD5YkOQUaRKmTqFKpXqgwxnsGwo4aYsng08BizJ8EDQ17Bj +w8u6OZt27YMOFKysAJFAyokTKBKAWGGFQsI/ePXy9QtYMGHDMApowNBm7JoSG/Zc +SeOiAAxBkSdXLnE58+bOMGQMIEAih4EVFdD0MJCDhIQBMgSpZu0atmzatnHH8DLg +Q4skEpLrQMIGjIkGMQQNL348uYTlzZ/HqJGigQYmQGaYMDGjjBIXDVLUEMTdO3jx +5M2jV3/jghkLQYa4mQInyQYRGqhxwQ2C1Hdffvv191+AAy7Qx4MQRhjhAoI4KOGF +Dy4QCAA7 + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/gif +Content-Location: data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIFjA8QqVwAOw== +Content-Transfer-Encoding: Base64 + +R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIFjA8QqVwAOw== + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/gif +Content-Location: data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIGjANgqRwFADs= +Content-Transfer-Encoding: Base64 + +R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIGjANgqRwFADs= + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/gif +Content-Location: data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIGhGOAGt0FADs= +Content-Transfer-Encoding: Base64 + +R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIGhGOAGt0FADs= + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/gif +Content-Location: data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIFDG6YwVEAOw== +Content-Transfer-Encoding: Base64 + +R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIFDG6YwVEAOw== + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/add_comment.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhEgAMAIAAAK+lav///yH5BAAAAAAALAAAAAASAAwAAAIgDI4Jwb0NXXwR +Unarmdryjn1gllUl4iTjU3bHBk4vWAAAOw== + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/comments.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhEgAMAIAAAK+lav///yH5BAAAAAAALAAAAAASAAwAAAIiDI4Jwb0NXXzq +sCfj3KZermVZRYGhoSFOcnZfC1kYfFltAQA7 + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg_avatar_mask_mini.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhGAAYAIABAPn5+QAAACH5BAEAAAEALAAAAAAYABgAQAIdBIKpu8YPo5y0 +2ouz3rx7dHSO+JXmiabqmo6aUQAAOw== + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/webp +Content-Location: http://habrahabr.ru/i/icos/icons_vote_comments_4modes.png +Content-Transfer-Encoding: Base64 + +UklGRmABAABXRUJQVlA4IFQBAABwBwCdASoaADQABIcIhYWIhYSIIwIDOwf/qY5V +PFJY+iVbJQjoL9N5LWGQGu2o69DHOGL3nNhrVemaC1cUevUUUvr5oAD+1w8lDT+P +grWvNh8Gclmyl+s2tpErshZgn5aWfMxrEhI3mUdlVspCJYMLphiyU/Q8lmKv3/UA +ydEe+OST/eOicZLohC9cT+zq5TgKlE4rPwrtuCca3b3V6Y8aephX290owirC5+n8 +t5DmPDR1PdnnBCwGT6eNF9nOAUcVTRgfa8E7Ya0CJNM58ye1wySJzBSb0R5a3Uxe +iJH3vJ/OoxDK1D6NeONm7d2Ri052MZ3ogzhS5gilXPUzbRm4ZKM+rBG8LQFTvOSE +j8/7xPtvsrUFuCWmzB9pREhGUU4Vl1oPpiUUtJJslfIFzPdGGLnpEtcufHT3QJgP +twwvkg2lECyn3Vj+ThKvMMqCTTjwoAAA + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/png +Content-Location: http://habrahabr.ru/i/bg-button-enter.png +Content-Transfer-Encoding: Base64 + +iVBORw0KGgoAAAANSUhEUgAAACAAAACDCAMAAADbLOmGAAAAGXRFWHRTb2Z0d2Fy +ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGBQTFRF8vLy5+fns7Oz////ysrKz8/P +0dHRzs7O09PTx8fHycnJ0NDQyMjI0tLS3NzczMzMzc3N4uLi2dnZy8vL3t7e4ODg +39/f4+Pj5OTk1dXV5ubm+vr6+/v7/v7+/f39////yswFHgAAACB0Uk5T//////// +/////////////////////////////////wBcXBvtAAABWElEQVR42uzW23KDMAwE +UNlgnBYINOn9xv//ZQkhgGQhFwf8xL5yJpNMFs1C8/6R3WLaWHt4aiaBt5fvBOfr +dSrg8As0nwaBxAHqfmAFoJeDMgTUU2AYkAYD7QGaBTYZn18igO4TQALgBcCB6scF +xRQcnxXN8TQFzTHt8tjm4ZoT6mTjCfyj1c53IK1Wzq8Asz2wAtDLQRkCcKsZkAYD +7QGaBVY5rZ4DQ6tnAXgBcKBiAGm183xv9d7qvdVLWp33Mdd0BWcWCB4j3AJBY4Tb +D2hr3A3sCqAMA7c/XtUxQCaDKgbIZXDeAmgCyJbrX9ABpM7Y0+NLzoLxFZ8DQIGV +CxMFMGMP7T5u7KHdhw5Im6LPcEtWOSDSd7gcECX9CjDbA7sCKMPAUKs6BshkUMUA +uQzOWwBNABkY5IBA6iwQfEBcQA4IA4ACKxcmCqhkUHALBI0R7wH5E2AAR7t7jEpR +hqMAAAAASUVORK5CYII= + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg_avatar_mask.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhMAAwAIABAP///////yH5BAEAAAEALAAAAAAwADAAQAJDhBGpy+2/DoK0 +2ouz3rz7D4biSJbmiabdpFpGe7HwTNf2jef6zvfKu5PwDj6Z74hMKpfMpvMJjUqn +1KrVZsxJsjBJAQA7 + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/png +Content-Location: http://habrahabr.ru/i/tags/habred.png +Content-Transfer-Encoding: Base64 + +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 +4OCheEP7PydxA3UapgnrAAAAAElFTkSuQmCC + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/form/loader_button.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhDAAMAIABAJqamv///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAAABACwA +AAAADAAMAAACGQweeaDY3JJxUy4LZ74aQ96FIgWSpoeOSAEAIfkECQAAAQAsAAAA +AAwADAAAAhpMgHa5oOjaY2vGauC0XGamfVHoYSVFoipQAAAh+QQJAAABACwAAAAA +DAAMAAACGYyBFgiX3taTkSnr7txcRwp54YiB2SiJTgEAIfkECQAAAQAsAAAAAAwA +DAAAAhoEgna5oejaY2vGauC0XGamfVHoYSVFompQAAAh+QQJAAABACwAAAAADAAM +AAACGYSDBhiX3taTkSnr7txcRwp54YiB2SiJTgEAIfkEBQAAAQAsAAAAAAwADAAA +AhkMHnmg2NyScVMuC2e+GkPehSIFkqaHjkgBADs= + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/form/loader_field.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhDAAMAIABAO3t7f///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAAABACwA +AAAADAAMAAACGQweeaDY3JJxUy4LZ74aQ96FIgWSpoeOSAEAIfkECQAAAQAsAAAA +AAwADAAAAhpMgHa5oOjaY2vGauC0XGamfVHoYSVFoipQAAAh+QQJAAABACwAAAAA +DAAMAAACGYyBFgiX3taTkSnr7txcRwp54YiB2SiJTgEAIfkECQAAAQAsAAAAAAwA +DAAAAhlEDnmh2NyScVMuC2e+GkPehSIFkqaHjkgBACH5BAkAAAEALAAAAAAMAAwA +AAIaBIJ2uaHo2mNrxmrgtFxmpn1R6GElRaJqUAAAIfkEBQAAAQAsAAAAAAwADAAA +AhmEgwYYl97Wk5Ep6+7cXEcKeeGIgdkoiU4BADs= + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-corner-top-left.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIFjA8QqVwAOw== + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/tm_logo_sharp.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhHwA8ANU6AKqqqsUrhaKiot2IuqOjo////+4vmtLT08zMzJ2dnctDk+Lk +5P79/P3s9bGxsfHx8u3s6/Xb6+u61p+envX49Pj5+Z+gn/34+sHBwd3d3Jycm+es +zvvk57i4uNRmpsrKyu3D24+Pj/70+uOdxZiYmZqbm8fHx5eWl/jJ3f/5/dxcpsTE +xJGRkf6m1P7//b6+vvz9/v3+/pWWlZWUlPv8+6CgoKKhor0idqWlpcAjfP///wAA +AAAAAAAAAAAAAAAAACH5BAEAADoALAAAAAAfADwAQAb/wITNJiAah0XkcMlU2jQ1 +nHQqFVgFhCxWmqVSa1Gv1NIpHBKTBQRToWAYCI0YLK7bpywZAgHR3XKAgYKDhIU5 +N3+FAYuMOYuAj4WIhjcKBQOIEhwKMA2WmISThqOCiIgGLTo6NnetrTZhYiUOBQgn +GhkMFQ4vDLUJc7F1AlNdXcQEUgAOAAITCUlKSUXR1Es4CKrafqTdlImhCi6YN5oR +HgMcF6CDot7fpwYGAcKu9lJ09/o4sGIJbwwo6MpwgMICCzggVPgwQUy/OmTMJEiw +4MGCAxkWVEAAzMtDhw42JrCQAQIAiwAoMHTIal8dEiFCYDhAs55LKTZmmHiwrafP +/59At4F7984dUW9GAykAESEGBwkDNhRosIhGCnalhpYSR05ChBFMB4jAGijpoACB +Ft14hFaS1qOATN2QZwDFW7inUGyz6SqZnWQW+N70km/wnY+G6xSmAqDxMhyOAShr +rNhmjQ5qClg0kaEABRwOfMUJZueymRIWKj7A8OEBnI5fWs4pc0BDGggHIOAWSbqO +DVoHSqR5QIsCLQQNCQuerKw5ZMnF8C2/R+AEiRofEGAAMP1eDRYhVhxA8KD7vRAA +cquK4veO3/ZcSKygELS+/Z5y8+vfz98sXLf/IXVXgFnBY8ohZQ1o1g0eXHBBAyKk +MMIIDUjwRwQNkBWXggqsg1DIBgx4ooIvGh7C4SWZRABCVBKM9ZZ/h3ySYoMNNFgi +jJVk+GEEAXAAQgA6hjKgkHEhKAhaBxKY4Fx0DUmUKfKk4mRRc22gTX9YypWDCj4F +AQA7 + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/webp +Content-Location: http://habrahabr.ru/i/bg-multilogo.png +Content-Transfer-Encoding: Base64 + +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 +JXgWgAAA + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/topic_edit.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhEAAQAOZTAM3p+OLp7nmar4eovMLY56jC0+H4/N3l6s7m8ezx9fT2+Ojt +8Xear8La5+T7/9Tv+sLi8+nv87zQ3fX//5q3ycLZ6Ovw89Dc5J67za/H2Ji5zXmc +suvy97PM3ompvvn//+j//4urv9ri6d3z/bfa7uX1+7zT4brZ7d72/fH//+f6/42s +v46sv9ft+IKit+f2+6/T6568zYepvsno9fP3+qzJ2dLr+d/1/YqrwrPG06vQ6dvy +/N/v9o6rvs3r9KvG2Nzl7PH9/+n4/Mrn9czc5pWyxbPO3rXX6MDR3M7o89ry/Iqq +vszr9rDL2+f5/8nX4L7h8t7o8Nrz+////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAACH5BAEAAFMALAAAAAAQABAAAAeRgFOCg4I0BA0mRISLUxwV +BhM8EoyEBAYpQgUJlIMdIEGaUxcePZQ/Dj4YEUg4LSuMUUYoM0cyGidKA4tRTVJM +UCQwOjYIAoS8vlBDNzsjCAwBg8i/AE4UIQMC0YLTUNVLT7C91E7g4snf4YwZUg8Q +6Zw1SRsq5eqUMSUfL+acU0AsirjIIeLAgQALFlhQoEBQIAA7 + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline; filename=all.css +Content-Type: text/css; name=all.css +Content-Location: http://habrahabr.ru/css/1307631427/all.css +Content-Transfer-Encoding: 8bit + + + +/* layout */ +#header-wrapper { + position:relative; + /*overflow:hidden;*/ + min-width:760px; + } + +#wrapper { + width: 95%; + min-width: 725px; + clear: both; + margin:0 auto; +/* overflow: hidden;*/ +} +#inner { + margin:0 auto; + max-width: 1200px; +} + + #main-content { + float: left; + width: 66%; + clear: left; + margin-right: 2%; +/* overflow: hidden;*/ + } + #sidebar { + float: left; + width: 31%; + } + + + + + +/* main */ +body, html { + height: 100%; +} +body { + font: .75em Verdana, sans-serif; /*12px is font-size for main content. Base font size*/ + color:#000; + background:#fff; +} +a{color: #6da3bd;} +a.serv{ + text-decoration:none; + border-bottom:1px solid #6DA3BD; + } +.input-row{ + margin-bottom:9px; +} +a.js-serv{ + border-bottom: 1px dashed #6DA3BD; + text-decoration:none; + cursor:pointer; + } +a.silentlink{ + text-decoration:none; + color:#343434; + } + a.silentlink:hover{ + color:#343434; + } +a:hover{ color:#4D7285;} +.hentry .content a:visited,.entry-content a:visited{ + color:#990099; +} + .hentry .content a:visited:hover,.entry-content a:visited:hover{ + color:#C266C2; + } + .hentry .content .habracut a:visited{ + color:#6DA3BD; + } + .hentry .content .habracut a:visited:hover{ + color:#939393; + } + + .entry-title a.topic:visited{ + color:#B0B0B0; + } + .entry-title a.topic:visited:hover{ + color:#939393; + } +a img { + border:none; +} + +address { + font-style:normal; +} + +fieldset {border:0 solid transparent;} +input, select, textarea { + font-size: 100%; + font-family: verdana, sans-serif; +} + +ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,body,html,blockquote,fieldset,dl,dt,dd,caption {margin:0; padding:0;} +ul,ol {list-style: none;} +pre,code {font-size: 1em;} + +ol{list-style-type: decimal; + list-style-position: inside; + } +.published, +time{ + text-transform: lowercase; +} +h1, h2, h3, h4, h5, h6 { + color:#999999; + font-family:Verdana,sans-serif; + font-weight:normal; + margin:0 0 0 0; + padding:0; +} + +h1 { + font-size:162.5%; + letter-spacing:-1px; + margin-bottom:0.7em; +} + +h2 { + font-size:150%; +} + +h3 { + font-size: 137.5%; +} + +h4 { + font-size: 120%; +} + +h5 { + font-size: 110%; +} + +h6 { + font-size: 100%; +} + +table {border-collapse: collapse;} + +blockquote { + border-left:2px solid #bbb; + margin: .83em 0; + padding-left:15px; + clear: both; +} + +img[align="center"] { + display: block; + margin: 0 auto !important; +} + +.hidden { display: none !important;} +.error{color:red;} + + +/*Header*/ + +/* Sligtly modified code first coded by Aleksey Rybakov (http://flack.ru/temp/habr/head.html) */ + +#header-inner { + margin-right:255px; + } +#nav-adv { + margin-left:240px; + } +#logo { + width:240px; + float:left; + } +#info-search { + width:255px; + float:right; + } + + #logo img { + width:240px; + height:130px; + } + + #main-nav { + padding-top:14px; + text-transform:lowercase; + font:1.75em 'Lucida Grande',Verdana,sans-serif; /*21px*/ + } + #main-nav li { + display:inline; + margin-right:1px; + } + #main-nav li a { + position:relative; + padding:0 3px; + border-bottom:1px solid #b2b2b2; + text-decoration:none; + color:#b2b2b2; + } + #main-nav li.current a { + color: #000; + font-weight: normal; + border-bottom:none; + } + #main-nav li.current a span { + color: #F60; + font-weight: normal; + border-bottom:1px solid #000; + } + #main-nav li .top-Link { + vertical-align: top; + color: #ff9600; + letter-spacing: -1px; + } + #main-nav li .top-link span { + color: #8d8b8b; + } + + /* Subnavigation (nearest menu level) */ + + #sub-nav { + clear: both; + margin-bottom: 20px; + + } + #sub-nav li { + display: inline; + margin-right: 3px; + } + #sub-nav .create-blog, #sub-nav #recommend { + margin-left: 15px; + } + #sub-nav li a { + font-family: Arial, sans-serif; + font-size:1.083em; /*13px*/ + text-decoration: none; + color:#093; + padding: 0 2px; + } + #sub-nav .current a { + color:#fff; + background-color: #ff9525; + padding: 0 5px;} + + /* // Subnavigation (nearest menu level) */ + + + + /*Text advert*/ + + + #head-text-adv { + margin: 2.5em 0 1.5em 0; +/* float: left;*/ + width: 98%; + } + .profile #head-text-adv { + margin: 5em 0 0 0; +/* float: left;*/ + width: 98%; + } + #main-page #head-text-adv { + margin-top: 1.2em; + } + #head-text-adv iframe { + margin: 0; + width: 100%; + } + + /* // Text advert*/ + + + + #info-search { + text-align:right; + width: 255px; + font:.917em Tahoma,Verdana,Helvetica,sans-serif; /*11px*/ + } + #info-search .avatar { + float:right; + width:48px; + height:48px; + margin:7px 19px 0 0; + border:1px solid #DDD; + } + #info-search dl { + float:right; + padding:11px 13px 0 0; + text-transform:lowercase; + width: 170px; + } + #info-search dl a { + color:#999; + } + #info-search dd { + margin-top:1px; + } + #info-search dt { + width: 170px; + } + #info-search dd ul { + color:#000; + } + #info-search dd ul li { + display:inline; + padding:0 5px; + background: url(/i/bg-info-search.gif) no-repeat 100% 100%; + } + #info-search dd ul li.last { + padding:0; + background:none; + } + #info-search dd ul li a { + color:#000; + } + #info-search .habrauser { + text-transform:none; + font-weight:bold; + color:#666; + } + #info-search #last-shot {margin-bottom: -1px;} + #info-search form { + float:left; + margin-top:11px; + margin-right:6px; + } + #info-search fieldset div { + float:left; + width:176px; + padding:3px; + background:#C9D6DE; + } + #info-search fieldset div input { + width:170px; + padding:1px 0 1px 3px; + } + #info-search fieldset .submit { + float:left; + width:49px; + margin:2px 0 0 5px; + } + + .new-mail-indicator {margin-bottom: -1px; margin-left: 2px;} + + /* Menu for unlogined visitors */ + + #info-search ul.guest_panel { + margin: 2em 4.2em 1em 1em; + } + #info-search ul.guest_panel li { + display: inline; + } + +/* // Header */ + +.company_admin #sidebar{ + padding-top:46px; + } +.help .company-help{ + margin:0 20px 20px 20px; +} + +/* Main content */ + +/* Горизонтальное меню над постами */ + + +.page-navigation { + overflow:hidden; + width:100%; + clear:both; + margin-bottom: 20px; + } + + +ul.page-menu{ + overflow:hidden; + } + .page-menu li { + width:20%; + float:left; + } + .page-menu li { + padding: 0; + text-align: center; + background: #eaecea url(/i/bg-page-nav-left.gif) no-repeat 0 0; + vertical-align: top; + } + .page-menu li.current { + background-color: #d3e2f0; + background-image: url(/i/bg-page-nav-current-left.gif); + } + .page-menu li b{ + display:block; + font-weight:400; + height: 28px; + position:relative; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + padding-top: 7px; + background: url(/i/bg-page-nav-right.gif) no-repeat 100% 0; + } + + .page-menu li.current b { + background-image: url(/i/bg-page-nav-current-right.gif); + } +.unlogged-menu{ + padding-left:35px; + } +.blog-menu{ + } + .blog-menu + .page-menu td, + .blog-menu + .page-menu td.current{ + border-bottom-width:0; + } +.top-page-menu{ + padding-left:35px; +} +.page-menu { + width: 100%; + clear: both; + font-size: 1.33em; + border-collapse: collapse; +} + .page-menu td { + padding: 0; + height: 2.19em;/*35px*/ + text-align: center; + background: #eaecea url(/i/bg-page-nav-left.gif) no-repeat 0 0; + vertical-align: top; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + } + .page-menu td.last { + border-right: none; + } + .page-menu td.current { + background-color: #d3e2f0; + background-image: url(/i/bg-page-nav-current-left.gif); + border-bottom: 1px solid #d3e2f0; + } + + .page-menu td div { + padding-top: .5em; + background: url(/i/bg-page-nav-right.gif) no-repeat top right; + } + .page-menu a,.page-menu label { + color: #666; + cursor:pointer; + text-decoration:underline; + } + + + .page-menu a:hover,.page-menu label:hover{ + color:#A3A3A3; + } + .page-menu .current a,.page-menu .current label { + text-decoration: none; + color:#000; + } + #company-index .page-menu td { + background: none; + } + #company-index .page-menu td div { + background: url(/i/bg-page-nav-right-company.gif) no-repeat top right; + background: none; + } + #company-index .page-menu td div a { + color: #b2b2b2; + } + #company-index .page-menu .current div a { + color: #696969; + } + #company-index .page-menu td div .add { + margin-left: .5em; + } + + .profile .page-menu .current, .profile .page-menu .own { + width: 50%; + } + body#top .page-menu .current { + border-bottom-color: #fff; + } + #company-index .page-menu td.current { + background: #f0f0e7 url(/i/corner_3.gif) no-repeat 0 0; + /* border-bottom: 1px solid #f0f0e7; */ + } + .page-menu td.current div { + background: url(/i/bg-page-nav-current-right.gif) no-repeat top right; + } + #company-index .page-menu td.current div { + background: url(/i/corner_1.gif) no-repeat top right; + } + + + .page-menu .top img { + margin-top: .1em; + } + + .page-menu #write { + height: 35px; + width: 34px; + margin: 0; + background: #fff; + } + .page-menu #write img { + margin: 0; + outline: none; + } + + .page-menu sup {font-size:70%; color:#999; vertical-align:baseline; position: relative; top: -8px;line-height:0;} + + /*Tabled page-menu*/ + + .page-menu td { + text-align: center; + } + + + /*2 линия*/ + + .page-submenu { + font-size: 1em; /*12px*/ + float: left; + clear: both; + background: #D3E2F0 url(/i/bg-page-subnav-corner-bottom-left.gif) no-repeat bottom left; + border-right: 1px solid #fff; + } + + .logged { + border-left: 35px solid #fff; + } + + .right { + float: right; + } + + .page-submenu ul { + padding: .5em 20px .5em 0; + background: url(/i/bg-page-subnav-corner-bottom-right.gif) no-repeat bottom right; + } + .page-submenu li { + display: inline; + margin: 0 0 0 10px; + } + .page-submenu li.create-new-blog { + padding-left: 25px; + background: none; + } + + .page-submenu li.current a {text-decoration: none;color:#000 !important;} + + .page-menu td .new, + .page-submenu li .new { + color: #390; + } + .page-submenu li a { + color: #666; + } + .page-submenu li a:hover { + color:#A3A3A3; + } + .page-submenu li .rss img { + margin-bottom: -2px; + } + + +/*Простые табы (без круглых уголков и т.п., см. страницу приглашения в блог)*/ + +.two-simple-tabs { + width: 100%; + float: left; + clear: both; + margin: 20px 0 10px 0; + font-size: 1.58em; /*19/12*/ + white-space: nowrap; +} + .two-simple-tabs li { + float: left; + width: 49%; + text-align: center; + } + .two-simple-tabs li.last { + float: right; + } + .two-simple-tabs div { + padding: .5em .5em; width: 95%; margin: 0 auto; + } + .two-simple-tabs .current div { + background: #faeee2; + } + .two-simple-tabs div, .two-simple-tabs div a { + color: #999; + } + .two-simple-tabs div .new { + font: normal .89em/100% Verdana, sans-serif; /*17/19*/ + color: #390; + } + .two-simple-tabs div a:hover{ + color:#333; + } + + + + + +/* Archive section */ + +.archive-navbar { + margin: 30px auto -10px auto; + text-align: center; +} + .archive-navbar a { + display: inline; + font: 2.17em/100% Verdana, sans-serif; + color: #996; + } + .archive-navbar h1 { + display: inline; + font: normal 2.17em/100% Verdana, sans-serif; + letter-spacing: -1px; + margin: 0 .8em; + color: #69c; + } + + + +/* Информация о блоге */ + + + /* Новые стили 24 апреля 2008 */ + + .blog-descr {clear:both; font-size:14px;} + .blog-text-descr {margin: 10px 0 0;} + .blog-descr .bg-top-r h3 { + clear: both; + margin-bottom: 10px; + font-size: 1.63em; /*26/16*/ + font-weight: normal; + letter-spacing: -1px; + color: #999; + } + .blog-descr .bg-top-r div, .blog-descr .bg-top-r p {font-size: 14px;} + + /* Админы, соавторы и читатели блога */ + + .blog-descr #admins ul, .blog-descr #coauthors ul { + float: left; + width: 100%; + margin: .83em 0; + text-align: center; + } + .blog-descr #admins li, .blog-descr #coauthors li { + float: left; + clear: right; + list-style: none; + margin: 0 5px; + } + .blog-descr #admins dl dt a img, .blog-descr #coauthors dl dt a img { + display: block; + margin: 0 auto; + border: 1px solid #ddd; + } + .blog-descr #admins a, .blog-descr #coauthors a { + font-size: 12px; + } + + .people { + margin: 10px 0; + } + .people ul { + margin-top: 10px; + font-size: 12px; + } + .people ul li { + display: block; + float: left; + margin-right: 5px; + font-size:1em; + font-family:arial; + line-height: 130%; + } + .people ul li, .people ul li a { + color:#999; + } + .people ul li a { + padding: 0 0 0 15px; + background: url(/i/small_default_userpic.gif) 0 50% no-repeat; + } + + + /* // Новые стили 24 апреля 2008 */ + + + +#viva-la-w3c { + width:149%; + } + .blog-title { + overflow:hidden; + padding-top:10px; + margin-top:-20px; + min-height: 48px; + padding-bottom:8px; + padding-left:35px; + } + #viva-la-w3c .blog-title .avatar {border: 1px solid #ddd;float:left;} + +.blog-info { + clear: both; + padding:35px 0 20px 0; +} + .blog-info .title a { + color: #008cd2; + } + .blog-info .title img { + border: 1px solid #ddd; + } + .blog-info .title .avatar { + margin: 0 .83em -.45em 0; + } + .blog-info #buttons { + margin-left: 10px; + white-space: nowrap; + } + .blog-info #buttons img { + margin: 0 .83em -.2em 0; + border: 1px solid #ddd; + } + + .blog-info .more-info { + margin-left: 45px; + } + + .blog-info .more-info .subscribers { + font-size: 1em;/*12/16*/ + position: relative; + top: -.5em; + } + + .blog-info .more-info .rating, + .blog-info .more-info .subscribers { + margin: .2em .1em 0 .1em; + } + .blog-panel #sidebar{ + margin-top:46px; + } + .blogs #viva-la-w3c h2.blog-header { + + margin-top: 0; + float:left; + margin-right:30px; + font: normal 300%/120% Verdana, sans-serif; + letter-spacing: -1px; + color:#333; + + } + .blogs #viva-la-w3c h2.blog-header .silentlink{ + position:relative; + display:block; + float:left; + margin-right:5px; + } + .blogs #viva-la-w3c h2.blog-header .profiled_blog{ + cursor: help;width:16px;height:16px;float:left;margin-left:2px;margin-top:10px;background: transparent url(/i/icon_asterisk_24.png) left top no-repeat; + } + .blogs #viva-la-w3c h2.blog-header .edit{ + display:block;float:left;margin-left:10px;margin-top:18px; + } + .blogs h2.blog-header .blog-whois{ + position:absolute; + font-size:33%; + line-height:1em; + top:-5px; + right:-20px; + color:#66ccff; + + } + .blogs h2.blog-header .blog-whois:hover{ + color:#4890b4; + } + dl.blog-index { + float:left; + margin-right:19px; + position:relative; + } + dl.blog-index dt{ + position:absolute; + width:100%; + text-align:center; + top:-6px; + font-size:83%; + color:#ccc; + } + dl.blog-index dd{ + color:#CC66CC; + font-size:300%; + } + .blog-info .more-info .rating { + font-family:Arial; + font-weight: bold; + padding: 0 .2em; + color:#fff; + background-color: #d479b3; + } + .blog-about-text{ + position:absolute; + padding:27px 27px 30px; + width:550px; + top:200px; + left:47%; + z-index:99; + background:#fff; + border: 1px solid #999; + + } + #js-blog_info.tipBox-too-mach-right{ + margin-left:-575px; + } + .blog-about-text + .close-blog-info{ + position:absolute; + top:10px; + left:10px; + text-decoration:none; + color:#999; + } + .blog-about-text + .close-blog-info:hover{ + color:#ccc; + } + #js-blog_info.tipBox-too-mach-right + .close-blog-info{ + right:10px; + left:auto; + } + .blog-about-text h2{ + color:#333; + font-size:216%; + margin:0 0 13px; + } + .blog-about-text + .blog-about-text-content{ + max-height:440px; + overflow-y:auto; + } + .blog-about-text #js-admins_moderators_holder #admins img, + .blog-about-text #js-admins_moderators_holder #coauthors img, + .blog-about-text #js-admins_moderators_holder span{ + display:none !important; + } + .blog-about-text #js-admins_moderators_holder h3{ + clear:left; + font-size:100%; + float:left; + color:#000; + text-transform:lowercase; + margin-bottom:5px; + margin-right:5px; + } + .blog-about-text #js-admins_moderators_holder #admins, + .blog-about-text #js-admins_moderators_holder #coauthors, + .blog-about-text #js-admins_moderators_holder p{ + float:left; + } + .blog-about-text #js-admins_moderators_holder p{ + margin:0; + color:#ccc; + } + #js-admins_moderators_holder #admins *, #js-admins_moderators_holder #coauthors *{ + display:inline; + padding:0; + margin:0; + } + .blog-about-text .blog-text-descr{ + clear:left; + padding-top:6px; + } + #cool-numbers { + margin: -3.6em 0 2.5em 13.33em; + } + + .blog-counts{ + clear:left; + font-size:133%; + color:#999 ; + margin-bottom:10px; + } + .blog-info #description { + font-size: 1.33em; /*16/12*/ + float: left; + width: 95%; + padding: 0 10px; + background: #dfe9e8 url(/i/bg-description-top-left.gif) no-repeat 0 0; + } + + .blog-info #description #inner { + padding: 20px 10px; + } + .blog-info #description p { + width: 100%; + clear: both; + margin: 0 0 .83em 0; + padding: 0; + } +/* Найти в поисковых системах: Яндекс, Google, bing. */ +.alter_search{padding-left:35px;} + + /* List of blog admins and readers */ +.blogs-search{ + padding-left:35px; +} +.blogs-search +.popular-blogs{ + + margin-left:-2%; +} +.bloglist-suggest-form { font-size: 22px; padding:0; } + #bloglist_suggest_form_input { height: 28px; float: left; width: 99%; } +.blogs-search-side +.side-rubrikator{ + padding:62px 0 17px 37px; + } +.side-rubrikator { margin: 0; line-height:200%;font-size:133%; font-family:Arial,sans-serif;} + .side-rubrikator li { margin: 0; padding: 1px 0; margin:0 6px 0 0;white-space: nowrap;color:#ccc; } + .side-rubrikator li.active{ } + .side-rubrikator li a{padding:0 4px;margin-left:-4px;} + .side-rubrikator li .side-rubrikator-counter{color:#999;} + .side-rubrikator li.active a { color: #333; text-decoration: none; background: #C5DAE5; } + + /* Приглашение в блог */ + + /*(Таблица юзеров, их предпочтений, плюс кнопки Пригласить как читателя, как писателя etc.)*/ + + /*Визуал: хабраникнейм и буллет юзера слева от неё.*/ +.corplist-suggest-form { font-size: 22px; padding:20px 0 0 35px;} + .corplist-suggest-form #corplist_suggest_form_input{height: 28px; float: left; width: 99%;} +.invitation .intro { + clear: both; + margin-top: 20px; +} +.h-user { + padding: 0 0 0 15px; + background: url(/i/bg-user2.gif) 0 90% no-repeat; + color:#999; +} + +.td-h-user { + width: 70%; + font-family: Verdana, Arial, Helvetica, sans-serif; + vertical-align: top; + padding: 10px 0; +} + .td-h-user .avatar { + margin-left: 10px; + margin-right: 10px; + border: 1px solid #ddd; + float: left; + } +.live .td-h-user dl { + margin: 0 0 0 58px; + padding-right: 10px; +} + .td-h-user dl a { + color: #666; + } + .td-h-user dl dd { + font: .83em Verdana, sans-serif; + color: #666; + } + + .td-interests { + display: inline; + } + .td-interests li { + display: inline; + font-weight: normal; + } + .candidates .controls { + padding-right: 10px; + vertical-align: middle; + text-align: center; + } + .candidates .controls li { + margin: 12px 0; + } + .candidates .controls a { + padding: 10px 0 10px 25px; + background: url(/i/corporate_icon.gif) 0 65% no-repeat; + } +.dailybest h3 sup { + font-size: 65%; +} + + + + + + /* Top section, filtrator */ + + #filtrator { + margin: 3.33em 0; + padding-left:35px; + } + #filtrator select { + font-size: 1.67em; /*20/12*/ + color: #333; + width: 100%; + } + + /* // Top section, filtrator */ + + /* Поиск по тегам */ + + .tag-search { + margin: 0 0 14px; + padding-left:35px; + width: 100%; + font: 26px/36px Verdana, sans-serif; + color: #996; + } + /* + .tag-search a {height: 36px; float:left; width: 20px;} + .tag-search a img {margin: 11px 0 0 0;} + */ + .tag-search .bullet {margin: 11px 0 0 0; float:left;} + .tag-search div.rarr {height: 36px; padding-left: 10px; float:left;} + .tag-search .inpt-text { + margin: 0 10px; + padding-left:6px; + float: left; + color: #996; + border: 1px solid #996; + } + .tag-search input.inpt-text {width: 50%;} + + + + /* Поиск habr.ru/search/ */ +.people-section .corps-list{ + padding-top:0; +} +.bloglist .searched-item, +.corps-list .searched-item{ + background:#F0E9AA; +} +.bloglist a .searched-item, +.corps-list a .searched-item{ + text-decoration:inherit; +} +.search-header { + margin: 35px 0 20px 0; +} + .search-header h1 { + margin: 0; + font: 2em/100% Verdana, sans-serif; + color: #69c; + } + .search-header form { + margin: 6px 0 0 20px; + float: left; + } + .search-header p { + float: left; + clear: both; + width: 100%; + margin: 20px 0 0 0; + } + + .searched-item { + background: #fffacd;/* Выделение поискового запроса в тексте выдачи*/ + } + + .search-results { + margin-top:30px; + overflow: hidden; + } + .search-results + .search-content-pad{ + padding-left:35px; + } + .search-results + .items{ + padding-left:35px; + } + /*Меню фильтрации результатов поиска*/ + .search-results-bar {font-size: 1em; margin-bottom: 30px;} + .search-results-bar h2, .search-results-bar #sub-nav { + display: inline; + float: none; + } + .search-results-bar h2 {margin-right: 10px;} + + /*Выдача найденных комментариев*/ + .search .items { + margin: 30px 0 0 0; + } + + /* Выдача найденных компаний */ + + .searched-companies {margin-top: 40px; clear: both;} + .searched-companies .item {margin-bottom: 20px;} + .searched-companies .summary { + margin: -20px 0 0 40px; + } + .searched-companies .summary .name a { + font: 2em/110% Verdana, sans-serif;/*24/12*/ + letter-spacing: -1px; + color: #aeaeae; + } + .searched-companies .summary .ceo, + .searched-companies .summary .url { + margin: 5px 0; + } + + + .search .tag-search { + margin: 60px 0; + } + .search .tag-search .inpt-text { + width: 100%; margin: auto 0; + } + .search .tag-search .inpt-btn { + margin: 20px 0; + background: #996; + color: #fff; + } + +.live-block-page, +.mail-page-content{ + padding-left:35px; +} +.user_profile_edit_holder{ + padding-left:35px; +} +.profile #main-content .userinfo, +.company #main-content .userinfo { + width:auto; + padding-left:35px; +} +.profile #main-content .user-recommend-user{padding-left:35px;} +.profile #main-content .items, +.profile #main-content .live{ + margin-left:35px !important; + width:auto; +} +.site-settings{ + padding-left:35px; +} +#main-content +.hentry +.summary{ + + margin-left:35px !important; +} +.profile #main-content .items +.entry-title , +.profile #main-content .items +.content, +.profile #main-content .items +.entry-info{ + + padding-left:0; + margin-left:0; +} +.profile #main-content .items +.tags{ + margin-left:0; +} +.i-am-your-father-luke{ + padding-left:35px !important; +} +#js-topic-form-title{ + padding-left:35px; +} +#js-topic-form-swither{ + padding-left:35px; +} +#js-topic-form-holder,.add-new-blog #main-content{ + padding-left:35px; +} +.job-content, +.fans-content, +.d-block{ + padding-left:35px; +} +#comments{ + padding-left:35px; +} +/* Пост в блоге */ + +div.hentry { + width: 100%; + float:left; + clear:both; + margin: 0 0 40px; +} + div.hentry + .page-menu, + .message-page-menu{ + margin-bottom:30px; + } +.message-page-menu{ + padding-left:35px; + width:auto; + margin-bottom:0; +} +.message-page-menu li{ + width:50%; +} +h2.single-entry-title{ + padding-left:35px; +} +h2.inbox-message-header{ + color:#000 !important; + margin-top:27px; + margin-bottom:7px !important; +} +h2.entry-title { + font: 2.167em/118% normal Verdana, Tahoma, sans-serif; /*26px*/ + margin-bottom: 20px; + color: #767676; + padding-left:35px; + padding-right:30px; +} + h2.entry-title span{ + color:#333; + } + +.post h2.entry-title { + clear: both; + font: 2.833em/110% Verdana, sans-serif; /*34/26*/ /*Размер заголовка в посте раздела Персональные*/ +} +.post .personal h2.entry-title, +.post .podcast h2.entry-title { + color: #c99; /*Цвет заголовка в посте раздела Персональные*/ +} +.post .translation h2.entry-title { + color: #c99; /*Ц. з. в переводном посте раздела Персональные*/ +} +.post .corporative h2.entry-title { + color: #8277a3; /*Ц. з. в посте раздела Корпоративные*/ +} + +.post .link h2.entry-title { + color: #749f79; /*Ц. з. в переводном посте раздела Персональные*/ + padding-left: 28px; +} + + + + + .entry-title a { + color: #666; + } + .entry-title a:hover{ + color:#A3A3A3; + } + .entry-title a.blog { + color: #6da3bd; + } + .entry-title a.blog:hover{ + color:#4D7285; + } + .entry-title .profiled_blog{cursor: help;padding:0 8px;height:16px;margin-left:5px;font-size:19px;background: transparent url(/i/icon_asterisk_16.png) left top no-repeat;} + + .corporative .entry-title a.blog { + color: #8277a3; + } + .corporative .entry-title a.blog:hover{ + color:#ABA4C2; + } + + .entry-title .remove { + margin: 0 0 0 10px; /*Удаление из избранного*/ + } + + + /* Стили для топика-события */ + + .vevent .entry-title {margin-bottom: 10px;} + /* + .vevent .entry-title a {color:#666; text-decoration:none;} + .entry-title a.event-name {padding: 0 .3em .1em .3em; color:#f0f0e7 !important; background: #8bb0ad; } + */ + .vevent .summary { + margin-bottom: 20px; + padding: .1em 10px; + font: 14px/140% Arial,sans-serif; + color:#666; + background:#f0f0e7; + } + + + + + /* Стили для основного контента внтури любой записи блога */ + .comments { + position:relative; + } + .hentry .content { + font: 1.083em/1.54em Verdana, sans-serif;/*13px*/ + margin-left: 35px; + margin-bottom:0.83em; + overflow:hidden; + } + + .hentry .content, + .tags, + .entry-info { + margin-left: 35px; + } + .comment_holder { + float:left; + width:100%; + } + + .hentry .hentry { + margin-left:20px; + } + + .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry { + margin-left:0; + } + .hentry .reply_form .js-field-holder, + .hentry .reply_form .help_holder, + .hentry .reply_form .comment-help{ + padding-left: 20px; + } + + .msg-meta { + position:relative; + } +li:hover > .msg-meta > .folding-dot-holder{ + display:block; +} + .msg-meta + .folding-dot-holder{ + display:none; + position:absolute; + top:0; + left:0; + width:1px; + height:1px; + } + + .msg-meta + .folding-dot{ + width:500px; + height:5px; + background:red; + right:0px; + top:11px; + position:absolute; + background: url(/i/bg-folding-dot-light.png) repeat-x 100% 0; + } + + .new-reply { + background: #E8E8FF; + } + .new-reply-old { + background: #F3F3FF; + } + .my-reply { + background: #FDF5E6; + } + + .hentry .content p, + .profile .summary p, .profile .summary img, + .user-flow .summary p, .user-flow .summary img + { + margin: 0 0 .83em 0; + } + .hentry .content img[align=left] { + margin-right: 30px; + margin-top: 5px; + margin-bottom: 5px; + } + .hentry .content img[align=right] { + margin-left: 30px; + margin-top: 5px; + margin-bottom: 5px; + } + .hentry .content img { + max-width: 100%; + vertical-align:bottom; + } + .hentry .content pre { + white-space: pre-wrap; + white-space: -o-pre-wrap; + + } + .hentry .content table { + clear: both; + width: 100%; + margin: 1.5em 0; + border: 1px solid #ccc; + } + .hentry .content table caption { + text-align: left; + text-indent: 1em; + } + .hentry .content table td, .hentry .content table th { + padding: .3em; + border: 1px solid #ccc; + } + .hentry .content ol, .hentry .content ul, + .profile .summary ul, .profile .summary ol, + .user-flow .summary ul, .user-flow .summary ol, + .info-page ul { + margin: 1.5em 1em 1.5em 3em; + padding: 0; + } + .hentry .content ol, + .profile .summary ol, + .user-flow .summary ol { + list-style: decimal; + } + .hentry .content ul, + .profile .summary ul, + .user-flow .summary ul, + .info-page ul { + margin-left: 2.65em; + list-style: disc; + } + + .habraplayer { + margin-bottom: 10px; + } + +.info-page { padding-left: 35px; } + + +ul#xsidebar { + width:32px; + float:right; + position:fixed; + top:43%; + right:0; + background:#999999; +} +ul#xsidebar.left { + left:0; +} +ul#xsidebar .mover { + padding: 0px; + text-align: center; +} +ul#xsidebar .mover a { + color: #dddddd; + text-decoration: none; +} + +ul#xsidebar li { + padding-top: 2px; + padding-bottom: 2px; + padding-left: 2px; +} + +/* Refresh comments button */ +ul#xsidebar #refresh-comments-button .new-messages { + text-align: center; +} +ul#xsidebar #refresh-comments-button a.button { + display: block; + height: 29px; + width: 28px; + background:url(/i/comments/bar/refresh.gif) no-repeat left top; +} +ul#xsidebar #refresh-comments-button a.button:hover { + background:url(/i/comments/bar/refresh.gif) no-repeat left bottom; +} +ul#xsidebar #refresh-comments-button a.button.loading { + background:url(/i/comments/bar/refresh-loading.gif) no-repeat left top; +} +ul#xsidebar #refresh-comments-button a.button.loading:hover { + background:url(/i/comments/bar/refresh-loading.gif) no-repeat left top; +} +ul#xsidebar #refresh-comments-button .divider { + border-top: solid 1px #5c5c5c; + border-bottom: solid 1px #dddddd; + width: 28px; + height: 0px; + margin-top: 1px; +} +ul#xsidebar #refresh-comments-button .new-messages { + text-align: center; +} +ul#xsidebar #refresh-comments-button .new-messages a.count { + color: white; + text-decoration: none; + font-weight: normal; + display: block; + padding: 4px 0px; +} +ul#xsidebar #refresh-comments-button .new-messages a.count:hover { + color: #ffff55; +} + +.tags { + padding: .2em 0 .1em 18px; + clear:both; + list-style: none; + background: #fff url(/i/bg-tags2.gif) no-repeat 0 50%; +} + .tags li { + display: inline; + } + .tags li a { + font-size: .83em; /*10px*/ + } + .tags li a{ + color: #666; + } + .tags li a:hover { + color:#A3A3A3; + } + +.entry-info { + font: .75em/2em Arial, sans-serif; /*9px/16px*/ + margin-top: 2.22em; /*20*/ + float:left; + clear: both; + padding: 0 0 5px; + border: 1px solid #e5e5e5; + z-index:20; + position:relative; +} + + /* Rounded corners */ + + /*.corners { + clear:both; + height:5px; + }*/ + + .corner { + width:5px; + height:5px; + overflow:hidden; + position:absolute; + font-size:0; + } + + .tl { + float:left; + left:-1px; + top:-1px; + background:url(/i/icos/entry-info-t-l.gif) no-repeat 0 0; + } + .tr { + float:left; + right:-1px; + top:-1px; + background:url(/i/icos/entry-info-t-r.gif) no-repeat 0 0; + } + .bl { + float:left; + left:-1px; + bottom:-1px; + background:url(/i/icos/entry-info-b-l.gif) no-repeat 0 0; + } + .br { + float:left; + right:-1px; + bottom:-1px; + background:url(/i/icos/entry-info-b-r.gif) no-repeat 0 0; + } + + .entry-info-wrap {clear:both;padding-left:0.56em;} + .entry-info-wrap .novote {margin-left:5px;} + + + + .entry-info .entry-info-wrap div { + padding: 5px .56em 0; + margin-right: 12px; + float: left; + } + .entry-info div.voting { + padding:0 0 0 3px; + margin-left:-0.56em; + } + .entry-info div.voting div {margin-right: 0;} + .entry-info div.voting .mark { + padding:5px .1em 0; + font-size: 1.3333em; /*12/9*/ + font-weight: bold; + color: #a9a9a9; + } + .entry-info div.voting .mark a{ + color:#6DA3BD; + } + .entry-info div.voting .mark a:hover{ + color:#4D7285; + } + + body.guest .entry-info div.voting .mark a{ + color:#999; + cursor:default; + } + .entry-info div.positive .mark { + color: #390; + } + .entry-info div.negative .mark { + color: #c00; + } + .entry-info div.voting a.vote_plus, .entry-info div.voting span.vote_plus, + .entry-info div.voting a.vote_minus, .entry-info div.voting span.vote_minus { + margin:1px 3px 0; + float:left; + width:11px; + height:15px; + font-size:0; + } + .entry-info div.voting div { + height: 12px; + border: none; + } + .entry-info div.voting .vote_plus { + background:url(/i/icos/icons_vote_posts.gif) no-repeat left bottom; + } + .entry-info div.voting .vote_minus { + background:url(/i/icos/icons_vote_posts.gif) no-repeat -11px bottom; + padding-right: 0 !important; + } + body.guest .entry-info div.voting .vote_plus, + .entry-info div.voting.expired .vote_plus, + .entry-info div.voting.mine .vote_plus{ + background:url(/i/icos/icons_vote_posts.gif) no-repeat -22px top; + cursor:default; + } + body.guest .entry-info div.voting .vote_minus, + .entry-info div.voting.expired .vote_minus, + .entry-info div.voting.mine .vote_minus { + background:url(/i/icos/icons_vote_posts.gif) no-repeat -22px bottom; + cursor:default; + } + .entry-info div.voting.mine a, + .entry-info div.voting.no_auth a, + .entry-info div.voting.voted a { + cursor: default; + } + .cannot-vote { + display: none; + } + .entry-info div.voting.mine .cannot-vote, + .entry-info div.voting.no_auth .cannot-vote, + .entry-info div.voting.voted .cannot-vote, + .entry-info div.voting.expired .cannot-vote { + display: block; + } + .entry-info div.voting.mine .can-vote, + .entry-info div.voting.no_auth .can-vote, + .entry-info div.voting.voted .can-vote, + .entry-info div.voting.expired .can-vote { + display: none; + } + .entry-info div.voting.voted_plus a.vote_plus, .entry-info div.voting.voted_plus span.vote_plus { + background:url(/i/icos/icons_vote_posts.gif) no-repeat left top !important; + } + .entry-info div.voting.voted_minus a.vote_minus, .entry-info div.voting.voted_minus span.vote_minus { + background:url(/i/icos/icons_vote_posts.gif) no-repeat -11px top !important; + } + .entry-info div a { + text-decoration: none; + font-weight: 700; + } + + /* Fav star */ + ul.hentry .fav_added a, + ul.hentry .to-favs a, + .entry-info .to-favs a, + .entry-info .fav_added a { + background: url(data:image/gif;base64,R0lGODlhDwAaAOZ/APr7/LnO3bXL2uK7Vvz58NLu9friZ/z69arD0tXl7eHr8uL1+tLv89v09921Uf3phfzjcMra5dvl68nX4ef1+fz589rt9e79/+v7/Ka+zs7h6tny9d3EmqjAz+rQc+ft8d/1+PTjttSycvb///f6+/vx0rzR3vL2+P/////4rub5+/3qjf/zlu/0+fH5/MmdQtLh7PfYWP3oe83a4u/jzdi9ke3Ma8aaSbvN2r/T4PXdfunXs+LGivHWh/jbWuT4+a7K2dy2X8qbO8PW4sTc6fjaX/bUU/fUXOr6+9+5Y9bx89u1V//ukOLz9v/2usfV3uTAZ/z369GmQv/yr9yyRNDr9c3r87+RPP/4pPjgbPHWfOfCW8ygQ/zsl+jMc+jKeN719vLZgPjdXPP//7nL19yzUP/wjdCtbvzmcuXIb///x9Ho8vjkou/WgJy3x/HUafznd/nlh9WmPLXQ3fv48t67XdDj7P3pgPnx4Mrd6fjcWtewW/fw3/z46+LCcwAAACH5BAEAAH8ALAAAAAAPABoAAAf/gH+Cgy0KLYOIiTAuMImOJBEoESSOiAoJIwkKjkMmAZ8UF00CpAI5gjkuIxhIKio/CyAYFAGCJwEJYz9gDRsNFxoCJ4MAESYgSgwMGwETAIkACAwFDQVWGc+JEnMFC3YLVUASjjhrFgg4CBZEZI4dGh0ffx8ZeW6OMzPZfwATT5WCSrApARBRDyc9CgrqY0ONjSgKQ4RJoSVEIgJfBmgcsIJFHAcgy/ghQADKlBRMVjy4IwMOBDNdghD4gydJGywyIBjYycLDHj6DDvCog0aMHh9ZlvCokKiClBg+IMQwIoSOox1Uijzw8OCInB2ORLzRwUXECx1bzghCMeiFlxs0EP7QuJHmiiMOHA4ErVFjUCAAOw==) no-repeat; + } + + .entry-info .to-favs, + .entry-info .fav_added { padding-top: 3px; margin-right: 0 !important; padding-right: 0 !important; } + .entry-info .to-favs a, + .entry-info .fav_added a { + display: block; + margin-top:2px; + width:15px; + height:13px; + font-size:0; + background-position: left top; + } + + .entry-info .to-favs a:hover, + .entry-info .fav_added a { + background-position: left bottom; + } + .entry-info .published{ + margin-left:-2px; + } + .entry-info .published a, .entry-info .mark-as-spam a {color:#369;} + .entry-info .published a { + display: block; + padding-left: 17px; + background: url(/i/bg-published2.gif) no-repeat 0 50%; + } + .entry-info .published a:hover { + background-image: url(/i/bg-published2.gif); + } + + + .entry-info .vcard a { + color:#CF0000; + padding:2px 0 3px; + background:transparent; + } + .entry-info .vcard.full a{ + padding-left:17px; + background: url(/i/bg-user2.gif) no-repeat 0 50%; + } + + .entry-info div.author { + } + .entry-info div.vote-for-user{ + padding: 8px 0px 3px; + } + .entry-info div.vote-for-user a, + .entry-info div.vote-for-user span{ + background:#74C262; + color:#fff; + display:block; + line-height:1em; + font-size:1em; + } + .entry-info div.vote-for-user a{ + width:11px; + height:12px; + background:#74C262 url(/i/bg-user-vote-up.gif) no-repeat 50% 2px; + } + .entry-info div.vote-for-user a:hover{ + background-color:#96D189; + background-position:50% -8px; + } + .entry-info div.vote-for-user span{ + padding:1px + } + .entry-info div.comments {margin-right: 5px;} + .entry-info a { + color:#CF0000; + } + .entry-info a:hover { + color: #F17D7D; + } + .entry-info1 .vcard a:visited{ + color:#F17D7D; + } + .entry-info1 .vcard a:visited:hover{ + color:#CF0000; + } + .entry-info .comments a { + display: block; + margin-top:-1px; + padding: 1px 0 0px 17px; + background: url(/i/bg-comments2.gif) 0 70% no-repeat; + } + .entry-info .comments a .new { + color: #390; + } + + .entry-info .comments a:hover .new { + color: #85C266; + } + .entry-info original-author{ + max-width:100px; + } + .entry-info .original-author a, + .entry-info .downloaded a, + .entry-info .link a + { + padding-left: 8px; + background: url(/i/bg-author-link.gif) no-repeat 0 .08em; + } + + .entry-info .twitter { margin-right: -2px !important; } + .entry-info .twitter a { display: -moz-inline-stack; display: inline-block; background: url(/i/bg-icon-twitter.gif) 0 0 no-repeat; width: 14px; height: 16px; position: relative; top: 1px; } + .entry-info .facebook { opacity: 0.5; } + .entry-info .facebook:hover { opacity: 1; } + .entry-info .facebook a { display: -moz-inline-stack; display: inline-block; background: url(/i/bg-icon-facebook.png) 0 0 no-repeat; width: 14px; height: 16px; position: relative; top: 1px; } + + /** icons for topics **/ + .translation .topic,.podcast .topic,.link .topic { + padding-left:29px; + background: no-repeat 0 6px; + } + .translation .topic{ + background-image: url(/i/translation_icon2.gif); + } + .podcast .topic{ + background-image: url(/i/podcast_icon2.gif); + } + .link .topic{ + background-image: url(/i/link_icon2.gif); + } + + .corporative .blog { + background: #fff no-repeat 0 60% ; + } + + .podcast .topic, + .post .podcast h2.entry-title { +/* background: #fff url(/i/podcast_icon2.gif) 0 60% no-repeat;*/ + } + + .podcast .topic{ + background-image: url(/i/podcast_icon2.gif); + } + .podcast .details { + font: .5em/1.92em Arial,sans-serif; + color:#767676; + white-space:nowrap; + letter-spacing:-1px; + } + /* .personal .topic { + color: #c99; + } */ + + .link .topic, + .post .link h2.entry-title { + color: #749f79; + /*background: #fff url(/i/link_icon2.gif) 0 60% no-repeat;*/ + } + .link .topic:hover, + .post .link h2.entry-title:hover{ + color:#84B18A !important; + } + .link .topic:visited, + .post .link h2.entry-title:visited{ + color:#A3C0A7 !important; + } + .link .topic:visited:hover, + .post .link h2.entry-title:visited:hover{ + color:#84B18A !important; + } + +/*Опросы*/ +.poll {margin-top:2em;} +.poll:first-child {margin-top:0em;} +.poll dl { + float: left; + clear: both; + width: 100%; + border: .5em solid #fff;/*<- just a little trick*/ +} + + .poll dl dt { + float: left; + width: 12%; + font-size: 97.6%; + text-align: right; + margin-left: -20px; + color: #ccc; + } + .poll dl dt strong { + color:#404040; + text-align: right; + } + .poll dl dd { + width: 87%; + float: left; + margin-left: 20px; + } + +.poll .total { + font-size: 97.6%; + clear: both; + margin-top: 1em; + color: #999; +} + +.poll fieldset { + +} + .poll table.answer-container { + margin: 0; + margin-bottom: 10px; + border: none; + } + .poll .answer-container td.input, .poll .answer-container td.label { + border: none; + padding: 5px 0; + } + .poll .answer-container td.input { + width: 25px; + } + .poll .answer-container input { + padding: 5px 0; + } + + /*обёртка для блока с вариантами ответа*/ + .poll-item { + float: left; + clear:both; + width: 100%; + margin-bottom: 20px; + } + + + .poll-item h3 { + margin-bottom: 5px; + color: #666; + } + + .poll-item dl { + margin: 0; + padding:0; + } + .poll-item dd div { + height: 5px; + background: #dadacd; + } + .poll-item dd div.winner { + background: #7fa0b0; + } + +.sphinx-baner{ + line-height:2em; + margin-bottom:33px; +} +/* Внутренний голос */ + +.i-am-your-father-luke { + display: block; + clear:both; + padding:.6em 0; + border: none; + font: normal 40px/110% Arial,sans-serif; + color: #cc9; + letter-spacing: -2px; + } + +/* НЛО прилетело и написало */ + +.ufo-was-here { + margin-left:35px; + margin-bottom: 20px; + font: normal 16px/110% Verdana,sans-serif; + color:#666; + } + + +/*Класс для подзамочных записей*/ + +.locked { + padding-left: 28px; + background: #fff url(/i/lock.gif) no-repeat 5px 65%; +} + +.double_locked { + padding-left: 43px; + background: #fff url(/i/double-lock.gif) no-repeat 5px 60%; +} + + .hentry .edit img, .user-vacancies .edit img, .profile-title .edit img, + .blog-title .edit img { + border: 1px solid #ccc; + margin-bottom: -2px; + } + .profile-title .edit img {margin-bottom: 0; } + + +/*Листалка по страницам*/ + + /* Вперёд-назад */ + +.page-nav { + overflow:hidden; + clear: both; + margin: 1.88em 0 .63em 0; +} + +.company .live .page-nav { + margin: 0; + padding: .83em 1.67em; + width: 80%; +} + +.next-prev { + font:2em/100% Tahoma, sans-serif; + color:#000; +} + .next-prev li { + display: inline; + padding-right: .3em; + } + + + /* Список предыдущих страниц */ + +#nav-pages { + font: 1.2em/100% arial; + padding: 0 1em 2em 0; + margin: 1em 0; + list-style: none; + clear: both; + } + + #nav-pages li { + float: left; + } + + #nav-pages a, #nav-pages em { + margin:0 0.2em 0 0.1em; + padding: .3em .4em; + display: block; + } + #nav-pages a:hover{ + background:#c5dae5; + } + + #nav-pages em { + background:#7A9BAC; + font-weight: 400; + font-style: normal; + color: #fff; + } +.blogs +#main-content +.page-nav, +.company +#main-content +.page-nav, +.profile +#main-content +.page-nav, +.users-list-container{ + padding-left:35px; +} + /*Страница со всеми тегами*/ + +.all-tags-page #main-content { + width: 100%; + margin-bottom:120px; +} + .all-tags-page #main-content h2 { + font: 26px/110% Verdana, sans-serif; + color: #999; + margin-bottom: 10px; + } + #cloud-for-blogs, #cloud-for-comps {width: 49%;} + #cloud-for-blogs { + float: left; + } + #cloud-for-comps { + float: right; + } + + + + /*Страница со всеми тегами*/ + + +/*// Main content*/ + + + + + + + + + +/* Sidebar. Right column */ + + .banner { + margin: 0 auto 20px auto; + width: 240px; + height: 400px; + clear:both; + } + + .context-note {line-height:150%;} + + + + + /* Live section */ + + + +.live { + font-size:1em; /*12px*/ + font-family:tahoma,arial; + float: left; + width: 100%; + margin: 0 0 20px; + background: #f0f0e7 url(data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIFjA8QqVwAOw==) no-repeat 0 0; +} + .live p { + margin-left: 20px; + margin-right: 20px; + } + .live dl { + margin: 0 1.67em .42em 1.67em; + } + + /* Похожие публикации. Переписать эту лажу. Наложение со стилями из forms.css */ + .live .similar-posts div {margin: 0 0 20px 0;} + .profile .live .similar-posts div {margin: 0 20px 20px 20px;} + .profile .live .similar-posts div dl {margin: 0 0 .42em 0;} + .profile .live .similar-posts div dl dt a {padding:0; background-image:none;} + + + .live h3, + #top-flooders h3 { + font-size: 2em; /*28px*/ + font-weight: normal; + line-height: 1.1em; + letter-spacing: -1px; + text-decoration: none; + margin:0 0 .71em .71em; + padding-top: .54em; + color: #999; + background: url(data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIGjANgqRwFADs=) no-repeat top right; + } + + .live dt, + .live dd, + .live dd dl, + .live dl dd dl dt { + margin: 0; + display: inline; + color:#999; + } + .live dl.air-comment{ + padding:2px 0; + margin:0 1.67em 0.42em !important; + } + + .live span.who a, .live .where, .live .topic { + margin-bottom: 1ex; + line-height: 1.35em; + } + .live .who { + padding-left: 17px; + background: url(/i/bg-user2.gif) 1px 50% no-repeat; + display: inline; + } + .live .who a, .live .where { + color:#999; + } + .live .topic { + color:#666; + } + + /* Live' links behaviour */ + + + + .live .total { + color: #C00; + } + .live .all { + position: relative; + top: 0; + right: 0; + margin: 0 .83em .83em 0; + text-align: right; + color:#999; + } + /*Rounded corners*/ + + .live .bg-top-r { + background: url(data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIGjANgqRwFADs=) no-repeat top right; + float: left; + width: 100%; + } + .live .bg-bott-l { + background: url(data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIGhGOAGt0FADs=) no-repeat bottom right; + float: left; + width: 100%; + } + .live .bg-bott-r { + float: left; + width: 100%; + background: url(data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIFDG6YwVEAOw==) no-repeat bottom left; + } + .live .bg-top-r,.profile .live div.bg-top-r{ + margin-left:0 !important; + background: url(data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIGjANgqRwFADs=) no-repeat top right; + } + div.live .bg-top-r, div.live .bg-top-r div{ + margin-bottom:0 !important; + } + /* // Live section */ + + + /* Best Writers */ + .best_writers{} + .best_writers ul{margin: 0 1.67em 1.67em} + .best_writers ul li{overflow:hidden;margin-bottom:10px;} + .best_writers ul li:last-child{margin-bottom:0px;} + .best_writers ul li .avatar{float:left;margin-right:10px;display:block;border:1px solid #999;} + .best_writers ul li .login{float:left;display:block;margin-right:10px;margin-top:3px;} + .best_writers ul li .name{float:left;display:block;font-size:91%;color:#666666;margin-top:5px;} + + + /* Tag cloud */ + +.tag-cloud { + float: left; + width: 90%; + padding: 0px; + margin-top: 10px; + margin-bottom: 10px; + margin-left: 5%; + margin-right: 5%; + text-align: center; +} + +.profile .tag-cloud { + width: 98%; + float:none; + margin:0 auto; + } + + .tag-cloud ul { + white-space: normal; + } + .tag-cloud ul, + .tag-cloud ul li { + display: inline; + } + .tag-cloud a { + font-size: .83em; + color: #369; + text-decoration: none; + line-height:1.4em; + } + .tag-cloud a:hover { + color: #85A3C2; + } + +/* .tag-cloud a {white-space:nowrap;}*/ + .tag-cloud a.w1 { font-size: 80%; } + .tag-cloud a.w2 { font-size: 100%; } + .tag-cloud a.w3 { font-size: 120%; } + .tag-cloud a.w4 { font-size: 140%; } + .tag-cloud a.w5 { font-size: 160%; } + .tag-cloud a.w6 { font-size: 180%; } + .tag-cloud a.w7 { font-size: 200%; } + .tag-cloud a.w8 { font-size: 220%; } + .tag-cloud a.w9 { font-size: 240%; } + .tag-cloud a.w10 { font-size: 260%; } + + + + + /* // Tag cloud */ + + /* Ratings (companies, blogs) */ + + +.rating table { + font-size: 1.33em; /*16px*/ + width: 90%; + clear: both; + margin:0 0 0.71em 1.2em; + border:none; + border-collapse: collapse; +} + .rating table td { + font-family: Arial, sans-serif; + vertical-align: middle; + padding: .3em 0; + } +.rating table th { + font-size: .75em; /*12px*/ + font-weight: normal; + padding-bottom: .5em; + letter-spacing: -1px; + color: #999; +} +.rating table td { + /*padding-left: 5px;*/ +} + .rating .title a { + font: bold .94em/1.13em 'Lucida Grande', Verdana, Sans-Serif; + color:#666; + } + .rating .title a:hover{ + color:#A3A3A3; + } + .rating .karma-value { + font-size:.94em; + font-family:arial; + text-align: center; + color:#6c6; + font-weight:bold; + } + .rating .value { + text-align: center; + } + .rating .value span { + font: normal normal bold .88em Arial, sans-serif; + padding: .1em .5em; + color: #CC66CC; + } + div.companies .value span{ + color:#CC66CC; + } + + .company .rating .title a { + font-size: 1.25em; /*20/16*/ + font-weight: normal; + } + .company .rating .title a.new-feedback { + font-size: 11px; + } + .company .first { + margin-top: 0; + background-image: none; + } + + + + + /* // Ratings (companies, blogs) */ + + + /* Jobs */ + +.jobs { + width: 100%; +} + .jobs dl dt a { + font: 1.17em Arial, sans-serif; /*12/14*/ + color: #663; + + } + .jobs dl dt a:hover{ + color:#A3A350; + } + .jobs dl dt a:visited{ + color:#BEBE84; + } + .jobs dl dt a:visited:hover{ + color:#A3A350; + } + .jobs dl dd { + font: bold 1.33em/1.4em Arial, sans-serif; /*12/16*/ + padding: 0 .2em; + display:inline; + white-space: nowrap; + color: #fff; + background: #99cccc; + } + .live .job_item dt, + .live .job_item dd { + display: inline; + } + + /*// Jobs*/ + + /*Top flooders*/ + + #top-flooders { + font-size: .83em; /*10/16*/ + clear: both; + width: 100%; + margin: 10px 10px 10px 20px; + } + + #top-flooders h3 { + font-size: 280%; + margin-left: 0; + } + + #top-flooders dl, #top-flooders dl dt, #top-flooders dl dd { + margin: 0; + padding: 0; + } + + #top-flooders dl { + margin-bottom: 15px; + } + + #top-flooders dl .flooder { + margin: -2.5em 10px 1em 3em; + } + #top-flooders dl dd dl dt a { + color:#999; + } + #top-flooders dl dd dl dt a:hover{ + color:#333; + } + .flooder dd a { + line-height: 140%; + color:#f60; + } + + /* // Top flooders */ + + + /* Calendar */ + + .calendar-table table { + font-size: .92em; /*11/12*/ + font-family: Arial, Helvetica, sans-serif; + margin: 5px 0; + text-align: center; + } + .calendar-table th { + font-weight: normal; + } + .calendar-table .date { + font-size: 160%; + /*font-weight: bold;*/ + color: #999; + } + .calendar-table .nav th, .calendar-table .nav td { + padding-bottom: 5px; + } + .calendar-table .nav a { + color: #909090; + font-weight: bold + } + /* // Calendar */ + + +/* // Sidebar. Right column*/ + + + + + + + /* Карма. Общие стили для таблиц */ + +.starr { + padding-right: 15px; + background: url(/i/starr.gif) right 70% no-repeat; +} +.rating-dyn { + font-size:.75em; + font-family:arial; + line-height: 110%; + text-align: center; +} +.up { + color:#33cc00; +} +.down { + color:#ff0033; +} + + +/*Прилепляем футер книзу, введя див-обёртку, охватывающую всё кроме подвала*/ + +#nonFooter {position: relative;min-height: 100%;} +* html #nonFooter {height: 100%;} /*для IE*/ +.footerest #wrapper {padding-bottom: 10em;} +.footerest #footer {position: relative;margin-top: -9em;} + + + + + + + + + + + + + +/* Comments */ + + + +/* Форма отправки коммента (или отзыва о компании) */ + +.add-comment { + float: none; + clear: both; + width: 100%; + margin-top: 10px; + padding-bottom:5px; +} + .add-comment h3 { + padding: 0 0 0 20px; + /*margin: 0 0 10px;*/ + margin: 0; + font: 1.67em Verdana, sans-serif; /*20/12*/ + letter-spacing: -1px; + color: #afa56a; + background: url(/i/add_comment.gif) 0 .5em no-repeat; + } + .add-comment > div, + .comment_holder .reply_form + { + position: relative; + } + .add-comment h3 a {color: #afa56a;text-decoration:none; border-bottom: 1px dashed #afa56a;} + .add-comment dl, + dl.comment-help { + float: left; + width: 100%; + font: .92em/100% Arial, sans-serif; /*11/12*/ + /*padding: 10px 0;*/ + } + dl.comment-help{ + padding-top:0; + } + .add-comment dt, + .add-comment dd, + dl.comment-help dt, + dl.comment-help dd { + float: left; + } + .add-comment dt img, + dl.comment-help img { + border: 1px solid #ddd; + } + .add-comment dd, + dl.comment-help dd { + margin: 5px 0 0 10px; + color: #999; + } + .add-comment dd .name, + dl.comment-help dd .name { + font: 1em Tahoma, sans-serif; + font-weight: 700; + color:#666; + } + .add-comment dd span , + dl.comment-help dd span{ + margin-left: 5px; + } + dl.comment-help dd span{ + position: absolute; + right: 0px; + top: -8px; + z-index: 3000; + } + .add-comment form { + clear: both; + width: 100%; + } + .reply_form form { + clear: both; + width: 99%; + margin-bottom: 10px; + } + + .add-comment input, + .reply_form input { + margin: 10px 0; + } + + .add-comment textarea, + .reply_form textarea { + border: 1px solid #c8d2df; + width: 99%; + resize: none; + outline:none; + } + .editor .add-comment textarea, + .editor .reply_form textarea{ + border: 0px solid #c8d2df; + } + .add-comment .post, + .reply_form .post { + margin-left: 7px; + } + .add-comment .js-field-error-msg { color:#ff0000; } + +/* // Форма отправки коммента (или отзыва о компании) */ + + +#comments { + clear: both; + overflow:hidden; +} + .comments-header-mail{ + display:none; + } + .comments-header-visible{ + display:block; + } + #comments h2.comments-header { + margin: 0px 0 20px; + padding-left: 23px; + font: normal 1.67em/105% Verdana, sans-serif; /*20/12*/ + letter-spacing: -1px; + color: #afa56a; + background: #fff url(/i/comments.gif) 0 90% no-repeat; + } + + ul.hentry {clear: both;width: auto;} + ul.hentry ul.author{ + overflow: hidden; + } + ul.hentry ul.author + li{ + vertical-align:baseline !important; + } + ul.hentry ul li{ + line-height:18px; + } + ul.hentry .avatar { + float: left; + width:24px; + height:24px; + list-style: none; + position:relative; + margin-right:10px; + } + + ul.hentry .avatar b{ + position:absolute; + top:0; + left:0; + height:24px; + width:24px; + background:url(/i/bg_avatar_mask_mini.gif) no-repeat 0 0; + } + ul.hentry .avatar img { + display:block; + height:24px; + width:24px; + } + + ul.hentry .fn, + ul.hentry .date, + ul.hentry .bookmark, + ul.hentry .to-favs, + ul.hentry .fav_added, + ul.hentry .up-to-parent, + ul.hentry .down-to-child, + ul.hentry .vote-for-user, + ul.hentry .single-tree{ + font-family:tahoma; + float: left; + color: #666; + padding-top: 5px; + margin-right: 10px; + } + ul.hentry .vote-for-user{ + padding-top: 8px; + margin-right:12px; + margin-left: -7px; + } + ul.hentry .vote-for-user a, + ul.hentry .vote-for-user span{ + background:#74C262; + color:#fff; + + text-decoration:none; + display:block; + line-height:1em; + font-size:1em; + } + ul.hentry .vote-for-user a{ + width:11px; + height:12px; + background:#74C262 url(/i/bg-user-vote-up.gif) no-repeat 50% 2px; + } + ul.hentry .vote-for-user a:hover{ + background-color:#96D189; + background-position:50% -8px; + } + ul.hentry .vote-for-user span{ + padding:1px; + font-size:0.83em; + } + + ul.hentry .up-to-parent a, + ul.hentry .down-to-child a + { + display:block; + float:left; + height:15px; + line-height:15px; + text-decoration: none; + border-bottom: dotted 1px #79B1D4; + } + + ul.hentry .to-favs a, + ul.hentry .fav_added a { + display:block; + margin-top:3px; + width:15px; + height:13px; + font-size:0; + background-position: left top; + } + + ul.hentry .to-favs a:hover, + ul.hentry .fav_added a { + background-position: left bottom; + } + + + ul.hentry .fn a { + font-size: .92em; /*11px/12*/ + font-weight: bold; + color: #666; + } + ul.hentry .fn a:hover{ + color:#333; + } + ul.hentry .fn a:visited{ + + } + ul.hentry .fn a:visited:hover{ + + } + ul.hentry .date, + ul.hentry .bookmark { + + } + ul.hentry .bookmark a, + ul.hentry .date abbr { + border: none; + font-size: .83em; /*10/16*/ + } + ul.hentry .vote { + float: right; + margin-top: .4em; + } + ul.hentry .vote li { + float: left; + font: bold 1.08em/100% Arial, Helvetica, sans-serif; + color: #a9a9a9; + background: none; + } + ul.hentry .vote.positive li { + color: #390; + } + ul.hentry .vote.negative li { + color: #c00; + } + + ul.hentry .vote .buttons, + ul.hentry .vote .buttons .vote-for { + margin-left: 5px; + padding-right: 5px; + } + ul.hentry .vote .buttons a { + margin-top:-11px; + float:left; + width:13px; + height:13px; + font-size:0; + cursor:pointer; + } + ul.hentry .vote .buttons a{ + background:url(/i/icos/icons_vote_comments_4modes.png) no-repeat + } + ul.hentry .vote .buttons a.vote_plus { + margin-left:5px; + background-position: -13px 0; + } + ul.hentry .vote .buttons a.vote_plus:hover{ + background-position:-13px -13px ; + } + ul.hentry .vote .buttons a.vote_minus { + background-position:0 0; + } + ul.hentry .vote .buttons a.vote_minus:hover { + background-position:0 -13px; + } + ul.hentry .vote.expired a.vote_plus, + ul.hentry .vote.mine a.vote_plus, + ul.hentry .vote.no_auth a.vote_plus, + ul.hentry .vote.voted a.vote_plus { + background-position:-13px -39px !important; + cursor:default; + } + ul.hentry .vote.expired a.vote_minus, + ul.hentry .vote.mine a.vote_minus, + ul.hentry .vote.no_auth a.vote_minus, + ul.hentry .vote.voted a.vote_minus { + background-position:0 -39px !important; + cursor:default; + } + ul.hentry .vote.voted_plus a.vote_plus { + background-position:-13px -26px !important; + } + ul.hentry .vote.voted_minus a.vote_minus { + background-position:0 -26px !important; + } + + + ul.hentry .entry-content, + .comment-preview { + font: 1.08em Arial, sans-serif;/*13/12*/ + margin: 0; + padding: 10px 0 10px 0; + clear: both; + + margin-bottom:10px; + } + ul.hentry .entry-content img, + .comment-preview img{ + display: block; + max-width: 100%; + } + + ul.hentry .entry-content .entry-content-only{ + overflow-x:auto; + padding-right:5px; + } + ul.hentry .entry-content .entry-content-only ul, + .comment-preview ul{ + margin: 1px 0 10px 20px; + list-style: inside disc; + } + ul.hentry .entry-content .entry-content-only ol, + .comment-preview ol{ + margin: 1px 0 10px 20px; + list-style: inside decimal; + } + + ul.hentry .bad5 { opacity: 0.2 } + ul.hentry .bad4 { opacity: 0.35 } + ul.hentry .bad3 { opacity: 0.5 } + ul.hentry .bad2 { opacity: 0.65 } + ul.hentry .bad1 { opacity: 0.8 } + + ul.hentry .entry-content-only { + transition: opacity 700ms linear; + -webkit-transition: opacity 700ms linear; + } + ul.hentry .entry-content-only:hover { + opacity: 1; + } + + /* http://bolknote.ru/2008/07/18/~1787 */ + @-moz-document url-prefix(){ + ul.hentry .entry-content .entry-content-only { + line-height:15.1px; + padding:2px 1px; + margin:-2px 0; + } + } + + + + ul.hentry .entry-content .entry-content-only img{ + max-width:100%; + display:block; + } + ul.hentry .entry-content p, .comment-preview p { + margin: 0 0 10px 0; + padding: 0; + } + ul.hentry p.reply, .comment-preview p.reply { + margin: 5px 0 0; + font: .85em Tahoma,Arial, sans-serif;/*11/13*/ + } + ul.hentry .entry-content .bad a { /*Ссылка Показать плохой комментарий*/ + color: #ccc; + } + + /*JS-based show-hide comments*/ + + .show-hide-comments { + font-size: 90%; /*14/12*/ + color: #999; + margin-bottom: 10px; + padding: .1em 0 .2em 10px; + background: #FAEBD7; + } + .show-hide-comments a { + padding: 0 5px 0 0; + background: #FAEBD7; + /*text-decoration: none;*/ + } + .show-hide-comments a:hover { + color: #666; + } + + + /*for JavaScript comments extender*/ + + .extended { + float: left; + padding: 10px 10px 0 10px; + background: #FFFAF0; + } + +/* // Comments */ + + + + + + + + + + + + + + + + + + +/* Популярные комментарии и Прямой эфир + some code from Live section. */ + +/*.live-section #comments { + margin-top: 40px; +} + .live-section #comments h1 { + font: normal 2em/110% Verdana, sans-serif; + letter-spacing: -1px; + color: #69c; + } + .live-section #comments h1 .rss { + margin-left: 5px; + } + .live-section .stat { + margin: 10px 0 30px 0; + } */ + +.popular-comment { + width: 100%; + clear: both; + overflow: hidden; +} + .comment-body { + float:left; + width:80%; + } + .comment-descr { + font: .83em/130% Tahoma, sans-serif; /*10/12*/ + vertical-align: top; + width:15%; + margin-right: 5%; + float:left; + } + .comment-descr dt, + .comment-descr dd { + display: inline; + } + .comment-descr dd { + color:#f00; + } + + + .live .who a, .live .where, + .comment-descr .where { + color:#999; + } + + .live .who a:hover, .live a.where:hover, + .comment-descr .where:hover { + color:#333; + } + + + .live .topic, + .comment-descr .topic, + .side-side a { + color:#666; + } + .live a.topic:hover, + .comment-descr .topic:hover, + .side-side a:hover{ + color:#A3A3A3; + } + .live a.topic:visited, + .comment-descr .topic:visited, + .side-side a:visited { + color:#B5B5B5; + } + .live a.topic:visited:hover, + .comment-descr .topic:visited:hover, + .side-side a:visited:hover { + color:#A3A3A3; + } + .live .total { + color: #C00; + } + .live .all { + position: relative; + top: 0; + right: 0; + margin:20px 25px 10px 0px; + text-align: right; + color:#999; + } + + +/*Блок с мозаикой из юзерпиков с подписями. Офигенная штука. Любите её*/ + +.people-mosaic {margin-top: 10px;} +.people-mosaic ul {float: none;} + .people-mosaic ul li { + float: left; + margin: 10px 10px 0 0; + } + .people-mosaic dl { + display: block; + text-align: center; + } + .people-mosaic dl dd a { + font: 1em Arial, sans-serif; + color: #008cd2; + } + .people-mosaic dl dt a img { + padding: 1px; + background: #ddd; + } + +.img-border { + border: 1px solid #ddd; +} + + + + + + + +.declaration { + font-size:2em; + font-family:arial; + line-height:140%; + color:#404040; +} +.declaration p { + margin-bottom:1em; +} + + +.alert { + color:#f00; +} + +/*Вывод юзеров по странам и городам в разделе "Люди". Код используется также для вывода компаний и блогов в + +результатах поиска.*/ + +.user-flow { + clear:both; + float:left; + margin:30px 0; +} + + +.user-flow-item { + margin: 0 0 40px 0; +} + .user-flow-item dt img { + border: 1px solid #ccc; + } + .user-flow-item .summary { + margin: -50px 0 0 60px; + font-size: 1.08em; /*13/12*/ + } + .search .user-flow-item .summary { + margin-top: -45px; + } + +.who-n-when { + margin: 0 0 10px 0; + color: #aeaeae; +} + .who-n-when a { + letter-spacing: -1px; + color: #aeaeae; + } + .who-n-when .blog-name { + color: #79b1d4; + } + .who-n-when dt { + font: 2em/110% Verdana, sans-serif;/*24/12*/ + } + .who-n-when dd { + margin-top: 5px; + font: .83em/100% Verdana, sans-serif;/*10/12*/ + } + + +/*Выделение особого сообщения (системного, например. Цвет фона как у слова в поиске)*/ + +.special-msg { + background: #fffacd; +} + +/* Сообщение о том, что по тегу ничего не найдено */ + +.no-found {margin-top: 20px; font-size: 150%;padding-left:35px;} +.main-search{ + width:auto !important; + padding-left:35px; + } + .main-search form{ + position:relative; + margin-bottom:30px; + } + + .main-search form .page-menu { + margin-top:35px; + } + .main-search form .page-menu li label{ + + + } + .main-search form .page-menu li input{ + height:0;width:0;border:none;padding:0;position: absolute;background:transparent; + overflow:hidden; + } + .main-search fieldset{ + overflow:hidden; + } + .main-search .inpt-text { + margin: 0 10px 0 0; + padding:0 0 0 6px; + font-size:22px; + float: left; + height:30px; + color: #996; + line-height:30px; + border: 1px solid #996; + } + .main-search input.inpt-text { + width: 78%; + } + .main-search .inpt-btn{ + float:left; + height:32px; + width:32px; + padding:0; + margin:0; + overflow:hidden; + border:none; + background:transparent url(/i/bg-button-enter.png) no-repeat scroll 0 -66px; + } + .main-search .inpt-btn:active{ + background-position:0 -99px; + } + + .main-search { + position:relative; + } + + +#fbPanel { + position: absolute; + background-color: #F0F0E7; + width: 400px; + border: 1px silver solid; + padding: 10px 10px 10px 10px; + z-index: 30; +} +#fbPanel textarea { + width: 100%; + margin-bottom: 20px; +} + +.info-text { + font-size: 16px; + padding-top: 20px; + float: left; +} + +#html_tags_help { + margin-top: 20px; + width:96%; + background-color:#F0F0F0; + color: black; + font-size:0.9em; + padding:15px 20px 20px 10px; + z-index:9999; + position: relative; + float: left; +} +#html_tags_help h4 { + cursor:default; + color: black; + font-size: 18px; + margin-bottom: 10px; + font-weight: bold; +} +#html_tags_help h5 { + cursor:default; + color: black; + font-size: 16px; + font-weight: bold; +} +#html_tags_help dt { + color:#000; + font-weight: bold; +} +#html_tags_help dd { + color:#000; + margin-bottom: 10px; +} +#html_tags_help #html_tags_help_content { + width:290px; + height:465px; + overflow:auto; + background-color:#fff4cd; + padding:10px; +} +#html_tags_help_close { + top:1em; + right:10px; + position: absolute; +} +a#html_tags_help_close, a#html_tags_help_close:hover, a#html_tags_help_close:visited { + color: gray; + font-size: 0.8em; + border-bottom: 1px dashed gray; +} +div#godmode { + left: 0px; + top: 0px; + width: 100%; + height: 100%; + position: fixed; + text-align: center; + vertical-align: middle; + background-image: url(/i/halfvisible.gif); + z-index: 10000; +} +div#godmode span { + color: white; + font-size: 72px; + font-weight: bold; + display: block; + margin-top: 30%; +} + +/* */ + + +/* Advert */ + +.advert-page .fright_holder{ + width:188px; + float:left; + margin: 0px 15px 15px 0px; +} +.advert-page .fright_holder .fright_bg_top{ + background:url(/i/adv/fright_bg_top.gif) no-repeat top; + width:188px; + height:22px; +} +.advert-page .fright_holder .fright_bg_bottom{ + background:url(/i/adv/fright_bg_bottom.gif) no-repeat top; + width:188px; + height:22px; +} +.advert-page .fright_holder .fright_bg_center{ + background:#e5e5e5; +} +.advert-page .fright_holder .fright_bg_center p{ + padding: 0px 20px; + margin: 0px; + color: #9e9e9e; + font-size: 11px!important; +} + +.advert-page .rightcolumn2, .rightcolumn3{ + float: right; + width: 478px; + padding-left: 30px; + padding-bottom: 20px; +} +.advert-page .rightcolumn2 img#screen { + margin-top: 1em; + border: solid #CCC 1px; + margin-left: 2px; +} + + + /* Оформление текста в рекламном разделе */ + +.advert-page h1 { + font: 2.5em/100% Verdana,sans-serif; /*30px/12px*/ + } +.advert-page h2 { + clear:left; + color:#FF6000; + font-family:Arial,sans-serif; + font-size:23px; + font-weight:normal; + padding-top:0.5em; +} + +.advert-page p { + line-height: 1.54em; +} + +#buy_package_form { + opacity: 0.97; + display:none; + left: 50%; + margin-left: -212px; + position:absolute; + z-index: 50; + } + #buy_package_form #form-arrow-down{ + display: none; + border-top:7px solid #EFEFEF; + border-left:7px solid transparent; + border-right:7px solid transparent; + width:1px; + margin:0 0 0 20px; + + } + #buy_package_form.package-form-too-much-right .ex_middle{ + margin-left: -355px; + } + #buy_package_form.package-form-too-much-right #form-arrow-down{ + margin-left: 379px; + } +#buy_package_form .habrablock{ + + margin-bottom: 0; + } +#buy_package_form .ex_middle{ + width: 425px; + } +#buy_package_form .js-close-buy-package{ + position: absolute; + cursor: pointer; + top: 10px; + right: 14px; + font-size: 1.5em; + } + + +.advert-page .habrablock { + background:#EFEFEF none repeat scroll 0 50%; + font-size:13px; + margin-bottom:20px; + vertical-align: middle; +} +.advert-page ul.nice { + list-style-image:none; + list-style-position:outside; + list-style-type:none; + margin:0 0 0 4ex; + padding:0; +} +.advert-page ul.nice li { + margin-bottom:1ex; + padding-left:3ex; + background:transparent url(/i/adv/list-style.gif) no-repeat scroll 0 5px; + font-size:12px; + line-height: 1.54em; +} +.price-table input{ + background:#8BBF76; + color:#FFFFFF; + font-size:1.15em; +} +.advert-logos{ + text-align:center; + overflow:hidden; + margin:0 auto; + width:610px; +} +.advert-logos +.adv-logo{ + float:left; + overflow: hidden; + margin-right: 16px; +} +.advert-text{ + font-size:1.2em; + margin:2em 0; + } + .advert-corps{ + text-align:center; + } +.features-trial{ + text-align:center; + padding:7px 18px; + font-size:25px; + } + .features-trial span{ + color:#5A5A5A; + background:#E7FAEC; + padding:7px 18px; + } +.advert-page p.intro { + font-size:17px; +} +.advert-page .info_line { + padding:10px 20px; +} +.advert-page .info_line .captcha-holder{overflow:hidden;} +.advert-page .info_line .captcha-holder img{float:left;margin-right:10px;} +.advert-page .info_line .captcha-holder a{float:left;margin-top:25px;} +.advert-page .info_line .captcha-input{padding-left:120px;padding-top:5px;} + +.advert-page .first_line { + padding-top:28px; +} +.advert-page .label { + float:left; + width:120px; +} +.advert-page .type_ch { + height:50px; +} +.advert-page .button_holder { + padding:10px 22px; +} +.advert-page img.stat { + float: left; + margin-right: 20px; +} +.ponchiki #main-content { + width: 95%; +} +.ponchiki .checkbox, .ponchiki .radio { + border:0 none !important; + bottom:-2px; + padding-right:12px; + position:relative; + width:15px !important; +} +.advert-page .input input, .advert-page .input textarea { + border:1px solid #DDDDDD; + padding:2px 4px; + width:250px; +} +.advert-page .tm-form dl { + margin-bottom: 0px !important; +} +#advert-form { + vertical-align: middle; +} + #advert-form fieldset {margin:0;padding:0;} + + +.advert-page .result { + display: block; + font-size: 17px; + margin-left: 30px; + margin-right: 30px; + /* margin-top: 40%; */ + text-align: center; +} + + +.price-table { + width:100%; +} + .price-table tr.even {background: #eaf1f5;} + .price-table th { + padding-bottom: .5em; + font: normal 150%/110% Arial,sans-serif; + text-align:left; + border-bottom: 1px solid #000; + } + .price-table td { + font: 120%/150% Arial,sans-serif; + vertical-align: middle; + padding: .6em 4px; + } + + .price-table td em { + margin-left: -.05em; + font-size:300%; + color:#69c; + } + .price-table td span { + color:#999; + } + + + +/* Stat */ + +#flashcontent1, #flashcontent2, #flashcontent3, #flashcontent4, #flashcontent5, #flashcontent6 { + float: left; +} + +#help-shortcuts { + margin-left: 20px; +} +#help-shortcuts dt { + font-weight: bold; +} +#help-shortcuts dd { + margin-left: 20px; + margin-bottom: 10px; +} + + +/* Help */ + + /* Оформление текста в разделе "Помощь" */ + +.help h1, .company h1, .live-block-page h1 { + font: 2.5em/100% Verdana,sans-serif; /*30px/12px*/ + } +.help h2 { + clear:left; + color:#FF6000; + font-family:Arial,sans-serif; + font-size:23px; + font-weight:normal; + padding-top:0.5em; +} + +.help p { + line-height: 1.54em; +} +.help ol{margin-top:1em;} +.help li { + line-height: 1.54em; + margin-bottom:0.5em; +} + +.help #main-content ul { + line-height: 1.54em; +} + + + + + + + + + + + + + + + + + + + + + + + +/* Habralenta */ + +.habralenta-settings .my-blogs { + margin: auto 20px 1em 20px; +} +.habralenta-settings .btn-holder { + padding: 20px; +} +.habralenta-settings .btn {margin: auto 20px 10px 20px;} + +#invite-page { + margin: 40px; +} +#invite-count-label { + margin-bottom: 20px; + display: block; +} +#add-invite { + float: left; + width: 300px; +} +#add-invite .field { + width: 270px; +} +#add-invite dl.required dt { + font-weight: bold; +} +#add-invite .btn-bar { + text-align: right; + padding-right: 30px; +} +#invite-list { + float: left; + width: 320px; +} +#invite-list li { + margin-bottom: 10px; +} +input.money { + background:#E3A2A0 none repeat scroll 0 0; + color:#FFFFFF; + font-size:32px; + letter-spacing:-2px; + width: 130px; +} +span.money { + color:#E3A2A0; + font-size:32px; + letter-spacing:-2px; +} +.event-subscribe-form .unsubscribe { + text-decoration: none; + border-bottom: dashed 1px #79B1D4; +} +.event-subscribe-form .unsubscribe.disabled { + text-decoration: none; + border-bottom: dashed 1px silver; + color: silver; +} +.event-subscribe-form fieldset { + height: 30px; +} + + +.event { + margin-left: 35px; +} + .event .nonfriends { + margin-top: 20px; + } + .event h3.participants { + margin: 0; + font: 1.67em Verdana, sans-serif; /*20/12*/ + letter-spacing: -1px; + color: #afa56a; + } + +.salary-type label { + display: inline; +} +.privacy-persnal-info{ + display:none; + color:red; +} +.privacy-persnal +.privacy-persnal-info{ + display:block; + } +.privacy-persnal +span{ + display:none; +} + +.privacy-offtop { + color: gray; +} +.field-privacy .info { + display: none; +} +.privacy-offtop .info { + display: block !important; + color: red; +} +.privacy-offtop #js-field_privacy_text, .privacy-offtop input { + display: none; +} + +@media print { + + body { + background: white; + color:#000; + font-size: 12pt; + } + ul.hentry .entry-content{ + padding-bottom:30px; + } + .blog-title,.yandex-direct,.yandex{ + display:none; + } + a:link, a:visited { + color: #000; + background: transparent; + font-weight: bold; + text-decoration: underline; + } + .hentry .content a:link:after, .hentry .content a:visited:after { + content: " (" attr(href) ") "; + font-size: 90%; + } + + + #header-wrapper,.header, #sidebar, #footer, + .page-navigation, .sub-nav, .page-nav, + .buttons, p.reply, .add-comment, + li.bookmark, li.to-favs, li.down-to-child,.up-to-parent + {display:none;} + + + #wrapper, #main-content { + width: auto; + border: 0; + margin: 0 2%; + padding: 0; + float: none !important; + } + + + div.hentry { + clear:both; + float:none; + margin:0 0 40px; + width:auto; + } +} +.habrauserava{ + height:48px; + width:48px; + position:relative; + } + .habrauserava img{ + width:48px; + height:48px; + } + .habrauserava + b{ + position:absolute; + top:0; + left:0; + height:48px; + width:48px; + background:url(/i/bg_avatar_mask.gif) no-repeat 0 0; + } +.yandex-direct{ + margin:10px 0;clear:left;margin-left:35px +} +.oauth{ + padding-left:35px; + margin:0 0 100px; +} +.oauth-app-block{ + margin:30px 0; +} + +.oauth-app-block dl{ + overflow:hidden; + margin:0 0 3px; +} +.oauth-app-block dl dt{ + font-weight:700; + float:left; + width:164px; +} +.oauth-simple-auth{ + padding-top:50px; + float:left; + width:600px; + } + .oauth-simple-auth h1{ + font-size:2.17em; + } + .oauth-simple-auth form, + .oauth-simple-auth .result{ + padding-top:10px; + } + .oauth-simple-auth form .error{ + color:red; + } + .oauth-simple-auth form p {overflow:hidden;padding:2px 0;} + .oauth-simple-auth form p label{ + float:left; + width:160px; + font-weight:700; + } + .oauth-simple-auth .oauth-finish{ + margin-top:1.5em; + font-size:1.5em; + } +#comments > ul > li > .msg-meta .single-tree {display:none;} +ul li:nth-child(1) > .msg-meta .single-tree{display:none;} +.single-threading .comment_holder{display:none;} + +li.single-tree-node-last > .msg-meta{background:#eef3f3;} + +.comment_holder li.single-tree-node, +.comment_holder li.single-tree-node-last{display:block;} + li.single-tree-node-last li {display:block;} +.single-threading > .msg-meta .js-single-tree, +.single-threading li.single-tree-node > .msg-meta .js-single-tree, +.single-threading li.single-tree-node-last > .msg-meta .js-single-tree {display:none;} + +li > .msg-meta .js-multiplay-tree {display:none;} + +.single-threading li.single-tree-node-last > .msg-meta .js-multiplay-tree{display:block;} + +@media only screen and (max-device-width: 480px) and (-webkit-min-device-pixel-ratio:0) { + #comments .hentry li .msg-meta .folding-dot-holder{ + display:none !important; + } +} +img.help-tip{ + position:relative; + top:3px; +} +#help-tip-text.help-tips-too-much-left{ + margin-left:-15px; + } + #help-tip-text.help-tips-too-much-left + #help-tip-text-arrow{ + margin-left:15px; + } +#help-tip-text{ + position:absolute; + width:375px; + margin-left:-187px; + margin-top:-8px; + display:none; + color:#fff; + z-index:500; + opacity:0.95; + } + #help-tip-text-content{ + position:absolute; + bottom:7px; + padding:15px; + background:#46688b; + -moz-border-radius-topleft:4px; + -webkit-border-top-left-radius:4px; + -moz-border-radius-topright:4px; + -webkit-border-top-right-radius:4px; + -moz-border-radius-bottomleft:4px; + -webkit-border-bottom-left-radius:4px; + -moz-border-radius-bottomright:4px; + -webkit-border-bottom-right-radius:4px; + border-radius:4px; + } + #help-tip-text-arrow{ + border-top:7px solid #46688b; + border-left:7px solid transparent; + border-right:7px solid transparent; + width:1px; + margin:0 auto; + } +.search-ads{ + margin-top:50px +} +.search-ads #yandex_direct{padding:10px;} +.company_admin #sidebar form .wide-wide-inputs{ + border-bottom:1px solid #aaa; + padding-bottom:9px; + margin:8px 0 12px; +} +.company_admin #sidebar form p{ + margin-top:1em; + margin-bottom:1em; +} +.company #sidebar{ + margin-top:46px; +} +.side-side { + padding: 0 20px 20px; + } +.side-side h3{ + margin:0 -20px 0.71em 0; + } + .side-side li{ + + margin:9px 0; + } + .side-side li small{ + color:#999; + font-size:0.9em; + } +.wide-wide-inputs dl,.company_admin #sidebar form .wide-wide-inputs dl{ + margin:0; +} + + .wide-wide-inputs dt,.company_admin #sidebar form .wide-wide-inputs dt{ + font-size:0.9em; + margin:0; + } + .wide-wide-inputs dd{ + padding-right:5px; + } + .wide-wide-inputs dd input{ + width:100%; + } +.js-do-more-inputs{ + font-size:0.9em; +} +#js-field-holder-with-help{ + overflow:hidden; +} +.ponchiki #wrapper{ + overflow: hidden; + } +#john_black{ + display: none; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: #000; + opacity: 0.5; + z-index: 40; + } + /* Сайдбар с кармаграфом и т.п. */ + + +.karma-n-statistic p { + margin: 15px 0; + font-size:100%; + color:#666; + } +.karma-n-statistic h3 { + margin: 15px 0; + font: normal 1.5em/120% Verdana, sans-serif;/*18/12*/ + letter-spacing: -1px; + color: #999; + } +.karma-n-statistic h2{ + color: #999; + font-size:233% ; + margin:0 0 20px; + } +.karma-n-statistic .stats { + margin: 10px 0 35px; + color:#666; + overflow:hidden; + font-size:116%; + + } +.karma-n-statistic +.karma-stat{ + margin-bottom:50px; + } +.karma-n-statistic .stats dt{ + float:left; + clear:left; + margin-right:4px; + } +.karma-n-statistic .stats dd{ + float:left; + } +.karma-n-statistic .stats dd.global{ + margin-bottom:30px; +} +.karma-n-statistic { + font-family: Verdana, sans-serif; + + overflow: hidden; +} +.karma-n-statistic +.tag-cloud{ + text-align:left; + margin-left:0; + float:none; + } +.search-results-title{ + padding-left: 35px; + margin-bottom:16px; + + } + + +#people-tags{ + float: left; + margin-top: 38px; + width: 140px; + } + #people-tags li{ + padding-bottom: 17px; + transition: opacity 200ms linear; + -webkit-transition: opacity 200ms linear; + } + #people-tags a{ + display: block; + height: 46px; + width: 116px; + font: 13px/13px Helvetica, Arial, sans-serif; + text-decoration: none; + position: relative; + overflow: hidden; + background: no-repeat 0 50%; + } + #people-tags a span{ + visibility: hidden; + } +#people-tags:hover li{ + opacity: 0.6; +} +#people-tags:hover li.active, #people-tags:hover li:hover{ + opacity: 1; +} +#table-people-rating #people-tags li { + width: 140px; + } + #table-people-rating #people-tags li a{ + height: 46px; + width: 140px; + background-position: 50% 50%; + background-color: #ebf0f5; + border-top-left-radius: 23px; + border-bottom-left-radius: 23px; + -webkit-border-top-left-radius: 23px; + -webkit-border-bottom-left-radius: 23px; + -moz-border-radius-topleft: 23px; + -moz-border-radius-bottomleft: 23px; + } + #table-people-rating #people-tags li.active a{ + background-color: #92b3d2; + } + #table-people-rating #people-tags a.podcaster { + background-position: 34px 50%; + } + #table-people-rating #people-tags li a.se_gamer { + margin-top: 20px; + } +#people-tags a.author { background-image: url(/i/tags/author.png); } +#people-tags a.star { background-image: url(/i/tags/star.png); } +#people-tags a.legend { background-image: url(/i/tags/legend.png); } +#people-tags a.oldresident{ background-image: url(/i/tags/oldresident.png); } +#people-tags a.commentator{ background-image: url(/i/tags/commentator.png); } +#people-tags a.podcaster { background-image: url(/i/tags/podcaster.png); } +#people-tags a.translator { background-image: url(/i/tags/translator.png); } +#people-tags a.statistic { background-image: url(/i/tags/statistic.png); } +#people-tags a.humorist { background-image: url(/i/tags/humorist.png); } +#people-tags a.habred { background-image: url(/i/tags/habred.png); } +#people-tags a.unhabred { background-image: url(/i/tags/unhabred.png); } +#people-tags a.troll { background-image: url(/i/tags/troll.png); } +#people-tags a.evangelist { background-image: url(/i/tags/evangelist.png); } +#people-tags a.reader { background-image: url(/i/tags/reader.png); } + +#people-tags a.se_gamer, #people-tags a.se_supergamer, #people-tags a.se_turbogamer { + background-position: 52% 5px !important; + position: relative; +} +#people-tags a.se_gamer { + background-position: 56% 5px !important; + position: relative; +} +#people-tags a.se_gamer span, #people-tags a.se_supergamer span, #people-tags a.se_turbogamer span { + visibility: visible; + position: absolute; + display: block; + text-align: center; + width: 100%; + bottom: 5px; + color: #284fa2; +} +#people-tags a.se_gamer { background-image: url(/i/special/se/tags/gamer.png); } +#people-tags a.se_supergamer { background-image: url(/i/special/se/tags/supergamer.png); } +#people-tags a.se_turbogamer { background-image: url(/i/special/se/tags/turbogamer.png); } + +.userinfo #people-tags{ + overflow: hidden; + float: none; + width: auto; + margin-top: 0; + padding-top: 6px; + } + .userinfo #people-tags li{ + float: left; + margin-bottom: 10px; + } + .userinfo #people-tags li a{ + background-position: 50% 100%; + } +.habr-button{ + font: 19px Arial, sans-serif; + color: #fff; + text-decoration:none; + border:2px outset #F0F0F0; + background: #cc9; + padding:0 6px; + display:inline-block; +} +.habr-button:active{ + padding-left:8px; + padding-right:4px; + border-style:inset; +} +a.habr-button:hover{ + background-color:#6DA3BD; + color:#fff; +} +.side-button{ + margin-bottom: 20px; +} +.big-nice-text{ + + color:#E3A2A0; + font-size:32px; + letter-spacing:-2px; + } + .nice-time{ + text-transform: lowercase; + } + .big-nice-text + input{ + position: relative; + top: -6px; + } + +#karma-reset-games{ + padding-left: 35px; + +} +.karma-reseting .karma-reset-form-reseting { + display: block; +} +.karma-noreseting .karma-reset-form-noreseting{ + display: block; +} +.karma-reset-game{ + display: none; +} +.karma-reset-form{ + + } +.karma-reset-button{ + margin-top: 28px; + text-align: center; + font-size:32px; +} +.karma-reset-button input{ + + font-size: 32px; +} + +input.disabled{ + background-color: #ddd; + color: #eee; + border-style: solid ; +} +.tab-sun{ + margin-top:-3px; +} +.sandbox .page-nav{ + + padding-left: 35px; +} +#js-topic-version-prototype{ + display: none; +} +.topic-preview-content{ + margin-left: -35px; +} +.topic-preview-content .hentry{ + margin-bottom: 0; +} +.topic-preview{ +margin-top: 5px; + padding: 15px; + border: 5px solid #D6D6D6; +} +.post-title{ + font: 2.17em/100% Verdana, sans-serif; + letter-spacing: -1px; + padding:11px 0 22px; + margin: -11px 0 0; + width: 100%; + position: relative; + z-index: 15; + height: 26px; + + } + .post-title .post-title-header{ + color: #7fb084; + float: left; + font-size: 100%; + + margin: 0 ; + } + .post-title .post-title-list{ + position: relative; + float: left; + } + + .post-title .post-title-list ul{ + border: 1px solid #fff; + position: absolute; + top: -11px; + left: 0; + background: #fff; + list-style: none; + margin-left:4px; + padding: 10px 10px 10px 8px; + } + .post-title .post-title-list li{ + display: none; + margin-bottom: 12px; + } + .post-title .post-title-list ul li.current{ + display: block; + /*float: left;*/ + } + .post-title .post-title-list ul a{ + text-decoration: none; + font-size: 100%; + } + .post-title .can-select ul{ + border-color: #ddd; + + + } + .post-title .can-select ul li{ + display: block; + } +#js-topic-form-holder{ + overflow: hidden; +} + + + + +/*Плашка с кнопками визуального редактирования текста*/ +.editor {} + .editor .panel { + background: #eaecea; + float: left; + width: 100%; + padding: 2px 0; + } + .editor .panel a { + display: block; + width: 20px; + height: 20px; + overflow:hidden; + float: left; + margin-left:2px; + text-decoration:none; + } + .editor .panel a:hover { + background: #fff; + } + .editor .panel a.txt { + width:auto; + padding:0 2px; + } + .editor .panel a span { + color:#4d4d4d; + position:relative; + top:3px; + font-size:12px; + font-weight:bold; + letter-spacing:-1px; + } + .editor .panel select { + float: left; + margin-left:2px; + } + + .editor .text-holder { + clear:both; + border-color:#d4d0c8; + border-style:inset; + border-width:2px 1px 1px 2px; + padding:2px 2px 2px 3px; + } + .editor .text-holder textarea { + overflow:auto; + border:none; + } + +.emply_lenta{margin-left:35px;} + + + + + +/* Nokia special */ +#special_nokia{margin-left:35px;margin-bottom:20px;clear:both;background: #f0f0e7;padding:20px;position:relative;-webkit-border-radius: 10px;-moz-border-radius: 10px;border-radius: 10px;} +#special_nokia .logo{display:block;width:105px;height:66px;position:absolute;left:20px;top:20px;background: url(/i/special/nokia/after_post_html_block/logo.png) no-repeat; } +#special_nokia .ovi{display:block;width:68px;height:67px;position:absolute;right:20px;top:20px;background: url(/i/special/nokia/after_post_html_block/ovi.png) no-repeat; } +#special_nokia .text{margin-left:150px;margin-right:100px;font-size:10px;font-fimily:Arial;color:#555555;} +#special_nokia .text span{font-size:18px;} +#special_nokia .text .links{overflow:hidden;margin-top:15px;font-size:10px;} + + + + + +/* common */ +.hidden { display:none !important; } +del.robots-noindex{display:none;} + +.has-two-inputs{ + width:103%; +} +dd.has-two-inputs{ + width:102%; +} +#comment_form input.loading { + background: url(/i/form/loader_button.gif) repeat; +} +#comment_form.loading input.post { + background: url(/i/form/loader_button.gif) repeat; +} + +span.two-inputs{ + float:left; + margin-right:3%; +} +/* Forms */ +input.wide, select.wide, textarea.wide { + width:99%; +} +.input-row{ + overflow:hidden; +} +.two-inputs{width:47%;margin-right:1%;} +.wide-me{ + overflow:hidden; + } + .wide-me input.two-inputs{ + width:98%; + } +.right-stick{ + float:right; + margin-left:10px; + } +input.wide-half, select.wide-half, textarea.wide-half { + width:50%; +} + +input.checkbox {vertical-align:middle;} +input.textfield {} + +input.large { + font-size:3em; +} + + + +textarea.large { + height:40em; +} +textarea.medium { + height:7em; +} +textarea.small { + height:3em; +} + +select.with-title option { + background:#eaecea; +} +select.with-title option.title { + background:#fff; +} + +input.btn-big { + font-size:2em; +} + +.achtung-minen { + color: #f00; + display:none; +} +.js-marked-error .achtung-minen { + display:block; +} + + + +form input.btn { + background:#d4d0c8 url(/i/form/loader_field.gif) no-repeat -1000px 0; + outline:none; +} +form.save-loading input.btn-save, +form.blogSave-loading input.btn-save { + background:#d4d0c8 url(/i/form/loader_field.gif) repeat 0 0; +} +form.preview-loading input.btn-preview { + background:#d4d0c8 url(/i/form/loader_field.gif) repeat 0 0; +} +form.draft-loading input.btn-draft { + background:#d4d0c8 url(/i/form/loader_field.gif) repeat 0 0; +} + +form .loading input.textfield { + background:url(/i/form/loader_field.gif) repeat 0 0; +} + + +.topic-autosave { + padding:5px; +} +form.autosave-loading .topic-autosave { + background:url(/i/form/loader_field.gif) repeat 0 0; +} + +.clear { + clear:both; +} + +.sublabel { + margin: 2px 0 3px; + font-size: 11px; + color: #999; + overflow:hidden; +} + +.block { + margin-bottom:2em; +} +.block-semi { + margin-bottom:1em; +} +.block-super { + margin-bottom:4em; +} + + +.block-tr td { + padding-bottom:2em; +} +.block-semi-tr td { + padding-bottom:1em; +} +.block-super-tr td { + padding-bottom:4em; +} + + + + +.system { + text-decoration:none; +} +.system em { + font-style:normal; + line-height:140%; + border-bottom:1px dashed #79B1D4; +} +h2.forms .system { + font-size:0.6em; +} + +fieldset legend { + padding:5px 5px 1.5em 5px; + margin-left:-5px; +} + + +.topic-preview { + display:none; +} + +.topic-preview .habracut { + padding-bottom:0.8em; + margin-bottom:0.8em; + border-bottom:1px dotted #999; + position:relative; +} +.topic-preview .habracut .scissors { + position:absolute; + left:30px; + bottom:-0.8em; + padding:0 3px; + color:#999; + background:#fff; + font-weight:bold; + letter-spacing:-1px; +} + + + + +/* Rounded corners blocks */ + +.round-corner-box { + margin-bottom: 20px; + font-size:1em; /*12px*/ + font-family:tahoma,arial; + background: #f0f0e7 url(/i/bg-corner-top-left.gif) no-repeat 0 0; +} + .round-corner-box .bg-bott-r { + width: 100%; + background: url(/i/bg-corner-bottom-left.gif) no-repeat bottom left; + } + .round-corner-box .bg-bott-l { + background: url(/i/bg-corner-bottom-right.gif) no-repeat bottom right; + width: 100%; + } + .round-corner-box .bg-top-r { + background: url(/i/bg-corner-top-right.gif) no-repeat top right; + padding: 10px 20px; + } + + /* Header inside */ + + .round-corner-box .bg-top-r h3 { + display: block; + margin:0 0 20px 0; + font-size: 2.33em; /*28px*/ + font-weight: normal; + line-height: 1.1em; + letter-spacing: -1px; + text-decoration: none; + color: #999; + } + + .round-corner-box .all { + text-align: right; + color:#999; + } + + + /* Blocks inside rounded corners */ + + + /* Live comments */ + + .live-wrapper {margin-bottom: 10px;} + + .live-comment {margin: 0 0 5px 0;} + .live-comment dt, + .live-comment dd, + .live-comment dd dl, + .live-comment dl dd dl dt { + margin: 0; + display: inline; + color:#999; + } + + .live-comment span.who a, .live-comment .where, .live-comment .topic { + margin-bottom: 1ex; + line-height: 1.35em; + } + .live-comment .who { + padding-left: 16px; + background: url(/i/bg-user.gif) 0 50% no-repeat; + display: inline; + } + .live-comment .who a {color:#999;} + + + + + .live-comment .where{color:#666 ;} + + .live-comment .topic {color:#666;} + + /* Live' links behaviour */ + + .live-comment .who a:hover, .live-comment a.where:hover { + text-decoration: none; + background: #f66; + color:white; + } + .live-comment a.topic:hover { + text-decoration: none; + background: #6c6; + color:#fff; + } + + .live-comment .total {color: #C00;} + + + /* Live popular companies */ + + .rating .title .new-feedback { + padding: 0 0 0 2px; + font: 11px/100% normal Arial,sans-serif; + color: #fff; + background: #6cf; + text-decoration: none; + } + + + + + + + + + + + + + /* Recommendations (habraprofile) */ + + .round-corner-box .recommendation { + margin: auto 0; + padding: 10px 20px; + font: 1em/150% Arial, sans-serif; /*12/12*/ + } + .round-corner-box .recommendationl dt a { + padding-left: 16px; + color: #666; + background: url(/i/bg-blogs.gif) 0 80% no-repeat; + } + .round-corner-box .recommendation dd { + color: #000; + } + + /* // Recommendations (habraprofile) */ + + + + + /* Blocks inside rounded corners */ + + + + + + + + + + + + +/* // Rounded corners */ + + +/* Company card */ + form#company-card { + margin-left: 20px; + } + + form#company-card h1 { + margin-bottom:1em; + width:100%; + clear:both; + font-size:2.167em; + color: #767676; + font-weight: normal; + margin-left: -20px; + } + form#company-card dl { + margin-bottom:1em; + width:100%; + clear:both; + } + form#company-card dl input, + form#company-card dl select, + form#company-card dl label { + width:100%; + display:block; + } + form#company-card dl label { margin-bottom:0.3em; } + + form#company-card dl#tariff-holder { + margin:0 5% 2em 0; + width:50%; + float:left; + clear:none; + } + form#company-card dl#actuality-holder { + width:15.7em; + float:right; + clear:none; + line-height:1.5em; + } + form#company-card dl#actuality-holder dt { float:left; } + + form#company-card dl#actuality-holder dd { float:right; } + + form#company-card dl#actuality-holder * { vertical-align:middle; } + + form#company-card dl#actuality-holder label { display:inline; } + + form#company-card dl#actuality-holder input { + width:6.5em; + display:inline; + } + + form#company-card dl#rss-holder { margin-top:3em; } + + form#company-card dl dd.error { color:#cc0000; } + + form#company-card input.submit { float:right; margin-right: -6px; } + +.zebra {text-decoration:none; border-bottom: 1px dashed #79B1D4;} /* Подчёркивание JavaScript-ссылок */ + +#getInviteYounger_text { color: #519500; } + + +.sort-order a { + margin-left:3px; + text-decoration:none;border-bottom:#77a3bb 1px dashed; + } + a.sort-order_lnk_Sel { + text-decoration:none; padding:0px 4px 2px 4px; + background:#e8e9eb; border-color:#e8e9eb; color:#000; + } +.sort-order_Srch { + margin:0 35px; + } +.answer-sort { + margin-top:50px; + } + .answer-sort .comments-header { + display:inline; + } + .answer-sort .sort-order { + padding-left:5px; + } + + + +/* futu_alert */ + +/* +.futu_alerts_holder { + position:fixed; + _position:absolute; + + top:0; + _top: expression( + eval(document.documentElement.scrollTop) + "px" + ); + left:50%; + width:450px; + z-index:9999; + margin-left:-225px; +} +*/ +.futu_alert_outer { + position: fixed; + top: 0; left: 0; + width: 100%; + + z-index:9999; +} +.futu_alert_outer .frame { + position:relative; + z-index:9999; +} +.futu_alerts_holder { + position:absolute; + left:69%; top:0; + width:30%; + z-index:9999; +} + +.futu_alerts_holder .futu_alert { + position:absolute; + top:-1000px; + background-color:#FFEBA0; + font:1em Tahoma, sans-serif; + border:1px solid #FFFFFF; + margin-left:60px; +} +.futu_alerts_holder .futu_alert .futu_alert_header { + font-size:1em; + margin:10px 20px 0; +} +.futu_alerts_holder .futu_alert .futu_alert_text { + font-size:0.8em; + margin:10px 20px; +} +.futu_alerts_holder .futu_alert .futu_alert_close_button { + position:absolute; + padding:10px; + top:0; + right:0; + outline:none; +} +.futu_alerts_holder .message { + color:#FFF; + background-color:#6690C9; +} +.futu_alerts_holder .error { + color:#FFF; + background-color:#ed6060; +} +.futu_alerts_holder .save { + color:#FFF; + background-color:#73a168; +} + + + + + + +/* form */ +form.tm-form dl { + margin-bottom: 20px; +} + +form.tm-form dl dd.desc { + color: gray; +} + +form.tm-form dl.required dt label { + font-weight: bold; +} + +form.tm-form dl dd.error { + color: red; + display: none; +} + +form.tm-form dl.invalid dd.error { + display: block; +} + +form.tm-form .unknown-error { + margin-top: 20px; + margin-bottom: 20px; + color: red; +} + +form.tm-form .error-list { + display: none; +} + +form.tm-form input.loading, +input.loading, +button.loading { + background: url(/i/form/loader_button.gif) repeat; +} + +form.tm-form label { + display: inline; +} +form.tm-form dl dd.categories{ + overflow:hidden; + margin:7px 0; +} +form.tm-form dl dd.categories label{ + float:left; + width:49%; +} + + + +/* xl */ +.xl-little div.hentry { margin-bottom: 10px; } + +.xl-panel { padding: 3px 7px; background: #f7f7f2; margin-bottom: 2em; clear: both; overflow: hidden; margin-left:35px;} + .xl-panel ul { list-style: none; float: left; width: 72px; height: 20px; padding: 0; margin: 0; background: transparent url(/i/xl.gif) -112px 0 no-repeat; cursor: pointer; } + .xl-panel ul li { margin: 0; padding: 0; width: 24px; height: 20px; float: left; } + .xl-panel li.little:hover { background: transparent url(/i/xl.gif) -184px 0 no-repeat; } + .xl-panel li.xl_view_radio_little_active { background: transparent url(/i/xl.gif) -256px 0 no-repeat !important; } + .xl-panel li.medium:hover { background: transparent url(/i/xl.gif) -208px 0 no-repeat; } + .xl-panel li.xl_view_radio_medium_active { background: transparent url(/i/xl.gif) -280px 0 no-repeat !important; } + .xl-panel li.full:hover { background: transparent url(/i/xl.gif) -232px 0 no-repeat; } + .xl-panel li.xl_view_radio_full_active { background: transparent url(/i/xl.gif) -304px 0 no-repeat !important; } + .xl-panel .help { float: left; color: #999; padding-left: 10px; } + .xl-panel .rss { float: right; display: block; width: 16px; height: 1.7em; overflow: hidden; text-indent: -1000px; background: transparent url(/i/feed_icon_16x16.gif) 0 50% no-repeat; } + +.xl_updown, .xl_hide { cursor: pointer; display: -moz-inline-stack; display: inline-block; width: 21px; height: 20px; background: transparent url(/i/xl.gif) 0 50% no-repeat; } +.xl_updown:hover { background-position: -21px 50%; } +.xl_downarrow { background-position: -42px 50%; } +.xl_downarrow:hover { background-position: -63px 50%; } +.xl_hide { width: 14px; background-position: -84px 50%; } +.xl_hide:hover { background-position: -98px 50%; } + + + +/* footer */ +#footer a { color: #6da3bd; } +#footer a:hover{color:#4D7285;} +#about { float: left; } +a.footer_logo { + margin: 0 1.1em 0 2%; + float:left; + display:block; + width:31px; + height:29px; + background:url(/i/tm_logo_sharp.gif) no-repeat 0 0; + outline:none; + text-indent:-9999px; +} +a.footer_logo:hover { + background-position:0 -31px; +} + + #copyright-and-footer-nav { + float: right; + margin-right: 20px; + } + #copyright-and-footer-nav li { + display: inline; + } + +#footer { + width: 95%; + min-width: 725px; + max-width: 1200px; + clear: both; + margin: 10px auto 0; + + + font:.917em/120% Tahoma, Arial; /*11px/12px*/ + color:#949494; + position: relative; + top: 20px; + overflow: hidden; +} + +#footer .footer-conttent{ + + border-top: 1px solid #ccc; + padding: 30px 0; + overflow: hidden; + margin-left:35px; +} +.bottom_menu { width: 80%; position: relative; overflow: hidden; float: left; } +.bottom_menu dl { float: left; width: 16.5%; font-size: 1em;} + .bottom_menu dl.user { width: 18%; } + .bottom_menu dl.sections { width: 15%; } + .bottom_menu dl dt { margin-bottom: .6em; font-size: 1.2em; } + .bottom_menu dl dt a { font-weight: bold; } + .bottom_menu dl.user dt a { border: 0; font-weight: bold; } + .bottom_menu dl dd { margin-bottom: .4em; line-height: 1.6em; } + + + +/* favourites_add */ +#favourites_add_hidden { display: none; } + #favourites_add { position: relative; height: 0; clear: left; z-index: 10; margin-left: 35px; } + #favourites_add .favourites_add_inner { background: #f0f0e7; padding: 1em; position: absolute; top: 1em; left: 0; width: 95%; z-index: 10; } + #favourites_add label { font-size: 1.1em; padding-bottom: .1em; } + #favourites_add #favourites_add_tags { width: 99%; } + #favourites_add dd.desc { font-size: .9em; color: #666; } + #favourites_add .favourites_add_footer { margin-top: 1em; color: #666; } + #favourites_add #favourites_add_cancel { color: #000; text-decoration: none; border-bottom: 1px dashed; } + + + +/* misc */ +.top-tags { list-style: none; margin-bottom: 15px; } + .top-tags strong { font-weight: normal; } + .top-tags em { font-style: normal; float: right; text-align: right; color: #999; text-decoration: none; } + .top-tags a { display: block; padding: 4px 20px; overflow: hidden; text-decoration: none; } + .top-tags a strong { text-decoration: underline; } + .top-tags a:hover, .top-tags a.current { background: #d2d2c9; color: #fff; } + .top-tags a:hover strong, .top-tags a.current strong { text-decoration: none; } + .top-tags a:hover em, .top-tags a.current em { color: #fff; } + +ul.tags li.fav a { color:#339900;} + ul.tags li.fav a:hover{ + color:#85C266; + } +.tags li.favourites_edit_tags { margin-left: 10px; } + .tags li.favourites_edit_tags a, .tags li.favourites_edit_tags a:link, .tags li.favourites_edit_tags a:visited { color: #ccc; background: none; } + .tags li.favourites_edit_tags a:hover { color: #666; } + +.sub-nav { clear: both; margin-bottom: 20px; } + .sub-nav li { display: inline; margin-right: 3px; } + .sub-nav li a { color: #093; font-size: 1.083em; padding: 0 2px; text-decoration: none; } + .sub-nav li.current a { color: #fff; background: #ff9525; } + +/* re:store banner margins fix for opera */ +@media all and (min-width: 0px) { + #iStoreMenuBanner { margin-top: -2px; margin-bottom: 0; } +} + + + +/* header */ +/** There is new habraheader bellow; Gleb Arestov, july 09**/ +.header{ + padding:10px 0 0; + overflow:hidden; + width: 95%; + margin:0 auto; + min-width: 725px; + max-width: 1200px; + } + .header + .panel-personal{ + float:left; + } + .header + .panel-tools{ + float:right; + } + .header + .logo{ + text-align: center; + width:110px; + height:110px; + display:block; + margin:10px auto; + background:url(/i/bg-multilogo.png) no-repeat 50% -144px; + } + .header + .logo:hover{ + background-position:50% -274px; + } + .header + a.root{ + margin:0 auto; + width:240px; + height:130px; + background-position:0 0 !important; + } +.panel-personal, .panel-tools { + font-family: Arial, Helvetica, sans-serif; + } +.panel-personal{ + padding-left:35px; + width:250px; + color:#999; + line-height:1.33em; + } + .panel-personal dt a{ + margin-right:10px; + } + .panel-personal + .habrauser-charge{ + margin-top:0.4em; + font-size: 91%; + line-height:1.2em; + } + .panel-personal + a{ + color:#999; + } + .panel-personal + a:hover{ + color:#333; + } + .panel-personal + dd + a{ + margin-right:10px; + } + .panel-personal + a.habrauser{ + color:#343434; + font-weight: 700; + } + .panel-personal + a.habrauser:hover{ + color:#858585; + } + .panel-personal + .habrauser-newmail{ + background:url(/i/icos/new-message.gif) no-repeat 0 2px; + padding-left:21px; + margin-left:-21px; + } +.panel-tools{ + padding-right:1%; + width:271px; + + } + .panel-tools + .panel-settings{ + padding-right:28px; + margin-bottom:0.66em; + } + .panel-settings{ + text-align: right; + } + .panel-settings + a{ + color:#999; + } + .panel-settings + a:hover{ + color:#333; + } + .panel-settings + small{ + color:#ccc; + font-size:1em; + } + .panel-tools + .panel-search{ + float:right; + width:auto; + } + .panel-search{ + text-align: right; + margin-top:-2px; + padding:2px 0 2px 2px; + } + .panel-search + .panel-search-label{ + position:relative; + float:left; + } + .panel-search + .panel-search-label + span{ + position:absolute; + left:5px; + top:3px; + color:#ccc; + display:none; + cursor:pointer; + } + .panel-search + label.input-placeholding + span{ + display:block; + } + .panel-search + .in-text{ + border:1px solid #D1D1D1; + padding:2px; + float:left; + width:230px; + margin-right:5px; + height:15px; + padding:2px; + } + .panel-search + .in-text:focus{ + outline:1px solid #6DA3BD; + } + .panel-search + .in-submit{ + float:left; + padding:0; + margin:0; + border:none; + height:21px; + width:21px; + overflow:hidden; + background:transparent url(/i/bg-button-enter.png) no-repeat scroll 0 0; + } + .panel-search.enter-button-hightlight + input.in-submit, + .panel-search + input.in-submit:active{ + outline:none; + background-position: 0px -22px; + } + .panel-search + p{ + margin: 0; + } + .panel-search + .input-placeholding{ + color:#ccc; + } +.panel-nav-top{ + padding:30px 0 25px 35px; + overflow:hidden; + margin-top:-15px; + min-width:1000px; + text-transform: lowercase; + } + .panel-nav-top + li{ + height:36px; + line-height:1.2em; + float:left; + font-size:250%; + margin-right:26px; + color:#343434; + } + .panel-nav-top + li + a{ + color:#6da3bd; + } + .panel-nav-top + li + a:hover{ + color:#4D7285; + } + .panel-nav-top + li.current + a{ + color:#343434; + } + + .panel-nav-top + li.current-full + a{ + color:#000; + text-decoration: none; + cursor: default; + } + .panel-nav-top + li.current + a.disabled{ + text-decoration:none; + } + .panel-nav-top + li.current + a:hover{ + color:#000000; + } + .panel-nav-top + li span a{ + float:left; + font-size:0.5em; + line-height:1.2em; + max-width:140px; + } + +.panel-personal { width: 350px; } +.panel-personal iframe { display: -moz-inline-stack; display: inline-block; *display: inline; *zoom: 1; margin-left: 10px; position: relative; top: 3px; } + + + + +/* user_profile */ +.profile-header{ + float:left; + width:149%; + padding-left:35px; + margin:-8px 0 6px; + height:48px; + } + .profile-header h1{ + float:left; + margin-right:5px; + } + .profile-header h1 .favicon{ + margin-top:14px; + } + + .profile-header .profile-actions{ + float:left; + margin-right:10px; + position:relative; + } + .profile-header .profile-actions dt{ + float:left; + overflow: hidden; + color:#333333; + padding:0; + line-height:1em; + height:42px; + font-size:300%; + + } + .profile-header .profile-actions dt .habrauser{ + line-height:1em; + padding:2px 6px 9px ; + float:left; + } + + .profile-header + .profile-actions + dd.menu-arr{ + position:relative; + z-index:2; + float:left; + display:none; + cursor:pointer; + font-size:175%; + font-weight:400; + line-height:46px; + width:15px; + padding:0 11px 0 7px; + margin-left:-6px; + text-align:center; + vertical-align:middle; + height:40px; + color:#ccc; + } + + .profile-header + .profile-actions + dd.menu-arr + .press-done{ + display:none; + } + + .profile-header + .profile-actions + dd.menu-arr:hover{ + color:#333; + } + .profile-header + .profile-actions + .profile-actions-menu-container{ + display:none; + + position:absolute; + + width:200px; + right:0; + top:5px; + } + .company-header + .profile-actions-menu-too-left + .profile-actions-menu-container{ + right:0; + left:-21px; + } + .profile-header + .profile-actions + .profile-actions-menu{ + float:right; + padding:0; + background:#fff; + border:1px solid #333; + background:#fff; + margin-top:3px; + + } + .profile-header + .profile-actions + .profile-actions-menu + .cor-1px{ + padding:1px 0; + border:2px solid #333; + border-width:0 2px; + background:#fff; + margin:0 -2px; + } + .profile-header + .profile-actions + .profile-actions-menu + ul{ + background:#fff; + margin:0 -1px; + padding:7px 40px 7px 14px; + } + .profile-header + .profile-actions + .profile-actions-menu + li{ + padding:5px 0; + line-height:1.2em; + overflow:hidden; + font-size:108%; + } + .profile-header + .profile-actions + .profile-actions-menu + li + a{ + + } + .profile-actions-menu + li + a.js-cancel{ + float:right; + font-size:0.8em; + line-height:1.2em; + padding-top:2px; + } + .js-you-love-this-corp .js-prof-company-addfan, + .js-you-work-here .js-prof-company-worker, + .js-prof-company-notworker, + .js-prof-company-removefan{ + display:none; + } + .js-you-love-this-corp .js-prof-company-removefan, + .js-you-work-here .js-prof-company-notworker{ + display:block; + } + .company-header + .profile-actions + .profile-actions-menu + ul{ + padding:22px 14px 7px 14px; + } + + .company-header + .profile-actions + .profile-actions-menu-container{ + width:258px; + } + .company-header + .profile-actions + .profile-actions-menu{ + float:none; + } + + .profile-header + .profile-actions.profile-actions-usable + dd.menu-arr{ + display:block; + } + .profile-header + .profile-actions.profile-actions-usable + dt:hover{ + border-color:#B7D0E5; + } + .profile-header + .profile-actions.active + dt{ + border-color:transparent !important; + } + .profile-header + .profile-actions.active + dd.menu-arr{ + color:#333; + } + .profile-header + .profile-actions.active + dd.menu-arr + .press-can{ + display:none; + } + .profile-header + .profile-actions.active + dd.menu-arr + .press-done{ + display:inline; + } + .profile-actions.active + .profile-actions-menu-container{ + display:block; + } + + .profile-header + .profile-karma-holder{ + float:left; + margin-top:-9px; + margin-left: 10px; + } + .profile-header + .profile-karma-holder + dl{ + text-align:center; + } + .profile-header + .karma{ + padding:0; + margin-right:15px; + } + .profile-header + .habraforce{ + margin:0; + padding:0; + } + .profile-header + .profile-adm{ + padding: 0 0 0; + float:left; + margin-left:20px; + } + .profile-header + .profile-adm + a{ + display:block; + float:left; + margin:0 5px; + width:24px; + height:24px; + line-height:24px; + vertical-align:bottom; + text-align:center; + padding:6px; + } + .profile-header + .profile-adm + a.invitogiver{ + background: url(/i/img-icon-invite.png) no-repeat 50% 50%; + } + .profile-header + .profile-adm + a.profedit{ + background: url(/i/topic_edit.gif) no-repeat 50% 50%; + } + + .profile-header + .profile-adm + a:hover{ + background-color:#eee; + } +.profile-header +.karma, +.profile-header +.habraforce{ + font-family: Verdana, sans-serif; + } +.profile-header .karma a{ + margin-top:9px; + width:15px; + height:26px; + } +.profile-header .karma .vote_plus { + background:url(/i/icos/icons_vote_karma_big.gif) no-repeat 0 0 !important; + } +.profile-header .karma .vote_minus { + background:url(/i/icos/icons_vote_karma_big.gif) no-repeat -16px 0 !important; + } + +.profile-header .karma.voted_plus .vote_plus { + background:url(/i/icos/icons_vote_karma_big.gif) no-repeat 0 -27px !important; + } + +.profile-header .karma.voted_minus .vote_minus { + background:url(/i/icos/icons_vote_karma_big.gif) no-repeat -16px -27px !important; + } + + + +.profile-header .karma dd.vote{ + display:block; + } +.profile-header +.karma .mark, +.profile-header +.habraforce .number, +.profile-header +.habraindex .number{ + background:transparent; + font-size:300%; + } + .profile-header + .karma .mark{ + color:#6c6; + padding:0; + } + .profile-header + .habraforce .number{ + color:#CC66CC; + } +.profile-header .karma dt, +.profile-header .karma .total, +.profile-header .habraforce dt, +.profile-header .habraindex dt{ + color:#ccc; + } +.profile-header dt{ + margin-bottom:-6px; + } +.profile-header .karma .total{ + margin-top:-4px; + } + +.company .page-navigation{ + float:none; + width:auto; + padding-left:35px; + } +.profile-header .habraindex .number{ + color:#CC66CC; + } +.profile .profile-header{} + +.profile #sidebar{ + margin-top:46px; +} + + + + +/* autosuggest */ +/* autosuggest */ +.js-autosuggest-holder { + width:100%; + position:relative; + z-index:10; +} +.js-autosuggest-holder .js-autosuggest-output { + width:100%; + overflow:hidden; + position:absolute; + z-index:10; + cursor:pointer; + padding-bottom:1px; + +} +.js-autosuggest-holder .js-autosuggest-output iframe { + display:none; + display/**/:block; + position:absolute; + top:0; + left:0; + z-index:-1; + width:3000px; + height:3000px; +} +.js-autosuggest-output-container { + position: relative; height: 0; + } + .js-autosuggest-output div { + text-align:left; + position:relative; + padding: 3px 0 3px 3px; + font-size:0.9em; + border:1px solid #dadada; + line-height:1.4em; + margin-bottom:-1px; + background-color: #fff; + cursor: pointer; + } + .js-autosuggest-output div em { + font-style:normal; + font-weight:bold; + } + .js-autosuggest-output div.active { + background-color:#fdf5e6; + z-index:5; + border-color:#eee; + } +.js-autosuggest-holder .js-autosuggest-output .js-autosuggest-item { + padding:3px; + + border-bottom:1px solid #7992b2; +} +.js-autosuggest-holder .js-autosuggest-output .current { + background-color:#7992b2; +} +.js-autosuggest-holder .js-autosuggest-output .js-autosuggest-item em { + font-weight:bold; + font-style:normal; +} + + + + + + + + .panel-search + .js-autosuggest-holder{ + width:100%; + } + .panel-search .js-autosuggest-output-container{ + clear:both; + width:236px; + z-index:1; + } + .panel-search p{ position:relative;z-index:3;} + /* Autosuggest в форме поиска */ + #info-search .js-autosuggest-holder { + position:relative; + } + #info-search .js-autosuggest-output { + width:100.3%; + left:0; + top: 22px; + margin-left: -3px; + text-align:left; + } + + + + /* Autosuggest в форме поиска по тегам*/ + .tag-search { + position:relative; + } + .tag-search .js-autosuggest-output { + width:51%; + left:97px; + top: 37px; + z-index:30; + } + .tag-search .js-autosuggest-output div { + padding:0 6px; + } + + .main-search .js-autosuggest-output { + width: 78%; + padding-right:8px; + } + .main-search .js-autosuggest-output div{ + margin-right:-8px; + } + + + + /* Autosuggest в форме поиска по тегам*/ + #favourites_add .js-autosuggest-holder div{ + z-index:3; + position:relative; + } + #favourites_add .js-autosuggest-holder .js-autosuggest-output-container{ + z-index:1; + } + #favourites_add .js-autosuggest-output { + left:0; + top: 000; + z-index:30; + } + + + + + /* autosuggest */ + #js-topic-form-holder .js-autosuggest-holder { + position:relative; + } + #js-topic-form-holder .js-autosuggest-output { + width:100.3%; + left:0; + } + + + + /* //autosuggest */ + + + + + + #write-post .js-autosuggest-holder { + position:relative; + } + #write-post .js-autosuggest-output { + padding:0; + width:101%; + margin-top: -10px; + } + + +/* //autosuggest */ + + + +/* top_companies */ +.corps-list-top{ + +} + .corps-list-top + .page-nav, + .corps-list-top + .corps-list-top-menu{ + padding-left:35px; + } +.corps-list{ + padding-top:17px; + color:#7d7c7c; + font-family:Tahoma, sans-serif; + } + .corps-list + .corps-listhead{ + margin:0 0 7px; + line-height:1.2em; + } + .corps-list + .corps-listhead + dt.corp-name{ + height:1px; + } + .corps-list + .corps-listhead + dd.copr-habraindex{ + font-family:Arial,sans-serif; + font-size:100%; + color:inherit; + + padding-left:4px; + margin-right:-4px; + } + .corps-list li{ + overflow:hidden; + padding-left:35px; + margin:0 0 20px; + line-height:31px; + } + .corps-list li dt, + .corps-list li dd{ + float:left; + } + + + .corps-list li dt.corp-name{ + font-size:208%; + width:63%; + } + .corps-list li dt.corp-name + img{ + line-height:1em; + height:16px; + width:16px; + float:left; + margin:9px 12px 0 -28px; + font-size:33%; + } + .corps-list li dd.corp-descripton{ + padding-top:1px; + float:none; + clear:left; + width:47%; + line-height:1.2em; + font-size:108%; + } + .corps-list li dd.corp-descripton + p{ + margin:0; + } + .corps-list li dd.corp-descripton + p + a{ + color:#666; + font-size:107%; + } + .corps-list li dd.corp-descripton + p + a:hover{ + color:#A3A3A3; + } + .corps-list li dd.copr-habraindex{ + width:21%; + color:#CC66CC; + float:right; + } + .corps-list li dd.copr-habraindex, + .corps-list li dd.copr-habraindex-change{ + font-family:Verdana, sans-serif; + font-size:158%; + } + .corps-list li dd.habraindex-up{ + color:#74c262; + } + .corps-list li dd.habraindex-down{ + color:#ff0033; + } +.corps-list-page-description{ + color:#999; + } + .corps-list-page-description + p{ + font-size:133%; + margin:0 0 1em; + } + +.corps-list-side +.side-rubrikator{ + margin-top:35px ; + } +.corps-list-side +a.add{ + color:#999; + font-size:133%; + } + .corps-list-side + a.add:hover{ + color:#333; + } +.corps-list-side +.alfikator { + margin:30px 0; + } + .alfikator + ul{ + font-size:166%; + overflow:hidden; + color:#ccc; + padding:1px 1px; + padding-left:4px; + margin-left:4px; + margin:0 0 30px; + } + .alfikator + ul + li{ + float:left; + width:10%; + margin-right:8px; + } + .alfikator + ul + li + a{ + color:#666; + text-decoration:none; + } + .alfikator + ul + li + a:hover{ + color:#A3A3A3; + } + .alfikator + ul + li.active + a{ + padding:2px 4px; + margin-left:-4px; + color:#333; + background:#C5DAE5; + } + + + +/* users-lists */ +h1.users-list-geo{ + color:#999 ; + margin:-10px 0 3px !important; +} +h1.users-list-geo a{color:#999;} +h1.users-list-geo a:hover{color:#333;} + +.lion-king{ + background:url(/i/bg_lion_king.png) no-repeat 0px 0px; + width:23px; + height:20px; + position:absolute; + top:-21px;left:12px; +} +#people-list{ + margin-left:-18px; +} +#people-wrapper .corplist-suggest-form{margin-bottom:10px;padding-top:0;padding-left:0;} +table.users-list{ + width:100%; + } + + table.users-list th { + font: normal 1em/180% Arial,sans-serif; + color:#999; + overflow:hidden; + padding:0 !important; + margin:0; + text-align:left; + } + + table.users-list td { + vertical-align: top; + padding:0 0 26px; + } + table.users-list .rating-dyn { + vertical-align: top; + font-size: 1em; + width:18px; + text-align:left; + } + table.users-list .rating-dyn .rating-dyn-con{ + position:relative; + width:18px; + margin-top:30px; + z-index:5; + } + table.users-list .rating-dyn .rating-dyn-con .rating-dyn-text{ + position:absolute; + z-index:12; + top:-7px; + background:#fff; + padding-right:2px; + padding-top:1px; + right:5px; + text-align:right; + white-space:nowrap; + } + table.users-list .userava{ + width:48px; + vertical-align: top; + } + table.users-list .userava .habrauserava{margin-top:5px;position:relative;} + table.users-list .user { + text-align: left; + padding-left: 14px; + line-height:1.2em; + color:#999; + } + table.users-list .user dl{ + padding-right:3px; + } + table.users-list .user .lifetime{ + font-size: 100% ; + color:#999; + } + table.users-list .user .last_post{ + font-size: 100% ; + color:#999; + padding-right:20px; + } + table.users-list .user .last_post a{ + color: #666666; + font-size: 100% ; + } + table.users-list .user .last_post a:hover{ + color: #333; + } + + table.users-list .user a { + + } + table.users-list .user dt{ + margin-bottom:5px; + font-size:200%; + line-height: 1em; + } + table.users-list .userkarma{ + color:#74c262; + width:15%; + font-size:150%; + } + table.users-list .userrating{ + color:#CC66CC; + font-size:150%; + width:10%; + } + + + +/* yandex_direct */ +#yandex_direct{padding:1.67em;} +.y5_vertical { padding: 1em 1.4em; margin-bottom: 0; } + .y5_vertical .y5_all a, + .y5_vertical .y5_how a, + #y5_direct2 .y5_all a, + #y5_direct2 .y5_how a { color: #F0F0E7 !important; } + + + + + +/* highlight */ +pre code { + font-size: 12px; + padding: 0.5em; + background: #f8f8f8; + display: block; + } + pre .subst, + pre .title { + font-weight: normal; + color: #000; + } + + pre .comment, + pre .template_comment, + pre .javadoc, + pre .diff .header { + color: #808080; + } + + pre .annotation, + pre .decorator, + pre .preprocessor, + pre .doctype, + pre .pi, + pre .chunk, + pre .shebang, + pre .apache .cbracket { + color: #808000; + } + + pre .tag, + pre .tag .title, + pre .pi + pre .id, + pre .attr_selector, + pre .pseudo, + pre .literal, + pre .keyword, + pre .hexcolor, + pre .css .function, + pre .ini .title, + pre .css .class, + pre .list .title, + pre .tex .command { + color: #4d7386; + } + + pre .attribute, + pre .rules .keyword, + pre .number, + pre .date, + pre .regexp, + pre .tex .special { + color: #2f98ff; + } + + pre .number, + pre .regexp { + font-weight: normal; + } + + pre .string, + pre .value, + pre .filter .argument, + pre .css .function .params, + pre .apache .tag { + color: #339900; + } + + pre .symbol, + pre .ruby .symbol .string, + pre .ruby .symbol .keyword, + pre .ruby .symbol .keymethods, + pre .char, + pre .tex .formula { + color: #968e5b; + } + + pre .phpdoc, + pre .yardoctag, + pre .javadoctag { + text-decoration: underline; + } + + pre .variable, + pre .envvar, + pre .apache .sqbracket, + pre .nginx .built_in { + color: #968e5b; + } + + pre .addition { + background: #baeeba; + } + + pre .deletion { + background: #ffc8bd; + } + + pre .diff .change { + background: #bccff9; + } + + + + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline; filename=favicon.ico +Content-Type: image/x-icon; name=favicon.ico +Content-Location: http://habrahabr.ru/i/favicon.ico +Content-Transfer-Encoding: Base64 + +AAABAAIAICAAAAEAIACoEAAAJgAAABAQAAABACAAaAQAAM4QAAAoAAAAIAAAAEAA +AAABACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAsKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/r556/7Cgfv+woH7/sqKA/7OkgP+zpIH/sqSB/7KjgP+woHz/sKB+/7Cg +fv+woH7/sqOA/7Kkgf+zpIH/s6SA/7Cgfv+woH7/sKB+/7Cgfv+woH7/rp53/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+unXj/sKB+/7Cg +fv///////////////////////////7Cgfv+woH7/sKB+/7Cgfv////////////// +/////////////7Cgfv+woH7/sKB+/7Cgfv+vn3v/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+//////////////////// +////////sKB+/7Cgfv+woH7/sKB+//n69///////////////////////sKB+/7Cg +fv+woH7/sKB+/6+fe/+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7///////////////////////////+woH7/sKB+/7Cg +fv+woH7/+vr3//////////////////////+woH7/sKB+/7Cgfv+woH7/r597/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv///////////////////////////7Cgfv+woH7/sKB+/7Cgfv/29O////////// +/////////////7Cgfv+woH7/sKB+/7Cgfv+vn3v/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+//////////////////// +////////sKB+/7Cgfv+woH7/sKB+//b18P//////////////////////sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7///////////////////////////+woH7/sKB+/7Cg +fv+woH7/9fTv//////////////////////+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv///////////////////////////7Cgfv+woH7/sKB+/7Cgfv////////////// +/////////////7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+//////////////////// +////////////////////////////////////////////////////////sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/////////////////////////////////+vn2//// +///8+/r//v7+//////////////////////+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv////////////////////////////////////////////////////////////// +/////////////7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+//////////////////// +////////////////////////////////////////////////////////sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7///////////////////////////////////////// +//////////////////////////////////+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv///////////////////////////7Cgfv+woH7/sKB+/7Cgfv////////////// +/////////////7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+//////////////////// +////////sKB+/7Cgfv+woH7/sKB+////////////////////////////sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7///////////////////////////+woH7/sKB+/7Cg +fv+woH7///////////////////////////+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv///////////////////////////7Cgfv+woH7/sKB+/7Cgfv////////////// +/////////////7Cgfv+woH7/sKB+/7Cgfv+vn3r/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+//////////////////// +////////sKB+/7Cgfv+woH7/sKB+////////////////////////////sKB+/7Cg +fv+woH7/sKB+/6+fev+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7///////////////////////////+woH7/sKB+/7Cg +fv+woH7///////////////////////////+woH7/sKB+/7Cgfv+woH7/r596/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv///////////////////////////7Cgfv+woH7/sKB+/7Cgfv////////////// +/////////////7Cgfv+woH7/sKB+/7Cgfv+woHv/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/wAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAABAAAAAgAAAAAQAgAAAA +AABABAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwoH//sKB//7Cgf/+woH//sKB//7Cg +f/+woH//sKB//7Cgf/+woH//sKB//7Cgf/+woH//sKB//wAAAAAAAAAAsKB//7Cg +f/+woH//sKB//7Cgf/+woH//sKB//7Cgf/+woH//sKB//7Cgf/+woH//sKB//7Cg +f/8AAAAAAAAAALCgf/+woH//sKB//////////////////7Cgf/+woH////////// +////////sKB//7Cgf/+woH//AAAAAAAAAACwoH//sKB//7Cgf/////////////// +//+woH//sKB//////////////////7Cgf/+woH//sKB//wAAAAAAAAAAsKB//7Cg +f/+woH//////////////////sKB//7Cgf/////////////////+woH//sKB//7Cg +f/8AAAAAAAAAALCgf/+woH//sKB//////////////////7Cgf/+woH////////// +////////sKB//7Cgf/+woH//AAAAAAAAAACwoH//sKB//7Cgf/////////////// +/////////////////////////////7Cgf/+woH//sKB//wAAAAAAAAAAsKB//7Cg +f/+woH////////////////////////////////////////////+woH//sKB//7Cg +f/8AAAAAAAAAALCgf/+woH//sKB///////////////////////////////////// +////////sKB//7Cgf/+woH//AAAAAAAAAACwoH//sKB//7Cgf/////////////// +//+woH//sKB//////////////////7Cgf/+woH//sKB//wAAAAAAAAAAsKB//7Cg +f/+woH//////////////////sKB//7Cgf/////////////////+woH//sKB//7Cg +f/8AAAAAAAAAALCgf/+woH//sKB//////////////////7Cgf/+woH////////// +////////sKB//7Cgf/+woH//AAAAAAAAAACwoH//sKB//7Cgf/+woH//sKB//7Cg +f/+woH//sKB//7Cgf/+woH//sKB//7Cgf/+woH//sKB//wAAAAAAAAAAsKB//7Cg +f/+woH//sKB//7Cgf/+woH//sKB//7Cgf/+woH//sKB//7Cgf/+woH//sKB//7Cg +f/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAAgAEAAIAB +AACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAP// +AAD//wAA + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline; filename=karma.css +Content-Type: text/css; charset=utf-8; name=karma.css +Content-Location: http://habrahabr.ru/css/1307631427/karma.css +Content-Transfer-Encoding: 8bit + +.karma-holder { + position: relative; + clear: both; + width: 100%; + height: 4em; + float: left; + border-bottom: 20px solid #fff; /*trick for IE 6*/ + white-space: nowrap; + background: url(/i/bg-profile-center-line.gif) left center repeat-x; +} + + .blogs h1 a { + position: relative; + font: 2.83em/2.17em Verdana, sans-serif; /*34/12*/ + text-decoration: none; + } + + body.blogs #main-content h1 a img { + float: left; + margin: 15px 10px 0 0; + border: 1px solid #ddd; + } + + +.karma, +.habraforce, +.blog-rating, +.habramoney { + font-family: Arial, Helvetica, sans-serif; + text-align: center; + float: left; + /*border: 1px solid red;*/ + background: #fff; +} + +.karma { + padding: 0 .83em 0 55px; +} + +.karma-holder .infinity .vote { + display: none; +} + +.karma-holder .infinity-sign { + display: none; + font-size: 1.83em; + font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; + margin-top: -5px; + color: gray; +} + +.karma-holder .infinity .infinity-sign { + display: block; +} + +.habraforce, +.blog-rating, +.habramoney { + padding: 0 1em; +} + +.habraforce, +.blog-rating { + margin: 0 20px 0 20px; + padding-bottom: 1.1em; +} + +.karma dl {float:left;} + .karma dd.vote { + margin:0 auto; + width:auto; + overflow:hidden; + display:inline; + } + .karma dt, .karma .total { + font-size: .83em; + } + .karma .total { + clear:left; + } + .karma a { + margin:3px 3px 0; + float:left; + width:9px; + height:20px; + } + .karma .mark { + float:left; + } + .karma strong { + font-weight:normal; + } + .karma .vote_plus { + background:url(/i/icos/icons_vote_karma.gif) no-repeat left top; + } + .karma .vote_minus { + background:url(/i/icos/icons_vote_karma.gif) no-repeat right top; + } + .karma.no_voting .vote_plus, + .karma.no_auth .vote_plus, + .karma.mine .vote_plus, + .karma.voted_minus .vote_plus { + background:url(/i/icos/icons_vote_karma.gif) no-repeat left bottom; + } + .karma.no_voting .vote_minus, + .karma.no_auth .vote_minus, + .karma.mine .vote_minus, + .karma.voted_plus .vote_minus { + background:url(/i/icos/icons_vote_karma.gif) no-repeat right bottom; + } + .habraforce dt, + .blog-rating dt, + .habramoney dt, .habramoney .pay { + font-size: .83em; + float: none; + } + .karma .total em { + font-style:normal; + } + .karma .mark, + .habraforce .number, + .blog-rating .number, + .habramoney .number { + font-size: 1.83em; /*22/12*/ + padding: 0 .15em; + color: #fff; + } + .karma .mark { + background-color:#74c262; + } + .habraforce .number { + background: #25a8ff; + } + .blog-rating .number { + background: #d479b3; + } + .habramoney .number { + background: #ef7f35; + } + + .buttons { + padding: .83em 0 0 .83em; + white-space: nowrap; + float: right; + background: #fff; + } + .blogs .buttons { + padding-left: 0; + } + .karma-holder .buttons a {margin-right:8px;} + + .blogs .buttons img { + border: 1px solid #ddd; + } + .blogs .karma-holder .buttons a {margin-right:0px;margin-top:4px !important;} + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/png +Content-Location: http://habrahabr.ru/i/icos/blog-small-open.png +Content-Transfer-Encoding: Base64 + +iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAMAAAAolt3jAAAABGdBTUEAAK/INwWK +6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFQUExURfT9 +/8/o/N3w+LTP4J+/17PO4PP2+LjR47nZ8/j6+3OXrpu1yXGWrrDQ63KXrn2Zq16E +nnybr6DD2Iyswb/d84qsw+v2/bbQ4Mba6vb///X+/3aXr2uPqN/v9t7r8q66wYam +vZ290Z680KPA1oGkvdzw/KPA0uX1/KvG2XyetI6xyJmvvsHQ2H6gtNjt/GKDmcnf +7MLLz+Dz+qXA0TdDTZ67zzE3PLHO3tDf6ODz/Oz7/vz//7bR44uwyd/w+K3O39To +86fE2K3P453A1qWoq3uEjmWKo93k6dfn78PJzszW3c3m88HV5J23yqPB2Ze70ez6 +/lZqeo6rwY2xy5+90NLn8q7K3Ji1yuXm59Do9HKWrZKxxtLr/LXQ4Oz6/abI36XB +1m+Uq5m80oKhuPT+/7PO33mRpavG18bj87rQ283c5NHq8+j4/f7//////////0ah +peUAAABwdFJOU/////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////// +/////////////////////////////////wC3YWLSAAAAsUlEQVR42mKQYGe3EY9l +ZmZN9cnPz2dgzYMBDRA3LC8XChJAXEdrhiwQYGAI4eTMZ1BLyYECblElLwZTK6ZM +EGAylFeOF2QIV88GA0VfuYg0fYZoS+90INDyNzDScfVkEFbNAIIkIYeA0CCXfAYF +PREWFlsnO0nZYH62fIbkGA4OXmOpXDFnATagvZqMjIx+FnGR9jyJIGfocvFFBXqY +q7jJSIO4QJxvZqLtng8GAAEGAFBLNxR9F8JmAAAAAElFTkSuQmCC + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline +Content-Type: image/jpeg +Content-Location: http://habrahabr.ru/i/join_button_bg.png +Content-Transfer-Encoding: Base64 + +/9j/2wBDABELDA8MChEPDg8TEhEUGSobGRcXGTMkJh4qPDU/Pjs1OjlDS2BRQ0da +SDk6U3FUWmNma2xrQFB2fnRofWBpa2f/2wBDARITExkWGTEbGzFnRTpFZ2dnZ2dn +Z2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2f/wAAR +CAAaAAEDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAIBBv/EABUQAQEA +AAAAAAAAAAAAAAAAAAAR/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/EABQRAQAAAAAA +AAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/AOzomgJowB//2Q== + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline; filename=profile.css +Content-Type: text/css; name=profile.css +Content-Location: http://habrahabr.ru/css/1307631427/profile.css +Content-Transfer-Encoding: 8bit + +/* Profile header */ + +.profile-header { + float: left; + font-size: 12px; +} + .nick-holder { + float: left; + width: 100%; + clear: both; + } + .profile-header h1 { + color: #666; + padding: 0; + font-size: 1em; + } + .profile-header h1 a { + font: 2.83em/135% Verdana, sans-serif; /*34px/12px*/ + text-decoration: none; + color: #666; + } + + .nick-holder .avatar-link { + float: left; + padding-right: 15px; + } + .nick-holder .avatar-link img, .nick-holder .edit img, .hresume .edit img { + border: 1px solid #DCDCDC; + } + + .hresume .edit img {margin-left:10px;} + + .nick-holder div { + float: left; + } + .nick-holder .twitter { + font: .9em/100% Arial, sans-serif; + font-weight: 400; + color: #999; + margin-bottom: 10px; + margin-top: -10px; + display: block; + float: left; + } + + +/* Userinfo+microformats */ + +.userinfo { + width: 100%; +} + +.company .userinfo { + float: left; + clear:both; + margin-top: 20px; +} + +.userinfo dl { + margin: 0 0 10px 0; + padding:0; + clear:left; + font-size: 1.33em; /*16/12*/ + } +.userinfo dl.fn { + float: left; + clear: both; +} + .userinfo dl dt { + margin: 0; + padding: 0 .5em 0 0; + float: left; + width: 11em; + color:#666; + font-size: 83%; + font-weight:bold; + text-align: right; + } + + .userinfo dl dd { + margin: 0 0 0 11em; + padding: 0 0 7px 12px; + text-align: left; + font-size: 83%; + } + + /* Так выводится в профайле заголовок имя юзера */ + + .userinfo dl.user-name { + float: none; + clear: both; + margin: 0 0 1em 9.85em; + padding-top: 1em; + } + .userinfo + .leader-position{ + font-size:0.8em; + color:#999; + } + .userinfo dl.user-name dt, .userinfo dl.user-name dd { + display: block; + float: none; + width: auto; + margin: 0; + padding: 0; + text-align: left; + color: rgb(119, 119, 119); + } + .userinfo dl.user-name dt { + font-size: 156%; + font-weight: normal; + } + .userinfo dl.fn dd a { + color: rgb(119, 119, 119); + } + .userinfo dl.user-name dd.twitter{ + font-family: Arial, sans-serif; + font-size:68%; + margin:1.5em 0 1.5em -22px; + padding-left:22px; + color:#999; + + background:url(/i/bg-icon-twitter.gif) no-repeat; + } + .userinfo dl.user-name dd.twitter #js-twitter-status-live{ + padding-top:3px; + } + + /* // Так выводится в профайле заголовок имя юзера */ + + /** + * Секретные заметки о пользователе + */ + .userinfo .note{} + .userinfo .note .add_note{cursor:pointer;color: green;border-bottom:1px dashed green;} + .userinfo .note .add_note.hide{display:none;} + .userinfo .note .current_note.hide{display:none;} + .userinfo .note .edit_note{display:none;} + .userinfo .note .edit_note.show{display:block;} + .userinfo .note .edit_note .description{color: #999999;font-size: 11px;margin: 2px 0 3px;overflow: hidden;} + .userinfo .note .edit_note input.text{width: 32em;} + .userinfo .note .edit_note input.btn{margin-right:0.2em;margin-top:0.5em;} + .userinfo .note .edit_note .cancel_note{cursor:pointer;color:#6DA3BD;border-bottom:1px dashed #6DA3BD;margin-left:0.2em;} + + +.dl_logic_wrap { + margin: 0 0 20px 0; + float: left; + width: 100%; +} + +.friends_list, .blogs_list, +#favorite_companies_list, #working_in, #staff, .interests { + width: 100%; + } + + + .friends_list ul li, .blogs_list ul li, + #favorite_companies_list ul li, #working_in ul li, #staff ul li { + + display: inline-block; + padding-left: 18px; + } + .interests ul li { + display: inline; + } + .friends_list ul li a, .blogs_list ul li a, + #favorite_companies_list ul li a, #working_in ul li a, #staff ul li a, + .interests ul li a { + margin-right: 11px; + color:#666; + font: normal 92.4%/1.5em arial; + } + .friends_list ul li a:hover, .blogs_list ul li a:hover, + #favorite_companies_list ul li a:hover, #working_in ul li a:hover, #staff ul li a:hover, + .interests ul li a:hover{ + color:#A3A3A3 + + } + .interests ul li a { + margin: 0; + } + .friends_list ul li, #staff ul li { + background: url(/i/bg-user2.gif) 0 50% no-repeat; + } + .blogs_list ul li { + background: url(/i/icos/blog-small-open.png) 0 60% no-repeat; + line-height: 150%; + } + #favorite_companies_list ul li, #working_in ul li { + padding-left: 20px; + background: url(/i/icos/company-small.png) 0 60% no-repeat; + line-height: 150%; + } + .ICQ a, .Skype a { + text-decoration: none; + } + .ICQ a img { + margin: -.1em 3px 0 0; + } + .ICQ a > img { + margin-top: -.5em; + } + .Skype a img { + margin-right: 3px; + } + .Skype a > img { + margin-top: -.5em; + } + + /* Marking links to user's mutual friends and groups */ + + .friends_list ul li a.cross, .blogs_list ul li a.cross, + #favorite_companies_list ul li a.cross, #working_in ul li a.cross, + #staff ul li a.cross, + .interests ul li a.cross { + font-weight: bold; + } + + +.profile .banner { + margin-top: 2em; +} +.profile . +.company .userinfo { + margin: 20px 0 20px 0; +} + + + +/* Recommendations (user to user) */ + + +.user-recommend-user {clear:both;} + + +/* // Recommendations (user to user) */ + + + + + + + + + + +/* Companies section */ + +.profile .live, .company .tag-cloud { + background: #f0f0e7 url(/i/bg-corner-top-left.gif) no-repeat 0 0; + padding: 0; +} + .company .tag-cloud ul { + float: left; + margin: 0 20px 20px; + } + + +.company .live ol { + margin: 0 1.67em; +} + .company .live ol li { + line-height: 130%; + margin-bottom: .42em; /*5px*/ + color: #999; + } + .company .live ol li a:hover { + text-decoration: none; + color: #fff; + background: #6c6; + } + .company .new-feedbacks div div { + padding-bottom: .84em; /*10px*/ + } + +#stats h2 { + font: normal 2.17em/110% Verdana, sans-serif; /*26/12*/ + color: #999; + padding-bottom: .38em; +} + +#stats dl { + margin: .83em 0; +} + #stats dl dt, #stats dd, #stats dl ul, #stats dl ul li { + display: inline; + } + #stats dl dt { + font: normal 1.5em/110% Verdana, sans-serif; + margin-right: .3em; + letter-spacing: -1px; + color: #ccc; + } + #stats dd { + line-height: 190%; + color: #666; + } + #stats dd li { + margin-right: .3em; + } + #stats dd a { + color: #999; + } +.friends_list ul .empty_spaces, #staff ul .empty_spaces { + margin-left:-0.7em; + background:none; + padding-left:0; + font-size:92.4%; + line-height:1.5em; +} + + /* Шапка профайла компании */ + .profile-title {margin: 0 0 20px 0;} + .profile-title .favicon {float: left; clear:both; margin: .75em 23px 0 23px;} + .profile-title h1 { + font: 2.5em/100% Verdana,sans-serif; /*30px/12px*/ + } + .profile-title h1 a {color: #666; text-decoration: none;} + .profile-title h1 a.admin-link {color: #ccc; font-size: 70%;text-decoration: none;} + .profile-title h1 a.admin-link:hover {color: green;} + +/* Отзывы пользователей о компании */ +.company-comments {float:left; clear:both; width:100%;} + + +/* Resume */ + + .hresume h2 { + font: 1.67em Arial, sans-serif; /*20/12*/ + margin-top: 30px; + margin-left: 7.75em; + margin-bottom: 20px; + letter-spacing: -1px; + color: #333; + float: none; + clear: both; + } + .hresume dl dd { + line-height: 100%; + } + +#habrastat { + margin-top: 40px; +} + .hresume .price_block { + padding-top:1em; + } + .hresume .price_block span { + color:#666633; + font-size:2.8em; + letter-spacing:-1px; + line-height: 120%; + } + .hresume .price_block span.price { + color:#fff; + background-color:#9CC; + font-size:1.1em; + } + + .hresume .user-name { + padding-top:0; + } + + .hresume .hire_block span { + color:#E3A2A0; + font-family:arial,sans-serif; + font-size:2.6em; + letter-spacing:-1px; + line-height:40px; + } + .hresume .hire_block input.hire_button { + background-color:#E3A2A0; + color:#FFF; + font-size:1.1em; + } + + +.resume .vevent {margin-bottom:30px;} + + +/* Форма выборки постов в разделе "Моё" профайла */ + +.filter-form ul { + margin: 0 0 0 15px; + padding-bottom: 10px; +} + .filter-form li {float: left; clear: both; margin-bottom: 5px;} + .filter-form input, .filter-form label {float: left;} +input.show { + float: right; + clear: both; + margin: -10px 10px 10px 0; +} + +/*Вакансии пользователя*/ + +.user-vacancies ol { + list-style: decimal; + margin: 0 10px 20px 40px; + color: #999; +} + .user-vacancies {line-height: 170%;} + +/* Блок с выводом Избранного, постов и комментов юзера. Отступы для топиков и комментов */ + + +.comments .items { + float: left; + clear: both; + width: 100%; + margin-top: 30px; +} + + +/* Юзернеймы и компании внутри хабратопиков и комментариев */ + +a.user_link { + padding-left:14px; + color:#666; + font: normal 92.4%/1.5em arial; + background: url(/i/bg-user2.gif) 0 60% no-repeat; +} + +.company_link { + padding-left:14px; + color:#666; + font: normal 92.4%/1.5em arial; + background: url(/i/bg-company.gif) 0 60% no-repeat; +} + +.company-header .js-addFan, +.company-header .js-removeFan, +#js-addWorker, +#js-removeWorker, +span#js-companyWorkerInactive, +span#js-companyFanInactive { + margin-top: 15px; + display: block; + width: 30px; + float: left; + background-repeat: no-repeat; +} + +.company-header .js-addFan.hidden, +.company-header .js-removeFan.hidden, +#js-addWorker.hidden, +#js-removeWorker.hidden { + display: none; +} +.company-header a.js-addFan { + background-image: url('/i/company-fav.gif'); + height: 19px; + margin-left: 27px; +} +.company-header a.js-removeFan { + background-image: url('/i/company-fav.gif'); + background-position: left -19px; + height: 19px; + margin-left: 27px; +} +span#js-companyFanInactive { + background-image: url('/i/company-fav.gif'); + background-position: left -57px; + height: 19px; + width: 24px; +} + +a#js-addWorker { + background-image: url('/i/company-work.gif'); + height: 20px; +} +a#js-removeWorker { + background-image: url('/i/company-work.gif'); + background-position: left -20px; + height: 20px; +} +span#js-companyWorkerInactive { + background-image: url('/i/company-work.gif'); + background-position: left -60px; + height: 20px; + width: 28px; +} + +a#js-blogInfoSwitcher, +a.js-addBlogMember, +a.js-removeBlogMember { + height: 20px; + display: block; + float: left; + background-repeat: no-repeat; + background-color: white; +} +a.js-addBlogMember, +a.js-removeBlogMember { + padding: 5px; + height:16px; + display: block; + background: #dbdbdb url(/i/join_button_bg.png) repeat-x left top; + text-shadow: 0 1px #ededed; + color: #6b6b6b; + text-decoration:none; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + border-style: solid; + border-width: 1px; + font-weight:bold; + border-color: #afafaf #a9a9a9 #a3a3a3; +} +a:hover.js-addBlogMember, +a:hover.js-removeBlogMember{color:#5b5b5b} + + +a.js-addBlogMember.hidden, +a.js-removeBlogMember.hidden { + display: none; +} +a#js-blogInfoSwitcher { + width: 22px; + background-image: url(/i/icos/blog-info.gif); +} +a#js-blogInfoSwitcher.regular { + background-position: left top; +} +a#js-blogInfoSwitcher.regular:hover { + background-position: left bottom; +} +a#js-blogInfoSwitcher.active { + background-position: left bottom; +} +#js-invitationList { + height: 300px; + margin-left: 10px; + margin-right: 10px; + overflow: auto; + overflow-x: hidden; +} + + +.bloginfo{} +.bloginfo .blog-about-text-content{margin:0 1.67em 1.67em !important;overflow:hidden;} +.bloginfo .blog-about-text-content .join{float:left;overflow:hidden;margin-top:6px;} +.bloginfo .blog-about-text-content .stats{float:left;overflow:hidden;color:#999999;font-size:133%;margin-right:20px;} +.bloginfo .blog-about-text-content .is_banned{float:left;overflow:hidden;width: 180px;color:#999999;font-size:133%;} +.bloginfo .blog-about-text-content .is_banned img{float:left;margin-right:10px;} +.bloginfo .blog-about-text-content .is_banned span{float:left;margin-top:2px;} + + + +#user-contacts .label { + display: block; + width: 270px; + float: left; +} +#user-contacts .end { + display: block; +} +#user-contacts .achtung-minen { + clear: both; +} +#user-contacts .js-field-holder input { + display: block; + float: left; +} +#user-contacts .label .name { + display: block; + width: 100px; + font-weight: bold; + float: left; +} +#user-contacts .label .begin { + display: block; + width: 170px; + float: right; + text-align: right; +} +#user-contacts .end, #user-contacts .begin { + font-size: 10px; + vertical-align: middle; + padding-top: 3px; + color: gray; +} + +#invite-list {margin-top: 15px;} + #invite-list ul li {clear: both; padding-bottom: 10px;} + #invite-list ul li img {float:left; width: 24px; margin-right: 5px;} + #invite-list ul li a {line-height: 24px;} + #invite-list ul li a.idontlikeyouanymore { color: #c00; text-decoration: none;} + #invite-list .delete {color: #ddd; text-decoration: none;} + #invite-list .delete:hover {color: red;} + +.friends_list ul li.banned a {text-decoration: line-through;} + +.profile-buttons { + margin: 8px 0 0 20px; + } + .profile-buttons a { + margin-left: 10px; + } + + +.notes{margin-left:35px;} +.notes table{} +.notes table tr{} +.notes table tr th{text-align:left;padding:5px;border-bottom:2px solid #aaa;} +.notes table tr td{text-align:left;padding:5px;border-bottom:1px solid #eee;} +.notes table tr td.date{color:#666666;font-size:11px;} +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline; filename=category_blogs.css +Content-Type: text/css; name=category_blogs.css +Content-Location: http://habrahabr.ru/css/1307631427/sidebar/category_blogs.css +Content-Transfer-Encoding: 8bit + +/** + * Блок - Другие блоги из выбранной категории. + */ +.category_blogs{} +.category_blogs h3{} +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline; filename=best_company.css +Content-Type: text/css; name=best_company.css +Content-Location: http://habrahabr.ru/css/1307631427/sidebar/best_company.css +Content-Transfer-Encoding: 8bit + +/** + * Блок - компания недели + */ +.best_company{} +.best_company h3{} +.best_company h3 .help-tip{margin-bottom:2px;cursor:pointer;} +.best_company .company_info{margin-bottom:20px;} +.best_company .company_info .name{overflow:hidden;margin-left: 20px;margin-right: 20px;} +.best_company .company_info .name img{float:left;font-size:33%;height:16px;margin:8px 10px 0px 0px;line-height: 1em;width: 16px;} +.best_company .company_info .name a{float:left;font-size: 208%;} +.best_company .company_info p{} +.best_company .company_info p a{color:#666666} +.best_company .company_info p a:hover{color:#a3a3a3} +.best_company .company_info .like{overflow:hidden;margin-left:20px;} + +.best_company .company_info #fans_count{float:left;margin-right:10px;color: #999999;font-size: 133%;margin-top:3px;} + + + + +a.js-addFan-Company, +a.js-removeFan-Company { + height: 20px; + display: block; + float: left; + background-repeat: no-repeat; + background-color: white; + padding: 5px; + height:16px; + display: block; + background: #dbdbdb url(/i/join_button_bg.png) repeat-x left top; + text-shadow: 0 1px #ededed; + color: #6b6b6b; + text-decoration:none; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + border-style: solid; + border-width: 1px; + font-weight:bold; + border-color: #afafaf #a9a9a9 #a3a3a3; +} +a:hover.js-addFan-Company, +a:hover.js-removeFan-Company{color:#5b5b5b} +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline; filename=mootools-1.2-core-yc.js +Content-Type: application/x-javascript; charset=utf-8; name=mootools-1.2-core-yc.js +Content-Location: http://habrahabr.ru/js/1307631427/mootools-1.2-core-yc.js +Content-Transfer-Encoding: Base64 + +Ly9Nb29Ub29scywgPGh0dHA6Ly9tb290b29scy5uZXQ+LCBNeSBPYmplY3QgT3Jp +ZW50ZWQgKEphdmFTY3JpcHQpIFRvb2xzLiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAw +OCBWYWxlcmlvIFByb2lldHRpLCA8aHR0cDovL21hZDRtaWxrLm5ldD4sIE1JVCBT +dHlsZSBMaWNlbnNlLgoKdmFyIE1vb1Rvb2xzPXt2ZXJzaW9uOiIxLjIuMCIsYnVp +bGQ6IiJ9O3ZhciBOYXRpdmU9ZnVuY3Rpb24oSil7Sj1KfHx7fTt2YXIgRj1KLmFm +dGVySW1wbGVtZW50fHxmdW5jdGlvbigpe307dmFyIEc9Si5nZW5lcmljcztHPShH +IT09ZmFsc2UpO3ZhciBIPUoubGVnYWN5Owp2YXIgRT1KLmluaXRpYWxpemU7dmFy +IEI9Si5wcm90ZWN0O3ZhciBBPUoubmFtZTt2YXIgQz1FfHxIO0MuY29uc3RydWN0 +b3I9TmF0aXZlO0MuJGZhbWlseT17bmFtZToibmF0aXZlIn07aWYoSCYmRSl7Qy5w +cm90b3R5cGU9SC5wcm90b3R5cGU7fUMucHJvdG90eXBlLmNvbnN0cnVjdG9yPUM7 +CmlmKEEpe3ZhciBEPUEudG9Mb3dlckNhc2UoKTtDLnByb3RvdHlwZS4kZmFtaWx5 +PXtuYW1lOkR9O05hdGl2ZS50eXBpemUoQyxEKTt9dmFyIEk9ZnVuY3Rpb24oTSxL +LE4sTCl7aWYoIUJ8fEx8fCFNLnByb3RvdHlwZVtLXSl7TS5wcm90b3R5cGVbS109 +Tjt9aWYoRyl7TmF0aXZlLmdlbmVyaWNpemUoTSxLLEIpOwp9Ri5jYWxsKE0sSyxO +KTtyZXR1cm4gTTt9O0MuaW1wbGVtZW50PWZ1bmN0aW9uKEwsSyxOKXtpZih0eXBl +b2YgTD09InN0cmluZyIpe3JldHVybiBJKHRoaXMsTCxLLE4pO31mb3IodmFyIE0g +aW4gTCl7SSh0aGlzLE0sTFtNXSxLKTt9cmV0dXJuIHRoaXM7fTtDLmFsaWFzPWZ1 +bmN0aW9uKE0sSyxOKXtpZih0eXBlb2YgTT09InN0cmluZyIpe009dGhpcy5wcm90 +b3R5cGVbTV07CmlmKE0pe0kodGhpcyxLLE0sTik7fX1lbHNle2Zvcih2YXIgTCBp +biBNKXt0aGlzLmFsaWFzKEwsTVtMXSxLKTt9fXJldHVybiB0aGlzO307cmV0dXJu +IEM7fTtOYXRpdmUuaW1wbGVtZW50PWZ1bmN0aW9uKEQsQyl7Zm9yKHZhciBCPTAs +QT1ELmxlbmd0aDtCPEE7QisrKXtEW0JdLmltcGxlbWVudChDKTsKfX07TmF0aXZl +LmdlbmVyaWNpemU9ZnVuY3Rpb24oQixDLEEpe2lmKCghQXx8IUJbQ10pJiZ0eXBl +b2YgQi5wcm90b3R5cGVbQ109PSJmdW5jdGlvbiIpe0JbQ109ZnVuY3Rpb24oKXt2 +YXIgRD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVy +biBCLnByb3RvdHlwZVtDXS5hcHBseShELnNoaWZ0KCksRCk7Cn07fX07TmF0aXZl +LnR5cGl6ZT1mdW5jdGlvbihBLEIpe2lmKCFBLnR5cGUpe0EudHlwZT1mdW5jdGlv +bihDKXtyZXR1cm4oJHR5cGUoQyk9PT1CKTt9O319O05hdGl2ZS5hbGlhcz1mdW5j +dGlvbihFLEIsQSxGKXtmb3IodmFyIEQ9MCxDPUUubGVuZ3RoO0Q8QztEKyspe0Vb +RF0uYWxpYXMoQixBLEYpOwp9fTsoZnVuY3Rpb24oQil7Zm9yKHZhciBBIGluIEIp +e05hdGl2ZS50eXBpemUoQltBXSxBKTt9fSkoeyJib29sZWFuIjpCb29sZWFuLCJu +YXRpdmUiOk5hdGl2ZSxvYmplY3Q6T2JqZWN0fSk7KGZ1bmN0aW9uKEIpe2Zvcih2 +YXIgQSBpbiBCKXtuZXcgTmF0aXZlKHtuYW1lOkEsaW5pdGlhbGl6ZTpCW0FdLHBy +b3RlY3Q6dHJ1ZX0pOwp9fSkoe1N0cmluZzpTdHJpbmcsRnVuY3Rpb246RnVuY3Rp +b24sTnVtYmVyOk51bWJlcixBcnJheTpBcnJheSxSZWdFeHA6UmVnRXhwLERhdGU6 +RGF0ZX0pOyhmdW5jdGlvbihCLEEpe2Zvcih2YXIgQz1BLmxlbmd0aDtDLS07Qyl7 +TmF0aXZlLmdlbmVyaWNpemUoQixBW0NdLHRydWUpOwp9cmV0dXJuIGFyZ3VtZW50 +cy5jYWxsZWU7fSkoQXJyYXksWyJwb3AiLCJwdXNoIiwicmV2ZXJzZSIsInNoaWZ0 +Iiwic29ydCIsInNwbGljZSIsInVuc2hpZnQiLCJjb25jYXQiLCJqb2luIiwic2xp +Y2UiLCJ0b1N0cmluZyIsInZhbHVlT2YiLCJpbmRleE9mIiwibGFzdEluZGV4T2Yi +XSkoU3RyaW5nLFsiY2hhckF0IiwiY2hhckNvZGVBdCIsImNvbmNhdCIsImluZGV4 +T2YiLCJsYXN0SW5kZXhPZiIsIm1hdGNoIiwicmVwbGFjZSIsInNlYXJjaCIsInNs +aWNlIiwic3BsaXQiLCJzdWJzdHIiLCJzdWJzdHJpbmciLCJ0b0xvd2VyQ2FzZSIs +InRvVXBwZXJDYXNlIiwidmFsdWVPZiJdKTsKZnVuY3Rpb24gJGNoayhBKXtyZXR1 +cm4gISEoQXx8QT09PTApO31mdW5jdGlvbiAkY2xlYXIoQSl7Y2xlYXJUaW1lb3V0 +KEEpO2NsZWFySW50ZXJ2YWwoQSk7cmV0dXJuIG51bGw7fWZ1bmN0aW9uICRkZWZp +bmVkKEEpe3JldHVybihBIT11bmRlZmluZWQpO31mdW5jdGlvbiAkZW1wdHkoKXt9 +ZnVuY3Rpb24gJGFyZ3VtZW50cyhBKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4g +YXJndW1lbnRzW0FdOwp9O31mdW5jdGlvbiAkbGFtYmRhKEEpe3JldHVybih0eXBl +b2YgQT09ImZ1bmN0aW9uIik/QTpmdW5jdGlvbigpe3JldHVybiBBO307fWZ1bmN0 +aW9uICRleHRlbmQoQyxBKXtmb3IodmFyIEIgaW4gKEF8fHt9KSl7Q1tCXT1BW0Jd +O31yZXR1cm4gQzt9ZnVuY3Rpb24gJHVubGluayhDKXt2YXIgQjsKc3dpdGNoKCR0 +eXBlKEMpKXtjYXNlIm9iamVjdCI6Qj17fTtmb3IodmFyIEUgaW4gQyl7QltFXT0k +dW5saW5rKENbRV0pO31icmVhaztjYXNlImhhc2giOkI9JHVubGluayhDLmdldENs +ZWFuKCkpO2JyZWFrO2Nhc2UiYXJyYXkiOkI9W107Zm9yKHZhciBEPTAsQT1DLmxl +bmd0aDsKRDxBO0QrKyl7QltEXT0kdW5saW5rKENbRF0pO31icmVhaztkZWZhdWx0 +OnJldHVybiBDO31yZXR1cm4gQjt9ZnVuY3Rpb24gJG1lcmdlKCl7dmFyIEU9e307 +Zm9yKHZhciBEPTAsQT1hcmd1bWVudHMubGVuZ3RoO0Q8QTtEKyspe3ZhciBCPWFy +Z3VtZW50c1tEXTtpZigkdHlwZShCKSE9Im9iamVjdCIpe2NvbnRpbnVlOwp9Zm9y +KHZhciBDIGluIEIpe3ZhciBHPUJbQ10sRj1FW0NdO0VbQ109KEYmJiR0eXBlKEcp +PT0ib2JqZWN0IiYmJHR5cGUoRik9PSJvYmplY3QiKT8kbWVyZ2UoRixHKTokdW5s +aW5rKEcpO319cmV0dXJuIEU7fWZ1bmN0aW9uICRwaWNrKCl7Zm9yKHZhciBCPTAs +QT1hcmd1bWVudHMubGVuZ3RoOwpCPEE7QisrKXtpZihhcmd1bWVudHNbQl0hPXVu +ZGVmaW5lZCl7cmV0dXJuIGFyZ3VtZW50c1tCXTt9fXJldHVybiBudWxsO31mdW5j +dGlvbiAkcmFuZG9tKEIsQSl7cmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20o +KSooQS1CKzEpK0IpO31mdW5jdGlvbiAkc3BsYXQoQil7dmFyIEE9JHR5cGUoQik7 +CnJldHVybihBKT8oKEEhPSJhcnJheSImJkEhPSJhcmd1bWVudHMiKT9bQl06Qik6 +W107fXZhciAkdGltZT1EYXRlLm5vd3x8ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERh +dGUoKS5nZXRUaW1lKCk7fTtmdW5jdGlvbiAkdHJ5KCl7Zm9yKHZhciBCPTAsQT1h +cmd1bWVudHMubGVuZ3RoOwpCPEE7QisrKXt0cnl7cmV0dXJuIGFyZ3VtZW50c1tC +XSgpO31jYXRjaChDKXt9fXJldHVybiBudWxsO31mdW5jdGlvbiAkdHlwZShBKXtp +ZihBPT11bmRlZmluZWQpe3JldHVybiBmYWxzZTt9aWYoQS4kZmFtaWx5KXtyZXR1 +cm4oQS4kZmFtaWx5Lm5hbWU9PSJudW1iZXIiJiYhaXNGaW5pdGUoQSkpP2ZhbHNl +OkEuJGZhbWlseS5uYW1lOwp9aWYoQS5ub2RlTmFtZSl7c3dpdGNoKEEubm9kZVR5 +cGUpe2Nhc2UgMTpyZXR1cm4iZWxlbWVudCI7Y2FzZSAzOnJldHVybigvXFMvKS50 +ZXN0KEEubm9kZVZhbHVlKT8idGV4dG5vZGUiOiJ3aGl0ZXNwYWNlIjt9fWVsc2V7 +aWYodHlwZW9mIEEubGVuZ3RoPT0ibnVtYmVyIil7aWYoQS5jYWxsZWUpe3JldHVy +biJhcmd1bWVudHMiOwp9ZWxzZXtpZihBLml0ZW0pe3JldHVybiJjb2xsZWN0aW9u +Ijt9fX19cmV0dXJuIHR5cGVvZiBBO312YXIgSGFzaD1uZXcgTmF0aXZlKHtuYW1l +OiJIYXNoIixpbml0aWFsaXplOmZ1bmN0aW9uKEEpe2lmKCR0eXBlKEEpPT0iaGFz +aCIpe0E9JHVubGluayhBLmdldENsZWFuKCkpOwp9Zm9yKHZhciBCIGluIEEpe3Ro +aXNbQl09QVtCXTt9cmV0dXJuIHRoaXM7fX0pO0hhc2guaW1wbGVtZW50KHtnZXRM +ZW5ndGg6ZnVuY3Rpb24oKXt2YXIgQj0wO2Zvcih2YXIgQSBpbiB0aGlzKXtpZih0 +aGlzLmhhc093blByb3BlcnR5KEEpKXtCKys7fX1yZXR1cm4gQjsKfSxmb3JFYWNo +OmZ1bmN0aW9uKEIsQyl7Zm9yKHZhciBBIGluIHRoaXMpe2lmKHRoaXMuaGFzT3du +UHJvcGVydHkoQSkpe0IuY2FsbChDLHRoaXNbQV0sQSx0aGlzKTt9fX0sZ2V0Q2xl +YW46ZnVuY3Rpb24oKXt2YXIgQj17fTtmb3IodmFyIEEgaW4gdGhpcyl7aWYodGhp +cy5oYXNPd25Qcm9wZXJ0eShBKSl7QltBXT10aGlzW0FdOwp9fXJldHVybiBCO319 +KTtIYXNoLmFsaWFzKCJmb3JFYWNoIiwiZWFjaCIpO2Z1bmN0aW9uICRIKEEpe3Jl +dHVybiBuZXcgSGFzaChBKTt9QXJyYXkuaW1wbGVtZW50KHtmb3JFYWNoOmZ1bmN0 +aW9uKEMsRCl7Zm9yKHZhciBCPTAsQT10aGlzLmxlbmd0aDtCPEE7QisrKXtDLmNh +bGwoRCx0aGlzW0JdLEIsdGhpcyk7Cn19fSk7QXJyYXkuYWxpYXMoImZvckVhY2gi +LCJlYWNoIik7ZnVuY3Rpb24gJEEoQyl7aWYoQy5pdGVtKXt2YXIgRD1bXTtmb3Io +dmFyIEI9MCxBPUMubGVuZ3RoO0I8QTtCKyspe0RbQl09Q1tCXTt9cmV0dXJuIEQ7 +fXJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChDKTsKfWZ1bmN0aW9u +ICRlYWNoKEMsQixEKXt2YXIgQT0kdHlwZShDKTsoKEE9PSJhcmd1bWVudHMifHxB +PT0iY29sbGVjdGlvbiJ8fEE9PSJhcnJheSIpP0FycmF5Okhhc2gpLmVhY2goQyxC +LEQpO312YXIgQnJvd3Nlcj1uZXcgSGFzaCh7RW5naW5lOntuYW1lOiJ1bmtub3du +Iix2ZXJzaW9uOiIifSxQbGF0Zm9ybTp7bmFtZToobmF2aWdhdG9yLnBsYXRmb3Jt +Lm1hdGNoKC9tYWN8d2lufGxpbnV4L2kpfHxbIm90aGVyIl0pWzBdLnRvTG93ZXJD +YXNlKCl9LEZlYXR1cmVzOnt4cGF0aDohIShkb2N1bWVudC5ldmFsdWF0ZSksYWly +OiEhKHdpbmRvdy5ydW50aW1lKX0sUGx1Z2luczp7fX0pOwppZih3aW5kb3cub3Bl +cmEpe0Jyb3dzZXIuRW5naW5lPXtuYW1lOiJwcmVzdG8iLHZlcnNpb246KGRvY3Vt +ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUpPzk1MDo5MjV9O31lbHNle2lmKHdp +bmRvdy5BY3RpdmVYT2JqZWN0KXtCcm93c2VyLkVuZ2luZT17bmFtZToidHJpZGVu +dCIsdmVyc2lvbjood2luZG93LlhNTEh0dHBSZXF1ZXN0KT81OjR9Owp9ZWxzZXtp +ZighbmF2aWdhdG9yLnRhaW50RW5hYmxlZCl7QnJvd3Nlci5FbmdpbmU9e25hbWU6 +IndlYmtpdCIsdmVyc2lvbjooQnJvd3Nlci5GZWF0dXJlcy54cGF0aCk/NDIwOjQx +OX07fWVsc2V7aWYoZG9jdW1lbnQuZ2V0Qm94T2JqZWN0Rm9yIT1udWxsKXtCcm93 +c2VyLkVuZ2luZT17bmFtZToiZ2Vja28iLHZlcnNpb246KGRvY3VtZW50LmdldEVs +ZW1lbnRzQnlDbGFzc05hbWUpPzE5OjE4fTsKfX19fUJyb3dzZXIuRW5naW5lW0Jy +b3dzZXIuRW5naW5lLm5hbWVdPUJyb3dzZXIuRW5naW5lW0Jyb3dzZXIuRW5naW5l +Lm5hbWUrQnJvd3Nlci5FbmdpbmUudmVyc2lvbl09dHJ1ZTtpZih3aW5kb3cub3Jp +ZW50YXRpb24hPXVuZGVmaW5lZCl7QnJvd3Nlci5QbGF0Zm9ybS5uYW1lPSJpcG9k +IjsKfUJyb3dzZXIuUGxhdGZvcm1bQnJvd3Nlci5QbGF0Zm9ybS5uYW1lXT10cnVl +O0Jyb3dzZXIuUmVxdWVzdD1mdW5jdGlvbigpe3JldHVybiAkdHJ5KGZ1bmN0aW9u +KCl7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdCgpO30sZnVuY3Rpb24oKXtyZXR1 +cm4gbmV3IEFjdGl2ZVhPYmplY3QoIk1TWE1MMi5YTUxIVFRQIik7Cn0pO307QnJv +d3Nlci5GZWF0dXJlcy54aHI9ISEoQnJvd3Nlci5SZXF1ZXN0KCkpO0Jyb3dzZXIu +UGx1Z2lucy5GbGFzaD0oZnVuY3Rpb24oKXt2YXIgQT0oJHRyeShmdW5jdGlvbigp +e3JldHVybiBuYXZpZ2F0b3IucGx1Z2luc1siU2hvY2t3YXZlIEZsYXNoIl0uZGVz +Y3JpcHRpb247Cn0sZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3Qo +IlNob2Nrd2F2ZUZsYXNoLlNob2Nrd2F2ZUZsYXNoIikuR2V0VmFyaWFibGUoIiR2 +ZXJzaW9uIik7fSl8fCIwIHIwIikubWF0Y2goL1xkKy9nKTtyZXR1cm57dmVyc2lv +bjpwYXJzZUludChBWzBdfHwwKyIuIitBWzFdfHwwKSxidWlsZDpwYXJzZUludChB +WzJdfHwwKX07Cn0pKCk7ZnVuY3Rpb24gJGV4ZWMoQil7aWYoIUIpe3JldHVybiBC +O31pZih3aW5kb3cuZXhlY1NjcmlwdCl7d2luZG93LmV4ZWNTY3JpcHQoQik7fWVs +c2V7dmFyIEE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7QS5zZXRB +dHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2phdmFzY3JpcHQiKTsKQS50ZXh0PUI7ZG9j +dW1lbnQuaGVhZC5hcHBlbmRDaGlsZChBKTtkb2N1bWVudC5oZWFkLnJlbW92ZUNo +aWxkKEEpO31yZXR1cm4gQjt9TmF0aXZlLlVJRD0xO3ZhciAkdWlkPShCcm93c2Vy +LkVuZ2luZS50cmlkZW50KT9mdW5jdGlvbihBKXtyZXR1cm4oQS51aWR8fChBLnVp +ZD1bTmF0aXZlLlVJRCsrXSkpWzBdOwp9OmZ1bmN0aW9uKEEpe3JldHVybiBBLnVp +ZHx8KEEudWlkPU5hdGl2ZS5VSUQrKyk7fTt2YXIgV2luZG93PW5ldyBOYXRpdmUo +e25hbWU6IldpbmRvdyIsbGVnYWN5OihCcm93c2VyLkVuZ2luZS50cmlkZW50KT9u +dWxsOndpbmRvdy5XaW5kb3csaW5pdGlhbGl6ZTpmdW5jdGlvbihBKXskdWlkKEEp +OwppZighQS5FbGVtZW50KXtBLkVsZW1lbnQ9JGVtcHR5O2lmKEJyb3dzZXIuRW5n +aW5lLndlYmtpdCl7QS5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTt9 +QS5FbGVtZW50LnByb3RvdHlwZT0oQnJvd3Nlci5FbmdpbmUud2Via2l0KT93aW5k +b3dbIltbRE9NRWxlbWVudC5wcm90b3R5cGVdXSJdOnt9Owp9cmV0dXJuICRleHRl +bmQoQSxXaW5kb3cuUHJvdG90eXBlKTt9LGFmdGVySW1wbGVtZW50OmZ1bmN0aW9u +KEIsQSl7d2luZG93W0JdPVdpbmRvdy5Qcm90b3R5cGVbQl09QTt9fSk7V2luZG93 +LlByb3RvdHlwZT17JGZhbWlseTp7bmFtZToid2luZG93In19O25ldyBXaW5kb3co +d2luZG93KTsKdmFyIERvY3VtZW50PW5ldyBOYXRpdmUoe25hbWU6IkRvY3VtZW50 +IixsZWdhY3k6KEJyb3dzZXIuRW5naW5lLnRyaWRlbnQpP251bGw6d2luZG93LkRv +Y3VtZW50LGluaXRpYWxpemU6ZnVuY3Rpb24oQSl7JHVpZChBKTtBLmhlYWQ9QS5n +ZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdOwpBLmh0bWw9QS5nZXRFbGVt +ZW50c0J5VGFnTmFtZSgiaHRtbCIpWzBdO0Eud2luZG93PUEuZGVmYXVsdFZpZXd8 +fEEucGFyZW50V2luZG93O2lmKEJyb3dzZXIuRW5naW5lLnRyaWRlbnQ0KXskdHJ5 +KGZ1bmN0aW9uKCl7QS5leGVjQ29tbWFuZCgiQmFja2dyb3VuZEltYWdlQ2FjaGUi +LGZhbHNlLHRydWUpOwp9KTt9cmV0dXJuICRleHRlbmQoQSxEb2N1bWVudC5Qcm90 +b3R5cGUpO30sYWZ0ZXJJbXBsZW1lbnQ6ZnVuY3Rpb24oQixBKXtkb2N1bWVudFtC +XT1Eb2N1bWVudC5Qcm90b3R5cGVbQl09QTt9fSk7RG9jdW1lbnQuUHJvdG90eXBl +PXskZmFtaWx5OntuYW1lOiJkb2N1bWVudCJ9fTsKbmV3IERvY3VtZW50KGRvY3Vt +ZW50KTtBcnJheS5pbXBsZW1lbnQoe2V2ZXJ5OmZ1bmN0aW9uKEMsRCl7Zm9yKHZh +ciBCPTAsQT10aGlzLmxlbmd0aDtCPEE7QisrKXtpZighQy5jYWxsKEQsdGhpc1tC +XSxCLHRoaXMpKXtyZXR1cm4gZmFsc2U7fX1yZXR1cm4gdHJ1ZTsKfSxmaWx0ZXI6 +ZnVuY3Rpb24oRCxFKXt2YXIgQz1bXTtmb3IodmFyIEI9MCxBPXRoaXMubGVuZ3Ro +O0I8QTtCKyspe2lmKEQuY2FsbChFLHRoaXNbQl0sQix0aGlzKSl7Qy5wdXNoKHRo +aXNbQl0pO319cmV0dXJuIEM7fSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiB0aGlz +LmZpbHRlcigkZGVmaW5lZCk7Cn0saW5kZXhPZjpmdW5jdGlvbihDLEQpe3ZhciBB +PXRoaXMubGVuZ3RoO2Zvcih2YXIgQj0oRDwwKT9NYXRoLm1heCgwLEErRCk6RHx8 +MDtCPEE7QisrKXtpZih0aGlzW0JdPT09Qyl7cmV0dXJuIEI7fX1yZXR1cm4gLTE7 +fSxtYXA6ZnVuY3Rpb24oRCxFKXt2YXIgQz1bXTsKZm9yKHZhciBCPTAsQT10aGlz +Lmxlbmd0aDtCPEE7QisrKXtDW0JdPUQuY2FsbChFLHRoaXNbQl0sQix0aGlzKTt9 +cmV0dXJuIEM7fSxzb21lOmZ1bmN0aW9uKEMsRCl7Zm9yKHZhciBCPTAsQT10aGlz +Lmxlbmd0aDtCPEE7QisrKXtpZihDLmNhbGwoRCx0aGlzW0JdLEIsdGhpcykpe3Jl +dHVybiB0cnVlOwp9fXJldHVybiBmYWxzZTt9LGFzc29jaWF0ZTpmdW5jdGlvbihD +KXt2YXIgRD17fSxCPU1hdGgubWluKHRoaXMubGVuZ3RoLEMubGVuZ3RoKTtmb3Io +dmFyIEE9MDtBPEI7QSsrKXtEW0NbQV1dPXRoaXNbQV07fXJldHVybiBEO30sbGlu +azpmdW5jdGlvbihDKXt2YXIgQT17fTsKZm9yKHZhciBFPTAsQj10aGlzLmxlbmd0 +aDtFPEI7RSsrKXtmb3IodmFyIEQgaW4gQyl7aWYoQ1tEXSh0aGlzW0VdKSl7QVtE +XT10aGlzW0VdO2RlbGV0ZSBDW0RdO2JyZWFrO319fXJldHVybiBBO30sY29udGFp +bnM6ZnVuY3Rpb24oQSxCKXtyZXR1cm4gdGhpcy5pbmRleE9mKEEsQikhPS0xOwp9 +LGV4dGVuZDpmdW5jdGlvbihDKXtmb3IodmFyIEI9MCxBPUMubGVuZ3RoO0I8QTtC +Kyspe3RoaXMucHVzaChDW0JdKTt9cmV0dXJuIHRoaXM7fSxnZXRMYXN0OmZ1bmN0 +aW9uKCl7cmV0dXJuKHRoaXMubGVuZ3RoKT90aGlzW3RoaXMubGVuZ3RoLTFdOm51 +bGw7fSxnZXRSYW5kb206ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5sZW5ndGgpP3Ro +aXNbJHJhbmRvbSgwLHRoaXMubGVuZ3RoLTEpXTpudWxsOwp9LGluY2x1ZGU6ZnVu +Y3Rpb24oQSl7aWYoIXRoaXMuY29udGFpbnMoQSkpe3RoaXMucHVzaChBKTt9cmV0 +dXJuIHRoaXM7fSxjb21iaW5lOmZ1bmN0aW9uKEMpe2Zvcih2YXIgQj0wLEE9Qy5s +ZW5ndGg7QjxBO0IrKyl7dGhpcy5pbmNsdWRlKENbQl0pO31yZXR1cm4gdGhpczsK +fSxlcmFzZTpmdW5jdGlvbihCKXtmb3IodmFyIEE9dGhpcy5sZW5ndGg7QS0tO0Ep +e2lmKHRoaXNbQV09PT1CKXt0aGlzLnNwbGljZShBLDEpO319cmV0dXJuIHRoaXM7 +fSxlbXB0eTpmdW5jdGlvbigpe3RoaXMubGVuZ3RoPTA7cmV0dXJuIHRoaXM7fSxm +bGF0dGVuOmZ1bmN0aW9uKCl7dmFyIEQ9W107CmZvcih2YXIgQj0wLEE9dGhpcy5s +ZW5ndGg7QjxBO0IrKyl7dmFyIEM9JHR5cGUodGhpc1tCXSk7aWYoIUMpe2NvbnRp +bnVlO31EPUQuY29uY2F0KChDPT0iYXJyYXkifHxDPT0iY29sbGVjdGlvbiJ8fEM9 +PSJhcmd1bWVudHMiKT9BcnJheS5mbGF0dGVuKHRoaXNbQl0pOnRoaXNbQl0pOwp9 +cmV0dXJuIEQ7fSxoZXhUb1JnYjpmdW5jdGlvbihCKXtpZih0aGlzLmxlbmd0aCE9 +Myl7cmV0dXJuIG51bGw7fXZhciBBPXRoaXMubWFwKGZ1bmN0aW9uKEMpe2lmKEMu +bGVuZ3RoPT0xKXtDKz1DO31yZXR1cm4gQy50b0ludCgxNik7fSk7cmV0dXJuKEIp +P0E6InJnYigiK0ErIikiOwp9LHJnYlRvSGV4OmZ1bmN0aW9uKEQpe2lmKHRoaXMu +bGVuZ3RoPDMpe3JldHVybiBudWxsO31pZih0aGlzLmxlbmd0aD09NCYmdGhpc1sz +XT09MCYmIUQpe3JldHVybiJ0cmFuc3BhcmVudCI7fXZhciBCPVtdO2Zvcih2YXIg +QT0wO0E8MztBKyspe3ZhciBDPSh0aGlzW0FdLTApLnRvU3RyaW5nKDE2KTsKQi5w +dXNoKChDLmxlbmd0aD09MSk/IjAiK0M6Qyk7fXJldHVybihEKT9COiIjIitCLmpv +aW4oIiIpO319KTtGdW5jdGlvbi5pbXBsZW1lbnQoe2V4dGVuZDpmdW5jdGlvbihB +KXtmb3IodmFyIEIgaW4gQSl7dGhpc1tCXT1BW0JdO31yZXR1cm4gdGhpczt9LGNy +ZWF0ZTpmdW5jdGlvbihCKXt2YXIgQT10aGlzOwpCPUJ8fHt9O3JldHVybiBmdW5j +dGlvbihEKXt2YXIgQz1CLmFyZ3VtZW50cztDPShDIT11bmRlZmluZWQpPyRzcGxh +dChDKTpBcnJheS5zbGljZShhcmd1bWVudHMsKEIuZXZlbnQpPzE6MCk7aWYoQi5l +dmVudCl7Qz1bRHx8d2luZG93LmV2ZW50XS5leHRlbmQoQyk7Cn12YXIgRT1mdW5j +dGlvbigpe3JldHVybiBBLmFwcGx5KEIuYmluZHx8bnVsbCxDKTt9O2lmKEIuZGVs +YXkpe3JldHVybiBzZXRUaW1lb3V0KEUsQi5kZWxheSk7fWlmKEIucGVyaW9kaWNh +bCl7cmV0dXJuIHNldEludGVydmFsKEUsQi5wZXJpb2RpY2FsKTt9aWYoQi5hdHRl +bXB0KXtyZXR1cm4gJHRyeShFKTsKfXJldHVybiBFKCk7fTt9LHBhc3M6ZnVuY3Rp +b24oQSxCKXtyZXR1cm4gdGhpcy5jcmVhdGUoe2FyZ3VtZW50czpBLGJpbmQ6Qn0p +O30sYXR0ZW1wdDpmdW5jdGlvbihBLEIpe3JldHVybiB0aGlzLmNyZWF0ZSh7YXJn +dW1lbnRzOkEsYmluZDpCLGF0dGVtcHQ6dHJ1ZX0pKCk7Cn0sYmluZDpmdW5jdGlv +bihCLEEpe3JldHVybiB0aGlzLmNyZWF0ZSh7YmluZDpCLGFyZ3VtZW50czpBfSk7 +fSxiaW5kV2l0aEV2ZW50OmZ1bmN0aW9uKEIsQSl7cmV0dXJuIHRoaXMuY3JlYXRl +KHtiaW5kOkIsZXZlbnQ6dHJ1ZSxhcmd1bWVudHM6QX0pO30sZGVsYXk6ZnVuY3Rp +b24oQixDLEEpe3JldHVybiB0aGlzLmNyZWF0ZSh7ZGVsYXk6QixiaW5kOkMsYXJn +dW1lbnRzOkF9KSgpOwp9LHBlcmlvZGljYWw6ZnVuY3Rpb24oQSxDLEIpe3JldHVy +biB0aGlzLmNyZWF0ZSh7cGVyaW9kaWNhbDpBLGJpbmQ6Qyxhcmd1bWVudHM6Qn0p +KCk7fSxydW46ZnVuY3Rpb24oQSxCKXtyZXR1cm4gdGhpcy5hcHBseShCLCRzcGxh +dChBKSk7fX0pO051bWJlci5pbXBsZW1lbnQoe2xpbWl0OmZ1bmN0aW9uKEIsQSl7 +cmV0dXJuIE1hdGgubWluKEEsTWF0aC5tYXgoQix0aGlzKSk7Cn0scm91bmQ6ZnVu +Y3Rpb24oQSl7QT1NYXRoLnBvdygxMCxBfHwwKTtyZXR1cm4gTWF0aC5yb3VuZCh0 +aGlzKkEpL0E7fSx0aW1lczpmdW5jdGlvbihCLEMpe2Zvcih2YXIgQT0wO0E8dGhp +cztBKyspe0IuY2FsbChDLEEsdGhpcyk7fX0sdG9GbG9hdDpmdW5jdGlvbigpe3Jl +dHVybiBwYXJzZUZsb2F0KHRoaXMpOwp9LHRvSW50OmZ1bmN0aW9uKEEpe3JldHVy +biBwYXJzZUludCh0aGlzLEF8fDEwKTt9fSk7TnVtYmVyLmFsaWFzKCJ0aW1lcyIs +ImVhY2giKTsoZnVuY3Rpb24oQil7dmFyIEE9e307Qi5lYWNoKGZ1bmN0aW9uKEMp +e2lmKCFOdW1iZXJbQ10pe0FbQ109ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aFtDXS5h +cHBseShudWxsLFt0aGlzXS5jb25jYXQoJEEoYXJndW1lbnRzKSkpOwp9O319KTtO +dW1iZXIuaW1wbGVtZW50KEEpO30pKFsiYWJzIiwiYWNvcyIsImFzaW4iLCJhdGFu +IiwiYXRhbjIiLCJjZWlsIiwiY29zIiwiZXhwIiwiZmxvb3IiLCJsb2ciLCJtYXgi +LCJtaW4iLCJwb3ciLCJzaW4iLCJzcXJ0IiwidGFuIl0pO1N0cmluZy5pbXBsZW1l +bnQoe3Rlc3Q6ZnVuY3Rpb24oQSxCKXtyZXR1cm4oKHR5cGVvZiBBPT0ic3RyaW5n +Iik/bmV3IFJlZ0V4cChBLEIpOkEpLnRlc3QodGhpcyk7Cn0sY29udGFpbnM6ZnVu +Y3Rpb24oQSxCKXtyZXR1cm4oQik/KEIrdGhpcytCKS5pbmRleE9mKEIrQStCKT4t +MTp0aGlzLmluZGV4T2YoQSk+LTE7fSx0cmltOmZ1bmN0aW9uKCl7cmV0dXJuIHRo +aXMucmVwbGFjZSgvXlxzK3xccyskL2csIiIpO30sY2xlYW46ZnVuY3Rpb24oKXty +ZXR1cm4gdGhpcy5yZXBsYWNlKC9ccysvZywiICIpLnRyaW0oKTsKfSxjYW1lbENh +c2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXBsYWNlKC8tXEQvZyxmdW5jdGlv +bihBKXtyZXR1cm4gQS5jaGFyQXQoMSkudG9VcHBlckNhc2UoKTt9KTt9LGh5cGhl +bmF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlcGxhY2UoL1tBLVpdL2csZnVu +Y3Rpb24oQSl7cmV0dXJuKCItIitBLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpKTsK +fSk7fSxjYXBpdGFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVwbGFjZSgv +XGJbYS16XS9nLGZ1bmN0aW9uKEEpe3JldHVybiBBLnRvVXBwZXJDYXNlKCk7fSk7 +fSxlc2NhcGVSZWdFeHA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXBsYWNlKC8o +Wy0uKis/XiR7fSgpfFtcXVwvXFxdKS9nLCJcXCQxIik7Cn0sdG9JbnQ6ZnVuY3Rp +b24oQSl7cmV0dXJuIHBhcnNlSW50KHRoaXMsQXx8MTApO30sdG9GbG9hdDpmdW5j +dGlvbigpe3JldHVybiBwYXJzZUZsb2F0KHRoaXMpO30saGV4VG9SZ2I6ZnVuY3Rp +b24oQil7dmFyIEE9dGhpcy5tYXRjaCgvXiM/KFx3ezEsMn0pKFx3ezEsMn0pKFx3 +ezEsMn0pJC8pOwpyZXR1cm4oQSk/QS5zbGljZSgxKS5oZXhUb1JnYihCKTpudWxs +O30scmdiVG9IZXg6ZnVuY3Rpb24oQil7dmFyIEE9dGhpcy5tYXRjaCgvXGR7MSwz +fS9nKTtyZXR1cm4oQSk/QS5yZ2JUb0hleChCKTpudWxsO30sc3RyaXBTY3JpcHRz +OmZ1bmN0aW9uKEIpe3ZhciBBPSIiOwp2YXIgQz10aGlzLnJlcGxhY2UoLzxzY3Jp +cHRbXj5dKj4oW1xzXFNdKj8pPFwvc2NyaXB0Pi9naSxmdW5jdGlvbigpe0ErPWFy +Z3VtZW50c1sxXSsiXG4iO3JldHVybiIiO30pO2lmKEI9PT10cnVlKXskZXhlYyhB +KTt9ZWxzZXtpZigkdHlwZShCKT09ImZ1bmN0aW9uIil7QihBLEMpOwp9fXJldHVy +biBDO30sc3Vic3RpdHV0ZTpmdW5jdGlvbihBLEIpe3JldHVybiB0aGlzLnJlcGxh +Y2UoQnx8KC9cXD9ceyhbXn1dKylcfS9nKSxmdW5jdGlvbihELEMpe2lmKEQuY2hh +ckF0KDApPT0iXFwiKXtyZXR1cm4gRC5zbGljZSgxKTt9cmV0dXJuKEFbQ10hPXVu +ZGVmaW5lZCk/QVtDXToiIjsKfSk7fX0pO0hhc2guaW1wbGVtZW50KHtoYXM6T2Jq +ZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxrZXlPZjpmdW5jdGlvbihCKXtm +b3IodmFyIEEgaW4gdGhpcyl7aWYodGhpcy5oYXNPd25Qcm9wZXJ0eShBKSYmdGhp +c1tBXT09PUIpe3JldHVybiBBO319cmV0dXJuIG51bGw7Cn0saGFzVmFsdWU6ZnVu +Y3Rpb24oQSl7cmV0dXJuKEhhc2gua2V5T2YodGhpcyxBKSE9PW51bGwpO30sZXh0 +ZW5kOmZ1bmN0aW9uKEEpe0hhc2guZWFjaChBLGZ1bmN0aW9uKEMsQil7SGFzaC5z +ZXQodGhpcyxCLEMpO30sdGhpcyk7cmV0dXJuIHRoaXM7fSxjb21iaW5lOmZ1bmN0 +aW9uKEEpe0hhc2guZWFjaChBLGZ1bmN0aW9uKEMsQil7SGFzaC5pbmNsdWRlKHRo +aXMsQixDKTsKfSx0aGlzKTtyZXR1cm4gdGhpczt9LGVyYXNlOmZ1bmN0aW9uKEEp +e2lmKHRoaXMuaGFzT3duUHJvcGVydHkoQSkpe2RlbGV0ZSB0aGlzW0FdO31yZXR1 +cm4gdGhpczt9LGdldDpmdW5jdGlvbihBKXtyZXR1cm4odGhpcy5oYXNPd25Qcm9w +ZXJ0eShBKSk/dGhpc1tBXTpudWxsOwp9LHNldDpmdW5jdGlvbihBLEIpe2lmKCF0 +aGlzW0FdfHx0aGlzLmhhc093blByb3BlcnR5KEEpKXt0aGlzW0FdPUI7fXJldHVy +biB0aGlzO30sZW1wdHk6ZnVuY3Rpb24oKXtIYXNoLmVhY2godGhpcyxmdW5jdGlv +bihCLEEpe2RlbGV0ZSB0aGlzW0FdO30sdGhpcyk7CnJldHVybiB0aGlzO30saW5j +bHVkZTpmdW5jdGlvbihCLEMpe3ZhciBBPXRoaXNbQl07aWYoQT09dW5kZWZpbmVk +KXt0aGlzW0JdPUM7fXJldHVybiB0aGlzO30sbWFwOmZ1bmN0aW9uKEIsQyl7dmFy +IEE9bmV3IEhhc2g7SGFzaC5lYWNoKHRoaXMsZnVuY3Rpb24oRSxEKXtBLnNldChE +LEIuY2FsbChDLEUsRCx0aGlzKSk7Cn0sdGhpcyk7cmV0dXJuIEE7fSxmaWx0ZXI6 +ZnVuY3Rpb24oQixDKXt2YXIgQT1uZXcgSGFzaDtIYXNoLmVhY2godGhpcyxmdW5j +dGlvbihFLEQpe2lmKEIuY2FsbChDLEUsRCx0aGlzKSl7QS5zZXQoRCxFKTt9fSx0 +aGlzKTtyZXR1cm4gQTt9LGV2ZXJ5OmZ1bmN0aW9uKEIsQyl7Zm9yKHZhciBBIGlu +IHRoaXMpe2lmKHRoaXMuaGFzT3duUHJvcGVydHkoQSkmJiFCLmNhbGwoQyx0aGlz +W0FdLEEpKXtyZXR1cm4gZmFsc2U7Cn19cmV0dXJuIHRydWU7fSxzb21lOmZ1bmN0 +aW9uKEIsQyl7Zm9yKHZhciBBIGluIHRoaXMpe2lmKHRoaXMuaGFzT3duUHJvcGVy +dHkoQSkmJkIuY2FsbChDLHRoaXNbQV0sQSkpe3JldHVybiB0cnVlO319cmV0dXJu +IGZhbHNlO30sZ2V0S2V5czpmdW5jdGlvbigpe3ZhciBBPVtdOwpIYXNoLmVhY2go +dGhpcyxmdW5jdGlvbihDLEIpe0EucHVzaChCKTt9KTtyZXR1cm4gQTt9LGdldFZh +bHVlczpmdW5jdGlvbigpe3ZhciBBPVtdO0hhc2guZWFjaCh0aGlzLGZ1bmN0aW9u +KEIpe0EucHVzaChCKTt9KTtyZXR1cm4gQTt9LHRvUXVlcnlTdHJpbmc6ZnVuY3Rp +b24oQSl7dmFyIEI9W107Ckhhc2guZWFjaCh0aGlzLGZ1bmN0aW9uKEYsRSl7aWYo +QSl7RT1BKyJbIitFKyJdIjt9dmFyIEQ7c3dpdGNoKCR0eXBlKEYpKXtjYXNlIm9i +amVjdCI6RD1IYXNoLnRvUXVlcnlTdHJpbmcoRixFKTticmVhaztjYXNlImFycmF5 +Ijp2YXIgQz17fTtGLmVhY2goZnVuY3Rpb24oSCxHKXtDW0ddPUg7Cn0pO0Q9SGFz +aC50b1F1ZXJ5U3RyaW5nKEMsRSk7YnJlYWs7ZGVmYXVsdDpEPUUrIj0iK2VuY29k +ZVVSSUNvbXBvbmVudChGKTt9aWYoRiE9dW5kZWZpbmVkKXtCLnB1c2goRCk7fX0p +O3JldHVybiBCLmpvaW4oIiYiKTt9fSk7SGFzaC5hbGlhcyh7a2V5T2Y6ImluZGV4 +T2YiLGhhc1ZhbHVlOiJjb250YWlucyJ9KTsKdmFyIEV2ZW50PW5ldyBOYXRpdmUo +e25hbWU6IkV2ZW50Iixpbml0aWFsaXplOmZ1bmN0aW9uKEEsRil7Rj1GfHx3aW5k +b3c7dmFyIEs9Ri5kb2N1bWVudDtBPUF8fEYuZXZlbnQ7aWYoQS4kZXh0ZW5kZWQp +e3JldHVybiBBO310aGlzLiRleHRlbmRlZD10cnVlO3ZhciBKPUEudHlwZTsKdmFy +IEc9QS50YXJnZXR8fEEuc3JjRWxlbWVudDt3aGlsZShHJiZHLm5vZGVUeXBlPT0z +KXtHPUcucGFyZW50Tm9kZTt9aWYoSi50ZXN0KC9rZXkvKSl7dmFyIEI9QS53aGlj +aHx8QS5rZXlDb2RlO3ZhciBNPUV2ZW50LktleXMua2V5T2YoQik7aWYoSj09Imtl +eWRvd24iKXt2YXIgRD1CLTExMTsKaWYoRD4wJiZEPDEzKXtNPSJmIitEO319TT1N +fHxTdHJpbmcuZnJvbUNoYXJDb2RlKEIpLnRvTG93ZXJDYXNlKCk7fWVsc2V7aWYo +Si5tYXRjaCgvKGNsaWNrfG1vdXNlfG1lbnUpL2kpKXtLPSghSy5jb21wYXRNb2Rl +fHxLLmNvbXBhdE1vZGU9PSJDU1MxQ29tcGF0Iik/Sy5odG1sOksuYm9keTsKdmFy +IEk9e3g6QS5wYWdlWHx8QS5jbGllbnRYK0suc2Nyb2xsTGVmdCx5OkEucGFnZVl8 +fEEuY2xpZW50WStLLnNjcm9sbFRvcH07dmFyIEM9e3g6KEEucGFnZVgpP0EucGFn +ZVgtRi5wYWdlWE9mZnNldDpBLmNsaWVudFgseTooQS5wYWdlWSk/QS5wYWdlWS1G +LnBhZ2VZT2Zmc2V0OkEuY2xpZW50WX07CmlmKEoubWF0Y2goL0RPTU1vdXNlU2Ny +b2xsfG1vdXNld2hlZWwvKSl7dmFyIEg9KEEud2hlZWxEZWx0YSk/QS53aGVlbERl +bHRhLzEyMDotKEEuZGV0YWlsfHwwKS8zO312YXIgRT0oQS53aGljaD09Myl8fChB +LmJ1dHRvbj09Mik7dmFyIEw9bnVsbDtpZihKLm1hdGNoKC9vdmVyfG91dC8pKXtz +d2l0Y2goSil7Y2FzZSJtb3VzZW92ZXIiOkw9QS5yZWxhdGVkVGFyZ2V0fHxBLmZy +b21FbGVtZW50OwpicmVhaztjYXNlIm1vdXNlb3V0IjpMPUEucmVsYXRlZFRhcmdl +dHx8QS50b0VsZW1lbnQ7fWlmKCEoZnVuY3Rpb24oKXt3aGlsZShMJiZMLm5vZGVU +eXBlPT0zKXtMPUwucGFyZW50Tm9kZTt9cmV0dXJuIHRydWU7fSkuY3JlYXRlKHth +dHRlbXB0OkJyb3dzZXIuRW5naW5lLmdlY2tvfSkoKSl7TD1mYWxzZTsKfX19fXJl +dHVybiAkZXh0ZW5kKHRoaXMse2V2ZW50OkEsdHlwZTpKLHBhZ2U6SSxjbGllbnQ6 +QyxyaWdodENsaWNrOkUsd2hlZWw6SCxyZWxhdGVkVGFyZ2V0OkwsdGFyZ2V0Okcs +Y29kZTpCLGtleTpNLHNoaWZ0OkEuc2hpZnRLZXksY29udHJvbDpBLmN0cmxLZXks +YWx0OkEuYWx0S2V5LG1ldGE6QS5tZXRhS2V5fSk7Cn19KTtFdmVudC5LZXlzPW5l +dyBIYXNoKHtlbnRlcjoxMyx1cDozOCxkb3duOjQwLGxlZnQ6MzcscmlnaHQ6Mzks +ZXNjOjI3LHNwYWNlOjMyLGJhY2tzcGFjZTo4LHRhYjo5LCJkZWxldGUiOjQ2fSk7 +RXZlbnQuaW1wbGVtZW50KHtzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3Rv +cFByb3BhZ2F0aW9uKCkucHJldmVudERlZmF1bHQoKTsKfSxzdG9wUHJvcGFnYXRp +b246ZnVuY3Rpb24oKXtpZih0aGlzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbil7dGhp +cy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKTt9ZWxzZXt0aGlzLmV2ZW50LmNhbmNl +bEJ1YmJsZT10cnVlO31yZXR1cm4gdGhpczt9LHByZXZlbnREZWZhdWx0OmZ1bmN0 +aW9uKCl7aWYodGhpcy5ldmVudC5wcmV2ZW50RGVmYXVsdCl7dGhpcy5ldmVudC5w +cmV2ZW50RGVmYXVsdCgpOwp9ZWxzZXt0aGlzLmV2ZW50LnJldHVyblZhbHVlPWZh +bHNlO31yZXR1cm4gdGhpczt9fSk7dmFyIENsYXNzPW5ldyBOYXRpdmUoe25hbWU6 +IkNsYXNzIixpbml0aWFsaXplOmZ1bmN0aW9uKEIpe0I9Qnx8e307dmFyIEE9ZnVu +Y3Rpb24oRSl7Zm9yKHZhciBEIGluIHRoaXMpe3RoaXNbRF09JHVubGluayh0aGlz +W0RdKTsKfWZvcih2YXIgRiBpbiBDbGFzcy5NdXRhdG9ycyl7aWYoIXRoaXNbRl0p +e2NvbnRpbnVlO31DbGFzcy5NdXRhdG9yc1tGXSh0aGlzLHRoaXNbRl0pO2RlbGV0 +ZSB0aGlzW0ZdO310aGlzLmNvbnN0cnVjdG9yPUE7aWYoRT09PSRlbXB0eSl7cmV0 +dXJuIHRoaXM7fXZhciBDPSh0aGlzLmluaXRpYWxpemUpP3RoaXMuaW5pdGlhbGl6 +ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dGhpczsKaWYodGhpcy5vcHRpb25zJiZ0 +aGlzLm9wdGlvbnMuaW5pdGlhbGl6ZSl7dGhpcy5vcHRpb25zLmluaXRpYWxpemUu +Y2FsbCh0aGlzKTt9cmV0dXJuIEM7fTskZXh0ZW5kKEEsdGhpcyk7QS5jb25zdHJ1 +Y3Rvcj1DbGFzcztBLnByb3RvdHlwZT1CO3JldHVybiBBO319KTsKQ2xhc3MuaW1w +bGVtZW50KHtpbXBsZW1lbnQ6ZnVuY3Rpb24oKXtDbGFzcy5NdXRhdG9ycy5JbXBs +ZW1lbnRzKHRoaXMucHJvdG90eXBlLEFycmF5LnNsaWNlKGFyZ3VtZW50cykpO3Jl +dHVybiB0aGlzO319KTtDbGFzcy5NdXRhdG9ycz17SW1wbGVtZW50czpmdW5jdGlv +bihBLEIpeyRzcGxhdChCKS5lYWNoKGZ1bmN0aW9uKEMpeyRleHRlbmQoQSwoJHR5 +cGUoQyk9PSJjbGFzcyIpP25ldyBDKCRlbXB0eSk6Qyk7Cn0pO30sRXh0ZW5kczpm +dW5jdGlvbihzZWxmLGtsYXNzKXt2YXIgaW5zdGFuY2U9bmV3IGtsYXNzKCRlbXB0 +eSk7ZGVsZXRlIGluc3RhbmNlLnBhcmVudDtkZWxldGUgaW5zdGFuY2UucGFyZW50 +T2Y7Zm9yKHZhciBrZXkgaW4gaW5zdGFuY2Upe3ZhciBjdXJyZW50PXNlbGZba2V5 +XSxwcmV2aW91cz1pbnN0YW5jZVtrZXldOwppZihjdXJyZW50PT11bmRlZmluZWQp +e3NlbGZba2V5XT1wcmV2aW91cztjb250aW51ZTt9dmFyIGN0eXBlPSR0eXBlKGN1 +cnJlbnQpLHB0eXBlPSR0eXBlKHByZXZpb3VzKTtpZihjdHlwZSE9cHR5cGUpe2Nv +bnRpbnVlO31zd2l0Y2goY3R5cGUpe2Nhc2UiZnVuY3Rpb24iOmlmKCFhcmd1bWVu +dHMuY2FsbGVlLmNhbGxlcil7c2VsZltrZXldPWV2YWwoIigiK1N0cmluZyhjdXJy +ZW50KS5yZXBsYWNlKC9cYnRoaXNcLnBhcmVudFwoXHMqKFwpKT8vZyxmdW5jdGlv +bihmdWxsLGNsb3NlKXtyZXR1cm4iYXJndW1lbnRzLmNhbGxlZS5fcGFyZW50Xy5j +YWxsKHRoaXMiKyhjbG9zZXx8IiwgIik7Cn0pKyIpIik7fXNlbGZba2V5XS5fcGFy +ZW50Xz1wcmV2aW91czticmVhaztjYXNlIm9iamVjdCI6c2VsZltrZXldPSRtZXJn +ZShwcmV2aW91cyxjdXJyZW50KTt9fXNlbGYucGFyZW50PWZ1bmN0aW9uKCl7cmV0 +dXJuIGFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyLl9wYXJlbnRfLmFwcGx5KHRoaXMs +YXJndW1lbnRzKTsKfTtzZWxmLnBhcmVudE9mPWZ1bmN0aW9uKGRlc2NlbmRhbnQp +e3JldHVybiBkZXNjZW5kYW50Ll9wYXJlbnRfLmFwcGx5KHRoaXMsQXJyYXkuc2xp +Y2UoYXJndW1lbnRzLDEpKTt9O319O3ZhciBDaGFpbj1uZXcgQ2xhc3Moe2NoYWlu +OmZ1bmN0aW9uKCl7dGhpcy4kY2hhaW49KHRoaXMuJGNoYWlufHxbXSkuZXh0ZW5k +KGFyZ3VtZW50cyk7CnJldHVybiB0aGlzO30sY2FsbENoYWluOmZ1bmN0aW9uKCl7 +cmV0dXJuKHRoaXMuJGNoYWluJiZ0aGlzLiRjaGFpbi5sZW5ndGgpP3RoaXMuJGNo +YWluLnNoaWZ0KCkuYXBwbHkodGhpcyxhcmd1bWVudHMpOmZhbHNlO30sY2xlYXJD +aGFpbjpmdW5jdGlvbigpe2lmKHRoaXMuJGNoYWluKXt0aGlzLiRjaGFpbi5lbXB0 +eSgpOwp9cmV0dXJuIHRoaXM7fX0pO3ZhciBFdmVudHM9bmV3IENsYXNzKHthZGRF +dmVudDpmdW5jdGlvbihDLEIsQSl7Qz1FdmVudHMucmVtb3ZlT24oQyk7aWYoQiE9 +JGVtcHR5KXt0aGlzLiRldmVudHM9dGhpcy4kZXZlbnRzfHx7fTt0aGlzLiRldmVu +dHNbQ109dGhpcy4kZXZlbnRzW0NdfHxbXTsKdGhpcy4kZXZlbnRzW0NdLmluY2x1 +ZGUoQik7aWYoQSl7Qi5pbnRlcm5hbD10cnVlO319cmV0dXJuIHRoaXM7fSxhZGRF +dmVudHM6ZnVuY3Rpb24oQSl7Zm9yKHZhciBCIGluIEEpe3RoaXMuYWRkRXZlbnQo +QixBW0JdKTt9cmV0dXJuIHRoaXM7fSxmaXJlRXZlbnQ6ZnVuY3Rpb24oQyxCLEEp +e0M9RXZlbnRzLnJlbW92ZU9uKEMpOwppZighdGhpcy4kZXZlbnRzfHwhdGhpcy4k +ZXZlbnRzW0NdKXtyZXR1cm4gdGhpczt9dGhpcy4kZXZlbnRzW0NdLmVhY2goZnVu +Y3Rpb24oRCl7RC5jcmVhdGUoe2JpbmQ6dGhpcyxkZWxheTpBLCJhcmd1bWVudHMi +OkJ9KSgpO30sdGhpcyk7cmV0dXJuIHRoaXM7fSxyZW1vdmVFdmVudDpmdW5jdGlv +bihCLEEpe0I9RXZlbnRzLnJlbW92ZU9uKEIpOwppZighdGhpcy4kZXZlbnRzfHwh +dGhpcy4kZXZlbnRzW0JdKXtyZXR1cm4gdGhpczt9aWYoIUEuaW50ZXJuYWwpe3Ro +aXMuJGV2ZW50c1tCXS5lcmFzZShBKTt9cmV0dXJuIHRoaXM7fSxyZW1vdmVFdmVu +dHM6ZnVuY3Rpb24oQyl7Zm9yKHZhciBEIGluIHRoaXMuJGV2ZW50cyl7aWYoQyYm +QyE9RCl7Y29udGludWU7Cn12YXIgQj10aGlzLiRldmVudHNbRF07Zm9yKHZhciBB +PUIubGVuZ3RoO0EtLTtBKXt0aGlzLnJlbW92ZUV2ZW50KEQsQltBXSk7fX1yZXR1 +cm4gdGhpczt9fSk7RXZlbnRzLnJlbW92ZU9uPWZ1bmN0aW9uKEEpe3JldHVybiBB +LnJlcGxhY2UoL15vbihbQS1aXSkvLGZ1bmN0aW9uKEIsQyl7cmV0dXJuIEMudG9M +b3dlckNhc2UoKTsKfSk7fTt2YXIgT3B0aW9ucz1uZXcgQ2xhc3Moe3NldE9wdGlv +bnM6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnM9JG1lcmdlLnJ1bihbdGhpcy5vcHRp +b25zXS5leHRlbmQoYXJndW1lbnRzKSk7aWYoIXRoaXMuYWRkRXZlbnQpe3JldHVy +biB0aGlzO31mb3IodmFyIEEgaW4gdGhpcy5vcHRpb25zKXtpZigkdHlwZSh0aGlz +Lm9wdGlvbnNbQV0pIT0iZnVuY3Rpb24ifHwhKC9eb25bQS1aXS8pLnRlc3QoQSkp +e2NvbnRpbnVlOwp9dGhpcy5hZGRFdmVudChBLHRoaXMub3B0aW9uc1tBXSk7ZGVs +ZXRlIHRoaXMub3B0aW9uc1tBXTt9cmV0dXJuIHRoaXM7fX0pO0RvY3VtZW50Lmlt +cGxlbWVudCh7bmV3RWxlbWVudDpmdW5jdGlvbihBLEIpe2lmKEJyb3dzZXIuRW5n +aW5lLnRyaWRlbnQmJkIpe1sibmFtZSIsInR5cGUiLCJjaGVja2VkIl0uZWFjaChm +dW5jdGlvbihDKXtpZighQltDXSl7cmV0dXJuIDsKfUErPSIgIitDKyc9IicrQltD +XSsnIic7aWYoQyE9ImNoZWNrZWQiKXtkZWxldGUgQltDXTt9fSk7QT0iPCIrQSsi +PiI7fXJldHVybiAkLmVsZW1lbnQodGhpcy5jcmVhdGVFbGVtZW50KEEpKS5zZXQo +Qik7fSxuZXdUZXh0Tm9kZTpmdW5jdGlvbihBKXtyZXR1cm4gdGhpcy5jcmVhdGVU +ZXh0Tm9kZShBKTsKfSxnZXREb2N1bWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlz +O30sZ2V0V2luZG93OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdFZpZXd8 +fHRoaXMucGFyZW50V2luZG93O30scHVyZ2U6ZnVuY3Rpb24oKXt2YXIgQz10aGlz +LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7CmZvcih2YXIgQj0wLEE9Qy5sZW5n +dGg7QjxBO0IrKyl7QnJvd3Nlci5mcmVlTWVtKENbQl0pO319fSk7dmFyIEVsZW1l +bnQ9bmV3IE5hdGl2ZSh7bmFtZToiRWxlbWVudCIsbGVnYWN5OndpbmRvdy5FbGVt +ZW50LGluaXRpYWxpemU6ZnVuY3Rpb24oQSxCKXt2YXIgQz1FbGVtZW50LkNvbnN0 +cnVjdG9ycy5nZXQoQSk7CmlmKEMpe3JldHVybiBDKEIpO31pZih0eXBlb2YgQT09 +InN0cmluZyIpe3JldHVybiBkb2N1bWVudC5uZXdFbGVtZW50KEEsQik7fXJldHVy +biAkKEEpLnNldChCKTt9LGFmdGVySW1wbGVtZW50OmZ1bmN0aW9uKEEsQil7aWYo +IUFycmF5W0FdKXtFbGVtZW50cy5pbXBsZW1lbnQoQSxFbGVtZW50cy5tdWx0aShB +KSk7Cn1FbGVtZW50LlByb3RvdHlwZVtBXT1CO319KTtFbGVtZW50LlByb3RvdHlw +ZT17JGZhbWlseTp7bmFtZToiZWxlbWVudCJ9fTtFbGVtZW50LkNvbnN0cnVjdG9y +cz1uZXcgSGFzaDt2YXIgSUZyYW1lPW5ldyBOYXRpdmUoe25hbWU6IklGcmFtZSIs +Z2VuZXJpY3M6ZmFsc2UsaW5pdGlhbGl6ZTpmdW5jdGlvbigpe3ZhciBFPUFycmF5 +LmxpbmsoYXJndW1lbnRzLHtwcm9wZXJ0aWVzOk9iamVjdC50eXBlLGlmcmFtZTok +ZGVmaW5lZH0pOwp2YXIgQz1FLnByb3BlcnRpZXN8fHt9O3ZhciBCPSQoRS5pZnJh +bWUpfHxmYWxzZTt2YXIgRD1DLm9ubG9hZHx8JGVtcHR5O2RlbGV0ZSBDLm9ubG9h +ZDtDLmlkPUMubmFtZT0kcGljayhDLmlkLEMubmFtZSxCLmlkLEIubmFtZSwiSUZy +YW1lXyIrJHRpbWUoKSk7Qj1uZXcgRWxlbWVudChCfHwiaWZyYW1lIixDKTsKdmFy +IEE9ZnVuY3Rpb24oKXt2YXIgRj0kdHJ5KGZ1bmN0aW9uKCl7cmV0dXJuIEIuY29u +dGVudFdpbmRvdy5sb2NhdGlvbi5ob3N0O30pO2lmKEYmJkY9PXdpbmRvdy5sb2Nh +dGlvbi5ob3N0KXt2YXIgSD1uZXcgV2luZG93KEIuY29udGVudFdpbmRvdyk7dmFy +IEc9bmV3IERvY3VtZW50KEIuY29udGVudFdpbmRvdy5kb2N1bWVudCk7CiRleHRl +bmQoSC5FbGVtZW50LnByb3RvdHlwZSxFbGVtZW50LlByb3RvdHlwZSk7fUQuY2Fs +bChCLmNvbnRlbnRXaW5kb3csQi5jb250ZW50V2luZG93LmRvY3VtZW50KTt9Oygh +d2luZG93LmZyYW1lc1tDLmlkXSk/Qi5hZGRMaXN0ZW5lcigibG9hZCIsQSk6QSgp +O3JldHVybiBCOwp9fSk7dmFyIEVsZW1lbnRzPW5ldyBOYXRpdmUoe2luaXRpYWxp +emU6ZnVuY3Rpb24oRixCKXtCPSRleHRlbmQoe2RkdXA6dHJ1ZSxjYXNoOnRydWV9 +LEIpO0Y9Rnx8W107aWYoQi5kZHVwfHxCLmNhc2gpe3ZhciBHPXt9LEU9W107Zm9y +KHZhciBDPTAsQT1GLmxlbmd0aDsKQzxBO0MrKyl7dmFyIEQ9JC5lbGVtZW50KEZb +Q10sIUIuY2FzaCk7aWYoQi5kZHVwKXtpZihHW0QudWlkXSl7Y29udGludWU7fUdb +RC51aWRdPXRydWU7fUUucHVzaChEKTt9Rj1FO31yZXR1cm4oQi5jYXNoKT8kZXh0 +ZW5kKEYsdGhpcyk6Rjt9fSk7RWxlbWVudHMuaW1wbGVtZW50KHtmaWx0ZXI6ZnVu +Y3Rpb24oQSxCKXtpZighQSl7cmV0dXJuIHRoaXM7Cn1yZXR1cm4gbmV3IEVsZW1l +bnRzKEFycmF5LmZpbHRlcih0aGlzLCh0eXBlb2YgQT09InN0cmluZyIpP2Z1bmN0 +aW9uKEMpe3JldHVybiBDLm1hdGNoKEEpO306QSxCKSk7fX0pO0VsZW1lbnRzLm11 +bHRpPWZ1bmN0aW9uKEEpe3JldHVybiBmdW5jdGlvbigpe3ZhciBCPVtdOwp2YXIg +Rj10cnVlO2Zvcih2YXIgRD0wLEM9dGhpcy5sZW5ndGg7RDxDO0QrKyl7dmFyIEU9 +dGhpc1tEXVtBXS5hcHBseSh0aGlzW0RdLGFyZ3VtZW50cyk7Qi5wdXNoKEUpO2lm +KEYpe0Y9KCR0eXBlKEUpPT0iZWxlbWVudCIpO319cmV0dXJuKEYpP25ldyBFbGVt +ZW50cyhCKTpCOwp9O307V2luZG93LmltcGxlbWVudCh7JDpmdW5jdGlvbihCLEMp +e2lmKEImJkIuJGZhbWlseSYmQi51aWQpe3JldHVybiBCO312YXIgQT0kdHlwZShC +KTtyZXR1cm4oJFtBXSk/JFtBXShCLEMsdGhpcy5kb2N1bWVudCk6bnVsbDt9LCQk +OmZ1bmN0aW9uKEEpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PTEmJnR5cGVvZiBBPT0i +c3RyaW5nIil7cmV0dXJuIHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudHMoQSk7Cn12 +YXIgRj1bXTt2YXIgQz1BcnJheS5mbGF0dGVuKGFyZ3VtZW50cyk7Zm9yKHZhciBE +PTAsQj1DLmxlbmd0aDtEPEI7RCsrKXt2YXIgRT1DW0RdO3N3aXRjaCgkdHlwZShF +KSl7Y2FzZSJlbGVtZW50IjpFPVtFXTticmVhaztjYXNlInN0cmluZyI6RT10aGlz +LmRvY3VtZW50LmdldEVsZW1lbnRzKEUsdHJ1ZSk7CmJyZWFrO2RlZmF1bHQ6RT1m +YWxzZTt9aWYoRSl7Ri5leHRlbmQoRSk7fX1yZXR1cm4gbmV3IEVsZW1lbnRzKEYp +O30sZ2V0RG9jdW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb2N1bWVudDt9 +LGdldFdpbmRvdzpmdW5jdGlvbigpe3JldHVybiB0aGlzO319KTsKJC5zdHJpbmc9 +ZnVuY3Rpb24oQyxCLEEpe0M9QS5nZXRFbGVtZW50QnlJZChDKTtyZXR1cm4oQyk/ +JC5lbGVtZW50KEMsQik6bnVsbDt9OyQuZWxlbWVudD1mdW5jdGlvbihBLEQpeyR1 +aWQoQSk7aWYoIUQmJiFBLiRmYW1pbHkmJiEoL15vYmplY3R8ZW1iZWQkL2kpLnRl +c3QoQS50YWdOYW1lKSl7dmFyIEI9RWxlbWVudC5Qcm90b3R5cGU7CmZvcih2YXIg +QyBpbiBCKXtBW0NdPUJbQ107fX1yZXR1cm4gQTt9OyQub2JqZWN0PWZ1bmN0aW9u +KEIsQyxBKXtpZihCLnRvRWxlbWVudCl7cmV0dXJuICQuZWxlbWVudChCLnRvRWxl +bWVudChBKSxDKTt9cmV0dXJuIG51bGw7fTskLnRleHRub2RlPSQud2hpdGVzcGFj +ZT0kLndpbmRvdz0kLmRvY3VtZW50PSRhcmd1bWVudHMoMCk7Ck5hdGl2ZS5pbXBs +ZW1lbnQoW0VsZW1lbnQsRG9jdW1lbnRdLHtnZXRFbGVtZW50OmZ1bmN0aW9uKEEs +Qil7cmV0dXJuICQodGhpcy5nZXRFbGVtZW50cyhBLHRydWUpWzBdfHxudWxsLEIp +O30sZ2V0RWxlbWVudHM6ZnVuY3Rpb24oQSxEKXtBPUEuc3BsaXQoIiwiKTsKdmFy +IEM9W107dmFyIEI9KEEubGVuZ3RoPjEpO0EuZWFjaChmdW5jdGlvbihFKXt2YXIg +Rj10aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKEUudHJpbSgpKTsoQik/Qy5leHRl +bmQoRik6Qz1GO30sdGhpcyk7cmV0dXJuIG5ldyBFbGVtZW50cyhDLHtkZHVwOkIs +Y2FzaDohRH0pOwp9fSk7RWxlbWVudC5TdG9yYWdlPXtnZXQ6ZnVuY3Rpb24oQSl7 +cmV0dXJuKHRoaXNbQV18fCh0aGlzW0FdPXt9KSk7fX07RWxlbWVudC5JbnNlcnRl +cnM9bmV3IEhhc2goe2JlZm9yZTpmdW5jdGlvbihCLEEpe2lmKEEucGFyZW50Tm9k +ZSl7QS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShCLEEpOwp9fSxhZnRlcjpmdW5j +dGlvbihCLEEpe2lmKCFBLnBhcmVudE5vZGUpe3JldHVybiA7fXZhciBDPUEubmV4 +dFNpYmxpbmc7KEMpP0EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoQixDKTpBLnBh +cmVudE5vZGUuYXBwZW5kQ2hpbGQoQik7fSxib3R0b206ZnVuY3Rpb24oQixBKXtB +LmFwcGVuZENoaWxkKEIpOwp9LHRvcDpmdW5jdGlvbihCLEEpe3ZhciBDPUEuZmly +c3RDaGlsZDsoQyk/QS5pbnNlcnRCZWZvcmUoQixDKTpBLmFwcGVuZENoaWxkKEIp +O319KTtFbGVtZW50Lkluc2VydGVycy5pbnNpZGU9RWxlbWVudC5JbnNlcnRlcnMu +Ym90dG9tO0VsZW1lbnQuSW5zZXJ0ZXJzLmVhY2goZnVuY3Rpb24oQyxCKXt2YXIg +QT1CLmNhcGl0YWxpemUoKTsKRWxlbWVudC5pbXBsZW1lbnQoImluamVjdCIrQSxm +dW5jdGlvbihEKXtDKHRoaXMsJChELHRydWUpKTtyZXR1cm4gdGhpczt9KTtFbGVt +ZW50LmltcGxlbWVudCgiZ3JhYiIrQSxmdW5jdGlvbihEKXtDKCQoRCx0cnVlKSx0 +aGlzKTtyZXR1cm4gdGhpczt9KTt9KTtFbGVtZW50LmltcGxlbWVudCh7Z2V0RG9j +dW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50Owp9LGdl +dFdpbmRvdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuZ2V0 +V2luZG93KCk7fSxnZXRFbGVtZW50QnlJZDpmdW5jdGlvbihELEMpe3ZhciBCPXRo +aXMub3duZXJEb2N1bWVudC5nZXRFbGVtZW50QnlJZChEKTtpZighQil7cmV0dXJu +IG51bGw7Cn1mb3IodmFyIEE9Qi5wYXJlbnROb2RlO0EhPXRoaXM7QT1BLnBhcmVu +dE5vZGUpe2lmKCFBKXtyZXR1cm4gbnVsbDt9fXJldHVybiAkLmVsZW1lbnQoQixD +KTt9LHNldDpmdW5jdGlvbihELEIpe3N3aXRjaCgkdHlwZShEKSl7Y2FzZSJvYmpl +Y3QiOmZvcih2YXIgQyBpbiBEKXt0aGlzLnNldChDLERbQ10pOwp9YnJlYWs7Y2Fz +ZSJzdHJpbmciOnZhciBBPUVsZW1lbnQuUHJvcGVydGllcy5nZXQoRCk7KEEmJkEu +c2V0KT9BLnNldC5hcHBseSh0aGlzLEFycmF5LnNsaWNlKGFyZ3VtZW50cywxKSk6 +dGhpcy5zZXRQcm9wZXJ0eShELEIpO31yZXR1cm4gdGhpczt9LGdldDpmdW5jdGlv +bihCKXt2YXIgQT1FbGVtZW50LlByb3BlcnRpZXMuZ2V0KEIpOwpyZXR1cm4oQSYm +QS5nZXQpP0EuZ2V0LmFwcGx5KHRoaXMsQXJyYXkuc2xpY2UoYXJndW1lbnRzLDEp +KTp0aGlzLmdldFByb3BlcnR5KEIpO30sZXJhc2U6ZnVuY3Rpb24oQil7dmFyIEE9 +RWxlbWVudC5Qcm9wZXJ0aWVzLmdldChCKTsoQSYmQS5lcmFzZSk/QS5lcmFzZS5h +cHBseSh0aGlzLEFycmF5LnNsaWNlKGFyZ3VtZW50cywxKSk6dGhpcy5yZW1vdmVQ +cm9wZXJ0eShCKTsKcmV0dXJuIHRoaXM7fSxtYXRjaDpmdW5jdGlvbihBKXtyZXR1 +cm4oIUF8fEVsZW1lbnQuZ2V0KHRoaXMsInRhZyIpPT1BKTt9LGluamVjdDpmdW5j +dGlvbihCLEEpe0VsZW1lbnQuSW5zZXJ0ZXJzLmdldChBfHwiYm90dG9tIikodGhp +cywkKEIsdHJ1ZSkpO3JldHVybiB0aGlzOwp9LHdyYXBzOmZ1bmN0aW9uKEIsQSl7 +Qj0kKEIsdHJ1ZSk7cmV0dXJuIHRoaXMucmVwbGFjZXMoQikuZ3JhYihCLEEpO30s +Z3JhYjpmdW5jdGlvbihCLEEpe0VsZW1lbnQuSW5zZXJ0ZXJzLmdldChBfHwiYm90 +dG9tIikoJChCLHRydWUpLHRoaXMpO3JldHVybiB0aGlzOwp9LGFwcGVuZFRleHQ6 +ZnVuY3Rpb24oQixBKXtyZXR1cm4gdGhpcy5ncmFiKHRoaXMuZ2V0RG9jdW1lbnQo +KS5uZXdUZXh0Tm9kZShCKSxBKTt9LGFkb3B0OmZ1bmN0aW9uKCl7QXJyYXkuZmxh +dHRlbihhcmd1bWVudHMpLmVhY2goZnVuY3Rpb24oQSl7QT0kKEEsdHJ1ZSk7Cmlm +KEEpe3RoaXMuYXBwZW5kQ2hpbGQoQSk7fX0sdGhpcyk7cmV0dXJuIHRoaXM7fSxk +aXNwb3NlOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucGFyZW50Tm9kZSk/dGhpcy5w +YXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMpOnRoaXM7fSxjbG9uZTpmdW5jdGlv +bihELEMpe3N3aXRjaCgkdHlwZSh0aGlzKSl7Y2FzZSJlbGVtZW50Ijp2YXIgSD17 +fTsKZm9yKHZhciBHPTAsRT10aGlzLmF0dHJpYnV0ZXMubGVuZ3RoO0c8RTtHKysp +e3ZhciBCPXRoaXMuYXR0cmlidXRlc1tHXSxMPUIubm9kZU5hbWUudG9Mb3dlckNh +c2UoKTtpZihCcm93c2VyLkVuZ2luZS50cmlkZW50JiYoL2lucHV0L2kpLnRlc3Qo +dGhpcy50YWdOYW1lKSYmKC93aWR0aHxoZWlnaHQvKS50ZXN0KEwpKXtjb250aW51 +ZTsKfXZhciBLPShMPT0ic3R5bGUiJiZ0aGlzLnN0eWxlKT90aGlzLnN0eWxlLmNz +c1RleHQ6Qi5ub2RlVmFsdWU7aWYoISRjaGsoSyl8fEw9PSJ1aWQifHwoTD09Imlk +IiYmIUMpKXtjb250aW51ZTt9aWYoSyE9ImluaGVyaXQiJiZbInN0cmluZyIsIm51 +bWJlciJdLmNvbnRhaW5zKCR0eXBlKEspKSl7SFtMXT1LOwp9fXZhciBKPW5ldyBF +bGVtZW50KHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxIKTtpZihEIT09ZmFs +c2Upe2Zvcih2YXIgST0wLEY9dGhpcy5jaGlsZE5vZGVzLmxlbmd0aDtJPEY7SSsr +KXt2YXIgQT1FbGVtZW50LmNsb25lKHRoaXMuY2hpbGROb2Rlc1tJXSx0cnVlLEMp +OwppZihBKXtKLmdyYWIoQSk7fX19cmV0dXJuIEo7Y2FzZSJ0ZXh0bm9kZSI6cmV0 +dXJuIGRvY3VtZW50Lm5ld1RleHROb2RlKHRoaXMubm9kZVZhbHVlKTt9cmV0dXJu +IG51bGw7fSxyZXBsYWNlczpmdW5jdGlvbihBKXtBPSQoQSx0cnVlKTtBLnBhcmVu +dE5vZGUucmVwbGFjZUNoaWxkKHRoaXMsQSk7CnJldHVybiB0aGlzO30saGFzQ2xh +c3M6ZnVuY3Rpb24oQSl7cmV0dXJuIHRoaXMuY2xhc3NOYW1lLmNvbnRhaW5zKEEs +IiAiKTt9LGFkZENsYXNzOmZ1bmN0aW9uKEEpe2lmKCF0aGlzLmhhc0NsYXNzKEEp +KXt0aGlzLmNsYXNzTmFtZT0odGhpcy5jbGFzc05hbWUrIiAiK0EpLmNsZWFuKCk7 +Cn1yZXR1cm4gdGhpczt9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKEEpe3RoaXMuY2xh +c3NOYW1lPXRoaXMuY2xhc3NOYW1lLnJlcGxhY2UobmV3IFJlZ0V4cCgiKF58XFxz +KSIrQSsiKD86XFxzfCQpIiksIiQxIikuY2xlYW4oKTtyZXR1cm4gdGhpczt9LHRv +Z2dsZUNsYXNzOmZ1bmN0aW9uKEEpe3JldHVybiB0aGlzLmhhc0NsYXNzKEEpP3Ro +aXMucmVtb3ZlQ2xhc3MoQSk6dGhpcy5hZGRDbGFzcyhBKTsKfSxnZXRDb21wdXRl +ZFN0eWxlOmZ1bmN0aW9uKEIpe2lmKHRoaXMuY3VycmVudFN0eWxlKXtyZXR1cm4g +dGhpcy5jdXJyZW50U3R5bGVbQi5jYW1lbENhc2UoKV07fXZhciBBPXRoaXMuZ2V0 +V2luZG93KCkuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpO3JldHVybihBKT9B +LmdldFByb3BlcnR5VmFsdWUoW0IuaHlwaGVuYXRlKCldKTpudWxsOwp9LGVtcHR5 +OmZ1bmN0aW9uKCl7JEEodGhpcy5jaGlsZE5vZGVzKS5lYWNoKGZ1bmN0aW9uKEEp +e0Jyb3dzZXIuZnJlZU1lbShBKTtFbGVtZW50LmVtcHR5KEEpO0VsZW1lbnQuZGlz +cG9zZShBKTt9LHRoaXMpO3JldHVybiB0aGlzO30sZGVzdHJveTpmdW5jdGlvbigp +e0Jyb3dzZXIuZnJlZU1lbSh0aGlzLmVtcHR5KCkuZGlzcG9zZSgpKTsKcmV0dXJu +IG51bGw7fSxnZXRTZWxlY3RlZDpmdW5jdGlvbigpe3JldHVybiBuZXcgRWxlbWVu +dHMoJEEodGhpcy5vcHRpb25zKS5maWx0ZXIoZnVuY3Rpb24oQSl7cmV0dXJuIEEu +c2VsZWN0ZWQ7fSkpO30sdG9RdWVyeVN0cmluZzpmdW5jdGlvbigpe3ZhciBBPVtd +Owp0aGlzLmdldEVsZW1lbnRzKCJpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSIpLmVh +Y2goZnVuY3Rpb24oQil7aWYoIUIubmFtZXx8Qi5kaXNhYmxlZCl7cmV0dXJuIDt9 +dmFyIEM9KEIudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0ic2VsZWN0Iik/RWxlbWVu +dC5nZXRTZWxlY3RlZChCKS5tYXAoZnVuY3Rpb24oRCl7cmV0dXJuIEQudmFsdWU7 +Cn0pOigoQi50eXBlPT0icmFkaW8ifHxCLnR5cGU9PSJjaGVja2JveCIpJiYhQi5j +aGVja2VkKT9udWxsOkIudmFsdWU7JHNwbGF0KEMpLmVhY2goZnVuY3Rpb24oRCl7 +aWYoRCl7QS5wdXNoKEIubmFtZSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KEQpKTt9 +fSk7fSk7cmV0dXJuIEEuam9pbigiJiIpOwp9LGdldFByb3BlcnR5OmZ1bmN0aW9u +KEMpe3ZhciBCPUVsZW1lbnQuQXR0cmlidXRlcyxBPUIuUHJvcHNbQ107dmFyIEQ9 +KEEpP3RoaXNbQV06dGhpcy5nZXRBdHRyaWJ1dGUoQywyKTtyZXR1cm4oQi5Cb29s +c1tDXSk/ISFEOihBKT9EOkR8fG51bGw7fSxnZXRQcm9wZXJ0aWVzOmZ1bmN0aW9u +KCl7dmFyIEE9JEEoYXJndW1lbnRzKTsKcmV0dXJuIEEubWFwKGZ1bmN0aW9uKEIp +e3JldHVybiB0aGlzLmdldFByb3BlcnR5KEIpO30sdGhpcykuYXNzb2NpYXRlKEEp +O30sc2V0UHJvcGVydHk6ZnVuY3Rpb24oRCxFKXt2YXIgQz1FbGVtZW50LkF0dHJp +YnV0ZXMsQj1DLlByb3BzW0RdLEE9JGRlZmluZWQoRSk7CmlmKEImJkMuQm9vbHNb +RF0pe0U9KEV8fCFBKT90cnVlOmZhbHNlO31lbHNle2lmKCFBKXtyZXR1cm4gdGhp +cy5yZW1vdmVQcm9wZXJ0eShEKTt9fShCKT90aGlzW0JdPUU6dGhpcy5zZXRBdHRy +aWJ1dGUoRCxFKTtyZXR1cm4gdGhpczt9LHNldFByb3BlcnRpZXM6ZnVuY3Rpb24o +QSl7Zm9yKHZhciBCIGluIEEpe3RoaXMuc2V0UHJvcGVydHkoQixBW0JdKTsKfXJl +dHVybiB0aGlzO30scmVtb3ZlUHJvcGVydHk6ZnVuY3Rpb24oRCl7dmFyIEM9RWxl +bWVudC5BdHRyaWJ1dGVzLEI9Qy5Qcm9wc1tEXSxBPShCJiZDLkJvb2xzW0RdKTso +Qik/dGhpc1tCXT0oQSk/ZmFsc2U6IiI6dGhpcy5yZW1vdmVBdHRyaWJ1dGUoRCk7 +cmV0dXJuIHRoaXM7Cn0scmVtb3ZlUHJvcGVydGllczpmdW5jdGlvbigpe0FycmF5 +LmVhY2goYXJndW1lbnRzLHRoaXMucmVtb3ZlUHJvcGVydHksdGhpcyk7cmV0dXJu +IHRoaXM7fX0pOyhmdW5jdGlvbigpe3ZhciBBPWZ1bmN0aW9uKEQsQixJLEMsRixI +KXt2YXIgRT1EW0l8fEJdO3ZhciBHPVtdOwp3aGlsZShFKXtpZihFLm5vZGVUeXBl +PT0xJiYoIUN8fEVsZW1lbnQubWF0Y2goRSxDKSkpe0cucHVzaChFKTtpZighRil7 +YnJlYWs7fX1FPUVbQl07fXJldHVybihGKT9uZXcgRWxlbWVudHMoRyx7ZGR1cDpm +YWxzZSxjYXNoOiFIfSk6JChHWzBdLEgpO307RWxlbWVudC5pbXBsZW1lbnQoe2dl +dFByZXZpb3VzOmZ1bmN0aW9uKEIsQyl7cmV0dXJuIEEodGhpcywicHJldmlvdXNT +aWJsaW5nIixudWxsLEIsZmFsc2UsQyk7Cn0sZ2V0QWxsUHJldmlvdXM6ZnVuY3Rp +b24oQixDKXtyZXR1cm4gQSh0aGlzLCJwcmV2aW91c1NpYmxpbmciLG51bGwsQix0 +cnVlLEMpO30sZ2V0TmV4dDpmdW5jdGlvbihCLEMpe3JldHVybiBBKHRoaXMsIm5l +eHRTaWJsaW5nIixudWxsLEIsZmFsc2UsQyk7fSxnZXRBbGxOZXh0OmZ1bmN0aW9u +KEIsQyl7cmV0dXJuIEEodGhpcywibmV4dFNpYmxpbmciLG51bGwsQix0cnVlLEMp +Owp9LGdldEZpcnN0OmZ1bmN0aW9uKEIsQyl7cmV0dXJuIEEodGhpcywibmV4dFNp +YmxpbmciLCJmaXJzdENoaWxkIixCLGZhbHNlLEMpO30sZ2V0TGFzdDpmdW5jdGlv +bihCLEMpe3JldHVybiBBKHRoaXMsInByZXZpb3VzU2libGluZyIsImxhc3RDaGls +ZCIsQixmYWxzZSxDKTsKfSxnZXRQYXJlbnQ6ZnVuY3Rpb24oQixDKXtyZXR1cm4g +QSh0aGlzLCJwYXJlbnROb2RlIixudWxsLEIsZmFsc2UsQyk7fSxnZXRQYXJlbnRz +OmZ1bmN0aW9uKEIsQyl7cmV0dXJuIEEodGhpcywicGFyZW50Tm9kZSIsbnVsbCxC +LHRydWUsQyk7fSxnZXRDaGlsZHJlbjpmdW5jdGlvbihCLEMpe3JldHVybiBBKHRo +aXMsIm5leHRTaWJsaW5nIiwiZmlyc3RDaGlsZCIsQix0cnVlLEMpOwp9LGhhc0No +aWxkOmZ1bmN0aW9uKEIpe0I9JChCLHRydWUpO3JldHVybighIUImJiRBKHRoaXMu +Z2V0RWxlbWVudHNCeVRhZ05hbWUoQi50YWdOYW1lKSkuY29udGFpbnMoQikpO319 +KTt9KSgpO0VsZW1lbnQuUHJvcGVydGllcz1uZXcgSGFzaDtFbGVtZW50LlByb3Bl +cnRpZXMuc3R5bGU9e3NldDpmdW5jdGlvbihBKXt0aGlzLnN0eWxlLmNzc1RleHQ9 +QTsKfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHlsZS5jc3NUZXh0O30s +ZXJhc2U6ZnVuY3Rpb24oKXt0aGlzLnN0eWxlLmNzc1RleHQ9IiI7fX07RWxlbWVu +dC5Qcm9wZXJ0aWVzLnRhZz17Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFn +TmFtZS50b0xvd2VyQ2FzZSgpOwp9fTtFbGVtZW50LlByb3BlcnRpZXMuaHJlZj17 +Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuKCF0aGlzLmhyZWYpP251bGw6dGhpcy5ocmVm +LnJlcGxhY2UobmV3IFJlZ0V4cCgiXiIrZG9jdW1lbnQubG9jYXRpb24ucHJvdG9j +b2wrIi8vIitkb2N1bWVudC5sb2NhdGlvbi5ob3N0KSwiIik7Cn19O0VsZW1lbnQu +UHJvcGVydGllcy5odG1sPXtzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbm5l +ckhUTUw9QXJyYXkuZmxhdHRlbihhcmd1bWVudHMpLmpvaW4oIiIpO319O05hdGl2 +ZS5pbXBsZW1lbnQoW0VsZW1lbnQsV2luZG93LERvY3VtZW50XSx7YWRkTGlzdGVu +ZXI6ZnVuY3Rpb24oQixBKXtpZih0aGlzLmFkZEV2ZW50TGlzdGVuZXIpe3RoaXMu +YWRkRXZlbnRMaXN0ZW5lcihCLEEsZmFsc2UpOwp9ZWxzZXt0aGlzLmF0dGFjaEV2 +ZW50KCJvbiIrQixBKTt9cmV0dXJuIHRoaXM7fSxyZW1vdmVMaXN0ZW5lcjpmdW5j +dGlvbihCLEEpe2lmKHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcil7dGhpcy5yZW1v +dmVFdmVudExpc3RlbmVyKEIsQSxmYWxzZSk7fWVsc2V7dGhpcy5kZXRhY2hFdmVu +dCgib24iK0IsQSk7Cn1yZXR1cm4gdGhpczt9LHJldHJpZXZlOmZ1bmN0aW9uKEIs +QSl7dmFyIEQ9RWxlbWVudC5TdG9yYWdlLmdldCh0aGlzLnVpZCk7dmFyIEM9RFtC +XTtpZigkZGVmaW5lZChBKSYmISRkZWZpbmVkKEMpKXtDPURbQl09QTt9cmV0dXJu +ICRwaWNrKEMpO30sc3RvcmU6ZnVuY3Rpb24oQixBKXt2YXIgQz1FbGVtZW50LlN0 +b3JhZ2UuZ2V0KHRoaXMudWlkKTsKQ1tCXT1BO3JldHVybiB0aGlzO30sZWxpbWlu +YXRlOmZ1bmN0aW9uKEEpe3ZhciBCPUVsZW1lbnQuU3RvcmFnZS5nZXQodGhpcy51 +aWQpO2RlbGV0ZSBCW0FdO3JldHVybiB0aGlzO319KTtFbGVtZW50LkF0dHJpYnV0 +ZXM9bmV3IEhhc2goe1Byb3BzOntodG1sOiJpbm5lckhUTUwiLCJjbGFzcyI6ImNs +YXNzTmFtZSIsImZvciI6Imh0bWxGb3IiLHRleHQ6KEJyb3dzZXIuRW5naW5lLnRy +aWRlbnQpPyJpbm5lclRleHQiOiJ0ZXh0Q29udGVudCJ9LEJvb2xzOlsiY29tcGFj +dCIsIm5vd3JhcCIsImlzbWFwIiwiZGVjbGFyZSIsIm5vc2hhZGUiLCJjaGVja2Vk +IiwiZGlzYWJsZWQiLCJyZWFkb25seSIsIm11bHRpcGxlIiwic2VsZWN0ZWQiLCJu +b3Jlc2l6ZSIsImRlZmVyIl0sQ2FtZWxzOlsidmFsdWUiLCJhY2Nlc3NLZXkiLCJj +ZWxsUGFkZGluZyIsImNlbGxTcGFjaW5nIiwiY29sU3BhbiIsImZyYW1lQm9yZGVy +IiwibWF4TGVuZ3RoIiwicmVhZE9ubHkiLCJyb3dTcGFuIiwidGFiSW5kZXgiLCJ1 +c2VNYXAiXX0pOwpCcm93c2VyLmZyZWVNZW09ZnVuY3Rpb24oQSl7aWYoIUEpe3Jl +dHVybiA7fWlmKEJyb3dzZXIuRW5naW5lLnRyaWRlbnQmJigvb2JqZWN0L2kpLnRl +c3QoQS50YWdOYW1lKSl7Zm9yKHZhciBCIGluIEEpe2lmKHR5cGVvZiBBW0JdPT0i +ZnVuY3Rpb24iKXtBW0JdPSRlbXB0eTsKfX1FbGVtZW50LmRpc3Bvc2UoQSk7fWlm +KEEudWlkJiZBLnJlbW92ZUV2ZW50cyl7QS5yZW1vdmVFdmVudHMoKTt9fTsoZnVu +Y3Rpb24oQil7dmFyIEM9Qi5Cb29scyxBPUIuQ2FtZWxzO0IuQm9vbHM9Qz1DLmFz +c29jaWF0ZShDKTtIYXNoLmV4dGVuZChIYXNoLmNvbWJpbmUoQi5Qcm9wcyxDKSxB +LmFzc29jaWF0ZShBLm1hcChmdW5jdGlvbihEKXtyZXR1cm4gRC50b0xvd2VyQ2Fz +ZSgpOwp9KSkpO0IuZXJhc2UoIkNhbWVscyIpO30pKEVsZW1lbnQuQXR0cmlidXRl +cyk7d2luZG93LmFkZExpc3RlbmVyKCJ1bmxvYWQiLGZ1bmN0aW9uKCl7d2luZG93 +LnJlbW92ZUxpc3RlbmVyKCJ1bmxvYWQiLGFyZ3VtZW50cy5jYWxsZWUpO2RvY3Vt +ZW50LnB1cmdlKCk7CmlmKEJyb3dzZXIuRW5naW5lLnRyaWRlbnQpe0NvbGxlY3RH +YXJiYWdlKCk7fX0pO0VsZW1lbnQuUHJvcGVydGllcy5ldmVudHM9e3NldDpmdW5j +dGlvbihBKXt0aGlzLmFkZEV2ZW50cyhBKTt9fTtOYXRpdmUuaW1wbGVtZW50KFtF +bGVtZW50LFdpbmRvdyxEb2N1bWVudF0se2FkZEV2ZW50OmZ1bmN0aW9uKEUsRyl7 +dmFyIEg9dGhpcy5yZXRyaWV2ZSgiZXZlbnRzIix7fSk7CkhbRV09SFtFXXx8e2tl +eXM6W10sdmFsdWVzOltdfTtpZihIW0VdLmtleXMuY29udGFpbnMoRykpe3JldHVy +biB0aGlzO31IW0VdLmtleXMucHVzaChHKTt2YXIgRj1FLEE9RWxlbWVudC5FdmVu +dHMuZ2V0KEUpLEM9RyxJPXRoaXM7aWYoQSl7aWYoQS5vbkFkZCl7QS5vbkFkZC5j +YWxsKHRoaXMsRyk7Cn1pZihBLmNvbmRpdGlvbil7Qz1mdW5jdGlvbihKKXtpZihB +LmNvbmRpdGlvbi5jYWxsKHRoaXMsSikpe3JldHVybiBHLmNhbGwodGhpcyxKKTt9 +cmV0dXJuIGZhbHNlO307fUY9QS5iYXNlfHxGO312YXIgRD1mdW5jdGlvbigpe3Jl +dHVybiBHLmNhbGwoSSk7fTt2YXIgQj1FbGVtZW50Lk5hdGl2ZUV2ZW50c1tGXXx8 +MDsKaWYoQil7aWYoQj09Mil7RD1mdW5jdGlvbihKKXtKPW5ldyBFdmVudChKLEku +Z2V0V2luZG93KCkpO2lmKEMuY2FsbChJLEopPT09ZmFsc2Upe0ouc3RvcCgpO319 +O310aGlzLmFkZExpc3RlbmVyKEYsRCk7fUhbRV0udmFsdWVzLnB1c2goRCk7cmV0 +dXJuIHRoaXM7fSxyZW1vdmVFdmVudDpmdW5jdGlvbihELEMpe3ZhciBCPXRoaXMu +cmV0cmlldmUoImV2ZW50cyIpOwppZighQnx8IUJbRF0pe3JldHVybiB0aGlzO312 +YXIgRz1CW0RdLmtleXMuaW5kZXhPZihDKTtpZihHPT0tMSl7cmV0dXJuIHRoaXM7 +fXZhciBBPUJbRF0ua2V5cy5zcGxpY2UoRywxKVswXTt2YXIgRj1CW0RdLnZhbHVl +cy5zcGxpY2UoRywxKVswXTt2YXIgRT1FbGVtZW50LkV2ZW50cy5nZXQoRCk7Cmlm +KEUpe2lmKEUub25SZW1vdmUpe0Uub25SZW1vdmUuY2FsbCh0aGlzLEMpO31EPUUu +YmFzZXx8RDt9cmV0dXJuKEVsZW1lbnQuTmF0aXZlRXZlbnRzW0RdKT90aGlzLnJl +bW92ZUxpc3RlbmVyKEQsRik6dGhpczt9LGFkZEV2ZW50czpmdW5jdGlvbihBKXtm +b3IodmFyIEIgaW4gQSl7dGhpcy5hZGRFdmVudChCLEFbQl0pOwp9cmV0dXJuIHRo +aXM7fSxyZW1vdmVFdmVudHM6ZnVuY3Rpb24oQil7dmFyIEE9dGhpcy5yZXRyaWV2 +ZSgiZXZlbnRzIik7aWYoIUEpe3JldHVybiB0aGlzO31pZighQil7Zm9yKHZhciBD +IGluIEEpe3RoaXMucmVtb3ZlRXZlbnRzKEMpO31BPW51bGw7fWVsc2V7aWYoQVtC +XSl7d2hpbGUoQVtCXS5rZXlzWzBdKXt0aGlzLnJlbW92ZUV2ZW50KEIsQVtCXS5r +ZXlzWzBdKTsKfUFbQl09bnVsbDt9fXJldHVybiB0aGlzO30sZmlyZUV2ZW50OmZ1 +bmN0aW9uKEQsQixBKXt2YXIgQz10aGlzLnJldHJpZXZlKCJldmVudHMiKTtpZigh +Q3x8IUNbRF0pe3JldHVybiB0aGlzO31DW0RdLmtleXMuZWFjaChmdW5jdGlvbihF +KXtFLmNyZWF0ZSh7YmluZDp0aGlzLGRlbGF5OkEsImFyZ3VtZW50cyI6Qn0pKCk7 +Cn0sdGhpcyk7cmV0dXJuIHRoaXM7fSxjbG9uZUV2ZW50czpmdW5jdGlvbihELEEp +e0Q9JChEKTt2YXIgQz1ELnJldHJpZXZlKCJldmVudHMiKTtpZighQyl7cmV0dXJu +IHRoaXM7fWlmKCFBKXtmb3IodmFyIEIgaW4gQyl7dGhpcy5jbG9uZUV2ZW50cyhE +LEIpO319ZWxzZXtpZihDW0FdKXtDW0FdLmtleXMuZWFjaChmdW5jdGlvbihFKXt0 +aGlzLmFkZEV2ZW50KEEsRSk7Cn0sdGhpcyk7fX1yZXR1cm4gdGhpczt9fSk7RWxl +bWVudC5OYXRpdmVFdmVudHM9e2NsaWNrOjIsZGJsY2xpY2s6Mixtb3VzZXVwOjIs +bW91c2Vkb3duOjIsY29udGV4dG1lbnU6Mixtb3VzZXdoZWVsOjIsRE9NTW91c2VT +Y3JvbGw6Mixtb3VzZW92ZXI6Mixtb3VzZW91dDoyLG1vdXNlbW92ZToyLHNlbGVj +dHN0YXJ0OjIsc2VsZWN0ZW5kOjIsa2V5ZG93bjoyLGtleXByZXNzOjIsa2V5dXA6 +Mixmb2N1czoyLGJsdXI6MixjaGFuZ2U6MixyZXNldDoyLHNlbGVjdDoyLHN1Ym1p +dDoyLGxvYWQ6MSx1bmxvYWQ6MSxiZWZvcmV1bmxvYWQ6MixyZXNpemU6MSxtb3Zl +OjEsRE9NQ29udGVudExvYWRlZDoxLHJlYWR5c3RhdGVjaGFuZ2U6MSxlcnJvcjox +LGFib3J0OjEsc2Nyb2xsOjF9OwooZnVuY3Rpb24oKXt2YXIgQT1mdW5jdGlvbihC +KXt2YXIgQz1CLnJlbGF0ZWRUYXJnZXQ7aWYoQz09dW5kZWZpbmVkKXtyZXR1cm4g +dHJ1ZTt9aWYoQz09PWZhbHNlKXtyZXR1cm4gZmFsc2U7fXJldHVybigkdHlwZSh0 +aGlzKSE9ImRvY3VtZW50IiYmQyE9dGhpcyYmQy5wcmVmaXghPSJ4dWwiJiYhdGhp +cy5oYXNDaGlsZChDKSk7Cn07RWxlbWVudC5FdmVudHM9bmV3IEhhc2goe21vdXNl +ZW50ZXI6e2Jhc2U6Im1vdXNlb3ZlciIsY29uZGl0aW9uOkF9LG1vdXNlbGVhdmU6 +e2Jhc2U6Im1vdXNlb3V0Iixjb25kaXRpb246QX0sbW91c2V3aGVlbDp7YmFzZToo +QnJvd3Nlci5FbmdpbmUuZ2Vja28pPyJET01Nb3VzZVNjcm9sbCI6Im1vdXNld2hl +ZWwifX0pOwp9KSgpO0VsZW1lbnQuUHJvcGVydGllcy5zdHlsZXM9e3NldDpmdW5j +dGlvbihBKXt0aGlzLnNldFN0eWxlcyhBKTt9fTtFbGVtZW50LlByb3BlcnRpZXMu +b3BhY2l0eT17c2V0OmZ1bmN0aW9uKEEsQil7aWYoIUIpe2lmKEE9PTApe2lmKHRo +aXMuc3R5bGUudmlzaWJpbGl0eSE9ImhpZGRlbiIpe3RoaXMuc3R5bGUudmlzaWJp +bGl0eT0iaGlkZGVuIjsKfX1lbHNle2lmKHRoaXMuc3R5bGUudmlzaWJpbGl0eSE9 +InZpc2libGUiKXt0aGlzLnN0eWxlLnZpc2liaWxpdHk9InZpc2libGUiO319fWlm +KCF0aGlzLmN1cnJlbnRTdHlsZXx8IXRoaXMuY3VycmVudFN0eWxlLmhhc0xheW91 +dCl7dGhpcy5zdHlsZS56b29tPTE7fWlmKEJyb3dzZXIuRW5naW5lLnRyaWRlbnQp +e3RoaXMuc3R5bGUuZmlsdGVyPShBPT0xKT8iIjoiYWxwaGEob3BhY2l0eT0iK0Eq +MTAwKyIpIjsKfXRoaXMuc3R5bGUub3BhY2l0eT1BO3RoaXMuc3RvcmUoIm9wYWNp +dHkiLEEpO30sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmV0cmlldmUoIm9w +YWNpdHkiLDEpO319O0VsZW1lbnQuaW1wbGVtZW50KHtzZXRPcGFjaXR5OmZ1bmN0 +aW9uKEEpe3JldHVybiB0aGlzLnNldCgib3BhY2l0eSIsQSx0cnVlKTsKfSxnZXRP +cGFjaXR5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0KCJvcGFjaXR5Iik7fSxz +ZXRTdHlsZTpmdW5jdGlvbihCLEEpe3N3aXRjaChCKXtjYXNlIm9wYWNpdHkiOnJl +dHVybiB0aGlzLnNldCgib3BhY2l0eSIscGFyc2VGbG9hdChBKSk7Y2FzZSJmbG9h +dCI6Qj0oQnJvd3Nlci5FbmdpbmUudHJpZGVudCk/InN0eWxlRmxvYXQiOiJjc3NG +bG9hdCI7Cn1CPUIuY2FtZWxDYXNlKCk7aWYoJHR5cGUoQSkhPSJzdHJpbmciKXt2 +YXIgQz0oRWxlbWVudC5TdHlsZXMuZ2V0KEIpfHwiQCIpLnNwbGl0KCIgIik7QT0k +c3BsYXQoQSkubWFwKGZ1bmN0aW9uKEUsRCl7aWYoIUNbRF0pe3JldHVybiIiO31y +ZXR1cm4oJHR5cGUoRSk9PSJudW1iZXIiKT9DW0RdLnJlcGxhY2UoIkAiLE1hdGgu +cm91bmQoRSkpOkU7Cn0pLmpvaW4oIiAiKTt9ZWxzZXtpZihBPT1TdHJpbmcoTnVt +YmVyKEEpKSl7QT1NYXRoLnJvdW5kKEEpO319dGhpcy5zdHlsZVtCXT1BO3JldHVy +biB0aGlzO30sZ2V0U3R5bGU6ZnVuY3Rpb24oRyl7c3dpdGNoKEcpe2Nhc2Uib3Bh +Y2l0eSI6cmV0dXJuIHRoaXMuZ2V0KCJvcGFjaXR5Iik7CmNhc2UiZmxvYXQiOkc9 +KEJyb3dzZXIuRW5naW5lLnRyaWRlbnQpPyJzdHlsZUZsb2F0IjoiY3NzRmxvYXQi +O31HPUcuY2FtZWxDYXNlKCk7dmFyIEE9dGhpcy5zdHlsZVtHXTtpZighJGNoayhB +KSl7QT1bXTtmb3IodmFyIEYgaW4gRWxlbWVudC5TaG9ydFN0eWxlcyl7aWYoRyE9 +Ril7Y29udGludWU7Cn1mb3IodmFyIEUgaW4gRWxlbWVudC5TaG9ydFN0eWxlc1tG +XSl7QS5wdXNoKHRoaXMuZ2V0U3R5bGUoRSkpO31yZXR1cm4gQS5qb2luKCIgIik7 +fUE9dGhpcy5nZXRDb21wdXRlZFN0eWxlKEcpO31pZihBKXtBPVN0cmluZyhBKTt2 +YXIgQz1BLm1hdGNoKC9yZ2JhP1woW1xkXHMsXStcKS8pOwppZihDKXtBPUEucmVw +bGFjZShDWzBdLENbMF0ucmdiVG9IZXgoKSk7fX1pZihCcm93c2VyLkVuZ2luZS5w +cmVzdG98fChCcm93c2VyLkVuZ2luZS50cmlkZW50JiYhJGNoayhwYXJzZUludChB +KSkpKXtpZihHLnRlc3QoL14oaGVpZ2h0fHdpZHRoKSQvKSl7dmFyIEI9KEc9PSJ3 +aWR0aCIpP1sibGVmdCIsInJpZ2h0Il06WyJ0b3AiLCJib3R0b20iXSxEPTA7CkIu +ZWFjaChmdW5jdGlvbihIKXtEKz10aGlzLmdldFN0eWxlKCJib3JkZXItIitIKyIt +d2lkdGgiKS50b0ludCgpK3RoaXMuZ2V0U3R5bGUoInBhZGRpbmctIitIKS50b0lu +dCgpO30sdGhpcyk7cmV0dXJuIHRoaXNbIm9mZnNldCIrRy5jYXBpdGFsaXplKCld +LUQrInB4IjsKfWlmKEJyb3dzZXIuRW5naW5lLnByZXN0byYmU3RyaW5nKEEpLnRl +c3QoInB4Iikpe3JldHVybiBBO31pZihHLnRlc3QoLyhib3JkZXIoLispV2lkdGh8 +bWFyZ2lufHBhZGRpbmcpLykpe3JldHVybiIwcHgiO319cmV0dXJuIEE7fSxzZXRT +dHlsZXM6ZnVuY3Rpb24oQil7Zm9yKHZhciBBIGluIEIpe3RoaXMuc2V0U3R5bGUo +QSxCW0FdKTsKfXJldHVybiB0aGlzO30sZ2V0U3R5bGVzOmZ1bmN0aW9uKCl7dmFy +IEE9e307QXJyYXkuZWFjaChhcmd1bWVudHMsZnVuY3Rpb24oQil7QVtCXT10aGlz +LmdldFN0eWxlKEIpO30sdGhpcyk7cmV0dXJuIEE7fX0pO0VsZW1lbnQuU3R5bGVz +PW5ldyBIYXNoKHtsZWZ0OiJAcHgiLHRvcDoiQHB4Iixib3R0b206IkBweCIscmln +aHQ6IkBweCIsd2lkdGg6IkBweCIsaGVpZ2h0OiJAcHgiLG1heFdpZHRoOiJAcHgi +LG1heEhlaWdodDoiQHB4IixtaW5XaWR0aDoiQHB4IixtaW5IZWlnaHQ6IkBweCIs +YmFja2dyb3VuZENvbG9yOiJyZ2IoQCwgQCwgQCkiLGJhY2tncm91bmRQb3NpdGlv +bjoiQHB4IEBweCIsY29sb3I6InJnYihALCBALCBAKSIsZm9udFNpemU6IkBweCIs +bGV0dGVyU3BhY2luZzoiQHB4IixsaW5lSGVpZ2h0OiJAcHgiLGNsaXA6InJlY3Qo +QHB4IEBweCBAcHggQHB4KSIsbWFyZ2luOiJAcHggQHB4IEBweCBAcHgiLHBhZGRp +bmc6IkBweCBAcHggQHB4IEBweCIsYm9yZGVyOiJAcHggQCByZ2IoQCwgQCwgQCkg +QHB4IEAgcmdiKEAsIEAsIEApIEBweCBAIHJnYihALCBALCBAKSIsYm9yZGVyV2lk +dGg6IkBweCBAcHggQHB4IEBweCIsYm9yZGVyU3R5bGU6IkAgQCBAIEAiLGJvcmRl +ckNvbG9yOiJyZ2IoQCwgQCwgQCkgcmdiKEAsIEAsIEApIHJnYihALCBALCBAKSBy +Z2IoQCwgQCwgQCkiLHpJbmRleDoiQCIsem9vbToiQCIsZm9udFdlaWdodDoiQCIs +dGV4dEluZGVudDoiQHB4IixvcGFjaXR5OiJAIn0pOwpFbGVtZW50LlNob3J0U3R5 +bGVzPXttYXJnaW46e30scGFkZGluZzp7fSxib3JkZXI6e30sYm9yZGVyV2lkdGg6 +e30sYm9yZGVyU3R5bGU6e30sYm9yZGVyQ29sb3I6e319O1siVG9wIiwiUmlnaHQi +LCJCb3R0b20iLCJMZWZ0Il0uZWFjaChmdW5jdGlvbihHKXt2YXIgRj1FbGVtZW50 +LlNob3J0U3R5bGVzOwp2YXIgQj1FbGVtZW50LlN0eWxlcztbIm1hcmdpbiIsInBh +ZGRpbmciXS5lYWNoKGZ1bmN0aW9uKEgpe3ZhciBJPUgrRztGW0hdW0ldPUJbSV09 +IkBweCI7fSk7dmFyIEU9ImJvcmRlciIrRztGLmJvcmRlcltFXT1CW0VdPSJAcHgg +QCByZ2IoQCwgQCwgQCkiO3ZhciBEPUUrIldpZHRoIixBPUUrIlN0eWxlIixDPUUr +IkNvbG9yIjsKRltFXT17fTtGLmJvcmRlcldpZHRoW0RdPUZbRV1bRF09QltEXT0i +QHB4IjtGLmJvcmRlclN0eWxlW0FdPUZbRV1bQV09QltBXT0iQCI7Ri5ib3JkZXJD +b2xvcltDXT1GW0VdW0NdPUJbQ109InJnYihALCBALCBAKSI7fSk7KGZ1bmN0aW9u +KCl7RWxlbWVudC5pbXBsZW1lbnQoe3Njcm9sbFRvOmZ1bmN0aW9uKEgsSSl7aWYo +Qih0aGlzKSl7dGhpcy5nZXRXaW5kb3coKS5zY3JvbGxUbyhILEkpOwp9ZWxzZXt0 +aGlzLnNjcm9sbExlZnQ9SDt0aGlzLnNjcm9sbFRvcD1JO31yZXR1cm4gdGhpczt9 +LGdldFNpemU6ZnVuY3Rpb24oKXtpZihCKHRoaXMpKXtyZXR1cm4gdGhpcy5nZXRX +aW5kb3coKS5nZXRTaXplKCk7fXJldHVybnt4OnRoaXMub2Zmc2V0V2lkdGgseTp0 +aGlzLm9mZnNldEhlaWdodH07Cn0sZ2V0U2Nyb2xsU2l6ZTpmdW5jdGlvbigpe2lm +KEIodGhpcykpe3JldHVybiB0aGlzLmdldFdpbmRvdygpLmdldFNjcm9sbFNpemUo +KTt9cmV0dXJue3g6dGhpcy5zY3JvbGxXaWR0aCx5OnRoaXMuc2Nyb2xsSGVpZ2h0 +fTt9LGdldFNjcm9sbDpmdW5jdGlvbigpe2lmKEIodGhpcykpe3JldHVybiB0aGlz +LmdldFdpbmRvdygpLmdldFNjcm9sbCgpOwp9cmV0dXJue3g6dGhpcy5zY3JvbGxM +ZWZ0LHk6dGhpcy5zY3JvbGxUb3B9O30sZ2V0U2Nyb2xsczpmdW5jdGlvbigpe3Zh +ciBJPXRoaXMsSD17eDowLHk6MH07d2hpbGUoSSYmIUIoSSkpe0gueCs9SS5zY3Jv +bGxMZWZ0O0gueSs9SS5zY3JvbGxUb3A7ST1JLnBhcmVudE5vZGU7Cn1yZXR1cm4g +SDt9LGdldE9mZnNldFBhcmVudDpmdW5jdGlvbigpe3ZhciBIPXRoaXM7aWYoQihI +KSl7cmV0dXJuIG51bGw7fWlmKCFCcm93c2VyLkVuZ2luZS50cmlkZW50KXtyZXR1 +cm4gSC5vZmZzZXRQYXJlbnQ7fXdoaWxlKChIPUgucGFyZW50Tm9kZSkmJiFCKEgp +KXtpZihEKEgsInBvc2l0aW9uIikhPSJzdGF0aWMiKXtyZXR1cm4gSDsKfX1yZXR1 +cm4gbnVsbDt9LGdldE9mZnNldHM6ZnVuY3Rpb24oKXt2YXIgST10aGlzLEg9e3g6 +MCx5OjB9O2lmKEIodGhpcykpe3JldHVybiBIO313aGlsZShJJiYhQihJKSl7SC54 +Kz1JLm9mZnNldExlZnQ7SC55Kz1JLm9mZnNldFRvcDtpZihCcm93c2VyLkVuZ2lu +ZS5nZWNrbyl7aWYoIUYoSSkpe0gueCs9QyhJKTsKSC55Kz1HKEkpO312YXIgSj1J +LnBhcmVudE5vZGU7aWYoSiYmRChKLCJvdmVyZmxvdyIpIT0idmlzaWJsZSIpe0gu +eCs9QyhKKTtILnkrPUcoSik7fX1lbHNle2lmKEkhPXRoaXMmJihCcm93c2VyLkVu +Z2luZS50cmlkZW50fHxCcm93c2VyLkVuZ2luZS53ZWJraXQpKXtILngrPUMoSSk7 +CkgueSs9RyhJKTt9fUk9SS5vZmZzZXRQYXJlbnQ7aWYoQnJvd3Nlci5FbmdpbmUu +dHJpZGVudCl7d2hpbGUoSSYmIUkuY3VycmVudFN0eWxlLmhhc0xheW91dCl7ST1J +Lm9mZnNldFBhcmVudDt9fX1pZihCcm93c2VyLkVuZ2luZS5nZWNrbyYmIUYodGhp +cykpe0gueC09Qyh0aGlzKTsKSC55LT1HKHRoaXMpO31yZXR1cm4gSDt9LGdldFBv +c2l0aW9uOmZ1bmN0aW9uKEspe2lmKEIodGhpcykpe3JldHVybnt4OjAseTowfTt9 +dmFyIEw9dGhpcy5nZXRPZmZzZXRzKCksST10aGlzLmdldFNjcm9sbHMoKTt2YXIg +SD17eDpMLngtSS54LHk6TC55LUkueX07dmFyIEo9KEsmJihLPSQoSykpKT9LLmdl +dFBvc2l0aW9uKCk6e3g6MCx5OjB9OwpyZXR1cm57eDpILngtSi54LHk6SC55LUou +eX07fSxnZXRDb29yZGluYXRlczpmdW5jdGlvbihKKXtpZihCKHRoaXMpKXtyZXR1 +cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRDb29yZGluYXRlcygpO312YXIgSD10aGlz +LmdldFBvc2l0aW9uKEopLEk9dGhpcy5nZXRTaXplKCk7CnZhciBLPXtsZWZ0Okgu +eCx0b3A6SC55LHdpZHRoOkkueCxoZWlnaHQ6SS55fTtLLnJpZ2h0PUsubGVmdCtL +LndpZHRoO0suYm90dG9tPUsudG9wK0suaGVpZ2h0O3JldHVybiBLO30sY29tcHV0 +ZVBvc2l0aW9uOmZ1bmN0aW9uKEgpe3JldHVybntsZWZ0OkgueC1FKHRoaXMsIm1h +cmdpbi1sZWZ0IiksdG9wOkgueS1FKHRoaXMsIm1hcmdpbi10b3AiKX07Cn0scG9z +aXRpb246ZnVuY3Rpb24oSCl7cmV0dXJuIHRoaXMuc2V0U3R5bGVzKHRoaXMuY29t +cHV0ZVBvc2l0aW9uKEgpKTt9fSk7TmF0aXZlLmltcGxlbWVudChbRG9jdW1lbnQs +V2luZG93XSx7Z2V0U2l6ZTpmdW5jdGlvbigpe3ZhciBJPXRoaXMuZ2V0V2luZG93 +KCk7CmlmKEJyb3dzZXIuRW5naW5lLnByZXN0b3x8QnJvd3Nlci5FbmdpbmUud2Vi +a2l0KXtyZXR1cm57eDpJLmlubmVyV2lkdGgseTpJLmlubmVySGVpZ2h0fTt9dmFy +IEg9QSh0aGlzKTtyZXR1cm57eDpILmNsaWVudFdpZHRoLHk6SC5jbGllbnRIZWln +aHR9O30sZ2V0U2Nyb2xsOmZ1bmN0aW9uKCl7dmFyIEk9dGhpcy5nZXRXaW5kb3co +KTsKdmFyIEg9QSh0aGlzKTtyZXR1cm57eDpJLnBhZ2VYT2Zmc2V0fHxILnNjcm9s +bExlZnQseTpJLnBhZ2VZT2Zmc2V0fHxILnNjcm9sbFRvcH07fSxnZXRTY3JvbGxT +aXplOmZ1bmN0aW9uKCl7dmFyIEk9QSh0aGlzKTt2YXIgSD10aGlzLmdldFNpemUo +KTtyZXR1cm57eDpNYXRoLm1heChJLnNjcm9sbFdpZHRoLEgueCkseTpNYXRoLm1h +eChJLnNjcm9sbEhlaWdodCxILnkpfTsKfSxnZXRQb3NpdGlvbjpmdW5jdGlvbigp +e3JldHVybnt4OjAseTowfTt9LGdldENvb3JkaW5hdGVzOmZ1bmN0aW9uKCl7dmFy +IEg9dGhpcy5nZXRTaXplKCk7cmV0dXJue3RvcDowLGxlZnQ6MCxib3R0b206SC55 +LHJpZ2h0OkgueCxoZWlnaHQ6SC55LHdpZHRoOkgueH07Cn19KTt2YXIgRD1FbGVt +ZW50LmdldENvbXB1dGVkU3R5bGU7ZnVuY3Rpb24gRShILEkpe3JldHVybiBEKEgs +SSkudG9JbnQoKXx8MDt9ZnVuY3Rpb24gRihIKXtyZXR1cm4gRChILCItbW96LWJv +eC1zaXppbmciKT09ImJvcmRlci1ib3giO31mdW5jdGlvbiBHKEgpe3JldHVybiBF +KEgsImJvcmRlci10b3Atd2lkdGgiKTsKfWZ1bmN0aW9uIEMoSCl7cmV0dXJuIEUo +SCwiYm9yZGVyLWxlZnQtd2lkdGgiKTt9ZnVuY3Rpb24gQihIKXtyZXR1cm4oL14o +Pzpib2R5fGh0bWwpJC9pKS50ZXN0KEgudGFnTmFtZSk7fWZ1bmN0aW9uIEEoSCl7 +dmFyIEk9SC5nZXREb2N1bWVudCgpO3JldHVybighSS5jb21wYXRNb2RlfHxJLmNv +bXBhdE1vZGU9PSJDU1MxQ29tcGF0Iik/SS5odG1sOkkuYm9keTsKfX0pKCk7TmF0 +aXZlLmltcGxlbWVudChbV2luZG93LERvY3VtZW50LEVsZW1lbnRdLHtnZXRIZWln +aHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRTaXplKCkueTt9LGdldFdpZHRo +OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0U2l6ZSgpLng7fSxnZXRTY3JvbGxU +b3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRTY3JvbGwoKS55Owp9LGdldFNj +cm9sbExlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRTY3JvbGwoKS54O30s +Z2V0U2Nyb2xsSGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0U2Nyb2xs +U2l6ZSgpLnk7fSxnZXRTY3JvbGxXaWR0aDpmdW5jdGlvbigpe3JldHVybiB0aGlz +LmdldFNjcm9sbFNpemUoKS54Owp9LGdldFRvcDpmdW5jdGlvbigpe3JldHVybiB0 +aGlzLmdldFBvc2l0aW9uKCkueTt9LGdldExlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4g +dGhpcy5nZXRQb3NpdGlvbigpLng7fX0pO05hdGl2ZS5pbXBsZW1lbnQoW0RvY3Vt +ZW50LEVsZW1lbnRdLHtnZXRFbGVtZW50czpmdW5jdGlvbihILEcpe0g9SC5zcGxp +dCgiLCIpOwp2YXIgQyxFPXt9O2Zvcih2YXIgRD0wLEI9SC5sZW5ndGg7RDxCO0Qr +Kyl7dmFyIEE9SFtEXSxGPVNlbGVjdG9ycy5VdGlscy5zZWFyY2godGhpcyxBLEUp +O2lmKEQhPTAmJkYuaXRlbSl7Rj0kQShGKTt9Qz0oRD09MCk/RjooQy5pdGVtKT8k +QShDKS5jb25jYXQoRik6Qy5jb25jYXQoRik7Cn1yZXR1cm4gbmV3IEVsZW1lbnRz +KEMse2RkdXA6KEgubGVuZ3RoPjEpLGNhc2g6IUd9KTt9fSk7RWxlbWVudC5pbXBs +ZW1lbnQoe21hdGNoOmZ1bmN0aW9uKEIpe2lmKCFCKXtyZXR1cm4gdHJ1ZTt9dmFy +IEQ9U2VsZWN0b3JzLlV0aWxzLnBhcnNlVGFnQW5kSUQoQik7CnZhciBBPURbMF0s +RT1EWzFdO2lmKCFTZWxlY3RvcnMuRmlsdGVycy5ieUlEKHRoaXMsRSl8fCFTZWxl +Y3RvcnMuRmlsdGVycy5ieVRhZyh0aGlzLEEpKXtyZXR1cm4gZmFsc2U7fXZhciBD +PVNlbGVjdG9ycy5VdGlscy5wYXJzZVNlbGVjdG9yKEIpO3JldHVybihDKT9TZWxl +Y3RvcnMuVXRpbHMuZmlsdGVyKHRoaXMsQyx7fSk6dHJ1ZTsKfX0pO3ZhciBTZWxl +Y3RvcnM9e0NhY2hlOntudGg6e30scGFyc2VkOnt9fX07U2VsZWN0b3JzLlJlZ0V4 +cHM9e2lkOigvIyhbXHctXSspLyksdGFnOigvXihcdyt8XCopLykscXVpY2s6KC9e +KFx3K3xcKikkLyksc3BsaXR0ZXI6KC9ccyooWys+flxzXSlccyooW2EtekEtWiMu +KjpcW10pL2cpLGNvbWJpbmVkOigvXC4oW1x3LV0rKXxcWyhcdyspKD86KFshKl4k +fnxdPz0pWyInXT8oLio/KVsiJ10/KT9cXXw6KFtcdy1dKykoPzpcKFsiJ10/KC4q +Pyk/WyInXT9cKXwkKS9nKX07ClNlbGVjdG9ycy5VdGlscz17Y2hrOmZ1bmN0aW9u +KEIsQyl7aWYoIUMpe3JldHVybiB0cnVlO312YXIgQT0kdWlkKEIpO2lmKCFDW0Fd +KXtyZXR1cm4gQ1tBXT10cnVlO31yZXR1cm4gZmFsc2U7fSxwYXJzZU50aEFyZ3Vt +ZW50OmZ1bmN0aW9uKEYpe2lmKFNlbGVjdG9ycy5DYWNoZS5udGhbRl0pe3JldHVy +biBTZWxlY3RvcnMuQ2FjaGUubnRoW0ZdOwp9dmFyIEM9Ri5tYXRjaCgvXihbKy1d +P1xkKik/KFthLXpdKyk/KFsrLV0/XGQqKT8kLyk7aWYoIUMpe3JldHVybiBmYWxz +ZTt9dmFyIEU9cGFyc2VJbnQoQ1sxXSk7dmFyIEI9KEV8fEU9PT0wKT9FOjE7dmFy +IEQ9Q1syXXx8ZmFsc2U7dmFyIEE9cGFyc2VJbnQoQ1szXSl8fDA7CmlmKEIhPTAp +e0EtLTt3aGlsZShBPDEpe0ErPUI7fXdoaWxlKEE+PUIpe0EtPUI7fX1lbHNle0I9 +QTtEPSJpbmRleCI7fXN3aXRjaChEKXtjYXNlIm4iOkM9e2E6QixiOkEsc3BlY2lh +bDoibiJ9O2JyZWFrO2Nhc2Uib2RkIjpDPXthOjIsYjowLHNwZWNpYWw6Im4ifTsK +YnJlYWs7Y2FzZSJldmVuIjpDPXthOjIsYjoxLHNwZWNpYWw6Im4ifTticmVhaztj +YXNlImZpcnN0IjpDPXthOjAsc3BlY2lhbDoiaW5kZXgifTticmVhaztjYXNlImxh +c3QiOkM9e3NwZWNpYWw6Imxhc3QtY2hpbGQifTticmVhaztjYXNlIm9ubHkiOkM9 +e3NwZWNpYWw6Im9ubHktY2hpbGQifTsKYnJlYWs7ZGVmYXVsdDpDPXthOihCLTEp +LHNwZWNpYWw6ImluZGV4In07fXJldHVybiBTZWxlY3RvcnMuQ2FjaGUubnRoW0Zd +PUM7fSxwYXJzZVNlbGVjdG9yOmZ1bmN0aW9uKEUpe2lmKFNlbGVjdG9ycy5DYWNo +ZS5wYXJzZWRbRV0pe3JldHVybiBTZWxlY3RvcnMuQ2FjaGUucGFyc2VkW0VdOwp9 +dmFyIEQsSD17Y2xhc3NlczpbXSxwc2V1ZG9zOltdLGF0dHJpYnV0ZXM6W119O3do +aWxlKChEPVNlbGVjdG9ycy5SZWdFeHBzLmNvbWJpbmVkLmV4ZWMoRSkpKXt2YXIg +ST1EWzFdLEc9RFsyXSxGPURbM10sQj1EWzRdLEM9RFs1XSxKPURbNl07aWYoSSl7 +SC5jbGFzc2VzLnB1c2goSSk7Cn1lbHNle2lmKEMpe3ZhciBBPVNlbGVjdG9ycy5Q +c2V1ZG8uZ2V0KEMpO2lmKEEpe0gucHNldWRvcy5wdXNoKHtwYXJzZXI6QSxhcmd1 +bWVudDpKfSk7fWVsc2V7SC5hdHRyaWJ1dGVzLnB1c2goe25hbWU6QyxvcGVyYXRv +cjoiPSIsdmFsdWU6Sn0pO319ZWxzZXtpZihHKXtILmF0dHJpYnV0ZXMucHVzaCh7 +bmFtZTpHLG9wZXJhdG9yOkYsdmFsdWU6Qn0pOwp9fX19aWYoIUguY2xhc3Nlcy5s +ZW5ndGgpe2RlbGV0ZSBILmNsYXNzZXM7fWlmKCFILmF0dHJpYnV0ZXMubGVuZ3Ro +KXtkZWxldGUgSC5hdHRyaWJ1dGVzO31pZighSC5wc2V1ZG9zLmxlbmd0aCl7ZGVs +ZXRlIEgucHNldWRvczt9aWYoIUguY2xhc3NlcyYmIUguYXR0cmlidXRlcyYmIUgu +cHNldWRvcyl7SD1udWxsOwp9cmV0dXJuIFNlbGVjdG9ycy5DYWNoZS5wYXJzZWRb +RV09SDt9LHBhcnNlVGFnQW5kSUQ6ZnVuY3Rpb24oQil7dmFyIEE9Qi5tYXRjaChT +ZWxlY3RvcnMuUmVnRXhwcy50YWcpO3ZhciBDPUIubWF0Y2goU2VsZWN0b3JzLlJl +Z0V4cHMuaWQpO3JldHVyblsoQSk/QVsxXToiKiIsKEMpP0NbMV06ZmFsc2VdOwp9 +LGZpbHRlcjpmdW5jdGlvbihGLEMsRSl7dmFyIEQ7aWYoQy5jbGFzc2VzKXtmb3Io +RD1DLmNsYXNzZXMubGVuZ3RoO0QtLTtEKXt2YXIgRz1DLmNsYXNzZXNbRF07aWYo +IVNlbGVjdG9ycy5GaWx0ZXJzLmJ5Q2xhc3MoRixHKSl7cmV0dXJuIGZhbHNlO319 +fWlmKEMuYXR0cmlidXRlcyl7Zm9yKEQ9Qy5hdHRyaWJ1dGVzLmxlbmd0aDsKRC0t +O0Qpe3ZhciBCPUMuYXR0cmlidXRlc1tEXTtpZighU2VsZWN0b3JzLkZpbHRlcnMu +YnlBdHRyaWJ1dGUoRixCLm5hbWUsQi5vcGVyYXRvcixCLnZhbHVlKSl7cmV0dXJu +IGZhbHNlO319fWlmKEMucHNldWRvcyl7Zm9yKEQ9Qy5wc2V1ZG9zLmxlbmd0aDtE +LS07RCl7dmFyIEE9Qy5wc2V1ZG9zW0RdOwppZighU2VsZWN0b3JzLkZpbHRlcnMu +YnlQc2V1ZG8oRixBLnBhcnNlcixBLmFyZ3VtZW50LEUpKXtyZXR1cm4gZmFsc2U7 +fX19cmV0dXJuIHRydWU7fSxnZXRCeVRhZ0FuZElEOmZ1bmN0aW9uKEIsQSxEKXtp +ZihEKXt2YXIgQz0oQi5nZXRFbGVtZW50QnlJZCk/Qi5nZXRFbGVtZW50QnlJZChE +LHRydWUpOkVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoQixELHRydWUpOwpyZXR1cm4o +QyYmU2VsZWN0b3JzLkZpbHRlcnMuYnlUYWcoQyxBKSk/W0NdOltdO31lbHNle3Jl +dHVybiBCLmdldEVsZW1lbnRzQnlUYWdOYW1lKEEpO319LHNlYXJjaDpmdW5jdGlv +bihKLEksTyl7dmFyIEI9W107dmFyIEM9SS50cmltKCkucmVwbGFjZShTZWxlY3Rv +cnMuUmVnRXhwcy5zcGxpdHRlcixmdW5jdGlvbihaLFksWCl7Qi5wdXNoKFkpOwpy +ZXR1cm4iOikiK1g7fSkuc3BsaXQoIjopIik7dmFyIEssRixFLFY7Zm9yKHZhciBV +PTAsUT1DLmxlbmd0aDtVPFE7VSsrKXt2YXIgVD1DW1VdO2lmKFU9PTAmJlNlbGVj +dG9ycy5SZWdFeHBzLnF1aWNrLnRlc3QoVCkpe0s9Si5nZXRFbGVtZW50c0J5VGFn +TmFtZShUKTsKY29udGludWU7fXZhciBBPUJbVS0xXTt2YXIgTD1TZWxlY3RvcnMu +VXRpbHMucGFyc2VUYWdBbmRJRChUKTt2YXIgVz1MWzBdLE09TFsxXTtpZihVPT0w +KXtLPVNlbGVjdG9ycy5VdGlscy5nZXRCeVRhZ0FuZElEKEosVyxNKTt9ZWxzZXt2 +YXIgRD17fSxIPVtdO2Zvcih2YXIgUz0wLFI9Sy5sZW5ndGg7ClM8UjtTKyspe0g9 +U2VsZWN0b3JzLkdldHRlcnNbQV0oSCxLW1NdLFcsTSxEKTt9Sz1IO312YXIgRz1T +ZWxlY3RvcnMuVXRpbHMucGFyc2VTZWxlY3RvcihUKTtpZihHKXtFPVtdO2Zvcih2 +YXIgUD0wLE49Sy5sZW5ndGg7UDxOO1ArKyl7Vj1LW1BdO2lmKFNlbGVjdG9ycy5V +dGlscy5maWx0ZXIoVixHLE8pKXtFLnB1c2goVik7Cn19Sz1FO319cmV0dXJuIEs7 +fX07U2VsZWN0b3JzLkdldHRlcnM9eyIgIjpmdW5jdGlvbihILEcsSSxBLEUpe3Zh +ciBEPVNlbGVjdG9ycy5VdGlscy5nZXRCeVRhZ0FuZElEKEcsSSxBKTtmb3IodmFy +IEM9MCxCPUQubGVuZ3RoO0M8QjtDKyspe3ZhciBGPURbQ107aWYoU2VsZWN0b3Jz +LlV0aWxzLmNoayhGLEUpKXtILnB1c2goRik7Cn19cmV0dXJuIEg7fSwiPiI6ZnVu +Y3Rpb24oSCxHLEksQSxGKXt2YXIgQz1TZWxlY3RvcnMuVXRpbHMuZ2V0QnlUYWdB +bmRJRChHLEksQSk7Zm9yKHZhciBFPTAsRD1DLmxlbmd0aDtFPEQ7RSsrKXt2YXIg +Qj1DW0VdO2lmKEIucGFyZW50Tm9kZT09RyYmU2VsZWN0b3JzLlV0aWxzLmNoayhC +LEYpKXtILnB1c2goQik7Cn19cmV0dXJuIEg7fSwiKyI6ZnVuY3Rpb24oQyxCLEEs +RSxEKXt3aGlsZSgoQj1CLm5leHRTaWJsaW5nKSl7aWYoQi5ub2RlVHlwZT09MSl7 +aWYoU2VsZWN0b3JzLlV0aWxzLmNoayhCLEQpJiZTZWxlY3RvcnMuRmlsdGVycy5i +eVRhZyhCLEEpJiZTZWxlY3RvcnMuRmlsdGVycy5ieUlEKEIsRSkpe0MucHVzaChC +KTsKfWJyZWFrO319cmV0dXJuIEM7fSwifiI6ZnVuY3Rpb24oQyxCLEEsRSxEKXt3 +aGlsZSgoQj1CLm5leHRTaWJsaW5nKSl7aWYoQi5ub2RlVHlwZT09MSl7aWYoIVNl +bGVjdG9ycy5VdGlscy5jaGsoQixEKSl7YnJlYWs7fWlmKFNlbGVjdG9ycy5GaWx0 +ZXJzLmJ5VGFnKEIsQSkmJlNlbGVjdG9ycy5GaWx0ZXJzLmJ5SUQoQixFKSl7Qy5w +dXNoKEIpOwp9fX1yZXR1cm4gQzt9fTtTZWxlY3RvcnMuRmlsdGVycz17YnlUYWc6 +ZnVuY3Rpb24oQixBKXtyZXR1cm4oQT09IioifHwoQi50YWdOYW1lJiZCLnRhZ05h +bWUudG9Mb3dlckNhc2UoKT09QSkpO30sYnlJRDpmdW5jdGlvbihBLEIpe3JldHVy +bighQnx8KEEuaWQmJkEuaWQ9PUIpKTsKfSxieUNsYXNzOmZ1bmN0aW9uKEIsQSl7 +cmV0dXJuKEIuY2xhc3NOYW1lJiZCLmNsYXNzTmFtZS5jb250YWlucyhBLCIgIikp +O30sYnlQc2V1ZG86ZnVuY3Rpb24oQSxELEMsQil7cmV0dXJuIEQuY2FsbChBLEMs +Qik7fSxieUF0dHJpYnV0ZTpmdW5jdGlvbihDLEQsQixFKXt2YXIgQT1FbGVtZW50 +LnByb3RvdHlwZS5nZXRQcm9wZXJ0eS5jYWxsKEMsRCk7CmlmKCFBKXtyZXR1cm4g +ZmFsc2U7fWlmKCFCfHxFPT11bmRlZmluZWQpe3JldHVybiB0cnVlO31zd2l0Y2go +Qil7Y2FzZSI9IjpyZXR1cm4oQT09RSk7Y2FzZSIqPSI6cmV0dXJuKEEuY29udGFp +bnMoRSkpO2Nhc2UiXj0iOnJldHVybihBLnN1YnN0cigwLEUubGVuZ3RoKT09RSk7 +CmNhc2UiJD0iOnJldHVybihBLnN1YnN0cihBLmxlbmd0aC1FLmxlbmd0aCk9PUUp +O2Nhc2UiIT0iOnJldHVybihBIT1FKTtjYXNlIn49IjpyZXR1cm4gQS5jb250YWlu +cyhFLCIgIik7Y2FzZSJ8PSI6cmV0dXJuIEEuY29udGFpbnMoRSwiLSIpO31yZXR1 +cm4gZmFsc2U7Cn19O1NlbGVjdG9ycy5Qc2V1ZG89bmV3IEhhc2goe2VtcHR5OmZ1 +bmN0aW9uKCl7cmV0dXJuICEodGhpcy5pbm5lclRleHR8fHRoaXMudGV4dENvbnRl +bnR8fCIiKS5sZW5ndGg7fSxub3Q6ZnVuY3Rpb24oQSl7cmV0dXJuICFFbGVtZW50 +Lm1hdGNoKHRoaXMsQSk7fSxjb250YWluczpmdW5jdGlvbihBKXtyZXR1cm4odGhp +cy5pbm5lclRleHR8fHRoaXMudGV4dENvbnRlbnR8fCIiKS5jb250YWlucyhBKTsK +fSwiZmlyc3QtY2hpbGQiOmZ1bmN0aW9uKCl7cmV0dXJuIFNlbGVjdG9ycy5Qc2V1 +ZG8uaW5kZXguY2FsbCh0aGlzLDApO30sImxhc3QtY2hpbGQiOmZ1bmN0aW9uKCl7 +dmFyIEE9dGhpczt3aGlsZSgoQT1BLm5leHRTaWJsaW5nKSl7aWYoQS5ub2RlVHlw +ZT09MSl7cmV0dXJuIGZhbHNlOwp9fXJldHVybiB0cnVlO30sIm9ubHktY2hpbGQi +OmZ1bmN0aW9uKCl7dmFyIEI9dGhpczt3aGlsZSgoQj1CLnByZXZpb3VzU2libGlu +Zykpe2lmKEIubm9kZVR5cGU9PTEpe3JldHVybiBmYWxzZTt9fXZhciBBPXRoaXM7 +d2hpbGUoKEE9QS5uZXh0U2libGluZykpe2lmKEEubm9kZVR5cGU9PTEpe3JldHVy +biBmYWxzZTsKfX1yZXR1cm4gdHJ1ZTt9LCJudGgtY2hpbGQiOmZ1bmN0aW9uKEcs +RSl7Rz0oRz09dW5kZWZpbmVkKT8ibiI6Rzt2YXIgQz1TZWxlY3RvcnMuVXRpbHMu +cGFyc2VOdGhBcmd1bWVudChHKTtpZihDLnNwZWNpYWwhPSJuIil7cmV0dXJuIFNl +bGVjdG9ycy5Qc2V1ZG9bQy5zcGVjaWFsXS5jYWxsKHRoaXMsQy5hLEUpOwp9dmFy +IEY9MDtFLnBvc2l0aW9ucz1FLnBvc2l0aW9uc3x8e307dmFyIEQ9JHVpZCh0aGlz +KTtpZighRS5wb3NpdGlvbnNbRF0pe3ZhciBCPXRoaXM7d2hpbGUoKEI9Qi5wcmV2 +aW91c1NpYmxpbmcpKXtpZihCLm5vZGVUeXBlIT0xKXtjb250aW51ZTt9RisrO3Zh +ciBBPUUucG9zaXRpb25zWyR1aWQoQildOwppZihBIT11bmRlZmluZWQpe0Y9QStG +O2JyZWFrO319RS5wb3NpdGlvbnNbRF09Rjt9cmV0dXJuKEUucG9zaXRpb25zW0Rd +JUMuYT09Qy5iKTt9LGluZGV4OmZ1bmN0aW9uKEEpe3ZhciBCPXRoaXMsQz0wO3do +aWxlKChCPUIucHJldmlvdXNTaWJsaW5nKSl7aWYoQi5ub2RlVHlwZT09MSYmKytD +PkEpe3JldHVybiBmYWxzZTsKfX1yZXR1cm4oQz09QSk7fSxldmVuOmZ1bmN0aW9u +KEIsQSl7cmV0dXJuIFNlbGVjdG9ycy5Qc2V1ZG9bIm50aC1jaGlsZCJdLmNhbGwo +dGhpcywiMm4rMSIsQSk7fSxvZGQ6ZnVuY3Rpb24oQixBKXtyZXR1cm4gU2VsZWN0 +b3JzLlBzZXVkb1sibnRoLWNoaWxkIl0uY2FsbCh0aGlzLCIybiIsQSk7Cn19KTtF +bGVtZW50LkV2ZW50cy5kb21yZWFkeT17b25BZGQ6ZnVuY3Rpb24oQSl7aWYoQnJv +d3Nlci5sb2FkZWQpe0EuY2FsbCh0aGlzKTt9fX07KGZ1bmN0aW9uKCl7dmFyIEI9 +ZnVuY3Rpb24oKXtpZihCcm93c2VyLmxvYWRlZCl7cmV0dXJuIDt9QnJvd3Nlci5s +b2FkZWQ9dHJ1ZTsKd2luZG93LmZpcmVFdmVudCgiZG9tcmVhZHkiKTtkb2N1bWVu +dC5maXJlRXZlbnQoImRvbXJlYWR5Iik7fTtzd2l0Y2goQnJvd3Nlci5FbmdpbmUu +bmFtZSl7Y2FzZSJ3ZWJraXQiOihmdW5jdGlvbigpeyhbImxvYWRlZCIsImNvbXBs +ZXRlIl0uY29udGFpbnMoZG9jdW1lbnQucmVhZHlTdGF0ZSkpP0IoKTphcmd1bWVu +dHMuY2FsbGVlLmRlbGF5KDUwKTsKfSkoKTticmVhaztjYXNlInRyaWRlbnQiOnZh +ciBBPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOyhmdW5jdGlvbigpeygk +dHJ5KGZ1bmN0aW9uKCl7QS5kb1Njcm9sbCgibGVmdCIpO3JldHVybiAkKEEpLmlu +amVjdChkb2N1bWVudC5ib2R5KS5zZXQoImh0bWwiLCJ0ZW1wIikuZGlzcG9zZSgp +Owp9KSk/QigpOmFyZ3VtZW50cy5jYWxsZWUuZGVsYXkoNTApO30pKCk7YnJlYWs7 +ZGVmYXVsdDp3aW5kb3cuYWRkRXZlbnQoImxvYWQiLEIpO2RvY3VtZW50LmFkZEV2 +ZW50KCJET01Db250ZW50TG9hZGVkIixCKTt9fSkoKTt2YXIgSlNPTj1uZXcgSGFz +aCh7ZW5jb2RlOmZ1bmN0aW9uKEIpe3N3aXRjaCgkdHlwZShCKSl7Y2FzZSJzdHJp +bmciOnJldHVybiciJytCLnJlcGxhY2UoL1tceDAwLVx4MWZcXCJdL2csSlNPTi4k +cmVwbGFjZUNoYXJzKSsnIic7CmNhc2UiYXJyYXkiOnJldHVybiJbIitTdHJpbmco +Qi5tYXAoSlNPTi5lbmNvZGUpLmZpbHRlcigkZGVmaW5lZCkpKyJdIjtjYXNlIm9i +amVjdCI6Y2FzZSJoYXNoIjp2YXIgQT1bXTtIYXNoLmVhY2goQixmdW5jdGlvbihF +LEQpe3ZhciBDPUpTT04uZW5jb2RlKEUpO2lmKEMpe0EucHVzaChKU09OLmVuY29k +ZShEKSsiOiIrQyk7Cn19KTtyZXR1cm4ieyIrQSsifSI7Y2FzZSJudW1iZXIiOmNh +c2UiYm9vbGVhbiI6cmV0dXJuIFN0cmluZyhCKTtjYXNlIGZhbHNlOnJldHVybiJu +dWxsIjt9cmV0dXJuIG51bGw7fSwkc3BlY2lhbENoYXJzOnsiXGIiOiJcXGIiLCJc +dCI6IlxcdCIsIlxuIjoiXFxuIiwiXGYiOiJcXGYiLCJcciI6IlxcciIsJyInOidc +XCInLCJcXCI6IlxcXFwifSwkcmVwbGFjZUNoYXJzOmZ1bmN0aW9uKEEpe3JldHVy +biBKU09OLiRzcGVjaWFsQ2hhcnNbQV18fCJcXHUwMCIrTWF0aC5mbG9vcihBLmNo +YXJDb2RlQXQoKS8xNikudG9TdHJpbmcoMTYpKyhBLmNoYXJDb2RlQXQoKSUxNiku +dG9TdHJpbmcoMTYpOwp9LGRlY29kZTpmdW5jdGlvbihzdHJpbmcsc2VjdXJlKXtp +ZigkdHlwZShzdHJpbmcpIT0ic3RyaW5nInx8IXN0cmluZy5sZW5ndGgpe3JldHVy +biBudWxsO31pZihzZWN1cmUmJiEoL15bLDp7fVxbXF0wLTkuXC0rRWFlZmxuci11 +IFxuXHJcdF0qJC8pLnRlc3Qoc3RyaW5nLnJlcGxhY2UoL1xcLi9nLCJAIikucmVw +bGFjZSgvIlteIlxcXG5ccl0qIi9nLCIiKSkpe3JldHVybiBudWxsOwp9cmV0dXJu +IGV2YWwoIigiK3N0cmluZysiKSIpO319KTtOYXRpdmUuaW1wbGVtZW50KFtIYXNo +LEFycmF5LFN0cmluZyxOdW1iZXJdLHt0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm4g +SlNPTi5lbmNvZGUodGhpcyk7fX0pO3ZhciBDb29raWU9bmV3IENsYXNzKHtJbXBs +ZW1lbnRzOk9wdGlvbnMsb3B0aW9uczp7cGF0aDpmYWxzZSxkb21haW46ZmFsc2Us +ZHVyYXRpb246ZmFsc2Usc2VjdXJlOmZhbHNlLGRvY3VtZW50OmRvY3VtZW50fSxp +bml0aWFsaXplOmZ1bmN0aW9uKEIsQSl7dGhpcy5rZXk9QjsKdGhpcy5zZXRPcHRp +b25zKEEpO30sd3JpdGU6ZnVuY3Rpb24oQil7Qj1lbmNvZGVVUklDb21wb25lbnQo +Qik7aWYodGhpcy5vcHRpb25zLmRvbWFpbil7Qis9IjsgZG9tYWluPSIrdGhpcy5v +cHRpb25zLmRvbWFpbjt9aWYodGhpcy5vcHRpb25zLnBhdGgpe0IrPSI7IHBhdGg9 +Iit0aGlzLm9wdGlvbnMucGF0aDsKfWlmKHRoaXMub3B0aW9ucy5kdXJhdGlvbil7 +dmFyIEE9bmV3IERhdGUoKTtBLnNldFRpbWUoQS5nZXRUaW1lKCkrdGhpcy5vcHRp +b25zLmR1cmF0aW9uKjI0KjYwKjYwKjEwMDApO0IrPSI7IGV4cGlyZXM9IitBLnRv +R01UU3RyaW5nKCk7fWlmKHRoaXMub3B0aW9ucy5zZWN1cmUpe0IrPSI7IHNlY3Vy +ZSI7Cn10aGlzLm9wdGlvbnMuZG9jdW1lbnQuY29va2llPXRoaXMua2V5KyI9IitC +O3JldHVybiB0aGlzO30scmVhZDpmdW5jdGlvbigpe3ZhciBBPXRoaXMub3B0aW9u +cy5kb2N1bWVudC5jb29raWUubWF0Y2goIig/Ol58OylcXHMqIit0aGlzLmtleS5l +c2NhcGVSZWdFeHAoKSsiPShbXjtdKikiKTsKcmV0dXJuKEEpP2RlY29kZVVSSUNv +bXBvbmVudChBWzFdKTpudWxsO30sZGlzcG9zZTpmdW5jdGlvbigpe25ldyBDb29r +aWUodGhpcy5rZXksJG1lcmdlKHRoaXMub3B0aW9ucyx7ZHVyYXRpb246LTF9KSku +d3JpdGUoIiIpO3JldHVybiB0aGlzO319KTtDb29raWUud3JpdGU9ZnVuY3Rpb24o +QixDLEEpe3JldHVybiBuZXcgQ29va2llKEIsQSkud3JpdGUoQyk7Cn07Q29va2ll +LnJlYWQ9ZnVuY3Rpb24oQSl7cmV0dXJuIG5ldyBDb29raWUoQSkucmVhZCgpO307 +Q29va2llLmRpc3Bvc2U9ZnVuY3Rpb24oQixBKXtyZXR1cm4gbmV3IENvb2tpZShC +LEEpLmRpc3Bvc2UoKTt9O3ZhciBTd2lmZj1uZXcgQ2xhc3Moe0ltcGxlbWVudHM6 +W09wdGlvbnNdLG9wdGlvbnM6e2lkOm51bGwsaGVpZ2h0OjEsd2lkdGg6MSxjb250 +YWluZXI6bnVsbCxwcm9wZXJ0aWVzOnt9LHBhcmFtczp7cXVhbGl0eToiaGlnaCIs +YWxsb3dTY3JpcHRBY2Nlc3M6ImFsd2F5cyIsd01vZGU6InRyYW5zcGFyZW50Iixz +d0xpdmVDb25uZWN0OnRydWV9LGNhbGxCYWNrczp7fSx2YXJzOnt9fSx0b0VsZW1l +bnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vYmplY3Q7Cn0saW5pdGlhbGl6ZTpm +dW5jdGlvbihMLE0pe3RoaXMuaW5zdGFuY2U9IlN3aWZmXyIrJHRpbWUoKTt0aGlz +LnNldE9wdGlvbnMoTSk7TT10aGlzLm9wdGlvbnM7dmFyIEI9dGhpcy5pZD1NLmlk +fHx0aGlzLmluc3RhbmNlO3ZhciBBPSQoTS5jb250YWluZXIpO1N3aWZmLkNhbGxC +YWNrc1t0aGlzLmluc3RhbmNlXT17fTsKdmFyIEU9TS5wYXJhbXMsRz1NLnZhcnMs +Rj1NLmNhbGxCYWNrczt2YXIgSD0kZXh0ZW5kKHtoZWlnaHQ6TS5oZWlnaHQsd2lk +dGg6TS53aWR0aH0sTS5wcm9wZXJ0aWVzKTt2YXIgSz10aGlzO2Zvcih2YXIgRCBp +biBGKXtTd2lmZi5DYWxsQmFja3NbdGhpcy5pbnN0YW5jZV1bRF09KGZ1bmN0aW9u +KE4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBOLmFwcGx5KEsub2JqZWN0LGFy +Z3VtZW50cyk7Cn07fSkoRltEXSk7R1tEXT0iU3dpZmYuQ2FsbEJhY2tzLiIrdGhp +cy5pbnN0YW5jZSsiLiIrRDt9RS5mbGFzaFZhcnM9SGFzaC50b1F1ZXJ5U3RyaW5n +KEcpO2lmKEJyb3dzZXIuRW5naW5lLnRyaWRlbnQpe0guY2xhc3NpZD0iY2xzaWQ6 +RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIjsKRS5tb3ZpZT1M +O31lbHNle0gudHlwZT0iYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giO0gu +ZGF0YT1MO312YXIgSj0nPG9iamVjdCBpZD0iJytCKyciJztmb3IodmFyIEkgaW4g +SCl7Sis9IiAiK0krJz0iJytIW0ldKyciJzt9Sis9Ij4iO2Zvcih2YXIgQyBpbiBF +KXtpZihFW0NdKXtKKz0nPHBhcmFtIG5hbWU9IicrQysnIiB2YWx1ZT0iJytFW0Nd +KyciIC8+JzsKfX1KKz0iPC9vYmplY3Q+Ijt0aGlzLm9iamVjdD0oKEEpP0EuZW1w +dHkoKTpuZXcgRWxlbWVudCgiZGl2IikpLnNldCgiaHRtbCIsSikuZmlyc3RDaGls +ZDt9LHJlcGxhY2VzOmZ1bmN0aW9uKEEpe0E9JChBLHRydWUpO0EucGFyZW50Tm9k +ZS5yZXBsYWNlQ2hpbGQodGhpcy50b0VsZW1lbnQoKSxBKTsKcmV0dXJuIHRoaXM7 +fSxpbmplY3Q6ZnVuY3Rpb24oQSl7JChBLHRydWUpLmFwcGVuZENoaWxkKHRoaXMu +dG9FbGVtZW50KCkpO3JldHVybiB0aGlzO30scmVtb3RlOmZ1bmN0aW9uKCl7cmV0 +dXJuIFN3aWZmLnJlbW90ZS5hcHBseShTd2lmZixbdGhpcy50b0VsZW1lbnQoKV0u +ZXh0ZW5kKGFyZ3VtZW50cykpOwp9fSk7U3dpZmYuQ2FsbEJhY2tzPXt9O1N3aWZm +LnJlbW90ZT1mdW5jdGlvbihvYmosZm4pe3ZhciBycz1vYmouQ2FsbEZ1bmN0aW9u +KCc8aW52b2tlIG5hbWU9IicrZm4rJyIgcmV0dXJudHlwZT0iamF2YXNjcmlwdCI+ +JytfX2ZsYXNoX19hcmd1bWVudHNUb1hNTChhcmd1bWVudHMsMikrIjwvaW52b2tl +PiIpOwpyZXR1cm4gZXZhbChycyk7fTt2YXIgRng9bmV3IENsYXNzKHtJbXBsZW1l +bnRzOltDaGFpbixFdmVudHMsT3B0aW9uc10sb3B0aW9uczp7ZnBzOjUwLHVuaXQ6 +ZmFsc2UsZHVyYXRpb246NTAwLGxpbms6Imlnbm9yZSIsdHJhbnNpdGlvbjpmdW5j +dGlvbihBKXtyZXR1cm4gLShNYXRoLmNvcyhNYXRoLlBJKkEpLTEpLzI7Cn19LGlu +aXRpYWxpemU6ZnVuY3Rpb24oQSl7dGhpcy5zdWJqZWN0PXRoaXMuc3ViamVjdHx8 +dGhpczt0aGlzLnNldE9wdGlvbnMoQSk7dGhpcy5vcHRpb25zLmR1cmF0aW9uPUZ4 +LkR1cmF0aW9uc1t0aGlzLm9wdGlvbnMuZHVyYXRpb25dfHx0aGlzLm9wdGlvbnMu +ZHVyYXRpb24udG9JbnQoKTsKdmFyIEI9dGhpcy5vcHRpb25zLndhaXQ7aWYoQj09 +PWZhbHNlKXt0aGlzLm9wdGlvbnMubGluaz0iY2FuY2VsIjt9fSxzdGVwOmZ1bmN0 +aW9uKCl7dmFyIEE9JHRpbWUoKTtpZihBPHRoaXMudGltZSt0aGlzLm9wdGlvbnMu +ZHVyYXRpb24pe3ZhciBCPXRoaXMub3B0aW9ucy50cmFuc2l0aW9uKChBLXRoaXMu +dGltZSkvdGhpcy5vcHRpb25zLmR1cmF0aW9uKTsKdGhpcy5zZXQodGhpcy5jb21w +dXRlKHRoaXMuZnJvbSx0aGlzLnRvLEIpKTt9ZWxzZXt0aGlzLnNldCh0aGlzLmNv +bXB1dGUodGhpcy5mcm9tLHRoaXMudG8sMSkpO3RoaXMuY29tcGxldGUoKTt9fSxz +ZXQ6ZnVuY3Rpb24oQSl7cmV0dXJuIEE7fSxjb21wdXRlOmZ1bmN0aW9uKEMsQixB +KXtyZXR1cm4gRnguY29tcHV0ZShDLEIsQSk7Cn0sY2hlY2s6ZnVuY3Rpb24oQSl7 +aWYoIXRoaXMudGltZXIpe3JldHVybiB0cnVlO31zd2l0Y2godGhpcy5vcHRpb25z +Lmxpbmspe2Nhc2UiY2FuY2VsIjp0aGlzLmNhbmNlbCgpO3JldHVybiB0cnVlO2Nh +c2UiY2hhaW4iOnRoaXMuY2hhaW4oQS5iaW5kKHRoaXMsQXJyYXkuc2xpY2UoYXJn +dW1lbnRzLDEpKSk7CnJldHVybiBmYWxzZTt9cmV0dXJuIGZhbHNlO30sc3RhcnQ6 +ZnVuY3Rpb24oQixBKXtpZighdGhpcy5jaGVjayhhcmd1bWVudHMuY2FsbGVlLEIs +QSkpe3JldHVybiB0aGlzO310aGlzLmZyb209Qjt0aGlzLnRvPUE7dGhpcy50aW1l +PTA7dGhpcy5zdGFydFRpbWVyKCk7CnRoaXMub25TdGFydCgpO3JldHVybiB0aGlz +O30sY29tcGxldGU6ZnVuY3Rpb24oKXtpZih0aGlzLnN0b3BUaW1lcigpKXt0aGlz +Lm9uQ29tcGxldGUoKTt9cmV0dXJuIHRoaXM7fSxjYW5jZWw6ZnVuY3Rpb24oKXtp +Zih0aGlzLnN0b3BUaW1lcigpKXt0aGlzLm9uQ2FuY2VsKCk7Cn1yZXR1cm4gdGhp +czt9LG9uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLmZpcmVFdmVudCgic3RhcnQiLHRo +aXMuc3ViamVjdCk7fSxvbkNvbXBsZXRlOmZ1bmN0aW9uKCl7dGhpcy5maXJlRXZl +bnQoImNvbXBsZXRlIix0aGlzLnN1YmplY3QpO2lmKCF0aGlzLmNhbGxDaGFpbigp +KXt0aGlzLmZpcmVFdmVudCgiY2hhaW5Db21wbGV0ZSIsdGhpcy5zdWJqZWN0KTsK +fX0sb25DYW5jZWw6ZnVuY3Rpb24oKXt0aGlzLmZpcmVFdmVudCgiY2FuY2VsIix0 +aGlzLnN1YmplY3QpLmNsZWFyQ2hhaW4oKTt9LHBhdXNlOmZ1bmN0aW9uKCl7dGhp +cy5zdG9wVGltZXIoKTtyZXR1cm4gdGhpczt9LHJlc3VtZTpmdW5jdGlvbigpe3Ro +aXMuc3RhcnRUaW1lcigpOwpyZXR1cm4gdGhpczt9LHN0b3BUaW1lcjpmdW5jdGlv +bigpe2lmKCF0aGlzLnRpbWVyKXtyZXR1cm4gZmFsc2U7fXRoaXMudGltZT0kdGlt +ZSgpLXRoaXMudGltZTt0aGlzLnRpbWVyPSRjbGVhcih0aGlzLnRpbWVyKTtyZXR1 +cm4gdHJ1ZTt9LHN0YXJ0VGltZXI6ZnVuY3Rpb24oKXtpZih0aGlzLnRpbWVyKXty +ZXR1cm4gZmFsc2U7Cn10aGlzLnRpbWU9JHRpbWUoKS10aGlzLnRpbWU7dGhpcy50 +aW1lcj10aGlzLnN0ZXAucGVyaW9kaWNhbChNYXRoLnJvdW5kKDEwMDAvdGhpcy5v +cHRpb25zLmZwcyksdGhpcyk7cmV0dXJuIHRydWU7fX0pO0Z4LmNvbXB1dGU9ZnVu +Y3Rpb24oQyxCLEEpe3JldHVybihCLUMpKkErQzsKfTtGeC5EdXJhdGlvbnM9eyJz +aG9ydCI6MjUwLG5vcm1hbDo1MDAsImxvbmciOjEwMDB9O0Z4LkNTUz1uZXcgQ2xh +c3Moe0V4dGVuZHM6RngscHJlcGFyZTpmdW5jdGlvbihELEUsQil7Qj0kc3BsYXQo +Qik7dmFyIEM9QlsxXTtpZighJGNoayhDKSl7QlsxXT1CWzBdOwpCWzBdPUQuZ2V0 +U3R5bGUoRSk7fXZhciBBPUIubWFwKHRoaXMucGFyc2UpO3JldHVybntmcm9tOkFb +MF0sdG86QVsxXX07fSxwYXJzZTpmdW5jdGlvbihBKXtBPSRsYW1iZGEoQSkoKTtB +PSh0eXBlb2YgQT09InN0cmluZyIpP0Euc3BsaXQoIiAiKTokc3BsYXQoQSk7CnJl +dHVybiBBLm1hcChmdW5jdGlvbihDKXtDPVN0cmluZyhDKTt2YXIgQj1mYWxzZTtG +eC5DU1MuUGFyc2Vycy5lYWNoKGZ1bmN0aW9uKEYsRSl7aWYoQil7cmV0dXJuIDt9 +dmFyIEQ9Ri5wYXJzZShDKTtpZigkY2hrKEQpKXtCPXt2YWx1ZTpELHBhcnNlcjpG +fTt9fSk7CkI9Qnx8e3ZhbHVlOkMscGFyc2VyOkZ4LkNTUy5QYXJzZXJzLlN0cmlu +Z307cmV0dXJuIEI7fSk7fSxjb21wdXRlOmZ1bmN0aW9uKEQsQyxCKXt2YXIgQT1b +XTsoTWF0aC5taW4oRC5sZW5ndGgsQy5sZW5ndGgpKS50aW1lcyhmdW5jdGlvbihF +KXtBLnB1c2goe3ZhbHVlOkRbRV0ucGFyc2VyLmNvbXB1dGUoRFtFXS52YWx1ZSxD +W0VdLnZhbHVlLEIpLHBhcnNlcjpEW0VdLnBhcnNlcn0pOwp9KTtBLiRmYW1pbHk9 +e25hbWU6ImZ4OmNzczp2YWx1ZSJ9O3JldHVybiBBO30sc2VydmU6ZnVuY3Rpb24o +QyxCKXtpZigkdHlwZShDKSE9ImZ4OmNzczp2YWx1ZSIpe0M9dGhpcy5wYXJzZShD +KTt9dmFyIEE9W107Qy5lYWNoKGZ1bmN0aW9uKEQpe0E9QS5jb25jYXQoRC5wYXJz +ZXIuc2VydmUoRC52YWx1ZSxCKSk7Cn0pO3JldHVybiBBO30scmVuZGVyOmZ1bmN0 +aW9uKEEsRCxDLEIpe0Euc2V0U3R5bGUoRCx0aGlzLnNlcnZlKEMsQikpO30sc2Vh +cmNoOmZ1bmN0aW9uKEEpe2lmKEZ4LkNTUy5DYWNoZVtBXSl7cmV0dXJuIEZ4LkNT +Uy5DYWNoZVtBXTt9dmFyIEI9e307QXJyYXkuZWFjaChkb2N1bWVudC5zdHlsZVNo +ZWV0cyxmdW5jdGlvbihFLEQpe3ZhciBDPUUuaHJlZjsKaWYoQyYmQy5jb250YWlu +cygiOi8vIikmJiFDLmNvbnRhaW5zKGRvY3VtZW50LmRvbWFpbikpe3JldHVybiA7 +fXZhciBGPUUucnVsZXN8fEUuY3NzUnVsZXM7QXJyYXkuZWFjaChGLGZ1bmN0aW9u +KEksRyl7aWYoIUkuc3R5bGUpe3JldHVybiA7fXZhciBIPShJLnNlbGVjdG9yVGV4 +dCk/SS5zZWxlY3RvclRleHQucmVwbGFjZSgvXlx3Ky8sZnVuY3Rpb24oSil7cmV0 +dXJuIEoudG9Mb3dlckNhc2UoKTsKfSk6bnVsbDtpZighSHx8IUgudGVzdCgiXiIr +QSsiJCIpKXtyZXR1cm4gO31FbGVtZW50LlN0eWxlcy5lYWNoKGZ1bmN0aW9uKEss +Sil7aWYoIUkuc3R5bGVbSl18fEVsZW1lbnQuU2hvcnRTdHlsZXNbSl0pe3JldHVy +biA7fUs9U3RyaW5nKEkuc3R5bGVbSl0pO0JbSl09KEsudGVzdCgvXnJnYi8pKT9L +LnJnYlRvSGV4KCk6SzsKfSk7fSk7fSk7cmV0dXJuIEZ4LkNTUy5DYWNoZVtBXT1C +O319KTtGeC5DU1MuQ2FjaGU9e307RnguQ1NTLlBhcnNlcnM9bmV3IEhhc2goe0Nv +bG9yOntwYXJzZTpmdW5jdGlvbihBKXtpZihBLm1hdGNoKC9eI1swLTlhLWZdezMs +Nn0kL2kpKXtyZXR1cm4gQS5oZXhUb1JnYih0cnVlKTsKfXJldHVybigoQT1BLm1h +dGNoKC8oXGQrKSxccyooXGQrKSxccyooXGQrKS8pKSk/W0FbMV0sQVsyXSxBWzNd +XTpmYWxzZTt9LGNvbXB1dGU6ZnVuY3Rpb24oQyxCLEEpe3JldHVybiBDLm1hcChm +dW5jdGlvbihFLEQpe3JldHVybiBNYXRoLnJvdW5kKEZ4LmNvbXB1dGUoQ1tEXSxC +W0RdLEEpKTsKfSk7fSxzZXJ2ZTpmdW5jdGlvbihBKXtyZXR1cm4gQS5tYXAoTnVt +YmVyKTt9fSxOdW1iZXI6e3BhcnNlOnBhcnNlRmxvYXQsY29tcHV0ZTpGeC5jb21w +dXRlLHNlcnZlOmZ1bmN0aW9uKEIsQSl7cmV0dXJuKEEpP0IrQTpCO319LFN0cmlu +Zzp7cGFyc2U6JGxhbWJkYShmYWxzZSksY29tcHV0ZTokYXJndW1lbnRzKDEpLHNl +cnZlOiRhcmd1bWVudHMoMCl9fSk7CkZ4LlR3ZWVuPW5ldyBDbGFzcyh7RXh0ZW5k +czpGeC5DU1MsaW5pdGlhbGl6ZTpmdW5jdGlvbihCLEEpe3RoaXMuZWxlbWVudD10 +aGlzLnN1YmplY3Q9JChCKTt0aGlzLnBhcmVudChBKTt9LHNldDpmdW5jdGlvbihC +LEEpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PTEpe0E9QjsKQj10aGlzLnByb3BlcnR5 +fHx0aGlzLm9wdGlvbnMucHJvcGVydHk7fXRoaXMucmVuZGVyKHRoaXMuZWxlbWVu +dCxCLEEsdGhpcy5vcHRpb25zLnVuaXQpO3JldHVybiB0aGlzO30sc3RhcnQ6ZnVu +Y3Rpb24oQyxFLEQpe2lmKCF0aGlzLmNoZWNrKGFyZ3VtZW50cy5jYWxsZWUsQyxF +LEQpKXtyZXR1cm4gdGhpczsKfXZhciBCPUFycmF5LmZsYXR0ZW4oYXJndW1lbnRz +KTt0aGlzLnByb3BlcnR5PXRoaXMub3B0aW9ucy5wcm9wZXJ0eXx8Qi5zaGlmdCgp +O3ZhciBBPXRoaXMucHJlcGFyZSh0aGlzLmVsZW1lbnQsdGhpcy5wcm9wZXJ0eSxC +KTtyZXR1cm4gdGhpcy5wYXJlbnQoQS5mcm9tLEEudG8pOwp9fSk7RWxlbWVudC5Q +cm9wZXJ0aWVzLnR3ZWVuPXtzZXQ6ZnVuY3Rpb24oQSl7dmFyIEI9dGhpcy5yZXRy +aWV2ZSgidHdlZW4iKTtpZihCKXtCLmNhbmNlbCgpO31yZXR1cm4gdGhpcy5lbGlt +aW5hdGUoInR3ZWVuIikuc3RvcmUoInR3ZWVuOm9wdGlvbnMiLCRleHRlbmQoe2xp +bms6ImNhbmNlbCJ9LEEpKTsKfSxnZXQ6ZnVuY3Rpb24oQSl7aWYoQXx8IXRoaXMu +cmV0cmlldmUoInR3ZWVuIikpe2lmKEF8fCF0aGlzLnJldHJpZXZlKCJ0d2Vlbjpv +cHRpb25zIikpe3RoaXMuc2V0KCJ0d2VlbiIsQSk7fXRoaXMuc3RvcmUoInR3ZWVu +IixuZXcgRnguVHdlZW4odGhpcyx0aGlzLnJldHJpZXZlKCJ0d2VlbjpvcHRpb25z +IikpKTsKfXJldHVybiB0aGlzLnJldHJpZXZlKCJ0d2VlbiIpO319O0VsZW1lbnQu +aW1wbGVtZW50KHt0d2VlbjpmdW5jdGlvbihBLEMsQil7dGhpcy5nZXQoInR3ZWVu +Iikuc3RhcnQoYXJndW1lbnRzKTtyZXR1cm4gdGhpczt9LGZhZGU6ZnVuY3Rpb24o +Qyl7dmFyIEU9dGhpcy5nZXQoInR3ZWVuIiksRD0ib3BhY2l0eSIsQTsKQz0kcGlj +ayhDLCJ0b2dnbGUiKTtzd2l0Y2goQyl7Y2FzZSJpbiI6RS5zdGFydChELDEpO2Jy +ZWFrO2Nhc2Uib3V0IjpFLnN0YXJ0KEQsMCk7YnJlYWs7Y2FzZSJzaG93IjpFLnNl +dChELDEpO2JyZWFrO2Nhc2UiaGlkZSI6RS5zZXQoRCwwKTticmVhaztjYXNlInRv +Z2dsZSI6dmFyIEI9dGhpcy5yZXRyaWV2ZSgiZmFkZTpmbGFnIix0aGlzLmdldCgi +b3BhY2l0eSIpPT0xKTsKRS5zdGFydChELChCKT8wOjEpO3RoaXMuc3RvcmUoImZh +ZGU6ZmxhZyIsIUIpO0E9dHJ1ZTticmVhaztkZWZhdWx0OkUuc3RhcnQoRCxhcmd1 +bWVudHMpO31pZighQSl7dGhpcy5lbGltaW5hdGUoImZhZGU6ZmxhZyIpO31yZXR1 +cm4gdGhpczt9LGhpZ2hsaWdodDpmdW5jdGlvbihDLEEpe2lmKCFBKXtBPXRoaXMu +cmV0cmlldmUoImhpZ2hsaWdodDpvcmlnaW5hbCIsdGhpcy5nZXRTdHlsZSgiYmFj +a2dyb3VuZC1jb2xvciIpKTsKQT0oQT09InRyYW5zcGFyZW50Iik/IiNmZmYiOkE7 +fXZhciBCPXRoaXMuZ2V0KCJ0d2VlbiIpO0Iuc3RhcnQoImJhY2tncm91bmQtY29s +b3IiLEN8fCIjZmZmZjg4IixBKS5jaGFpbihmdW5jdGlvbigpe3RoaXMuc2V0U3R5 +bGUoImJhY2tncm91bmQtY29sb3IiLHRoaXMucmV0cmlldmUoImhpZ2hsaWdodDpv +cmlnaW5hbCIpKTsKQi5jYWxsQ2hhaW4oKTt9LmJpbmQodGhpcykpO3JldHVybiB0 +aGlzO319KTtGeC5Nb3JwaD1uZXcgQ2xhc3Moe0V4dGVuZHM6RnguQ1NTLGluaXRp +YWxpemU6ZnVuY3Rpb24oQixBKXt0aGlzLmVsZW1lbnQ9dGhpcy5zdWJqZWN0PSQo +Qik7dGhpcy5wYXJlbnQoQSk7fSxzZXQ6ZnVuY3Rpb24oQSl7aWYodHlwZW9mIEE9 +PSJzdHJpbmciKXtBPXRoaXMuc2VhcmNoKEEpOwp9Zm9yKHZhciBCIGluIEEpe3Ro +aXMucmVuZGVyKHRoaXMuZWxlbWVudCxCLEFbQl0sdGhpcy5vcHRpb25zLnVuaXQp +O31yZXR1cm4gdGhpczt9LGNvbXB1dGU6ZnVuY3Rpb24oRSxELEMpe3ZhciBBPXt9 +O2Zvcih2YXIgQiBpbiBFKXtBW0JdPXRoaXMucGFyZW50KEVbQl0sRFtCXSxDKTsK +fXJldHVybiBBO30sc3RhcnQ6ZnVuY3Rpb24oQil7aWYoIXRoaXMuY2hlY2soYXJn +dW1lbnRzLmNhbGxlZSxCKSl7cmV0dXJuIHRoaXM7fWlmKHR5cGVvZiBCPT0ic3Ry +aW5nIil7Qj10aGlzLnNlYXJjaChCKTt9dmFyIEU9e30sRD17fTtmb3IodmFyIEMg +aW4gQil7dmFyIEE9dGhpcy5wcmVwYXJlKHRoaXMuZWxlbWVudCxDLEJbQ10pOwpF +W0NdPUEuZnJvbTtEW0NdPUEudG87fXJldHVybiB0aGlzLnBhcmVudChFLEQpO319 +KTtFbGVtZW50LlByb3BlcnRpZXMubW9ycGg9e3NldDpmdW5jdGlvbihBKXt2YXIg +Qj10aGlzLnJldHJpZXZlKCJtb3JwaCIpO2lmKEIpe0IuY2FuY2VsKCk7fXJldHVy +biB0aGlzLmVsaW1pbmF0ZSgibW9ycGgiKS5zdG9yZSgibW9ycGg6b3B0aW9ucyIs +JGV4dGVuZCh7bGluazoiY2FuY2VsIn0sQSkpOwp9LGdldDpmdW5jdGlvbihBKXtp +ZihBfHwhdGhpcy5yZXRyaWV2ZSgibW9ycGgiKSl7aWYoQXx8IXRoaXMucmV0cmll +dmUoIm1vcnBoOm9wdGlvbnMiKSl7dGhpcy5zZXQoIm1vcnBoIixBKTt9dGhpcy5z +dG9yZSgibW9ycGgiLG5ldyBGeC5Nb3JwaCh0aGlzLHRoaXMucmV0cmlldmUoIm1v +cnBoOm9wdGlvbnMiKSkpOwp9cmV0dXJuIHRoaXMucmV0cmlldmUoIm1vcnBoIik7 +fX07RWxlbWVudC5pbXBsZW1lbnQoe21vcnBoOmZ1bmN0aW9uKEEpe3RoaXMuZ2V0 +KCJtb3JwaCIpLnN0YXJ0KEEpO3JldHVybiB0aGlzO319KTsoZnVuY3Rpb24oKXt2 +YXIgQT1GeC5wcm90b3R5cGUuaW5pdGlhbGl6ZTsKRngucHJvdG90eXBlLmluaXRp +YWxpemU9ZnVuY3Rpb24oQil7QS5jYWxsKHRoaXMsQik7dmFyIEM9dGhpcy5vcHRp +b25zLnRyYW5zaXRpb247aWYodHlwZW9mIEM9PSJzdHJpbmciJiYoQz1DLnNwbGl0 +KCI6IikpKXt2YXIgRD1GeC5UcmFuc2l0aW9ucztEPURbQ1swXV18fERbQ1swXS5j +YXBpdGFsaXplKCldOwppZihDWzFdKXtEPURbImVhc2UiK0NbMV0uY2FwaXRhbGl6 +ZSgpKyhDWzJdP0NbMl0uY2FwaXRhbGl6ZSgpOiIiKV07fXRoaXMub3B0aW9ucy50 +cmFuc2l0aW9uPUQ7fX07fSkoKTtGeC5UcmFuc2l0aW9uPWZ1bmN0aW9uKEIsQSl7 +QT0kc3BsYXQoQSk7cmV0dXJuICRleHRlbmQoQix7ZWFzZUluOmZ1bmN0aW9uKEMp +e3JldHVybiBCKEMsQSk7Cn0sZWFzZU91dDpmdW5jdGlvbihDKXtyZXR1cm4gMS1C +KDEtQyxBKTt9LGVhc2VJbk91dDpmdW5jdGlvbihDKXtyZXR1cm4oQzw9MC41KT9C +KDIqQyxBKS8yOigyLUIoMiooMS1DKSxBKSkvMjt9fSk7fTtGeC5UcmFuc2l0aW9u +cz1uZXcgSGFzaCh7bGluZWFyOiRhcmd1bWVudHMoMCl9KTsKRnguVHJhbnNpdGlv +bnMuZXh0ZW5kPWZ1bmN0aW9uKEEpe2Zvcih2YXIgQiBpbiBBKXtGeC5UcmFuc2l0 +aW9uc1tCXT1uZXcgRnguVHJhbnNpdGlvbihBW0JdKTt9fTtGeC5UcmFuc2l0aW9u +cy5leHRlbmQoe1BvdzpmdW5jdGlvbihCLEEpe3JldHVybiBNYXRoLnBvdyhCLEFb +MF18fDYpOwp9LEV4cG86ZnVuY3Rpb24oQSl7cmV0dXJuIE1hdGgucG93KDIsOCoo +QS0xKSk7fSxDaXJjOmZ1bmN0aW9uKEEpe3JldHVybiAxLU1hdGguc2luKE1hdGgu +YWNvcyhBKSk7fSxTaW5lOmZ1bmN0aW9uKEEpe3JldHVybiAxLU1hdGguc2luKCgx +LUEpKk1hdGguUEkvMik7Cn0sQmFjazpmdW5jdGlvbihCLEEpe0E9QVswXXx8MS42 +MTg7cmV0dXJuIE1hdGgucG93KEIsMikqKChBKzEpKkItQSk7fSxCb3VuY2U6ZnVu +Y3Rpb24oRCl7dmFyIEM7Zm9yKHZhciBCPTAsQT0xOzE7Qis9QSxBLz0yKXtpZihE +Pj0oNy00KkIpLzExKXtDPS1NYXRoLnBvdygoMTEtNipCLTExKkQpLzQsMikrQSpB +OwpicmVhazt9fXJldHVybiBDO30sRWxhc3RpYzpmdW5jdGlvbihCLEEpe3JldHVy +biBNYXRoLnBvdygyLDEwKi0tQikqTWF0aC5jb3MoMjAqQipNYXRoLlBJKihBWzBd +fHwxKS8zKTt9fSk7WyJRdWFkIiwiQ3ViaWMiLCJRdWFydCIsIlF1aW50Il0uZWFj +aChmdW5jdGlvbihCLEEpe0Z4LlRyYW5zaXRpb25zW0JdPW5ldyBGeC5UcmFuc2l0 +aW9uKGZ1bmN0aW9uKEMpe3JldHVybiBNYXRoLnBvdyhDLFtBKzJdKTsKfSk7fSk7 +dmFyIFJlcXVlc3Q9bmV3IENsYXNzKHtJbXBsZW1lbnRzOltDaGFpbixFdmVudHMs +T3B0aW9uc10sb3B0aW9uczp7dXJsOiIiLGRhdGE6IiIsaGVhZGVyczp7IlgtUmVx +dWVzdGVkLVdpdGgiOiJYTUxIdHRwUmVxdWVzdCIsQWNjZXB0OiJ0ZXh0L2phdmFz +Y3JpcHQsIHRleHQvaHRtbCwgYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCwgKi8q +In0sYXN5bmM6dHJ1ZSxmb3JtYXQ6ZmFsc2UsbWV0aG9kOiJwb3N0IixsaW5rOiJp +Z25vcmUiLGlzU3VjY2VzczpudWxsLGVtdWxhdGlvbjp0cnVlLHVybEVuY29kZWQ6 +dHJ1ZSxlbmNvZGluZzoidXRmLTgiLGV2YWxTY3JpcHRzOmZhbHNlLGV2YWxSZXNw +b25zZTpmYWxzZX0saW5pdGlhbGl6ZTpmdW5jdGlvbihBKXt0aGlzLnhocj1uZXcg +QnJvd3Nlci5SZXF1ZXN0KCk7CnRoaXMuc2V0T3B0aW9ucyhBKTt0aGlzLm9wdGlv +bnMuaXNTdWNjZXNzPXRoaXMub3B0aW9ucy5pc1N1Y2Nlc3N8fHRoaXMuaXNTdWNj +ZXNzO3RoaXMuaGVhZGVycz1uZXcgSGFzaCh0aGlzLm9wdGlvbnMuaGVhZGVycyk7 +fSxvblN0YXRlQ2hhbmdlOmZ1bmN0aW9uKCl7aWYodGhpcy54aHIucmVhZHlTdGF0 +ZSE9NHx8IXRoaXMucnVubmluZyl7cmV0dXJuIDsKfXRoaXMucnVubmluZz1mYWxz +ZTt0aGlzLnN0YXR1cz0wOyR0cnkoZnVuY3Rpb24oKXt0aGlzLnN0YXR1cz10aGlz +Lnhoci5zdGF0dXM7fS5iaW5kKHRoaXMpKTtpZih0aGlzLm9wdGlvbnMuaXNTdWNj +ZXNzLmNhbGwodGhpcyx0aGlzLnN0YXR1cykpe3RoaXMucmVzcG9uc2U9e3RleHQ6 +dGhpcy54aHIucmVzcG9uc2VUZXh0LHhtbDp0aGlzLnhoci5yZXNwb25zZVhNTH07 +CnRoaXMuc3VjY2Vzcyh0aGlzLnJlc3BvbnNlLnRleHQsdGhpcy5yZXNwb25zZS54 +bWwpO31lbHNle3RoaXMucmVzcG9uc2U9e3RleHQ6bnVsbCx4bWw6bnVsbH07dGhp +cy5mYWlsdXJlKCk7fXRoaXMueGhyLm9ucmVhZHlzdGF0ZWNoYW5nZT0kZW1wdHk7 +fSxpc1N1Y2Nlc3M6ZnVuY3Rpb24oKXtyZXR1cm4oKHRoaXMuc3RhdHVzPj0yMDAp +JiYodGhpcy5zdGF0dXM8MzAwKSk7Cn0scHJvY2Vzc1NjcmlwdHM6ZnVuY3Rpb24o +QSl7aWYodGhpcy5vcHRpb25zLmV2YWxSZXNwb25zZXx8KC8oZWNtYXxqYXZhKXNj +cmlwdC8pLnRlc3QodGhpcy5nZXRIZWFkZXIoIkNvbnRlbnQtdHlwZSIpKSl7cmV0 +dXJuICRleGVjKEEpO31yZXR1cm4gQS5zdHJpcFNjcmlwdHModGhpcy5vcHRpb25z +LmV2YWxTY3JpcHRzKTsKfSxzdWNjZXNzOmZ1bmN0aW9uKEIsQSl7dGhpcy5vblN1 +Y2Nlc3ModGhpcy5wcm9jZXNzU2NyaXB0cyhCKSxBKTt9LG9uU3VjY2VzczpmdW5j +dGlvbigpe3RoaXMuZmlyZUV2ZW50KCJjb21wbGV0ZSIsYXJndW1lbnRzKS5maXJl +RXZlbnQoInN1Y2Nlc3MiLGFyZ3VtZW50cykuY2FsbENoYWluKCk7Cn0sZmFpbHVy +ZTpmdW5jdGlvbigpe3RoaXMub25GYWlsdXJlKCk7fSxvbkZhaWx1cmU6ZnVuY3Rp +b24oKXt0aGlzLmZpcmVFdmVudCgiY29tcGxldGUiKS5maXJlRXZlbnQoImZhaWx1 +cmUiLHRoaXMueGhyKTt9LHNldEhlYWRlcjpmdW5jdGlvbihBLEIpe3RoaXMuaGVh +ZGVycy5zZXQoQSxCKTsKcmV0dXJuIHRoaXM7fSxnZXRIZWFkZXI6ZnVuY3Rpb24o +QSl7cmV0dXJuICR0cnkoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54aHIuZ2V0UmVz +cG9uc2VIZWFkZXIoQSk7fS5iaW5kKHRoaXMpKTt9LGNoZWNrOmZ1bmN0aW9uKEEp +e2lmKCF0aGlzLnJ1bm5pbmcpe3JldHVybiB0cnVlOwp9c3dpdGNoKHRoaXMub3B0 +aW9ucy5saW5rKXtjYXNlImNhbmNlbCI6dGhpcy5jYW5jZWwoKTtyZXR1cm4gdHJ1 +ZTtjYXNlImNoYWluIjp0aGlzLmNoYWluKEEuYmluZCh0aGlzLEFycmF5LnNsaWNl +KGFyZ3VtZW50cywxKSkpO3JldHVybiBmYWxzZTt9cmV0dXJuIGZhbHNlOwp9LHNl +bmQ6ZnVuY3Rpb24oSSl7aWYoIXRoaXMuY2hlY2soYXJndW1lbnRzLmNhbGxlZSxJ +KSl7cmV0dXJuIHRoaXM7fXRoaXMucnVubmluZz10cnVlO3ZhciBHPSR0eXBlKEkp +O2lmKEc9PSJzdHJpbmcifHxHPT0iZWxlbWVudCIpe0k9e2RhdGE6SX07fXZhciBE +PXRoaXMub3B0aW9uczsKST0kZXh0ZW5kKHtkYXRhOkQuZGF0YSx1cmw6RC51cmws +bWV0aG9kOkQubWV0aG9kfSxJKTt2YXIgRT1JLmRhdGEsQj1JLnVybCxBPUkubWV0 +aG9kO3N3aXRjaCgkdHlwZShFKSl7Y2FzZSJlbGVtZW50IjpFPSQoRSkudG9RdWVy +eVN0cmluZygpO2JyZWFrO2Nhc2Uib2JqZWN0IjpjYXNlImhhc2giOkU9SGFzaC50 +b1F1ZXJ5U3RyaW5nKEUpOwp9aWYodGhpcy5vcHRpb25zLmZvcm1hdCl7dmFyIEg9 +ImZvcm1hdD0iK3RoaXMub3B0aW9ucy5mb3JtYXQ7RT0oRSk/SCsiJiIrRTpIO31p +Zih0aGlzLm9wdGlvbnMuZW11bGF0aW9uJiZbInB1dCIsImRlbGV0ZSJdLmNvbnRh +aW5zKEEpKXt2YXIgRj0iX21ldGhvZD0iK0E7CkU9KEUpP0YrIiYiK0U6RjtBPSJw +b3N0Ijt9aWYodGhpcy5vcHRpb25zLnVybEVuY29kZWQmJkE9PSJwb3N0Iil7dmFy +IEM9KHRoaXMub3B0aW9ucy5lbmNvZGluZyk/IjsgY2hhcnNldD0iK3RoaXMub3B0 +aW9ucy5lbmNvZGluZzoiIjt0aGlzLmhlYWRlcnMuc2V0KCJDb250ZW50LXR5cGUi +LCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiK0MpOwp9aWYoRSYm +QT09ImdldCIpe0I9QisoQi5jb250YWlucygiPyIpPyImIjoiPyIpK0U7RT1udWxs +O310aGlzLnhoci5vcGVuKEEudG9VcHBlckNhc2UoKSxCLHRoaXMub3B0aW9ucy5h +c3luYyk7dGhpcy54aHIub25yZWFkeXN0YXRlY2hhbmdlPXRoaXMub25TdGF0ZUNo +YW5nZS5iaW5kKHRoaXMpOwp0aGlzLmhlYWRlcnMuZWFjaChmdW5jdGlvbihLLEop +e2lmKCEkdHJ5KGZ1bmN0aW9uKCl7dGhpcy54aHIuc2V0UmVxdWVzdEhlYWRlcihK +LEspO3JldHVybiB0cnVlO30uYmluZCh0aGlzKSkpe3RoaXMuZmlyZUV2ZW50KCJl +eGNlcHRpb24iLFtKLEtdKTt9fSx0aGlzKTsKdGhpcy5maXJlRXZlbnQoInJlcXVl +c3QiKTt0aGlzLnhoci5zZW5kKEUpO2lmKCF0aGlzLm9wdGlvbnMuYXN5bmMpe3Ro +aXMub25TdGF0ZUNoYW5nZSgpO31yZXR1cm4gdGhpczt9LGNhbmNlbDpmdW5jdGlv +bigpe2lmKCF0aGlzLnJ1bm5pbmcpe3JldHVybiB0aGlzOwp9dGhpcy5ydW5uaW5n +PWZhbHNlO3RoaXMueGhyLmFib3J0KCk7dGhpcy54aHIub25yZWFkeXN0YXRlY2hh +bmdlPSRlbXB0eTt0aGlzLnhocj1uZXcgQnJvd3Nlci5SZXF1ZXN0KCk7dGhpcy5m +aXJlRXZlbnQoImNhbmNlbCIpO3JldHVybiB0aGlzO319KTsoZnVuY3Rpb24oKXt2 +YXIgQT17fTsKWyJnZXQiLCJwb3N0IiwicHV0IiwiZGVsZXRlIiwiR0VUIiwiUE9T +VCIsIlBVVCIsIkRFTEVURSJdLmVhY2goZnVuY3Rpb24oQil7QVtCXT1mdW5jdGlv +bigpe3ZhciBDPUFycmF5LmxpbmsoYXJndW1lbnRzLHt1cmw6U3RyaW5nLnR5cGUs +ZGF0YTokZGVmaW5lZH0pOwpyZXR1cm4gdGhpcy5zZW5kKCRleHRlbmQoQyx7bWV0 +aG9kOkIudG9Mb3dlckNhc2UoKX0pKTt9O30pO1JlcXVlc3QuaW1wbGVtZW50KEEp +O30pKCk7RWxlbWVudC5Qcm9wZXJ0aWVzLnNlbmQ9e3NldDpmdW5jdGlvbihBKXt2 +YXIgQj10aGlzLnJldHJpZXZlKCJzZW5kIik7CmlmKEIpe0IuY2FuY2VsKCk7fXJl +dHVybiB0aGlzLmVsaW1pbmF0ZSgic2VuZCIpLnN0b3JlKCJzZW5kOm9wdGlvbnMi +LCRleHRlbmQoe2RhdGE6dGhpcyxsaW5rOiJjYW5jZWwiLG1ldGhvZDp0aGlzLmdl +dCgibWV0aG9kIil8fCJwb3N0Iix1cmw6dGhpcy5nZXQoImFjdGlvbiIpfSxBKSk7 +Cn0sZ2V0OmZ1bmN0aW9uKEEpe2lmKEF8fCF0aGlzLnJldHJpZXZlKCJzZW5kIikp +e2lmKEF8fCF0aGlzLnJldHJpZXZlKCJzZW5kOm9wdGlvbnMiKSl7dGhpcy5zZXQo +InNlbmQiLEEpO310aGlzLnN0b3JlKCJzZW5kIixuZXcgUmVxdWVzdCh0aGlzLnJl +dHJpZXZlKCJzZW5kOm9wdGlvbnMiKSkpOwp9cmV0dXJuIHRoaXMucmV0cmlldmUo +InNlbmQiKTt9fTtFbGVtZW50LmltcGxlbWVudCh7c2VuZDpmdW5jdGlvbihBKXt2 +YXIgQj10aGlzLmdldCgic2VuZCIpO0Iuc2VuZCh7ZGF0YTp0aGlzLHVybDpBfHxC +Lm9wdGlvbnMudXJsfSk7cmV0dXJuIHRoaXM7fX0pO1JlcXVlc3QuSFRNTD1uZXcg +Q2xhc3Moe0V4dGVuZHM6UmVxdWVzdCxvcHRpb25zOnt1cGRhdGU6ZmFsc2UsZXZh +bFNjcmlwdHM6dHJ1ZSxmaWx0ZXI6ZmFsc2V9LHByb2Nlc3NIVE1MOmZ1bmN0aW9u +KEMpe3ZhciBCPUMubWF0Y2goLzxib2R5W14+XSo+KFtcc1xTXSo/KTxcL2JvZHk+ +L2kpOwpDPShCKT9CWzFdOkM7dmFyIEE9bmV3IEVsZW1lbnQoImRpdiIpO3JldHVy +biAkdHJ5KGZ1bmN0aW9uKCl7dmFyIEQ9Ijxyb290PiIrQysiPC9yb290PiIsRztp +ZihCcm93c2VyLkVuZ2luZS50cmlkZW50KXtHPW5ldyBBY3RpdmVYT2JqZWN0KCJN +aWNyb3NvZnQuWE1MRE9NIik7CkcuYXN5bmM9ZmFsc2U7Ry5sb2FkWE1MKEQpO31l +bHNle0c9bmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhELCJ0ZXh0L3ht +bCIpO31EPUcuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInJvb3QiKVswXTtmb3IodmFy +IEY9MCxFPUQuY2hpbGROb2Rlcy5sZW5ndGg7CkY8RTtGKyspe3ZhciBIPUVsZW1l +bnQuY2xvbmUoRC5jaGlsZE5vZGVzW0ZdLHRydWUsdHJ1ZSk7aWYoSCl7QS5ncmFi +KEgpO319cmV0dXJuIEE7fSl8fEEuc2V0KCJodG1sIixDKTt9LHN1Y2Nlc3M6ZnVu +Y3Rpb24oRCl7dmFyIEM9dGhpcy5vcHRpb25zLEI9dGhpcy5yZXNwb25zZTsKQi5o +dG1sPUQuc3RyaXBTY3JpcHRzKGZ1bmN0aW9uKEUpe0IuamF2YXNjcmlwdD1FO30p +O3ZhciBBPXRoaXMucHJvY2Vzc0hUTUwoQi5odG1sKTtCLnRyZWU9QS5jaGlsZE5v +ZGVzO0IuZWxlbWVudHM9QS5nZXRFbGVtZW50cygiKiIpO2lmKEMuZmlsdGVyKXtC +LnRyZWU9Qi5lbGVtZW50cy5maWx0ZXIoQy5maWx0ZXIpOwp9aWYoQy51cGRhdGUp +eyQoQy51cGRhdGUpLmVtcHR5KCkuYWRvcHQoQi50cmVlKTt9aWYoQy5ldmFsU2Ny +aXB0cyl7JGV4ZWMoQi5qYXZhc2NyaXB0KTt9dGhpcy5vblN1Y2Nlc3MoQi50cmVl +LEIuZWxlbWVudHMsQi5odG1sLEIuamF2YXNjcmlwdCk7fX0pO0VsZW1lbnQuUHJv +cGVydGllcy5sb2FkPXtzZXQ6ZnVuY3Rpb24oQSl7dmFyIEI9dGhpcy5yZXRyaWV2 +ZSgibG9hZCIpOwppZihCKXtzZW5kLmNhbmNlbCgpO31yZXR1cm4gdGhpcy5lbGlt +aW5hdGUoImxvYWQiKS5zdG9yZSgibG9hZDpvcHRpb25zIiwkZXh0ZW5kKHtkYXRh +OnRoaXMsbGluazoiY2FuY2VsIix1cGRhdGU6dGhpcyxtZXRob2Q6ImdldCJ9LEEp +KTt9LGdldDpmdW5jdGlvbihBKXtpZihBfHwhdGhpcy5yZXRyaWV2ZSgibG9hZCIp +KXtpZihBfHwhdGhpcy5yZXRyaWV2ZSgibG9hZDpvcHRpb25zIikpe3RoaXMuc2V0 +KCJsb2FkIixBKTsKfXRoaXMuc3RvcmUoImxvYWQiLG5ldyBSZXF1ZXN0LkhUTUwo +dGhpcy5yZXRyaWV2ZSgibG9hZDpvcHRpb25zIikpKTt9cmV0dXJuIHRoaXMucmV0 +cmlldmUoImxvYWQiKTt9fTtFbGVtZW50LmltcGxlbWVudCh7bG9hZDpmdW5jdGlv +bigpe3RoaXMuZ2V0KCJsb2FkIikuc2VuZChBcnJheS5saW5rKGFyZ3VtZW50cyx7 +ZGF0YTpPYmplY3QudHlwZSx1cmw6U3RyaW5nLnR5cGV9KSk7CnJldHVybiB0aGlz +O319KTtSZXF1ZXN0LkpTT049bmV3IENsYXNzKHtFeHRlbmRzOlJlcXVlc3Qsb3B0 +aW9uczp7c2VjdXJlOnRydWV9LGluaXRpYWxpemU6ZnVuY3Rpb24oQSl7dGhpcy5w +YXJlbnQoQSk7dGhpcy5oZWFkZXJzLmV4dGVuZCh7QWNjZXB0OiJhcHBsaWNhdGlv +bi9qc29uIiwiWC1SZXF1ZXN0IjoiSlNPTiJ9KTsKfSxzdWNjZXNzOmZ1bmN0aW9u +KEEpe3RoaXMucmVzcG9uc2UuanNvbj1KU09OLmRlY29kZShBLHRoaXMub3B0aW9u +cy5zZWN1cmUpO3RoaXMub25TdWNjZXNzKHRoaXMucmVzcG9uc2UuanNvbixBKTt9 +fSk7Ci8vTW9vVG9vbHMgTW9yZSwgPGh0dHA6Ly9tb290b29scy5uZXQvbW9yZT4u +IENvcHlyaWdodCAoYykgMjAwNi0yMDA4IFZhbGVyaW8gUHJvaWV0dGksIDxodHRw +Oi8vbWFkNG1pbGsubmV0PiwgTUlUIFN0eWxlIExpY2Vuc2UuCnZhciBBc3NldD1u +ZXcgSGFzaCh7amF2YXNjcmlwdDpmdW5jdGlvbihGLEQpe0Q9JGV4dGVuZCh7b25s +b2FkOiRlbXB0eSxkb2N1bWVudDpkb2N1bWVudCxjaGVjazokbGFtYmRhKHRydWUp +fSxEKTt2YXIgQj1uZXcgRWxlbWVudCgic2NyaXB0Iix7c3JjOkYsdHlwZToidGV4 +dC9qYXZhc2NyaXB0In0pOwp2YXIgRT1ELm9ubG9hZC5iaW5kKEIpLEE9RC5jaGVj +ayxHPUQuZG9jdW1lbnQ7ZGVsZXRlIEQub25sb2FkO2RlbGV0ZSBELmNoZWNrO2Rl +bGV0ZSBELmRvY3VtZW50O0IuYWRkRXZlbnRzKHtsb2FkOkUscmVhZHlzdGF0ZWNo +YW5nZTpmdW5jdGlvbigpe2lmKFsibG9hZGVkIiwiY29tcGxldGUiXS5jb250YWlu +cyh0aGlzLnJlYWR5U3RhdGUpKXtFKCk7Cn19fSkuc2V0UHJvcGVydGllcyhEKTtp +ZihCcm93c2VyLkVuZ2luZS53ZWJraXQ0MTkpe3ZhciBDPShmdW5jdGlvbigpe2lm +KCEkdHJ5KEEpKXtyZXR1cm4gO30kY2xlYXIoQyk7RSgpO30pLnBlcmlvZGljYWwo +NTApO31yZXR1cm4gQi5pbmplY3QoRy5oZWFkKTt9LGNzczpmdW5jdGlvbihCLEEp +e3JldHVybiBuZXcgRWxlbWVudCgibGluayIsJG1lcmdlKHtyZWw6InN0eWxlc2hl +ZXQiLG1lZGlhOiJzY3JlZW4iLHR5cGU6InRleHQvY3NzIixocmVmOkJ9LEEpKS5p +bmplY3QoZG9jdW1lbnQuaGVhZCk7Cn0saW1hZ2U6ZnVuY3Rpb24oQyxCKXtCPSRt +ZXJnZSh7b25sb2FkOiRlbXB0eSxvbmFib3J0OiRlbXB0eSxvbmVycm9yOiRlbXB0 +eX0sQik7dmFyIEQ9bmV3IEltYWdlKCk7dmFyIEE9JChEKXx8bmV3IEVsZW1lbnQo +ImltZyIpO1sibG9hZCIsImFib3J0IiwiZXJyb3IiXS5lYWNoKGZ1bmN0aW9uKEUp +e3ZhciBGPSJvbiIrRTsKdmFyIEc9QltGXTtkZWxldGUgQltGXTtEW0ZdPWZ1bmN0 +aW9uKCl7aWYoIUQpe3JldHVybiA7fWlmKCFBLnBhcmVudE5vZGUpe0Eud2lkdGg9 +RC53aWR0aDtBLmhlaWdodD1ELmhlaWdodDt9RD1ELm9ubG9hZD1ELm9uYWJvcnQ9 +RC5vbmVycm9yPW51bGw7Ry5kZWxheSgxLEEsQSk7CkEuZmlyZUV2ZW50KEUsQSwx +KTt9O30pO0Quc3JjPUEuc3JjPUM7aWYoRCYmRC5jb21wbGV0ZSl7RC5vbmxvYWQu +ZGVsYXkoMSk7fXJldHVybiBBLnNldFByb3BlcnRpZXMoQik7fSxpbWFnZXM6ZnVu +Y3Rpb24oRCxDKXtDPSRtZXJnZSh7b25Db21wbGV0ZTokZW1wdHksb25Qcm9ncmVz +czokZW1wdHl9LEMpOwppZighRC5wdXNoKXtEPVtEXTt9dmFyIEE9W107dmFyIEI9 +MDtELmVhY2goZnVuY3Rpb24oRil7dmFyIEU9bmV3IEFzc2V0LmltYWdlKEYse29u +bG9hZDpmdW5jdGlvbigpe0Mub25Qcm9ncmVzcy5jYWxsKHRoaXMsQixELmluZGV4 +T2YoRikpO0IrKztpZihCPT1ELmxlbmd0aCl7Qy5vbkNvbXBsZXRlKCk7Cn19fSk7 +QS5wdXNoKEUpO30pO3JldHVybiBuZXcgRWxlbWVudHMoQSk7fX0pOwovL01vb1Rv +b2xzIE1vcmUsIDxodHRwOi8vbW9vdG9vbHMubmV0L21vcmU+LiBDb3B5cmlnaHQg +KGMpIDIwMDYtMjAwOCBWYWxlcmlvIFByb2lldHRpLCA8aHR0cDovL21hZDRtaWxr +Lm5ldD4sIE1JVCBTdHlsZSBMaWNlbnNlLgpGeC5TY3JvbGw9bmV3IENsYXNzKHtF +eHRlbmRzOkZ4LG9wdGlvbnM6e29mZnNldDp7eDowLHk6MH0sd2hlZWxTdG9wczp0 +cnVlfSxpbml0aWFsaXplOmZ1bmN0aW9uKEIsQSl7dGhpcy5lbGVtZW50PXRoaXMu +c3ViamVjdD0kKEIpO3RoaXMucGFyZW50KEEpO3ZhciBEPXRoaXMuY2FuY2VsLmJp +bmQodGhpcyxmYWxzZSk7CmlmKCR0eXBlKHRoaXMuZWxlbWVudCkhPSJlbGVtZW50 +Iil7dGhpcy5lbGVtZW50PSQodGhpcy5lbGVtZW50LmdldERvY3VtZW50KCkuYm9k +eSk7fXZhciBDPXRoaXMuZWxlbWVudDtpZih0aGlzLm9wdGlvbnMud2hlZWxTdG9w +cyl7dGhpcy5hZGRFdmVudCgic3RhcnQiLGZ1bmN0aW9uKCl7Qy5hZGRFdmVudCgi +bW91c2V3aGVlbCIsRCk7Cn0sdHJ1ZSk7dGhpcy5hZGRFdmVudCgiY29tcGxldGUi +LGZ1bmN0aW9uKCl7Qy5yZW1vdmVFdmVudCgibW91c2V3aGVlbCIsRCk7fSx0cnVl +KTt9fSxzZXQ6ZnVuY3Rpb24oKXt2YXIgQT1BcnJheS5mbGF0dGVuKGFyZ3VtZW50 +cyk7dGhpcy5lbGVtZW50LnNjcm9sbFRvKEFbMF0sQVsxXSk7Cn0sY29tcHV0ZTpm +dW5jdGlvbihFLEQsQyl7dmFyIEI9W107dmFyIEE9MjtBLnRpbWVzKGZ1bmN0aW9u +KEYpe0IucHVzaChGeC5jb21wdXRlKEVbRl0sRFtGXSxDKSk7fSk7cmV0dXJuIEI7 +fSxzdGFydDpmdW5jdGlvbihDLEgpe2lmKCF0aGlzLmNoZWNrKGFyZ3VtZW50cy5j +YWxsZWUsQyxIKSl7cmV0dXJuIHRoaXM7Cn12YXIgRT10aGlzLmVsZW1lbnQuZ2V0 +U2l6ZSgpLEY9dGhpcy5lbGVtZW50LmdldFNjcm9sbFNpemUoKTt2YXIgQj10aGlz +LmVsZW1lbnQuZ2V0U2Nyb2xsKCksRD17eDpDLHk6SH07Zm9yKHZhciBHIGluIEQp +e3ZhciBBPUZbR10tRVtHXTtpZigkY2hrKERbR10pKXtEW0ddPSgkdHlwZShEW0dd +KT09Im51bWJlciIpP0RbR10ubGltaXQoMCxBKTpBOwp9ZWxzZXtEW0ddPUJbR107 +fURbR10rPXRoaXMub3B0aW9ucy5vZmZzZXRbR107fXJldHVybiB0aGlzLnBhcmVu +dChbQi54LEIueV0sW0QueCxELnldKTt9LHRvVG9wOmZ1bmN0aW9uKCl7cmV0dXJu +IHRoaXMuc3RhcnQoZmFsc2UsMCk7fSx0b0xlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4g +dGhpcy5zdGFydCgwLGZhbHNlKTsKfSx0b1JpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJu +IHRoaXMuc3RhcnQoInJpZ2h0IixmYWxzZSk7fSx0b0JvdHRvbTpmdW5jdGlvbigp +e3JldHVybiB0aGlzLnN0YXJ0KGZhbHNlLCJib3R0b20iKTt9LHRvRWxlbWVudDpm +dW5jdGlvbihCKXt2YXIgQT0kKEIpLmdldFBvc2l0aW9uKHRoaXMuZWxlbWVudCk7 +CnJldHVybiB0aGlzLnN0YXJ0KEEueCxBLnkpO319KTsKLy9Nb29Ub29scyBNb3Jl +LCA8aHR0cDovL21vb3Rvb2xzLm5ldC9tb3JlPi4gQ29weXJpZ2h0IChjKSAyMDA2 +LTIwMDggVmFsZXJpbyBQcm9pZXR0aSwgPGh0dHA6Ly9tYWQ0bWlsay5uZXQ+LCBN +SVQgU3R5bGUgTGljZW5zZS4KdmFyIERyYWc9bmV3IENsYXNzKHtJbXBsZW1lbnRz +OltFdmVudHMsT3B0aW9uc10sb3B0aW9uczp7c25hcDo2LHVuaXQ6InB4Iixncmlk +OmZhbHNlLHN0eWxlOnRydWUsbGltaXQ6ZmFsc2UsaGFuZGxlOmZhbHNlLGludmVy +dDpmYWxzZSxwcmV2ZW50RGVmYXVsdDpmYWxzZSxtb2RpZmllcnM6e3g6ImxlZnQi +LHk6InRvcCJ9fSxpbml0aWFsaXplOmZ1bmN0aW9uKCl7dmFyIEI9QXJyYXkubGlu +ayhhcmd1bWVudHMse29wdGlvbnM6T2JqZWN0LnR5cGUsZWxlbWVudDokZGVmaW5l +ZH0pOwp0aGlzLmVsZW1lbnQ9JChCLmVsZW1lbnQpO3RoaXMuZG9jdW1lbnQ9dGhp +cy5lbGVtZW50LmdldERvY3VtZW50KCk7dGhpcy5zZXRPcHRpb25zKEIub3B0aW9u +c3x8e30pO3ZhciBBPSR0eXBlKHRoaXMub3B0aW9ucy5oYW5kbGUpO3RoaXMuaGFu +ZGxlcz0oQT09ImFycmF5Inx8QT09ImNvbGxlY3Rpb24iKT8kJCh0aGlzLm9wdGlv +bnMuaGFuZGxlKTokKHRoaXMub3B0aW9ucy5oYW5kbGUpfHx0aGlzLmVsZW1lbnQ7 +CnRoaXMubW91c2U9e25vdzp7fSxwb3M6e319O3RoaXMudmFsdWU9e3N0YXJ0Ont9 +LG5vdzp7fX07dGhpcy5zZWxlY3Rpb249KEJyb3dzZXIuRW5naW5lLnRyaWRlbnQp +PyJzZWxlY3RzdGFydCI6Im1vdXNlZG93biI7dGhpcy5ib3VuZD17c3RhcnQ6dGhp +cy5zdGFydC5iaW5kKHRoaXMpLGNoZWNrOnRoaXMuY2hlY2suYmluZCh0aGlzKSxk +cmFnOnRoaXMuZHJhZy5iaW5kKHRoaXMpLHN0b3A6dGhpcy5zdG9wLmJpbmQodGhp +cyksY2FuY2VsOnRoaXMuY2FuY2VsLmJpbmQodGhpcyksZXZlbnRTdG9wOiRsYW1i +ZGEoZmFsc2UpfTsKdGhpcy5hdHRhY2goKTt9LGF0dGFjaDpmdW5jdGlvbigpe3Ro +aXMuaGFuZGxlcy5hZGRFdmVudCgibW91c2Vkb3duIix0aGlzLmJvdW5kLnN0YXJ0 +KTtyZXR1cm4gdGhpczt9LGRldGFjaDpmdW5jdGlvbigpe3RoaXMuaGFuZGxlcy5y +ZW1vdmVFdmVudCgibW91c2Vkb3duIix0aGlzLmJvdW5kLnN0YXJ0KTsKcmV0dXJu +IHRoaXM7fSxzdGFydDpmdW5jdGlvbihDKXtpZih0aGlzLm9wdGlvbnMucHJldmVu +dERlZmF1bHQpe0MucHJldmVudERlZmF1bHQoKTt9dGhpcy5maXJlRXZlbnQoImJl +Zm9yZVN0YXJ0Iix0aGlzLmVsZW1lbnQpO3RoaXMubW91c2Uuc3RhcnQ9Qy5wYWdl +Owp2YXIgQT10aGlzLm9wdGlvbnMubGltaXQ7dGhpcy5saW1pdD17eDpbXSx5Oltd +fTtmb3IodmFyIEQgaW4gdGhpcy5vcHRpb25zLm1vZGlmaWVycyl7aWYoIXRoaXMu +b3B0aW9ucy5tb2RpZmllcnNbRF0pe2NvbnRpbnVlO31pZih0aGlzLm9wdGlvbnMu +c3R5bGUpe3RoaXMudmFsdWUubm93W0RdPXRoaXMuZWxlbWVudC5nZXRTdHlsZSh0 +aGlzLm9wdGlvbnMubW9kaWZpZXJzW0RdKS50b0ludCgpOwp9ZWxzZXt0aGlzLnZh +bHVlLm5vd1tEXT10aGlzLmVsZW1lbnRbdGhpcy5vcHRpb25zLm1vZGlmaWVyc1tE +XV07fWlmKHRoaXMub3B0aW9ucy5pbnZlcnQpe3RoaXMudmFsdWUubm93W0RdKj0t +MTt9dGhpcy5tb3VzZS5wb3NbRF09Qy5wYWdlW0RdLXRoaXMudmFsdWUubm93W0Rd +OwppZihBJiZBW0RdKXtmb3IodmFyIEI9MjtCLS07Qil7aWYoJGNoayhBW0RdW0Jd +KSl7dGhpcy5saW1pdFtEXVtCXT0kbGFtYmRhKEFbRF1bQl0pKCk7fX19fWlmKCR0 +eXBlKHRoaXMub3B0aW9ucy5ncmlkKT09Im51bWJlciIpe3RoaXMub3B0aW9ucy5n +cmlkPXt4OnRoaXMub3B0aW9ucy5ncmlkLHk6dGhpcy5vcHRpb25zLmdyaWR9Owp9 +dGhpcy5kb2N1bWVudC5hZGRFdmVudHMoe21vdXNlbW92ZTp0aGlzLmJvdW5kLmNo +ZWNrLG1vdXNldXA6dGhpcy5ib3VuZC5jYW5jZWx9KTt0aGlzLmRvY3VtZW50LmFk +ZEV2ZW50KHRoaXMuc2VsZWN0aW9uLHRoaXMuYm91bmQuZXZlbnRTdG9wKTt9LGNo +ZWNrOmZ1bmN0aW9uKEEpe2lmKHRoaXMub3B0aW9ucy5wcmV2ZW50RGVmYXVsdCl7 +QS5wcmV2ZW50RGVmYXVsdCgpOwp9dmFyIEI9TWF0aC5yb3VuZChNYXRoLnNxcnQo +TWF0aC5wb3coQS5wYWdlLngtdGhpcy5tb3VzZS5zdGFydC54LDIpK01hdGgucG93 +KEEucGFnZS55LXRoaXMubW91c2Uuc3RhcnQueSwyKSkpO2lmKEI+dGhpcy5vcHRp +b25zLnNuYXApe3RoaXMuY2FuY2VsKCk7dGhpcy5kb2N1bWVudC5hZGRFdmVudHMo +e21vdXNlbW92ZTp0aGlzLmJvdW5kLmRyYWcsbW91c2V1cDp0aGlzLmJvdW5kLnN0 +b3B9KTsKdGhpcy5maXJlRXZlbnQoInN0YXJ0Iix0aGlzLmVsZW1lbnQpLmZpcmVF +dmVudCgic25hcCIsdGhpcy5lbGVtZW50KTt9fSxkcmFnOmZ1bmN0aW9uKEEpe2lm +KHRoaXMub3B0aW9ucy5wcmV2ZW50RGVmYXVsdCl7QS5wcmV2ZW50RGVmYXVsdCgp +O310aGlzLm1vdXNlLm5vdz1BLnBhZ2U7CmZvcih2YXIgQiBpbiB0aGlzLm9wdGlv +bnMubW9kaWZpZXJzKXtpZighdGhpcy5vcHRpb25zLm1vZGlmaWVyc1tCXSl7Y29u +dGludWU7fXRoaXMudmFsdWUubm93W0JdPXRoaXMubW91c2Uubm93W0JdLXRoaXMu +bW91c2UucG9zW0JdO2lmKHRoaXMub3B0aW9ucy5pbnZlcnQpe3RoaXMudmFsdWUu +bm93W0JdKj0tMTsKfWlmKHRoaXMub3B0aW9ucy5saW1pdCYmdGhpcy5saW1pdFtC +XSl7aWYoJGNoayh0aGlzLmxpbWl0W0JdWzFdKSYmKHRoaXMudmFsdWUubm93W0Jd +PnRoaXMubGltaXRbQl1bMV0pKXt0aGlzLnZhbHVlLm5vd1tCXT10aGlzLmxpbWl0 +W0JdWzFdO31lbHNle2lmKCRjaGsodGhpcy5saW1pdFtCXVswXSkmJih0aGlzLnZh +bHVlLm5vd1tCXTx0aGlzLmxpbWl0W0JdWzBdKSl7dGhpcy52YWx1ZS5ub3dbQl09 +dGhpcy5saW1pdFtCXVswXTsKfX19aWYodGhpcy5vcHRpb25zLmdyaWRbQl0pe3Ro +aXMudmFsdWUubm93W0JdLT0odGhpcy52YWx1ZS5ub3dbQl0ldGhpcy5vcHRpb25z +LmdyaWRbQl0pO31pZih0aGlzLm9wdGlvbnMuc3R5bGUpe3RoaXMuZWxlbWVudC5z +ZXRTdHlsZSh0aGlzLm9wdGlvbnMubW9kaWZpZXJzW0JdLHRoaXMudmFsdWUubm93 +W0JdK3RoaXMub3B0aW9ucy51bml0KTsKfWVsc2V7dGhpcy5lbGVtZW50W3RoaXMu +b3B0aW9ucy5tb2RpZmllcnNbQl1dPXRoaXMudmFsdWUubm93W0JdO319dGhpcy5m +aXJlRXZlbnQoImRyYWciLHRoaXMuZWxlbWVudCk7fSxjYW5jZWw6ZnVuY3Rpb24o +QSl7dGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudCgibW91c2Vtb3ZlIix0aGlzLmJv +dW5kLmNoZWNrKTsKdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudCgibW91c2V1cCIs +dGhpcy5ib3VuZC5jYW5jZWwpO2lmKEEpe3RoaXMuZG9jdW1lbnQucmVtb3ZlRXZl +bnQodGhpcy5zZWxlY3Rpb24sdGhpcy5ib3VuZC5ldmVudFN0b3ApO3RoaXMuZmly +ZUV2ZW50KCJjYW5jZWwiLHRoaXMuZWxlbWVudCk7Cn19LHN0b3A6ZnVuY3Rpb24o +QSl7dGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudCh0aGlzLnNlbGVjdGlvbix0aGlz +LmJvdW5kLmV2ZW50U3RvcCk7dGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudCgibW91 +c2Vtb3ZlIix0aGlzLmJvdW5kLmRyYWcpO3RoaXMuZG9jdW1lbnQucmVtb3ZlRXZl +bnQoIm1vdXNldXAiLHRoaXMuYm91bmQuc3RvcCk7CmlmKEEpe3RoaXMuZmlyZUV2 +ZW50KCJjb21wbGV0ZSIsdGhpcy5lbGVtZW50KTt9fX0pO0VsZW1lbnQuaW1wbGVt +ZW50KHttYWtlUmVzaXphYmxlOmZ1bmN0aW9uKEEpe3JldHVybiBuZXcgRHJhZyh0 +aGlzLCRtZXJnZSh7bW9kaWZpZXJzOnt4OiJ3aWR0aCIseToiaGVpZ2h0In19LEEp +KTsKfX0pO3ZhciBTbGlkZXI9bmV3IENsYXNzKHtJbXBsZW1lbnRzOltFdmVudHMs +T3B0aW9uc10sb3B0aW9uczp7b25UaWNrOmZ1bmN0aW9uKEEpe2lmKHRoaXMub3B0 +aW9ucy5zbmFwKXtBPXRoaXMudG9Qb3NpdGlvbih0aGlzLnN0ZXApO310aGlzLmtu +b2Iuc2V0U3R5bGUodGhpcy5wcm9wZXJ0eSxBKTsKfSxzbmFwOmZhbHNlLG9mZnNl +dDowLHJhbmdlOmZhbHNlLHdoZWVsOmZhbHNlLHN0ZXBzOjEwMCxtb2RlOiJob3Jp +em9udGFsIn0saW5pdGlhbGl6ZTpmdW5jdGlvbihFLEEsRCl7dGhpcy5zZXRPcHRp +b25zKEQpO3RoaXMuZWxlbWVudD0kKEUpO3RoaXMua25vYj0kKEEpOwp0aGlzLnBy +ZXZpb3VzQ2hhbmdlPXRoaXMucHJldmlvdXNFbmQ9dGhpcy5zdGVwPS0xO3RoaXMu +ZWxlbWVudC5hZGRFdmVudCgibW91c2Vkb3duIix0aGlzLmNsaWNrZWRFbGVtZW50 +LmJpbmQodGhpcykpO2lmKHRoaXMub3B0aW9ucy53aGVlbCl7dGhpcy5lbGVtZW50 +LmFkZEV2ZW50KCJtb3VzZXdoZWVsIix0aGlzLnNjcm9sbGVkRWxlbWVudC5iaW5k +V2l0aEV2ZW50KHRoaXMpKTsKfXZhciBGLEI9e30sQz17eDpmYWxzZSx5OmZhbHNl +fTtzd2l0Y2godGhpcy5vcHRpb25zLm1vZGUpe2Nhc2UidmVydGljYWwiOnRoaXMu +YXhpcz0ieSI7dGhpcy5wcm9wZXJ0eT0idG9wIjtGPSJvZmZzZXRIZWlnaHQiO2Jy +ZWFrO2Nhc2UiaG9yaXpvbnRhbCI6dGhpcy5heGlzPSJ4IjsKdGhpcy5wcm9wZXJ0 +eT0ibGVmdCI7Rj0ib2Zmc2V0V2lkdGgiO310aGlzLmhhbGY9dGhpcy5rbm9iW0Zd +LzI7dGhpcy5mdWxsPXRoaXMuZWxlbWVudFtGXS10aGlzLmtub2JbRl0rKHRoaXMu +b3B0aW9ucy5vZmZzZXQqMik7dGhpcy5taW49JGNoayh0aGlzLm9wdGlvbnMucmFu +Z2VbMF0pP3RoaXMub3B0aW9ucy5yYW5nZVswXTowOwp0aGlzLm1heD0kY2hrKHRo +aXMub3B0aW9ucy5yYW5nZVsxXSk/dGhpcy5vcHRpb25zLnJhbmdlWzFdOnRoaXMu +b3B0aW9ucy5zdGVwczt0aGlzLnJhbmdlPXRoaXMubWF4LXRoaXMubWluO3RoaXMu +c3RlcHM9dGhpcy5vcHRpb25zLnN0ZXBzfHx0aGlzLmZ1bGw7dGhpcy5zdGVwU2l6 +ZT1NYXRoLmFicyh0aGlzLnJhbmdlKS90aGlzLnN0ZXBzOwp0aGlzLnN0ZXBXaWR0 +aD10aGlzLnN0ZXBTaXplKnRoaXMuZnVsbC9NYXRoLmFicyh0aGlzLnJhbmdlKTt0 +aGlzLmtub2Iuc2V0U3R5bGUoInBvc2l0aW9uIiwicmVsYXRpdmUiKS5zZXRTdHls +ZSh0aGlzLnByb3BlcnR5LC10aGlzLm9wdGlvbnMub2Zmc2V0KTtDW3RoaXMuYXhp +c109dGhpcy5wcm9wZXJ0eTsKQlt0aGlzLmF4aXNdPVstdGhpcy5vcHRpb25zLm9m +ZnNldCx0aGlzLmZ1bGwtdGhpcy5vcHRpb25zLm9mZnNldF07dGhpcy5kcmFnPW5l +dyBEcmFnKHRoaXMua25vYix7c25hcDowLGxpbWl0OkIsbW9kaWZpZXJzOkMsb25E +cmFnOnRoaXMuZHJhZ2dlZEtub2IuYmluZCh0aGlzKSxvblN0YXJ0OnRoaXMuZHJh +Z2dlZEtub2IuYmluZCh0aGlzKSxvbkNvbXBsZXRlOmZ1bmN0aW9uKCl7dGhpcy5k +cmFnZ2VkS25vYigpOwp0aGlzLmVuZCgpO30uYmluZCh0aGlzKX0pO2lmKHRoaXMu +b3B0aW9ucy5zbmFwKXt0aGlzLmRyYWcub3B0aW9ucy5ncmlkPU1hdGguY2VpbCh0 +aGlzLnN0ZXBXaWR0aCk7dGhpcy5kcmFnLm9wdGlvbnMubGltaXRbdGhpcy5heGlz +XVsxXT10aGlzLmZ1bGw7fX0sc2V0OmZ1bmN0aW9uKEEpe2lmKCEoKHRoaXMucmFu +Z2U+MCleKEE8dGhpcy5taW4pKSl7QT10aGlzLm1pbjsKfWlmKCEoKHRoaXMucmFu +Z2U+MCleKEE+dGhpcy5tYXgpKSl7QT10aGlzLm1heDt9dGhpcy5zdGVwPU1hdGgu +cm91bmQoQSk7dGhpcy5jaGVja1N0ZXAoKTt0aGlzLmVuZCgpO3RoaXMuZmlyZUV2 +ZW50KCJ0aWNrIix0aGlzLnRvUG9zaXRpb24odGhpcy5zdGVwKSk7cmV0dXJuIHRo +aXM7Cn0sY2xpY2tlZEVsZW1lbnQ6ZnVuY3Rpb24oQyl7dmFyIEI9dGhpcy5yYW5n +ZTwwPy0xOjE7dmFyIEE9Qy5wYWdlW3RoaXMuYXhpc10tdGhpcy5lbGVtZW50Lmdl +dFBvc2l0aW9uKClbdGhpcy5heGlzXS10aGlzLmhhbGY7QT1BLmxpbWl0KC10aGlz +Lm9wdGlvbnMub2Zmc2V0LHRoaXMuZnVsbC10aGlzLm9wdGlvbnMub2Zmc2V0KTsK +dGhpcy5zdGVwPU1hdGgucm91bmQodGhpcy5taW4rQip0aGlzLnRvU3RlcChBKSk7 +dGhpcy5jaGVja1N0ZXAoKTt0aGlzLmVuZCgpO3RoaXMuZmlyZUV2ZW50KCJ0aWNr +IixBKTt9LHNjcm9sbGVkRWxlbWVudDpmdW5jdGlvbihBKXt2YXIgQj0odGhpcy5v +cHRpb25zLm1vZGU9PSJob3Jpem9udGFsIik/KEEud2hlZWw8MCk6KEEud2hlZWw+ +MCk7CnRoaXMuc2V0KEI/dGhpcy5zdGVwLXRoaXMuc3RlcFNpemU6dGhpcy5zdGVw +K3RoaXMuc3RlcFNpemUpO0Euc3RvcCgpO30sZHJhZ2dlZEtub2I6ZnVuY3Rpb24o +KXt2YXIgQj10aGlzLnJhbmdlPDA/LTE6MTt2YXIgQT10aGlzLmRyYWcudmFsdWUu +bm93W3RoaXMuYXhpc107CkE9QS5saW1pdCgtdGhpcy5vcHRpb25zLm9mZnNldCx0 +aGlzLmZ1bGwtdGhpcy5vcHRpb25zLm9mZnNldCk7dGhpcy5zdGVwPU1hdGgucm91 +bmQodGhpcy5taW4rQip0aGlzLnRvU3RlcChBKSk7dGhpcy5jaGVja1N0ZXAoKTt9 +LGNoZWNrU3RlcDpmdW5jdGlvbigpe2lmKHRoaXMucHJldmlvdXNDaGFuZ2UhPXRo +aXMuc3RlcCl7dGhpcy5wcmV2aW91c0NoYW5nZT10aGlzLnN0ZXA7CnRoaXMuZmly +ZUV2ZW50KCJjaGFuZ2UiLHRoaXMuc3RlcCk7fX0sZW5kOmZ1bmN0aW9uKCl7aWYo +dGhpcy5wcmV2aW91c0VuZCE9PXRoaXMuc3RlcCl7dGhpcy5wcmV2aW91c0VuZD10 +aGlzLnN0ZXA7dGhpcy5maXJlRXZlbnQoImNvbXBsZXRlIix0aGlzLnN0ZXArIiIp +Owp9fSx0b1N0ZXA6ZnVuY3Rpb24oQSl7dmFyIEI9KEErdGhpcy5vcHRpb25zLm9m +ZnNldCkqdGhpcy5zdGVwU2l6ZS90aGlzLmZ1bGwqdGhpcy5zdGVwcztyZXR1cm4g +dGhpcy5vcHRpb25zLnN0ZXBzP01hdGgucm91bmQoQi09QiV0aGlzLnN0ZXBTaXpl +KTpCO30sdG9Qb3NpdGlvbjpmdW5jdGlvbihBKXtyZXR1cm4odGhpcy5mdWxsKk1h +dGguYWJzKHRoaXMubWluLUEpKS8odGhpcy5zdGVwcyp0aGlzLnN0ZXBTaXplKS10 +aGlzLm9wdGlvbnMub2Zmc2V0Owp9fSk7 + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline; filename=system.js +Content-Type: application/x-javascript; charset=utf-8; name=system.js +Content-Location: http://habrahabr.ru/js/1307631427/system.js +Content-Transfer-Encoding: Base64 + +RWxlbWVudC5pbXBsZW1lbnQoewoJZmxhc2g6IGZ1bmN0aW9uKHRvLGZyb20scmVw +cyxwcm9wLGR1cikgewoJCWlmKCFyZXBzKSB7IHJlcHMgPSAxOyB9CgkJaWYoIXBy +b3ApIHsgcHJvcCA9ICdiYWNrZ3JvdW5kLWNvbG9yJzsgfQoJCWlmKCFkdXIpIHsg +ZHVyID0gMjUwOyB9CgkJdmFyIGVmZmVjdCA9IG5ldyBGeC5Ud2Vlbih0aGlzLCB7 +CgkJCQlkdXJhdGlvbjogZHVyLAoJCQkJbGluazogJ2NoYWluJwoJCQl9KQoJCWZv +cih4ID0gMTsgeCA8PSByZXBzOyB4KyspCgkJCWVmZmVjdC5zdGFydChwcm9wLGZy +b20sdG8pLnN0YXJ0KHByb3AsdG8sZnJvbSk7Cgl9LAoJcmVwbGFjZUNsYXNzOiBm +dW5jdGlvbihjbGFzczEsIGNsYXNzMikgewoJCXRoaXMucmVtb3ZlQ2xhc3MoY2xh +c3MxKTsKCQl0aGlzLmFkZENsYXNzKGNsYXNzMik7Cgl9LAoJc3dpdGNoQ2xhc3M6 +IGZ1bmN0aW9uKGNsYXNzMSwgY2xhc3MyKSB7CgkJaWYgKHRoaXMuaGFzQ2xhc3Mo +Y2xhc3MxKSkKCQkJdGhpcy5yZXBsYWNlQ2xhc3MoY2xhc3MxLCBjbGFzczIpOwoJ +CWVsc2UKCQkJdGhpcy5yZXBsYWNlQ2xhc3MoY2xhc3MyLCBjbGFzczEpOwoJfQp9 +KTsKCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq +KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLy8qKioqKioqKioq +KioqKiAg0JLQndCY0JzQkNCd0JjQlSEg0JTQkNCb0KzQqNCVINCY0JTQldCiINCh +0KLQoNCQ0KjQndCr0Jkg0KHQotCQ0KDQq9CZINCa0J7QlCEgICoqKioqKioqKioq +KioqKioqCi8vKioqKioqKioqKioqKioqKiAg0J7QlNCV0J3QrNCi0JUg0KHQmtCQ +0KTQkNCd0JTQoCDQn9Cg0Jgg0JLQpdCe0JTQlSDQkiDQrdCi0KMg0JfQntCd0KMh +ICAqKioqKioqKioqKioqKioqKioqCi8vKioqKioqKioqKioqKioqKioqKioqKioq +KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq +KioqKioKCgovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiDQndCw0YHQ +u9C10LTQvtCy0LDQvdC40LUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq +KioqCkZ1bmN0aW9uLnByb3RvdHlwZS5pbmhlcml0c0Zyb20gPSBmdW5jdGlvbihC +YXNlQ2xhc3MpIHsgLy8gdGhhbmtzIHRvIEtldmluIExpbmRzZXkgZm9yIHRoaXMg +aWRlYQoJdmFyIEluaGVyaXRhbmNlID0gZnVuY3Rpb24oKSB7fTsKCUluaGVyaXRh +bmNlLnByb3RvdHlwZSA9IEJhc2VDbGFzcy5wcm90b3R5cGU7Cgl0aGlzLnByb3Rv +dHlwZSA9IG5ldyBJbmhlcml0YW5jZSgpOwoJdGhpcy5wcm90b3R5cGUuY29uc3Ry +dWN0b3IgPSB0aGlzOwoJdGhpcy5zdXBlckNsYXNzID0gQmFzZUNsYXNzOwp9CgpP +YmplY3QuZXh0ZW5kT2JqZWN0ID0gZnVuY3Rpb24oZGVzdGluYXRpb24sIHNvdXJj +ZSkgewoJZm9yICh2YXIgcHJvcGVydHkgaW4gc291cmNlKQoJCWRlc3RpbmF0aW9u +W3Byb3BlcnR5XSA9IHNvdXJjZVtwcm9wZXJ0eV07CglyZXR1cm4gZGVzdGluYXRp +b247Cn07CgovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiDQoNCw0LHQvtGC +0LAg0YEg0YHQvtCx0YvRgtC40Y/QvNC4ICoqKioqKioqKioqKioqKioqKioqKioq +KioqKioqKgpmdW5jdGlvbiBnZXRDaGFyQ29kZShldikgewoJaWYgKGV2LmNoYXJD +b2RlKSB2YXIgY2hhckNvZGUgPSBldi5jaGFyQ29kZTsKCWVsc2UgaWYgKGV2Lmtl +eUNvZGUpIHZhciBjaGFyQ29kZSA9IGV2LmtleUNvZGU7CgllbHNlIGlmIChldi53 +aGljaCkgdmFyIGNoYXJDb2RlID0gZXYud2hpY2g7CgllbHNlIHZhciBjaGFyQ29k +ZSA9IDA7CglyZXR1cm4gY2hhckNvZGU7Cn0KCi8vKioqKioqKioqKioqKioqKioq +KioqKioqKiDQntC/0YDQtdC00LXQu9C10L3QuNC1INCx0YDQvtGD0LfQtdGA0L7Q +siAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgppZiAod2luZG93LkFjdGl2 +ZVhPYmplY3QpIHdpbmRvdy5pZSA9IHdpbmRvd1t3aW5kb3cuWE1MSHR0cFJlcXVl +c3QgPyAnaWU3JyA6ICdpZTYnXSA9IHRydWU7CmVsc2UgaWYgKGRvY3VtZW50LmNo +aWxkTm9kZXMgJiYgIWRvY3VtZW50LmFsbCAmJiAhbmF2aWdhdG9yLnRhaW50RW5h +YmxlZCkgd2luZG93LndlYmtpdCA9IHdpbmRvd1t3aW5kb3cueHBhdGggPyAnd2Vi +a2l0NDIwJyA6ICd3ZWJraXQ0MTknXSA9IHRydWU7CmVsc2UgaWYgKGRvY3VtZW50 +LmdldEJveE9iamVjdEZvciAhPSBudWxsKSB3aW5kb3cuZ2Vja28gPSB0cnVlOwp2 +YXIgaXNJRSAgPSAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5kZXhPZigiTVNJRSIp +ICE9IC0xKSA/IHRydWUgOiBmYWxzZTsKdmFyIGlzV2luID0gKG5hdmlnYXRvci5h +cHBWZXJzaW9uLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigid2luIikgIT0gLTEpID8g +dHJ1ZSA6IGZhbHNlOwp2YXIgaXNPcGVyYSA9IChuYXZpZ2F0b3IudXNlckFnZW50 +LmluZGV4T2YoIk9wZXJhIikgIT0gLTEpID8gdHJ1ZSA6IGZhbHNlOwoKCi8vKioq +KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBBSkFYICoqKioqKioqKioq +KioqKioqKioqKioqKioqKioqKioqKioqKioKLyoKCXVybCAtINC+0YLQutGD0LTQ +sCDQt9Cw0LPRgNGD0LbQsNC10LwKCWFqYXhDYWxsQmFja0Z1bmN0aW9uIC0g0YfR +gtC+INCy0YvQt9GL0LLQsNC10Lwg0L/QviDQt9Cw0LLQtdGA0YjQtdC90LjQuCDQ +t9Cw0LPRgNGD0LfQutC4CglwYXJhbXMgLSDQv9Cw0YDQsNC80LXRgtGA0Ysg0LIg +0LLQuNC00LUg0L7QsdGK0LXQutGC0LAg0LjQu9C4INC80LDRgdGB0LjQstCwCglj +YWxsT2JqZWN0IC0g0LzQtdGC0L7QtNC+0Lwg0LrQsNC60L7Qs9C+INC+0LHRitC1 +0LrRgtCwINGP0LLQu9GP0LXRgtGB0Y8gYWpheENhbGxCYWNrRnVuY3Rpb24gKNC1 +0YHQu9C4INGN0YLQviDQvNC10YLQvtC0LCDQsCDQvdC1INCz0LvQvtCx0LDQu9GM +0L3QsNGPINGE0YPQvdGG0LjRjykKKi8KZnVuY3Rpb24gYWpheFBvc3QodXJsLCBk +YXRhLCBhamF4Q2FsbEJhY2tGdW5jdGlvbiwgcGFyYW1zLCBjYWxsT2JqZWN0LCBh +amF4Q2FsbEJhY2tFcnJvckZ1bmN0aW9uKSB7Cgl2YXIgYWpheE9iamVjdCA9IG51 +bGw7CglpZiAod2luZG93LlhNTEh0dHBSZXF1ZXN0KSAvLyBicmFuY2ggZm9yIG5h +dGl2ZSBYTUxIdHRwUmVxdWVzdCBvYmplY3QKCQlhamF4T2JqZWN0ID0gbmV3IFhN +TEh0dHBSZXF1ZXN0KCk7CgllbHNlIGlmICh3aW5kb3cuQWN0aXZlWE9iamVjdCkg +Ly8gYnJhbmNoIGZvciBJRS9XaW5kb3dzIEFjdGl2ZVggdmVyc2lvbgoJCWFqYXhP +YmplY3QgPSBuZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKTsK +CWlmKGFqYXhPYmplY3QpewoJCWFqYXhPYmplY3Qub25yZWFkeXN0YXRlY2hhbmdl +ID0gZnVuY3Rpb24oKXsKCQkJYWpheEhhbmRsZXIoYWpheE9iamVjdCwgYWpheENh +bGxCYWNrRnVuY3Rpb24sIHBhcmFtcywgY2FsbE9iamVjdCwgYWpheENhbGxCYWNr +RXJyb3JGdW5jdGlvbik7CgkJfQoJCWFqYXhPYmplY3Qub3BlbigiUE9TVCIsIHVy +bCwgdHJ1ZSk7CgkJYWpheE9iamVjdC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50 +LXR5cGUiLCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7CgkJ +YWpheE9iamVjdC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LWxlbmd0aCIsIGRh +dGEubGVuZ3RoKTsKCQlhamF4T2JqZWN0LnNldFJlcXVlc3RIZWFkZXIoIkNvbm5l +Y3Rpb24iLCAiY2xvc2UiKTsKCQlhamF4T2JqZWN0LnNlbmQoZGF0YSk7CQoJfQp9 +CgoKZnVuY3Rpb24gYWpheEhhbmRsZXIoYWpheE9iamVjdCwgYWpheENhbGxCYWNr +RnVuY3Rpb24sIHBhcmFtcywgY2FsbE9iamVjdCwgYWpheENhbGxCYWNrRXJyb3JG +dW5jdGlvbil7IAoJaWYgKGFqYXhPYmplY3QucmVhZHlTdGF0ZSA9PSA0KQoJCWlm +IChhamF4T2JqZWN0LnN0YXR1cyA9PSAyMDApCgkJCWFqYXhDYWxsQmFja0Z1bmN0 +aW9uLmNhbGwoY2FsbE9iamVjdCwgYWpheE9iamVjdCwgcGFyYW1zKTsKCQllbHNl +CgkJCWlmKGFqYXhDYWxsQmFja0Vycm9yRnVuY3Rpb24pCgkJCQlhamF4Q2FsbEJh +Y2tFcnJvckZ1bmN0aW9uLmNhbGwoY2FsbE9iamVjdCwgYWpheE9iamVjdCk7CQoJ +CQllbHNlCgkJCQlmdXR1X2FsZXJ0KCIiLC8qKCLQktC+0LfQvdC40LrQu9CwINC+ +0YjQuNCx0LrQsCDQsiDQv9C+0LvRg9GH0LXQvdC40LggWE1MINC00LDQvdC90YvR +hTo8YnIgLz4iICsgYWpheE9iamVjdC5zdGF0dXNUZXh0KSovICfQo9C/0YEhINCn +0YLQvi3RgtC+INC/0L7RiNC70L4g0L3QtSDRgtCw0LouINCf0L7Qv9GA0L7QsdGD +0LnRgtC1INC10YnQtSDRgNCw0LcuJywgZmFsc2UsICdlcnJvcicpOwp9CgpmdW5j +dGlvbiBhamF4TG9hZFBvc3QodXJsLCBkYXRhLCBhamF4Q2FsbEJhY2tGdW5jdGlv +biwgY2FsbE9iamVjdCwgcGFyYW1zLCBhamF4Q2FsbEJhY2tFcnJvckZ1bmN0aW9u +KSB7Cgl2YXIgYWpheE9iamVjdCA9IG51bGw7CglpZiAod2luZG93LlhNTEh0dHBS +ZXF1ZXN0KSAvLyBicmFuY2ggZm9yIG5hdGl2ZSBYTUxIdHRwUmVxdWVzdCBvYmpl +Y3QKCQlhamF4T2JqZWN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CgllbHNlIGlm +ICh3aW5kb3cuQWN0aXZlWE9iamVjdCkgLy8gYnJhbmNoIGZvciBJRS9XaW5kb3dz +IEFjdGl2ZVggdmVyc2lvbgoJCWFqYXhPYmplY3QgPSBuZXcgQWN0aXZlWE9iamVj +dCgiTWljcm9zb2Z0LlhNTEhUVFAiKTsKCWlmKGFqYXhPYmplY3QpewoJCWFqYXhP +YmplY3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKXsKCQkJYWpheExv +YWRIYW5kbGVyKGFqYXhPYmplY3QsIGFqYXhDYWxsQmFja0Z1bmN0aW9uLCBjYWxs +T2JqZWN0LCBwYXJhbXMsIGFqYXhDYWxsQmFja0Vycm9yRnVuY3Rpb24pOwoJCX0K +CQlhamF4T2JqZWN0Lm9wZW4oIlBPU1QiLCB1cmwsIHRydWUpOwoJCWFqYXhPYmpl +Y3Quc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC10eXBlIiwgImFwcGxpY2F0aW9u +L3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpOwoJCWFqYXhPYmplY3Quc2V0UmVxdWVz +dEhlYWRlcigiQ29udGVudC1sZW5ndGgiLCBkYXRhLmxlbmd0aCk7CgkJYWpheE9i +amVjdC5zZXRSZXF1ZXN0SGVhZGVyKCJDb25uZWN0aW9uIiwgImNsb3NlIik7CgkJ +YWpheE9iamVjdC5zZW5kKGRhdGEpOwoJfQp9CmZ1bmN0aW9uIGFqYXhMb2FkSGFu +ZGxlcihhamF4T2JqZWN0LCBhamF4Q2FsbEJhY2tGdW5jdGlvbiwgY2FsbE9iamVj +dCwgcGFyYW1zLCBhamF4Q2FsbEJhY2tFcnJvckZ1bmN0aW9uKXsKCWlmIChhamF4 +T2JqZWN0LnJlYWR5U3RhdGUgPT0gNCkKCQlpZiAoYWpheE9iamVjdC5zdGF0dXMg +PT0gMjAwKQoJCQlhamF4Q2FsbEJhY2tGdW5jdGlvbi5jYWxsKGNhbGxPYmplY3Qs +IGFqYXhPYmplY3QsIHBhcmFtcyk7CgkJZWxzZQoJCQlpZihhamF4Q2FsbEJhY2tF +cnJvckZ1bmN0aW9uKQoJCQkJYWpheENhbGxCYWNrRXJyb3JGdW5jdGlvbi5jYWxs +KGNhbGxPYmplY3QsIGFqYXhPYmplY3QpOwkKCQkJZWxzZQoJCQkJZnV0dV9hbGVy +dCgiIiwvKigi0JLQvtC30L3QuNC60LvQsCDQvtGI0LjQsdC60LAg0LIg0L/QvtC7 +0YPRh9C10L3QuNC4IFhNTCDQtNCw0L3QvdGL0YU6PGJyIC8+IiArIGFqYXhPYmpl +Y3Quc3RhdHVzVGV4dCkqLyAn0KPQv9GBISDQp9GC0L4t0YLQviDQv9C+0YjQu9C+ +INC90LUg0YLQsNC6LiDQn9C+0L/RgNC+0LHRg9C50YLQtSDQtdGJ0LUg0YDQsNC3 +LicsIHRydWUsICdlcnJvcicpOwp9Cg== + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline; filename=init.js +Content-Type: application/x-javascript; charset=utf-8; name=init.js +Content-Location: http://habrahabr.ru/js/1307631427/tm/init.js +Content-Transfer-Encoding: Base64 + +dmFyIHRtID0gKHR5cGVvZih0bSkgIT0gJ3VuZGVmaW5lZCcpID8gdG0gOiB7fTsK +CmRvY3VtZW50LmlkID0gJDsgLy8g0Y3RgtC+INGH0YLQvtCx0YsgTW9vdG9vbHMg +TW9yZSAxLjIuMy4xINGA0LDQsdC+0YLQsNC7INGBIE1vb3Rvb2xzIENvcmUgMS4y +LjAKCi8qKgogKiDQmNC90YLQtdGA0YTQtdC50YEg0LjQvdC40YbQuNCw0LvQuNC3 +0LDRhtC40Lgg0LTQu9GPINCy0YHQtdCz0L4g0L3QsCDRgdCy0LXRgtC1CiAqIEBh +dXRob3IgYmVib3BraWQKKi8KCnRtLmluaXQgPSB7CglfaW5pdGlhbGl6YXRpb25z +OiBbXSwKCV93aW5kb3dMb2FkZWQ6IGZhbHNlLAoJZm9ybXM6IG51bGwsCgljb250 +cm9sczogbnVsbCwKCWFkZDogZnVuY3Rpb24gKGYpIHsKCQlpZiAodGhpcy5fd2lu +ZG93TG9hZGVkKSB7CgkJCWYuY2FsbCh3aW5kb3cpOwoJCX0KCQllbHNlIHsKCQkJ +dGhpcy5faW5pdGlhbGl6YXRpb25zLnB1c2goZik7CgkJfTsKCX0sCglfbG9hZGVk +OiBmdW5jdGlvbiAoKSB7CgkJdGhpcy5fd2luZG93TG9hZGVkID0gdHJ1ZTsKCQl0 +aGlzLl9pbml0aWFsaXphdGlvbnMuZWFjaCggZnVuY3Rpb24gKGYpIHsKCQkJZi5j +YWxsKHdpbmRvdyk7CgkJfSk7Cgl9Cn07Cgp3aW5kb3cuYWRkRXZlbnQoJ2RvbXJl +YWR5JywgdG0uaW5pdC5fbG9hZGVkLmJpbmQodG0uaW5pdCkpOwoKLyoqCiAqINCk +0YPQvdC60YbQuNGPINC00LvRjyDQu9C+0LPQuNGA0L7QstCw0L3QuNGPLCDQutC+ +0YLQvtGA0LDRjyDQvdC1INCy0YvQt9GL0LLQsNC10YIg0L7RiNC40LHQvtC6LCDQ +tdGB0LvQuCDQvdC10YIg0LrQvtC90YHQvtC70LgKICogQGF1dGhvciBiZWJvcGtp +ZAoqLwp0bS5sb2cgPSBmdW5jdGlvbiAoKSB7CglpZiAoKHR5cGVvZihjb25zb2xl +KSAhPSAndW5kZWZpbmVkJykgJiYgKHR5cGVvZihjb25zb2xlLmxvZykgPT0gJ2Z1 +bmN0aW9uJykpIHsKCSAgICAvL2ZvciAodmFyIGk9MCwgbD1hcmd1bWVudHMubGVu +Z3RoOyBpPGw7IGkrKykgewoJICAgICAgICBjb25zb2xlLmxvZyhhcmd1bWVudHMp +OwoJICAgLy8gfTsKCX0gZWxzZSBpZiAod2luZG93Lm9wZXJhICYmIG9wZXJhLnBv +c3RFcnJvcikgewoJCW9wZXJhLnBvc3RFcnJvcihhcmd1bWVudHMpOwoJfTsKfTsK +CnRtLmJhZFRhZ3MgPSBbCgknT0JKRUNUJywKCSdQQVJBTScsCgknRU1CRUQnLAoJ +J05PRU1CRUQnCl07Cgp0bS5oZWxwZXJzID0gewogICAgLyoqCiAgICAgKiDQktC+ +0LfQstGA0LDRidCw0LXRgiDRhtC10LvQvtC1INGH0LjRgdC70L4g0LIg0YPQtNC+ +0LHQvdC+0Lwg0LTQu9GPINGH0LXQu9C+0LLQtdC60LAg0LLQuNC00LUgLSDRgSDQ +v9GA0L7QsdC10LvQsNC80LgKICAgICAqIEBhdXRob3IgYmVib3BraWQKICAgICov +CiAgICBodW1hbml6ZU51bWJlcjogZnVuY3Rpb24gKG51bWJlcikgewogICAgICAg +IGlmICghbnVtYmVyKSB7IHJldHVybiAnJzsgfQogICAgICAgIHZhciBzID0gbnVt +YmVyLnRvU3RyaW5nKCk7CiAgICAgICAgdmFyIHIgPSAnJzsKICAgICAgICBmb3Ig +KCBpID0gMCwgbCA9IHMubGVuZ3RoOyBpPGw7IGkrKykgewogICAgICAgIAlyID0g +ciArICgoKCgobC1pKSAlIDMpID09IDApICYmIChpICE9IDApKSA/ICcgJyA6ICcn +KSArIHMuY2hhckF0KGkpOwogICAgICAgIH07CiAgICAgICAgcmV0dXJuIHI7CiAg +ICB9LAoJCgkvKioKCSAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINC00LDRgtGDINC4 +INCy0YDQtdC80Y8g0LIg0L3QvtGA0LzQsNC70YzQvdC+0Lwg0LLQuNC00LUKCSAq +IEBhdXRob3IgbWRldmlscwoJICovCglodW1hbml6ZURhdGU6IGZ1bmN0aW9uKHRp +bWVzdGFtcCwgZGF0ZU9ubHkpewoJCXZhciB0b2RheSA9IG5ldyBEYXRlKCk7CgkJ +dmFyIGRhdGUgPSBuZXcgRGF0ZSh0aW1lc3RhbXAgKiAxMDAwKTsKCQl2YXIgbW9u +dGhzID0gWyLRj9C90LLQsNGA0Y8iLCAi0YTQtdCy0YDQsNC70Y8iLCAi0LzQsNGA +0YLQsCIsICLQsNC/0YDQtdC70Y8iLCAi0LzQsNGPIiwgItC40Y7QvdGPIiwgItC4 +0Y7Qu9GPIiwgItCw0LLQs9GD0YHRgtCwIiwgItGB0LXQvdGC0Y/QsdGA0Y8iLCAi +0L7QutGC0Y/QsdGA0Y8iLCAi0L3QvtGP0LHRgNGPIiwgItC00LXQutCw0LHRgNGP +Il07OwoJCXZhciByZXN1bHQgPSAiIjsKCQlpZih0b2RheS5nZXREYXRlKCkgIT0g +ZGF0ZS5nZXREYXRlKCkgfHwgdG9kYXkuZ2V0TW9udGgoKSAhPSBkYXRlLmdldE1v +bnRoKCkgfHwgdG9kYXkuZ2V0RnVsbFllYXIoKSAhPSBkYXRlLmdldEZ1bGxZZWFy +KCkpCgkJCXJlc3VsdCA9IGRhdGUuZ2V0RGF0ZSgpICsgIiAiICsgbW9udGhzW2Rh +dGUuZ2V0TW9udGgoKV07CgkJaWYodG9kYXkuZ2V0RnVsbFllYXIoKSAhPSBkYXRl +LmdldEZ1bGxZZWFyKCkpCgkJCXJlc3VsdCArPSAiICIgKyBkYXRlLmdldEZ1bGxZ +ZWFyKCk7CgkJaWYoIWRhdGVPbmx5KSB7CgkJCWlmIChyZXN1bHQpIHJlc3VsdCAr +PSAiLCAiOwoJCQlyZXN1bHQgKz0gItCyICIgKyB0bS5oZWxwZXJzLmFkZFplcm8o +ZGF0ZS5nZXRIb3VycygpLCAyKSArICI6IiArIHRtLmhlbHBlcnMuYWRkWmVybyhk +YXRlLmdldE1pbnV0ZXMoKSwgMik7CgkJfQoJCXJldHVybiByZXN1bHQ7Cgl9LAoJ +CgkvKioKCSAqINCU0L7QsdCw0LLQu9GP0LXRgiDQvdGD0LvQuCDQv9C10YDQtdC0 +INGH0LjRgdC70L7QvCDQtNC+INGC0LXRhSDQv9C+0YAsINC/0L7QutCwINC+0L3Q +viDQvdC1INC00L7RgdGC0LjQs9C90LXRgiDQvdGD0LbQvdC+0Lkg0LTQu9C40L3R +iwoJICogQGF1dGhvciBtZGV2aWxzCgkgKi8KCWFkZFplcm86IGZ1bmN0aW9uKG51 +bWJlciwgbGVuKSB7CgkJdmFyIHMgPSBudW1iZXIudG9TdHJpbmcoKTsKCQl3aGls +ZSAocy5sZW5ndGggPCBsZW4pIHM9JzAnK3M7CgkJcmV0dXJuIHM7Cgl9Cn07CgpF +bGVtZW50LmltcGxlbWVudCh7CiAgICBzY3JvbGxUb01lOiBmdW5jdGlvbiAoX28p +IHsKICAgICAgICB2YXIgbyA9IF9vfHx7fTsKICAgICAgICAKICAgICAgICB2YXIg +eCA9IG8ueHx8MCwKICAgICAgICAgICAgeSA9IHRoaXMuZ2V0UG9zaXRpb24oKS55 +ICsgKG8ueXx8MCk7CiAgICAgICAgCiAgICAgICAgKHRlbXAud2luZG93U2Nyb2xs +IHx8ICh0ZW1wLndpbmRvd1Njcm9sbCA9IG5ldyBGeC5TY3JvbGwoICQoZG9jdW1l +bnQuYm9keSkgLCB7ICdkdXJhdGlvbic6IDUwMCwgJ2xpbmsnOiAnY2FuY2VsJyB9 +ICkgKSk7CiAgICAgICAgCiAgICAgICAgdGVtcC53aW5kb3dTY3JvbGxbIG8ubm93 +ID8gJ3NldCcgOiAnc3RhcnQnIF0oMCwgdGhpcy5nZXRQb3NpdGlvbigpLnkpOwoK +ICAgICAgICBpZiAobyAmJiBvLmNhbGxiYWNrKSB7CiAgICAgICAgICAgIAogICAg +ICAgICAgICBvLm5vdyA/IG8uY2FsbGJhY2soKSA6IHRlbXAud2luZG93U2Nyb2xs +LmFkZEV2ZW50KCdjb21wbGV0ZScsIChmdW5jdGlvbiAoY2FsbGJhY2spIHsKICAg +ICAgICAgICAgICAgIHRoaXMucmVtb3ZlRXZlbnQoJ2NvbXBsZXRlJywgY2FsbGJh +Y2spOwogICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKICAgICAgICAgICAgfSku +YmluZCh0ZW1wLndpbmRvd1Njcm9sbCwgby5jYWxsYmFjaykpOwogICAgICAgIH0K +ICAgICAgICByZXR1cm4gdGhpczsKICAgIH0KfSk7Cgp0bS5yZXMgPSB7fTsKCnRt +LnJlcy5fbG9hZGVkQ1NTID0gW107CnRtLnJlcy5sb2FkQ1NTID0gZnVuY3Rpb24o +dXJsKSB7CglpZiAoIXRtLnJlcy5fbG9hZGVkQ1NTW3VybF0pIHsKCQl2YXIgY3Nz +ID0gbmV3IEFzc2V0LmNzcyh1cmwpOwoJfQoJdG0ucmVzLl9sb2FkZWRDU1NbdXJs +XSA9IHRydWU7Cn07Cgp0bS5yZXMubG9hZElNRyA9IGZ1bmN0aW9uKHVybCkgewoJ +dmFyIGltZyA9IG5ldyBBc3NldC5pbWFnZSh1cmwpOwp9OwoKZnVuY3Rpb24gZCgp +IHsKCXZhciBkZWJ1Z1NjcmlwdCA9IG5ldyBBc3NldC5qYXZhc2NyaXB0KCcvanMv +dG0vZGVidWcuanMnLCB7aWQ6ICdkZWJ1Z1NjcmlwdCd9KTsKCXZhciBjb25zb2xl +U2NyaXB0ID0gbmV3IEFzc2V0LmphdmFzY3JpcHQoJy9qcy90bS9jb25zb2xlLmpz +Jywge2lkOiAnY29uc29sZVNjcmlwdCd9KTsKfQoKdG0uY3VzdG9tRXZlbnRNYW5h +Z2VyID0gewoJYWRkRXZlbnQ6IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2sp +IHsKCQl0aGlzLl9ldmVudHMgfHwgKHRoaXMuX2V2ZW50cyA9IFtdKTsKCQl0aGlz +Ll9ldmVudHNbZXZlbnROYW1lXSB8fCAodGhpcy5fZXZlbnRzW2V2ZW50TmFtZV0g +PSBbXSk7CgkJdGhpcy5fZXZlbnRzW2V2ZW50TmFtZV0ucHVzaChjYWxsYmFjayk7 +Cgl9LAoJcmVtb3ZlRXZlbnQ6IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2sp +IHsKCQl0aGlzLl9ldmVudHMgfHwgKHRoaXMuX2V2ZW50cyA9IFtdKTsKCQl0aGlz +Ll9ldmVudHNbZXZlbnROYW1lXSB8fCAodGhpcy5fZXZlbnRzW2V2ZW50TmFtZV0g +PSBbXSk7CgkJdGhpcy5fZXZlbnRzW2V2ZW50TmFtZV0uZXJhc2UoY2FsbGJhY2sp +OwoJfSwKCWZpcmVFdmVudDogZnVuY3Rpb24oZXZlbnROYW1lKSB7CgkJdmFyIGFy +Z3MgPSBbXTsKCQlmb3IgKHZhciBpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKykK +CQkJYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7CgkJdGhpcy5fZXZlbnRzIHx8ICh0 +aGlzLl9ldmVudHMgPSBbXSk7CgkJdGhpcy5fZXZlbnRzW2V2ZW50TmFtZV0gfHwg +KHRoaXMuX2V2ZW50c1tldmVudE5hbWVdID0gW10pOwoJCXRoaXMuX2V2ZW50c1tl +dmVudE5hbWVdLmZvckVhY2goZnVuY3Rpb24oaXRlbSl7aXRlbS5hcHBseSh0aGlz +LCBhcmdzKTt9KTsKCQl0bS5sb2coYXJncywgZXZlbnROYW1lICsgJyAoJyArIHRo +aXMuX2V2ZW50c1tldmVudE5hbWVdLmxlbmd0aCArICcpJyk7Cgl9Cn07 + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline; filename=common.js +Content-Type: application/x-javascript; charset=utf-8; name=common.js +Content-Location: http://habrahabr.ru/js/1307631427/common.js +Content-Transfer-Encoding: Base64 + +dG0uaW5pdC5hZGQoZnVuY3Rpb24oKXsKCXZhciBwYWdlTmF2ID0gbnVsbDsKCWlm +IChwYWdlTmF2ID0gJChkb2N1bWVudCkuZ2V0RWxlbWVudCgnLnBhZ2UtbmF2Jykp +IHsKCQl2YXIgcHJldiA9IHBhZ2VOYXYuZ2V0RWxlbWVudCgnLm5leHQtcHJldiAu +cHJldicpOwoJCXZhciBuZXh0ID0gcGFnZU5hdi5nZXRFbGVtZW50KCcubmV4dC1w +cmV2IC5uZXh0Jyk7CgkJJCh3aW5kb3cpLmFkZEV2ZW50KCdrZXlkb3duJywgZnVu +Y3Rpb24oZSl7CgkJCWlmICgoKGUuY29udHJvbCAmJiBlLmtleSA9PSAncmlnaHQn +KSB8fCAoZS5hbHQgJiYgZS5rZXkgPT0gJ3JpZ2h0JykpICYmIG5leHQpIHsKCQkJ +CXRvcC5sb2NhdGlvbi5ocmVmID0gbmV4dC5nZXQoImhyZWYiKTsKCQkJCWUuc3Rv +cCgpOwoJCQl9IGVsc2UgaWYgKCgoZS5jb250cm9sICYmIGUua2V5ID09ICdsZWZ0 +JykgfHwgKGUuYWx0ICYmIGUua2V5ID09ICdsZWZ0JykpICYmIHByZXYpIHsKCQkJ +CXRvcC5sb2NhdGlvbi5ocmVmID0gcHJldi5nZXQoImhyZWYiKTsKCQkJCWUuc3Rv +cCgpOwoJCQl9CgkJfSk7Cgl9Cgl2YXIgc2VhcmNoID0gJCgic2VhcmNoIik7Cglp +ZiAoc2VhcmNoKSB7CgkJdmFyIGlucHV0IAkJPSBzZWFyY2gsCgkJCWxhYmVsIAkJ +PSBpbnB1dC5nZXRQYXJlbnQoKSwKCQkJbGFiZWxzcGFuIAk9IGxhYmVsLmdldEVs +ZW1lbnQoJ3NwYW4nKTsKCQlpZiAoaW5wdXQgJiYgbGFiZWwpIHsKCQkJCgkJCWlm +ICghaW5wdXQudmFsdWUpIHsKCQkJCWxhYmVsLmFkZENsYXNzKCJpbnB1dC1wbGFj +ZWhvbGRpbmciKTsKCQkJfQoKCQkJaW5wdXQuYWRkRXZlbnRzKHsKCQkJCSdmb2N1 +cyc6IGZ1bmN0aW9uICgpIHsKCQkJCQlpZiAoIWxhYmVsLm5vcGxhY2Vob2xkaW5n +KSB7CgkJCQkJCWxhYmVsLnJlbW92ZUNsYXNzKCJpbnB1dC1wbGFjZWhvbGRpbmci +KTsKCQkJCQkJbGFiZWwubm9wbGFjZWhvbGRpbmcgPSB0cnVlOwoJCQkJCX0KCQkJ +CX0sCgkJCQknYmx1cic6IGZ1bmN0aW9uICgpIHsKCQkJCQlpZiAoaW5wdXQudmFs +dWUgPT0gJycpIHsKCQkJCQkJbGFiZWwuYWRkQ2xhc3MoImlucHV0LXBsYWNlaG9s +ZGluZyIpOwoJCQkJCQlsYWJlbC5ub3BsYWNlaG9sZGluZyA9IGZhbHNlOwoJCQkJ +CX0KCQkJCX0sCgkJCQknY2hhbmdlJyA6IGZ1bmN0aW9uKCkgewoJCQkJCWlmICgh +bGFiZWwubm9wbGFjZWhvbGRpbmcpIHsKCQkJCQkJbGFiZWwucmVtb3ZlQ2xhc3Mo +ImlucHV0LXBsYWNlaG9sZGluZyIpOwoJCQkJCQlsYWJlbC5ub3BsYWNlaG9sZGlu +ZyA9IHRydWU7CgkJCQkJfQoJCQkJfQoJCQl9KQoJCQlsYWJlbHNwYW4uYWRkRXZl +bnQoJ21vdXNlZG93bicsZnVuY3Rpb24oKXsKCQkJCWlucHV0LmZvY3VzKCk7CgkJ +CQlyZXR1cm4gZmFsc2UKCQkJfSkKCQl9Cgl9Cgl2YXIgaGVscF90aXBzID0gJCQo +Jy5oZWxwLXRpcCcpOwoJaWYgKGhlbHBfdGlwcyAmJiBoZWxwX3RpcHMubGVuZ3Ro +KSB7CgkJdmFyIGN1cnJlbnRfdGlwID0gbnVsbDsKCQl2YXIgdGlwX2hpZGRpbmdf +dGltZW91dDsKCQkKCQl2YXIgaHRfbmljZV9ub2RlID0gJCgnaGVscC10aXAtdGV4 +dCcpOwoJCQlodF9uaWNlX25vZGUudGV4dF9ub2RlID0gaHRfbmljZV9ub2RlLmdl +dEVsZW1lbnQoJyNoZWxwLXRpcC10ZXh0LWNvbnRlbnQnKTsKCgkJdmFyIHNob3df +aGVscF90aXAgPSBmdW5jdGlvbih0ZXh0LG5vZGUpewoJCQljbGVhclRpbWVvdXQo +dGlwX2hpZGRpbmdfdGltZW91dCk7CgkJCWlmIChjdXJyZW50X3RpcCA9PSBub2Rl +KSB7cmV0dXJuIHRydWU7fQoJCQkKCQkJdmFyIHAgPSBub2RlLmdldFBvc2l0aW9u +KCk7CgkJCQoJCQl2YXIgcHggPSBwLnggKyBub2RlLmdldFN0eWxlKCd3aWR0aCcp +LnRvSW50KCkvMjsKCQkJdmFyIHB5ID0gcC55OwoJCQlub2RlCgkJCQoJCQlodF9u +aWNlX25vZGUuc3R5bGUudG9wID0gcHkgKyAncHgnOwoJCQlodF9uaWNlX25vZGUu +c3R5bGUubGVmdCA9IHB4ICsgJ3B4JzsKCQkJaWYgKHB4IDwgMTc5ICkgewoJCQkJ +aHRfbmljZV9ub2RlLmFkZENsYXNzKCdoZWxwLXRpcHMtdG9vLW11Y2gtbGVmdCcp +OwoJCQl9CgkJCQoJCQlodF9uaWNlX25vZGUudGV4dF9ub2RlLmlubmVySFRNTCA9 +IHRleHQ7CgkJCWh0X25pY2Vfbm9kZS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsK +CQkJY3VycmVudF90aXAgPSBodF9uaWNlX25vZGU7CgkJfQoJCXZhciBoaWRlX2hl +bHBfdGlwID0gZnVuY3Rpb24oKXsKCQkJdGlwX2hpZGRpbmdfdGltZW91dCA9IHNl +dFRpbWVvdXQoZnVuY3Rpb24oKXsKCQkJCWh0X25pY2Vfbm9kZS5zdHlsZS5kaXNw +bGF5ID0gJyc7CgkJCQlodF9uaWNlX25vZGUudGV4dF9ub2RlLnRleHRDb250ZW50 +ID0gJyc7CgkJCQlodF9uaWNlX25vZGUucmVtb3ZlQ2xhc3MoJ2hlbHAtdGlwcy10 +b28tbXVjaC1sZWZ0Jyk7CgkJCX0sMzMzKQoJCQkKCQl9CgkJCgkJZm9yICh2YXIg +aT0wLCBsID0gaGVscF90aXBzLmxlbmd0aDsgaSA8IGw7IGkrKykgewoJCQl2YXIg +aGVscF90aXBfbm9kZSA9IGhlbHBfdGlwc1tpXTsKCQkJCgkJCXZhciBoZWxwX3Rp +cF9ub2RlX2NoaWxkcyA9IGhlbHBfdGlwX25vZGUuZ2V0RWxlbWVudHMoJyonKTsK +CQkJaWYgKGhlbHBfdGlwX25vZGVfY2hpbGRzICYmIGhlbHBfdGlwX25vZGVfY2hp +bGRzLmxlbmd0aCkgewoJCQkJCgkJCQlmb3IgKHZhciBrPTAsIGc9IGhlbHBfdGlw +X25vZGVfY2hpbGRzLmxlbmd0aDsgayA8IGc7IGsrKykgewoJCQkJCWhlbHBfdGlw +X25vZGVfY2hpbGRzW2tdLmh0biA9IGhlbHBfdGlwX25vZGU7CgoJCQkJfTsKCQkJ +fQoJCQl0bS5sb2coJ3p6d3d3Jyk7CgkJCQoJCQloZWxwX3RpcF9ub2RlLmh0biA9 +IGhlbHBfdGlwX25vZGU7CgkJCQoJCQl2YXIgdGl0bGUgPSBoZWxwX3RpcF9ub2Rl +LnRpdGxlOwoJCQlpZiAodGl0bGUubWF0Y2goJ2JyLycpKSB7CgkJCQloZWxwX3Rp +cF9ub2RlLmhlbHBfdGlwID0gaGVscF90aXBfbm9kZS5nZXRFbGVtZW50KCcuaGVs +cC10aXAtdGV4dCcpLmlubmVySFRNTAoJCQl9IGVsc2UgewoJCQkJaGVscF90aXBf +bm9kZS5oZWxwX3RpcCA9IHRpdGxlOwoJCQl9CgkJCQoJCQloZWxwX3RpcF9ub2Rl +LnRpdGxlID0gJyc7CgkJCQoJCQloZWxwX3RpcF9ub2RlLmFkZEV2ZW50cyh7CgkJ +CQknbW91c2VvdmVyJzogZnVuY3Rpb24oZSl7IAoJCQkJCXNob3dfaGVscF90aXAo +ZS50YXJnZXQuaHRuLmhlbHBfdGlwLGUudGFyZ2V0Lmh0bik7CgkJCQl9LAoJCQkJ +J21vdXNlb3V0JzogaGlkZV9oZWxwX3RpcAoJCQl9KQoJCQkKCQkJCgkJfTsKCQlo +dF9uaWNlX25vZGUuYWRkRXZlbnRzKHsKCQkJJ21vdXNlb3Zlcic6IGZ1bmN0aW9u +KCl7IAoJCQkJY2xlYXJUaW1lb3V0KHRpcF9oaWRkaW5nX3RpbWVvdXQpOwoJCQl9 +LAoJCQknbW91c2VvdXQnOiBoaWRlX2hlbHBfdGlwCgkJfSkKCX0KfSk7Cg== + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline; filename=all.js +Content-Type: application/x-javascript; charset=utf-8; name=all.js +Content-Location: http://habrahabr.ru/js/1307631427/all.js +Content-Transfer-Encoding: Base64 + +CgovKiAgIGZhdm91cml0ZXMgICAqLwpmYXZzSGFuZGxlciA9IHsNCglidXR0b246 +e30sDQoJdXJsOiAnL2FqYXgvZmF2b3JpdGVzLycsDQoJeG1sOiB7DQoJCXJlc3Bv +bnNlTm9kZXM6IHsNCgkJCWVycm9yOiAnZXJyb3InLA0KCQkJcmVzdWx0OiAnbWVz +c2FnZScNCgkJfSwNCg0KCQlwYXJzZTogZnVuY3Rpb24oeG1sT2JqKXsNCgkJCXZh +ciB4bWxOb2RlcyA9IHt9Ow0KCQkJZm9yIChwcm9wIGluIGZhdnNIYW5kbGVyLnht +bC5yZXNwb25zZU5vZGVzKXsNCgkJCQl4bWxOb2Rlc1twcm9wXSA9IHhtbE9iai5n +ZXRFbGVtZW50c0J5VGFnTmFtZShmYXZzSGFuZGxlci54bWwucmVzcG9uc2VOb2Rl +c1twcm9wXSk7DQoJCQl9DQoJCQlyZXR1cm4geG1sTm9kZXM7DQoJCX0NCgl9LA0K +CWZhdm9yaXRlc1NlbmQgOiBmdW5jdGlvbiAoYnV0dG9uLCB0YXJnZXRfdHlwZSwg +dGFyZ2V0X2lkKSB7DQoJCXZhciBob2xkZXIgPSAkKGJ1dHRvbikuZ2V0UGFyZW50 +KCcuanMtdG9fZmF2c19ob2xkZXInKTsNCgkJaWYoaG9sZGVyLmhhc0NsYXNzKCd0 +by1mYXZzJykpIHsNCiAgICAJCXZhciBkYXRhID0gJ2FjdGlvbj1hZGQmdGFyZ2V0 +X3R5cGU9JysgdGFyZ2V0X3R5cGUgKycmdGFyZ2V0X2lkPScrIHRhcmdldF9pZDsN +CgkJfQ0KCQllbHNlIGlmIChob2xkZXIuaGFzQ2xhc3MoJ2Zhdl9hZGRlZCcpKXsN +CgkJCXZhciBkYXRhID0gJ2FjdGlvbj1yZW1vdmUmdGFyZ2V0X3R5cGU9JysgdGFy +Z2V0X3R5cGUgKycmdGFyZ2V0X2lkPScrIHRhcmdldF9pZDsNCgkJfQ0KCQlhamF4 +TG9hZFBvc3QoZmF2c0hhbmRsZXIudXJsLCBkYXRhLCBmYXZzSGFuZGxlci5mYXZv +cml0ZXNTZW5kT25sb2FkLCB3aW5kb3csIHtidXR0b246IGJ1dHRvbiwgdGFyZ2V0 +X3R5cGU6dGFyZ2V0X3R5cGUsIHRhcmdldF9pZDp0YXJnZXRfaWR9KTsNCgl9LA0K +DQoJZmF2b3JpdGVzU2VuZE9ubG9hZCA6IGZ1bmN0aW9uKGFqYXhPYmosIHBhcmFt +cykgew0KCQlpZihhamF4T2JqICYmIGFqYXhPYmoucmVzcG9uc2VYTUwpew0KDQoJ +CQl2YXIgeG1sT2JqID0gYWpheE9iai5yZXNwb25zZVhNTDsNCgkJCXZhciB4bWxO +b2RlcyA9IGZhdnNIYW5kbGVyLnhtbC5wYXJzZSh4bWxPYmopOw0KDQoJCQlpZih4 +bWxOb2Rlcy5lcnJvciAmJiB4bWxOb2Rlcy5lcnJvci5sZW5ndGgpew0KCQkJCXZh +ciBlcnJvcnNfbGVuZ3RoID0geG1sTm9kZXMuZXJyb3IubGVuZ3RoOw0KCQkJCWZv +ciAodmFyIGkgPSAwOyBpIDwgZXJyb3JzX2xlbmd0aDsgaSsrKSB7DQoJCQkJCWZ1 +dHVfYWxlcnQoRkFULmZhdm91cml0ZXNfaGVhZGVyLCB4bWxOb2Rlcy5lcnJvcltp +XS5maXJzdENoaWxkLmRhdGEsIHRydWUsICdlcnJvcicpOw0KCQkJCX0NCgkJCX0N +Cg0KCQkJdmFyIHJlc3VsdHMgPSB4bWxPYmouZ2V0RWxlbWVudHNCeVRhZ05hbWUo +J3Jlc3VsdCcpOw0KCQkJaWYoeG1sTm9kZXMucmVzdWx0ICYmIHhtbE5vZGVzLnJl +c3VsdC5sZW5ndGgpIHsNCg0KDQoJCQkJdmFyIG5vZGUgPSBudWxsOw0KCQkJCWlm +IChyZXN1bHRzWzBdKSB7DQoJCQkJCW5vZGUgPSByZXN1bHRzWzBdOw0KCQkJCX0N +Cg0KDQoJCQkJdmFyIHByZXZpb3VzX29mZiA9ICQocGFyYW1zLmJ1dHRvbikuZ2V0 +UGFyZW50KCcuanMtdG9fZmF2c19ob2xkZXInKS5oYXNDbGFzcygndG8tZmF2cycp +Ow0KCQkJCWlmKHByZXZpb3VzX29mZikgew0KDQoJCQkJCWlmIChub2RlKQ0KCQkJ +CQkJc3dpdGNoIChub2RlLmdldEF0dHJpYnV0ZSgidHlwZSIpKSB7DQoJCQkJCQkJ +Y2FzZSAnY29tcGFueV9jb21tZW50cyc6DQoJCQkJCQkJY2FzZSAnY29tbWVudHMn +Og0KCQkJCQkJCQlmdXR1X2FsZXJ0KEZBVC5mYXZvdXJpdGVzX2hlYWRlciwgRkFU +LmZhdm91cml0ZXNfcmVxdWVzdF9jb21tZW50X2FkZF9zdWNjZXNzLCBmYWxzZSwg +J21lc3NhZ2UnKTsNCgkJCQkJCQkJYnJlYWs7DQoJCQkJCQkJY2FzZSAncG9zdHMn +Og0KCQkJCQkJCQlmdXR1X2FsZXJ0KEZBVC5mYXZvdXJpdGVzX2hlYWRlciwgRkFU +LmZhdm91cml0ZXNfcmVxdWVzdF9wb3N0X2FkZF9zdWNjZXNzLCBmYWxzZSwgJ21l +c3NhZ2UnKTsNCgkJCQkJCQkJYnJlYWs7DQoJCQkJCQl9DQoJCQkJfQ0KCQkJCWVs +c2Ugew0KDQoJCQkJCWlmIChub2RlKQ0KCQkJCQkJc3dpdGNoIChub2RlLmdldEF0 +dHJpYnV0ZSgidHlwZSIpKSB7DQoJCQkJCQkJY2FzZSAnY29tcGFueV9jb21tZW50 +cyc6DQoJCQkJCQkJY2FzZSAnY29tbWVudHMnOg0KCQkJCQkJCQlmdXR1X2FsZXJ0 +KEZBVC5mYXZvdXJpdGVzX2hlYWRlciwgRkFULmZhdm91cml0ZXNfcmVxdWVzdF9j +b21tZW50X3JlbW92ZV9zdWNjZXNzLCBmYWxzZSwgJ21lc3NhZ2UnKTsNCgkJCQkJ +CQkJYnJlYWs7DQoJCQkJCQkJY2FzZSAncG9zdHMnOg0KCQkJCQkJCQlmdXR1X2Fs +ZXJ0KEZBVC5mYXZvdXJpdGVzX2hlYWRlciwgRkFULmZhdm91cml0ZXNfcmVxdWVz +dF9wb3N0X3JlbW92ZV9zdWNjZXNzLCBmYWxzZSwgJ21lc3NhZ2UnKTsNCgkJCQkJ +CQkJYnJlYWs7DQoJCQkJCQl9DQoJCQkJCQlpZiAoIShwYXJhbXMudGFyZ2V0X3R5 +cGUgPT0gJ2NvbW1lbnRzJykpIHsNCgkJCQkJCQl0ZW1wLmZhdm91cml0ZXNfYWRk +ICYmIHRlbXAuZmF2b3VyaXRlc19hZGQuY2xlYXJPd25UYWdzKCQocGFyYW1zLmJ1 +dHRvbikpOw0KCQkJCQkJfQ0KDQoJCQkJfQ0KDQoJCQkJaWYgKHBhcmFtcy50YXJn +ZXRfdHlwZSA9PSAncG9zdHMnIHx8IHBhcmFtcy50YXJnZXRfdHlwZSA9PSAncXVl +c3Rpb25zJykgew0KCQkJCQkkKHBhcmFtcy5idXR0b24pLmdldFBhcmVudCgnLmpz +LXRvX2ZhdnNfaG9sZGVyJykuc3dpdGNoQ2xhc3MoJ2Zhdl9hZGRlZCcsICd0by1m +YXZzJyk7DQoNCgkJCQkJdmFyIGRpdiA9IHBhcmFtcy5idXR0b24uZ2V0UGFyZW50 +KCdkaXYuaGVudHJ5Jyk7DQogICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9 +IGRpdi5nZXRFbGVtZW50KCcuZmF2c19jb3VudCcpOw0KICAgICAgICAgICAgICAg +ICAgICB2YXIgcHJldiA9IHBhcnNlSW50KGNvdW50LmdldCgndGV4dCcpKSB8fCAw +Ow0KCQkJCQlpZiAocHJldmlvdXNfb2ZmKSB7DQogICAgICAgICAgICBjb3VudC5z +ZXQoJ3RleHQnLCBwcmV2ICsgMSk7DQoJCQkJCQlwYXJhbXMuYnV0dG9uLnRpdGxl +ID0n0KPQtNCw0LvQuNGC0Ywg0LjQtyDQuNC30LHRgNCw0L3QvdC+0LPQvic7DQog +ICAgCQkJCWlmIChwYXJhbXMudGFyZ2V0X3R5cGUgPT0gJ3F1ZXN0aW9ucycpIHsN +Cg0KICAgIAkJCQl9ZWxzZXsNCgkJCQkJCSAgdmFyIHRhZ3MgPSBkaXYuZ2V0RWxl +bWVudCgnLnRhZ3MnKTsNCiAgICAJCQkJICAobmV3IEVsZW1lbnQoJ2xpJywgeyAn +Y2xhc3MnOiAnZmF2b3VyaXRlc19lZGl0X3RhZ3MnLCAnaHRtbCc6ICc8YSBvbmNs +aWNrPSJ0ZW1wLmZhdm91cml0ZXNfYWRkLmNoYW5nZV90YWdzKHRoaXMpOyByZXR1 +cm4gZmFsc2UiIGhyZWY9IiMiPtCY0LfQvNC10L3QuNGC0Ywg0YHQstC+0Lgg0LzQ +tdGC0LrQuDwvYT4nfSkpLmluamVjdCh0YWdzKTsNCiAgICAJCQkJfQ0KCQkJCQl9 +IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDEgPT0gcHJldikg +ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50LnNldCgndGV4dCcs +ICcnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICBjb3VudC5zZXQoJ3RleHQnLCBwcmV2IC0gMSkN +CiAgICAgICAgICAgICAgICAgICAgICAgIH0NCgkJCQkJCXBhcmFtcy5idXR0b24u +dGl0bGUgPSfQlNC+0LHQsNCy0LjRgtGMINCyINC40LfQsdGA0LDQvdC90L7QtScN +CgkJCQkJfQ0KCQkJCX0gZWxzZSBpZiAocGFyYW1zLnRhcmdldF90eXBlID09ICdj +b21tZW50cycpIHsNCg0KCQkJCQkkKHBhcmFtcy5idXR0b24pLmdldFBhcmVudCgn +LmpzLXRvX2ZhdnNfaG9sZGVyJykuc3dpdGNoQ2xhc3MoJ2Zhdl9hZGRlZCcsICd0 +by1mYXZzJyk7DQoJCQkJfQ0KDQoJCQl9DQoJCX0NCgl9DQp9Ow0KDQp0bS5pbml0 +LmFkZChmdW5jdGlvbiAoKSB7DQoJdGVtcC5mYXZvdXJpdGVzX2FkZCA9IHsNCgkJ +J2luaXQnOiBmdW5jdGlvbiAoKSB7DQoJCQlpZiAodGhpcy5pbml0ZWQpIHsgcmV0 +dXJuOyB9DQoJCQl2YXIgc2VsZiA9IHRoaXM7DQoJCQl0aGlzLmluaXRlZCA9IHRy +dWU7DQoJCQl0aGlzLmhpZGRlbl9jb250YWluZXIgPSAkKCdmYXZvdXJpdGVzX2Fk +ZF9oaWRkZW4nKTsNCgkJCXRoaXMuZm9ybSA9ICQoJ2Zhdm91cml0ZXNfYWRkX2Zv +cm0nKTsNCgkJCXRoaXMuYWRkZXIgPSAkKCdmYXZvdXJpdGVzX2FkZCcpOw0KCQkJ +dGhpcy50YWdzID0gJCgnZmF2b3VyaXRlc19hZGRfdGFncycpOw0KCQkJdGhpcy5p +ZCA9ICQoJ2Zhdm91cml0ZXNfYWRkX2lkJyk7DQoJCQl0aGlzLmJ1dHRvbiA9ICQo +J2Zhdm91cml0ZXNfYWRkX3N1Ym1pdCcpOw0KDQoJCQlCcm93c2VyLkVuZ2luZS50 +cmlkZW50ICYmIHRoaXMudGFncy5hZGRFdmVudCgna2V5cHJlc3MnLCBmdW5jdGlv +biAoZSkgew0KCQkJCWlmIChlLmtleSA9PSAnZW50ZXInKSB7DQoJCQkJCWUuc3Rv +cCgpOw0KCQkJCQlzZWxmLmZvcm0uYXR0YWNoZWQuc3VibWl0KCk7DQoJCQkJfQ0K +CQkJfSk7DQoNCgkJCXZhciBjYW5jZWwgPSAkKCdmYXZvdXJpdGVzX2FkZF9jYW5j +ZWwnKTsNCg0KCQkJY2FuY2VsICYmIGNhbmNlbC5hZGRFdmVudCgnY2xpY2snLCBm +dW5jdGlvbiAoZSkgew0KCQkJCWUuc3RvcCgpOw0KCQkJCXNlbGYuaGlkZSgpOw0K +CQkJfSk7DQoJCX0sDQoJCSdzaG93JzogZnVuY3Rpb24gKGNvbnRhaW5lciwgaWQs +IHRhZ3Nfc3RyaW5nKSB7DQoJCQkhdGhpcy5pbml0ZWQgJiYgdGhpcy5pbml0KCk7 +DQoJCQl0aGlzLmlkLnZhbHVlID0gaWQ7DQoJCQlpZiAodGFnc19zdHJpbmcpIHsN +CgkJCQl0aGlzLnRhZ3MudmFsdWUgPSB0YWdzX3N0cmluZzsNCgkJCQl0aGlzLmJ1 +dHRvbi52YWx1ZSA9ICfQodC+0YXRgNCw0L3QuNGC0YwnOw0KCQkJfQ0KCQkJdGhp +cy5jb250YWluZXIgPSBjb250YWluZXI7DQoJCQljb250YWluZXIgJiYgdGhpcy5h +ZGRlci5pbmplY3QoY29udGFpbmVyKTsNCgkJCXRoaXMudGFncy5mb2N1cygpOw0K +CQl9LA0KCQknaGlkZSc6IGZ1bmN0aW9uICgpIHsNCgkJCXRoaXMuYWRkZXIuaW5q +ZWN0KHRoaXMuaGlkZGVuX2NvbnRhaW5lcik7DQoJCQl0aGlzLnRhZ3MudmFsdWUg +PSAnJzsNCgkJCXRoaXMuaWQudmFsdWUgPSAnJzsNCgkJCXRoaXMuY29udGFpbmVy +ID0gbnVsbDsNCgkJCXRoaXMuYnV0dG9uLnZhbHVlID0gJ9CU0L7QsdCw0LLQuNGC +0Ywg0LIg0LjQt9Cx0YDQsNC90L3QvtC1JzsNCgkJfSwNCgkJJ2NoYW5nZV90YWdz +JzogZnVuY3Rpb24gKGJ1dHRvbikgew0KCQkJdmFyIGNvbnRhaW5lciA9ICQoYnV0 +dG9uKS5nZXRQYXJlbnQoJ2Rpdi5oZW50cnknKSwNCgkJCQlpZCA9IGNvbnRhaW5l +ci5nZXRFbGVtZW50KCcuZW50cnktaW5mbycpLmlkLnJlcGxhY2UoJ2luZm9wYW5l +bCcsICcnKSwNCgkJCQl0YWdzX2hvbGRlciA9ICQoYnV0dG9uLnBhcmVudE5vZGUu +cGFyZW50Tm9kZSksDQoJCQkJdGFncyA9IHRhZ3NfaG9sZGVyLmdldEVsZW1lbnRz +KCdsaS5mYXYgYScpLA0KCQkJCXRhZ3Nfc3RyaW5nID0gJyc7DQoNCg0KCQkJZm9y +ICh2YXIgaSA9IDAsIGwgPSB0YWdzLmxlbmd0aDsgaTxsOyBpKyspIHsNCgkJCQko +aSE9MCkgJiYgKHRhZ3Nfc3RyaW5nICs9ICcsICcpOw0KCQkJCXRhZ3Nfc3RyaW5n +ICs9IHRhZ3NbaV0uaW5uZXJIVE1MOw0KCQkJfQ0KCQkJdGhpcy5zaG93KGNvbnRh +aW5lciwgaWQsIHRhZ3Nfc3RyaW5nKTsNCgkJfSwNCgkJJ2NsZWFyT3duVGFncyc6 +IGZ1bmN0aW9uIChidXR0b24pIHsNCgkJCXRoaXMuY29udGFpbmVyID0gYnV0dG9u +LmdldFBhcmVudCgnZGl2LmhlbnRyeScpOw0KCQkJdmFyIGZhdiA9IHRoaXMuY29u +dGFpbmVyLmdldEVsZW1lbnQoJ2Rpdi5qcy10b19mYXZzX2hvbGRlcicpOw0KCQkJ +ZmF2ICYmIGZhdi5yZW1vdmVDbGFzcygndG8tZmF2cycpLmFkZENsYXNzKCdmYXZf +YWRkZWQnKTsNCgkJCXRoaXMuc2V0VGFncygnJywgdHJ1ZSk7DQoJCX0sDQoJCSdz +ZXRUYWdzJzogZnVuY3Rpb24gKHRhZ3MsIHVuZmF2KSB7DQoJCQlpZiAoIXRoaXMu +Y29udGFpbmVyKSB7IHJldHVybjsgfQ0KDQoJCQl2YXIgdGFnc19ob2xkZXIgPSB0 +aGlzLmNvbnRhaW5lci5nZXRFbGVtZW50KCd1bC50YWdzJyk7DQoNCgkJCWlmICgh +dGFnc19ob2xkZXIpIHsNCgkJCQlpZiAodGFncykgew0KCQkJCQl2YXIgY29udGVu +dCA9IHRoaXMuY29udGFpbmVyLmdldEVsZW1lbnQoJ2Rpdi5jb250ZW50Jyk7DQoJ +CQkJCXRhZ3NfaG9sZGVyID0gKG5ldyBFbGVtZW50KCd1bCcsIHsgJ2NsYXNzJzog +J3RhZ3MgJ30pKS5pbmplY3QoY29udGVudCwgJ2FmdGVyJyk7DQoJCQkJfQ0KCQkJ +fQ0KCQkJaWYgKHRhZ3NfaG9sZGVyKSB7DQoJCQkJdmFyIGVkaXRfdGFncyA9IHRh +Z3NfaG9sZGVyLmdldEVsZW1lbnQoJ2xpLmZhdm91cml0ZXNfZWRpdF90YWdzJyk7 +DQoNCgkJCQl0YWdzX2hvbGRlci5nZXRFbGVtZW50cygnbGkuZmF2JykuZGlzcG9z +ZSgpOw0KDQoJCQkJaWYgKHVuZmF2KSB7DQoJCQkJICAgIGlmIChlZGl0X3RhZ3Mp +IGVkaXRfdGFncy5kaXNwb3NlKCk7DQoJCQkJfSBlbHNlIHsNCgkJCQkJaWYgKCFl +ZGl0X3RhZ3MpIHsNCgkJCQkJCWVkaXRfdGFncyA9IChuZXcgRWxlbWVudCgnbGkn +LCB7ICdjbGFzcyc6ICdmYXZvdXJpdGVzX2VkaXRfdGFncycsICdodG1sJzogJzxh +IG9uY2xpY2s9InRlbXAuZmF2b3VyaXRlc19hZGQuY2hhbmdlX3RhZ3ModGhpcyk7 +IHJldHVybiBmYWxzZTsiIGhyZWY9IiMiPtCY0LfQvNC10L3QuNGC0Ywg0YHQstC+ +0Lgg0LzQtdGC0LrQuDwvYT4nIH0pKS5pbmplY3QodGFnc19ob2xkZXIpOw0KCQkJ +CQl9DQoJCQkJfQ0KDQoJCQkJdmFyIGVtcHR5ID0gISh0YWdzX2hvbGRlci5nZXRF +bGVtZW50cygnbGknKS5sZW5ndGggKyAoZWRpdF90YWdzID8gLTEgOiAwICkpOw0K +DQoJCQkJaWYgKCF1bmZhdiAmJiB0YWdzKSB7DQoJCQkJCXZhciB0YWdzID0gdGFn +cy5zcGxpdCgnLCcpOw0KCQkJCQlmb3IodmFyIGk9MCwgbD10YWdzLmxlbmd0aDsg +aTxsOyBpKyspIHsNCgkJCQkJCXZhciB0YWcgPSB0YWdzW2ldLmNsZWFuKCk7DQoJ +CQkJCQkobmV3IEVsZW1lbnQoJ2xpJywgeyAnY2xhc3MnOiAnZmF2JywgJ2h0bWwn +OiAoKGVtcHR5ICYmIGk9PTApID8gJycgOiAnLCAnKSArICc8YSBocmVmPSJodHRw +Oi8vJyArIHRlbXAudXNlci5sb2dpbiArICcuJyArIHRlbXAuYmFzZV9zaG9ydCAr +ICcvZmF2b3JpdGVzL3RhZy8nICsgdGFnICsgJyI+JyArIHRhZyArICc8L2E+J30p +KS5pbmplY3QoZWRpdF90YWdzLCAnYmVmb3JlJyk7DQoJCQkJCX0NCgkJCQl9DQoN +CgkJCQlpZiAoIXRhZ3NfaG9sZGVyLmdldEVsZW1lbnRzKCdsaScpLmxlbmd0aCkg +eyB0YWdzX2hvbGRlci5kaXNwb3NlKCk7IH0NCg0KCQkJCXRoaXMuY29udGFpbmVy +ID0gbnVsbDsNCgkJCX0NCgkJfQ0KCX07DQp9KTsNCgoKCgovKiAgIGZ1dHVfYWxl +cnQgICAqLwpmdW5jdGlvbiBmdXR1X2FsZXJ0KGhlYWRlciwgdGV4dCwgY2xvc2Us +IGNsYXNzTmFtZSkgew0KCWlmICghJCgnZnV0dV9hbGVydHNfaG9sZGVyJykpIHsN +CgkJdmFyIGZ1dHVBbGVydE91dGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn +ZGl2Jyk7DQoJCWZ1dHVBbGVydE91dGVyLmNsYXNzTmFtZSA9ICdmdXR1X2FsZXJ0 +X291dGVyJzsNCgkJZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmdXR1QWxlcnRP +dXRlcik7DQoJCXZhciBmdXR1QWxlcnRGcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVs +ZW1lbnQoJ2RpdicpOw0KCQlmdXR1QWxlcnRGcmFtZS5jbGFzc05hbWUgPSAnZnJh +bWUnOw0KCQlmdXR1QWxlcnRPdXRlci5hcHBlbmRDaGlsZChmdXR1QWxlcnRGcmFt +ZSk7DQoJCQ0KCQl2YXIgZnV0dUFsZXJ0c0hvbGRlciA9IGRvY3VtZW50LmNyZWF0 +ZUVsZW1lbnQoJ2RpdicpOw0KCQlmdXR1QWxlcnRzSG9sZGVyLmlkID0gJ2Z1dHVf +YWxlcnRzX2hvbGRlcic7DQoJCWZ1dHVBbGVydHNIb2xkZXIuY2xhc3NOYW1lID0g +J2Z1dHVfYWxlcnRzX2hvbGRlcic7DQoJCWZ1dHVBbGVydEZyYW1lLmFwcGVuZENo +aWxkKGZ1dHVBbGVydHNIb2xkZXIpOw0KCQkNCgl9IGVsc2Ugew0KDQoNCgl9DQoJ +dmFyIGZ1dHVBbGVydCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOw0K +CWZ1dHVBbGVydC5jbGFzc05hbWUgPSAnZnV0dV9hbGVydCAnICsgY2xhc3NOYW1l +Ow0KCSQoJ2Z1dHVfYWxlcnRzX2hvbGRlcicpLmFwcGVuZENoaWxkKGZ1dHVBbGVy +dCk7DQoNCgl2YXIgZnV0dUFsZXJ0SGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxl +bWVudCgnZGl2Jyk7DQoJZnV0dUFsZXJ0SGVhZGVyLmNsYXNzTmFtZSA9ICdmdXR1 +X2FsZXJ0X2hlYWRlcic7DQoJZnV0dUFsZXJ0LmFwcGVuZENoaWxkKGZ1dHVBbGVy +dEhlYWRlcik7DQoJDQoJZnV0dUFsZXJ0SGVhZGVyLmlubmVySFRNTCA9IGhlYWRl +cjsNCglpZiAoY2xvc2UpIHsNCgkJdmFyIGZ1dHVBbGVydENsb3NlQnV0dG9uID0g +ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOw0KCQlmdXR1QWxlcnRDbG9zZUJ1 +dHRvbi5ocmVmID0gJyMnOw0KCQlmdXR1QWxlcnRDbG9zZUJ1dHRvbi5jbGFzc05h +bWUgPSAnZnV0dV9hbGVydF9jbG9zZV9idXR0b24nOw0KCQlmdXR1QWxlcnRDbG9z +ZUJ1dHRvbi5vbmNsaWNrID0gZnVuY3Rpb24oZXYpIHsNCgkJCWlmKCFldikgew0K +CQkJCWV2PXdpbmRvdy5ldmVudDsNCgkJCX0NCgkJCWlmICghZG9jdW1lbnQuYWxs +KSBldi5wcmV2ZW50RGVmYXVsdCgpOyBlbHNlIGV2LnJldHVyblZhbHVlID0gZmFs +c2U7DQoJCQkkKGZ1dHVBbGVydCkuZGlzcG9zZSgpDQoJCX0NCgkJZnV0dUFsZXJ0 +LmFwcGVuZENoaWxkKGZ1dHVBbGVydENsb3NlQnV0dG9uKTsNCgkJDQoJCXZhciBm +dXR1QWxlcnRDbG9zZUJ1dHRvbkljb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50 +KCdpbWcnKTsNCgkJZnV0dUFsZXJ0Q2xvc2VCdXR0b25JY29uLnNyYyA9ICcvaS9i +dXR0b25zL2J0bl9jbG9zZS5naWYnOw0KCQlmdXR1QWxlcnRDbG9zZUJ1dHRvbi5h +cHBlbmRDaGlsZChmdXR1QWxlcnRDbG9zZUJ1dHRvbkljb24pOw0KCX0NCgkNCgkN +Cgl2YXIgZnV0dUFsZXJ0VGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp +dicpOw0KCWZ1dHVBbGVydFRleHQuY2xhc3NOYW1lID0gJ2Z1dHVfYWxlcnRfdGV4 +dCc7DQoJZnV0dUFsZXJ0LmFwcGVuZENoaWxkKGZ1dHVBbGVydFRleHQpOw0KDQoJ +DQoJZnV0dUFsZXJ0VGV4dC5pbm5lckhUTUwgPSB0ZXh0Ow0KCQ0KCWZ1dHVBbGVy +dC5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7DQoJZnV0dUFsZXJ0LnN0eWxl +LnRvcCA9ICcwJzsNCglmdXR1QWxlcnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7 +DQoNCgkNCglpZiAoIWNsb3NlKSB7DQoJCSQoZnV0dUFsZXJ0KS5hZGRFdmVudCgi +Y2xpY2siLGZ1bmN0aW9uKCl7DQoJCQkkKGZ1dHVBbGVydCkuZGlzcG9zZSgpDQoJ +CX0pDQoJCXNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyAkKGZ1dHVBbGVydCkuZGlz +cG9zZSgpIH0sIDMwMDApOw0KCQkNCgl9DQp9DQoNCi8vIEZ1dHUgQWxlcnQgVGV4 +dHMNCnZhciBGQVQgPSB7DQoJcHJlbG9hZGVyIDogJ9CS0LDRiCDQt9Cw0L/RgNC+ +0YEg0L7RgtC/0YDQsNCy0LvQtdC9INC/0L4g0YHQtdC60YDQtdGC0L3QvtC5INC7 +0LjQvdC40LguINCW0LTQuNGC0LUg0L/QvtC20LDQu9GD0LnRgdGC0LAg0L7RgtCy +0LXRgtCwJywNCgllbXB0eTogJ9Cd0YMg0LTQu9GPINC90LDRh9Cw0LvQsCDRgdC6 +0LDQttC40YLQtSwg0YfRgtC+INCy0Ysg0L3QsNC80LXRgNC10L3RiyDQtNC10LvQ +sNGC0YwnLA0KDQoJLy8g0L/RgNC+0YTQuNC70YwNCglwcm9maWxlX2hlYWRlciA6 +ICfQpdCw0LHRgNCw0YXQsNCx0YAgLSDQndCw0YHRgtGA0L7QudC60LgnLA0KDQoJ +Ly8g0YDQtdC30Y7QvNC1DQoJcmVzdW1lX2hlYWRlciA6ICfQpdCw0LHRgNCw0YXQ +sNCx0YAg4oCUINCg0LXQt9GO0LzQtScsDQoJDQoJLy8g0L/QvtGH0YLQsA0KCW1h +aWxfaGVhZGVyIDogJ9Cl0LDQsdGA0LDRhdCw0LHRgCDigJQg0J/QvtGH0YLQsCcs +DQoJbWFpbF9sZXR0ZXJfc2VuZF9yZXF1ZXN0IDogJ9CS0Ysg0L7RgtC/0YDQsNCy +0LjQu9C4INC30LDQv9GA0L7RgSDQvdCwINC+0YLQv9GA0LDQstC60YMg0L/QuNGB +0YzQvNCwLicsDQoJbWFpbF9sZXR0ZXJfZGVsZXRlIDogJ9Cf0LjRgdGM0LzQviDR +g9C00LDQu9C10L3QvicsDQoNCgkvLyDQutC+0LzQvNC10L3RgtCw0YDQuNC4DQoJ +Y29tbWVudHNfaGVhZGVyIDogJ9Cl0LDQsdGA0LDRhdCw0LHRgCDigJQg0JrQvtC8 +0LzQtdC90YLQsNGA0LjQuCcsDQoJY29tbWVudHNfZXJyb3JfYmxhbmtfbWVzc2Fn +ZSA6ICfQktCy0LXQtNC40YLQtSDRh9GC0L4t0L3QuNCx0YPQtNGMIScsDQoJY29t +bWVudHNfYWRkX3N1Y2Nlc3MgOiAn0JLRiyDQtNC+0LHQsNCy0LjQu9C4INC60L7Q +vNC80LXQvdGC0LDRgNC40LkuJywNCgljb21tZW50c19hZGRfcmVxdWVzdCA6ICfQ +ktGLINC+0YLQv9GA0LDQstC40LvQuCDQt9Cw0L/RgNC+0YEg0L3QsCDQtNC+0LHQ +sNCy0LvQtdC90LjQtSDQutC+0LzQvNC10L3RgtCw0YDQuNGPLicsDQoNCgkvLyDQ +s9C+0YHQvtCy0LDQvdC40LUNCgl2b3RpbmdzX2hlYWRlciA6ICfQpdCw0LHRgNCw +0YXQsNCx0YAg4oCUINCT0L7Qu9C+0YHQvtCy0LDQvdC40Y8nLA0KCXZvdGluZ3Nf +dW5rbm93bl9lcnJvciA6ICfQndC10L7Qv9C+0LfQvdCw0L3QvdCw0Y8g0YHRgtGA +0LDQvdC90LDRjyDQvtGI0LjQsdC60LAnLA0KCXZvdGluZ3NfZXJyb3Jfc2VsZiA6 +ICfQk9C+0LvQvtGB0L7QstCw0YLRjCDQt9CwINGB0LLQvtC4INCy0LXRidC4INC9 +0LXQu9GM0LfRjycsDQoJdm90aW5nc19lcnJvcl9wcm9oaWJpdGVkIDogJ9CS0LDQ +vCDQt9Cw0L/RgNC10YnQtdC90L4g0LfQtNC10YHRjCDQs9C+0LvQvtGB0L7QstCw +0YLRjCcsDQoJdm90aW5nc19lcnJvcl9pc19leHBpcmVkIDogJ9CS0YDQtdC80Y8g +0LPQvtC70L7RgdC+0LLQsNC90LjRjyDQv9GA0L7RiNC70L4nLA0KCXZvdGluZ3Nf +ZXJyb3Jfbm9fYWNjZXNzIDogJ9Ct0YLQviDQtNC10LnRgdGC0LLQuNC1INC00L7R +gdGC0YPQv9C90L4g0YLQvtC70YzQutC+INC00LvRjyDQt9Cw0YDQtdCz0LjRgdGC +0YDQuNGA0L7QstCw0L3QvdGL0YUg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9C10Lkn +LA0KDQoJLy8g0LHQu9C+0LPQuA0KCWJsb2dzOiB7DQoJCWhlYWRlcjogJ9Cl0LDQ +sdGA0LDRhdCw0LHRgCDigJQg0JHQu9C+0LPQuCcsDQoJCWRpc2FibGVkOiAn0JLQ +sNGI0LAg0L/RgNC+0YHRjNCx0LAg0L4g0L/QvtC00L/QuNGB0LrQtS/QstGB0YLR +g9C/0LvQtdC90LjQuCDQsiDQsdC70L7QsyDRg9C20LUg0LHRi9C70LAg0L7RgtC/ +0YDQsNCy0LvQtdC90LAg0LzQvtC00LXRgNCw0YLQvtGA0YMnLA0KCQllbXB0eV9m +aWVsZDogJ9Cd0YMg0LLQstC10LTQuNGC0LUg0YXQvtGC0Ywg0YfRgtC+LdC90LjQ +sdGD0LTRjCEnLA0KCQlibG9nX2pvaW46ICfQktGLINCy0YHRgtGD0L/QuNC70Lgg +0LIg0LHQu9C+0LMnLA0KCQlibG9nX2xlYXZlOiAn0JLRiyDQv9C+0LrQuNC90YPQ +u9C4INCx0LvQvtCzJw0KCX0sDQoNCg0KCS8vINGA0LXQs9C40YHRgtGA0LDRhtC4 +0Y8NCglyZWdpc3RyYXRpb246IHsNCgkJaGVhZGVyOiAn0KXQsNCx0YDQsNGF0LDQ +sdGAIOKAlCDQoNC10LPQuNGB0YLRgNCw0YbQuNGPJywNCgkJZXJyb3I6ICfQntGI +0LjQsdC60LA6INC/0YDQvtCy0LXRgNGM0YLQtSDQv9GA0LDQstC40LvRjNC90L7R +gdGC0Ywg0LfQsNC/0L7Qu9C90LXQvdC40Y8g0YTQvtGA0LzRiycNCgl9LA0KDQoJ +Ly8g0L/QvtGB0YLRiw0KCXBvc3RzX2hlYWRlciA6ICfQpdCw0LHRgNCw0YXQsNCx +0YAg4oCUINCf0YPQsdC70LjQutCw0YbQuNC4JywNCglwb3N0c19zbGlkZXNob3df +YWRkIDogJ9Ch0LvQsNC50LTRiNC+0YMg0LTQvtCx0LDQstC70LXQvdC+JywNCg0K +CS8vINCU0L7QsdCw0LLQu9C10L3QuNC1INCyINC00YDRg9C30YzRjw0KCWZyaWVu +ZGxpZXJfaGVhZGVyIDogJ9Cl0LDQsdGA0LDRhdCw0LHRgCDigJQg0JTRgNGD0LfR +jNGPJywNCglmcmllbmRsaWVyX3Vua25vd25fZXJyb3IgOiAn0J3QtdC+0L/QvtC3 +0L3QsNC90L3QsNGPINGB0YLRgNCw0L3QvdCw0Y8g0L7RiNC40LHQutCwJywNCg0K +CS8vINCd0LDRgdGC0YDQvtC50LrQuA0KCXVzZXJfc2V0dGluZ3NfaGVhZGVyIDog +J9Cl0LDQsdGA0LDRhdCw0LHRgCDigJQg0J3QsNGB0YLRgNC+0LnQutC4INC/0L7Q +u9GM0LfQvtCy0LDRgtC10LvRjycsDQoJdXNlcl9zZXR0aW5nc19zYXZlX3N1Y2Nl +c3MgOiAn0J3QsNGB0YLRgNC+0LnQutC4INC+0LHQvdC+0LLQu9C10L3RiycsDQoJ +dXNlcl9zZXR0aW5nc191bmtub3duX2Vycm9yIDogJ9Cd0LXQuNC30LLQtdGB0YLQ +vdCw0Y8g0L7RiNC40LHQutCwJywNCgkNCgkvLyDQmtCw0YDRgtCwINCx0LvQvtCz +0L7Qsg0KCWJsb2dfbWFwX2hlYWRlciA6ICfQpdCw0LHRgNCw0YXQsNCx0YAg4oCU +INCa0LDRgNGC0LAg0LHQu9C+0LPQvtCyJywNCglibG9nX2Vycm9yX25vX2JyYW5k +IDogJ9Cc0LDRgNC60LAg0L3QtSDQvdCw0LnQtNC10L3QsCcsDQoJYmxvZ19lcnJv +cl9ub19tb2RlbCA6ICfQnNC+0LTQtdC70Ywg0L3QtSDQvdCw0LnQtNC10L3QsCcs +DQoJYmxvZ19lcnJvcl9ub19ibG9nIDogJ9CR0LvQvtCzINC90LUg0L3QsNC50LTQ +tdC9JywNCgkNCgkvLyDQmtCw0YDRgtCwDQoJZ21hcF9oZWFkZXIgOiAn0KXQsNCx +0YDQsNGF0LDQsdGAIOKAlCDQmtCw0YDRgtGLJywNCglnbWFwX21hcmtlcl9hZGRf +c3VjY2VzcyA6ICfQntCx0YrQtdC60YIg0LTQvtCx0LDQstC70LXQvScsDQoJZ21h +cF9tYXJrZXJfYWRkX25vX21hcmtlciA6ICfQn9C+0LbQsNC70YPQudGB0YLQsCwg +0LrQu9C40LrQvdC40YLQtSDQvdCwINC60LDRgNGC0YMg0LTQu9GPINC00L7QsdCw +0LLQu9C10L3QuNGPINC+0LHRitC10LrRgtCwJywNCglnbWFwX3NlYXJjaF9wbGFj +ZV9ub19hZGRyZXNzX2Vycm9yIDogJ9Cf0L7QttCw0LvRg9C50YHRgtCwLCDRg9GC +0L7Rh9C90LjRgtC1LCDRh9GC0L4sINGB0L7QsdGB0YLQstC10L3QvdC+LCDQuNGB +0LrQsNGC0YwuJywNCgkNCgkvLyDQmNC30LHRgNCw0L3QvdC+0LUNCglmYXZvdXJp +dGVzX2hlYWRlciA6ICAn0KXQsNCx0YDQsNGF0LDQsdGAIOKAlCDQmNC30LHRgNCw +0L3QvdC+0LUnLA0KCWZhdm91cml0ZXNfcmVxdWVzdF9hZGQgOiAgJ9Cl0LDQsdGA +0LDRhdCw0LHRgCDigJQg0JLRiyDQv9C+0YHQu9Cw0LvQuCDQt9Cw0L/RgNC+0YEg +0L3QsCDQtNC+0LHQsNCy0LvQtdC90LjQtSDQv9C+0YHRgtCwINCyINC40LfQsdGA +0LDQvdC90L7QtScsDQoJZmF2b3VyaXRlc19yZXF1ZXN0X3JlbW92ZSA6ICAn0KXQ +sNCx0YDQsNGF0LDQsdGAIOKAlCDQktGLINC/0L7RgdC70LDQu9C4INC30LDQv9GA +0L7RgSDQvdCwINGD0LTQsNC70LXQvdC40LUg0L/QvtGB0YLQsCDQuNC3INC40LfQ +sdGA0LDQvdC90L7Qs9C+JywNCg0KCWZhdm91cml0ZXNfcmVxdWVzdF9wb3N0X2Fk +ZF9zdWNjZXNzIDogICfQpdCw0LHRgNCw0YXQsNCx0YAg4oCUINCS0Ysg0LTQvtCx +0LDQstC40LvQuCDQv9C+0YHRgiDQsiDQuNC30LHRgNCw0L3QvdC+0LUnLA0KCWZh +dm91cml0ZXNfcmVxdWVzdF9wb3N0X3JlbW92ZV9zdWNjZXNzIDogICfQpdCw0LHR +gNCw0YXQsNCx0YAg4oCUINCS0Ysg0YPQtNCw0LvQuNC70Lgg0L/QvtGB0YIg0LjQ +tyDQuNC30LHRgNCw0L3QvdC+0LPQvicsDQoJDQoJZmF2b3VyaXRlc19yZXF1ZXN0 +X2NvbW1lbnRfYWRkX3N1Y2Nlc3MgOiAgJ9Cl0LDQsdGA0LDRhdCw0LHRgCDigJQg +0JLRiyDQtNC+0LHQsNCy0LjQu9C4INC60L7QvNC80LXQvdGC0LDRgNC40Lkg0LIg +0LjQt9Cx0YDQsNC90L3QvtC1JywNCglmYXZvdXJpdGVzX3JlcXVlc3RfY29tbWVu +dF9yZW1vdmVfc3VjY2VzcyA6ICAn0KXQsNCx0YDQsNGF0LDQsdGAIOKAlCDQktGL +INGD0LTQsNC70LjQu9C4INC60L7QvNC80LXQvdGC0LDRgNC40Lkg0LjQtyDQuNC3 +0LHRgNCw0L3QvdC+0LPQvicsDQoNCgkvLyDQn9Cf0JANCglwcGFfaGVhZGVyIDog +J9Cf0J/QkCcsDQoJDQoJDQoJLy8g0JPQtdC+DQoJZ2VvX2hlYWRlciA6ICAn0KXQ +sNCx0YDQsNGF0LDQsdGAIOKAlCDQodGC0YDQsNC90YsnLA0KCQ0KCS8vIA0KCWNv +bXBhbmllc19oZWFkZXIgOiAgJ9Cl0LDQsdGA0LDRhdCw0LHRgCDigJQg0JrQvtC8 +0L/QsNC90LjQuCcsDQoJDQoJcG9sbF9oZWFkZXIgOiAn0KXQsNCx0YDQsNGF0LDQ +sdGAIOKAlCDQntC/0YDQvtGB0YsnLA0KCWZhaWx0dXJlIDogJ9Cl0LDQsdGA0LDR +hdCw0LHRgCDigJQg0J7RiNC40LHQutCwJywNCgkvLyBhamF4IGVycm9yDQoJYWph +eF9lcnJvciA6ICfQpdCw0LHRgNCw0YXQsNCx0YAg4oCUINCe0YjQuNCx0LrQsCBB +amF4LdC30LDQv9GA0L7RgdCwJw0KfTsNCgoKCgovKiAgIGdlbyAgICovCmdlb0hh +bmRsZXIgPSB7DQoJdXJsOiAnL2FqYXgvZ2VvLycsDQoJY2xhc3NOYW1lcyA6IHsN +CgkJYWxsSG9sZGVyOiAnanMtZ2VvX2Jsb2NrX2hvbGRlcicsDQoJCWNvdW50cnlI +b2xkZXI6ICdqcy1nZW9fY291bnRyeV9zZWxlY3RfaG9sZGVyJywNCgkJcmVnaW9u +SG9sZGVyOiAnanMtZ2VvX3JlZ2lvbl9zZWxlY3RfaG9sZGVyJywNCgkJY2l0eUhv +bGRlcjogJ2pzLWdlb19jaXR5X3NlbGVjdF9ob2xkZXInLA0KCQljb3VudHJ5U2Vs +ZWN0OiAnanMtZ2VvX2NvdW50cnlfc2VsZWN0JywNCgkJcmVnaW9uU2VsZWN0OiAn +anMtZ2VvX3JlZ2lvbl9zZWxlY3QnLA0KCQljaXR5U2VsZWN0OiAnanMtZ2VvX2Np +dHlfc2VsZWN0Jw0KCX0sDQoJeG1sOiB7DQoJCXJlc3BvbnNlTm9kZXM6IHsNCgkJ +CWVycm9yIDogJ2Vycm9yJywNCgkJCXJlc3VsdCA6ICdtZXNzYWdlJywNCgkJCXJl +Z2lvbiA6ICdyZWdpb24nLA0KCQkJY2l0eSA6ICdjaXR5Jw0KCQl9LA0KDQoJCXBh +cnNlOiBmdW5jdGlvbih4bWxPYmopew0KCQkJdmFyIHhtbE5vZGVzID0ge307DQoJ +CQlmb3IgKHByb3AgaW4gZ2VvSGFuZGxlci54bWwucmVzcG9uc2VOb2Rlcykgew0K +CQkJCXhtbE5vZGVzW3Byb3BdID0geG1sT2JqLmdldEVsZW1lbnRzQnlUYWdOYW1l +KGdlb0hhbmRsZXIueG1sLnJlc3BvbnNlTm9kZXNbcHJvcF0pOw0KCQkJfQ0KCQkJ +cmV0dXJuIHhtbE5vZGVzOw0KCQl9DQoJfSwNCgkNCglzZW5kRGF0YSA6IGZ1bmN0 +aW9uIChzZWxlY3Rfb2JqLCBzZW5kX3R5cGUsIGdldF90eXBlKSB7DQoJCQ0KCQl2 +YXIgYWxsSG9sZGVyID0gJChzZWxlY3Rfb2JqKS5nZXRQYXJlbnQoJy4nICsgZ2Vv +SGFuZGxlci5jbGFzc05hbWVzLmFsbEhvbGRlcik7DQoJCWlmIChzZWxlY3Rfb2Jq +LnZhbHVlID09ICcnKSB7DQoJCQlpZiAoZ2V0X3R5cGUgPT0gJ3JlZ2lvbnMnKSB7 +DQoJCQkJJChhbGxIb2xkZXIpLmdldEVsZW1lbnQoJy4nICsgZ2VvSGFuZGxlci5j +bGFzc05hbWVzLnJlZ2lvbkhvbGRlcikuYWRkQ2xhc3MoJ2hpZGRlbicpOw0KCQkJ +CSQoYWxsSG9sZGVyKS5nZXRFbGVtZW50KCcuJyArIGdlb0hhbmRsZXIuY2xhc3NO +YW1lcy5jaXR5SG9sZGVyKS5hZGRDbGFzcygnaGlkZGVuJyk7DQoJCQkJJChhbGxI +b2xkZXIpLmdldEVsZW1lbnQoJy4nICsgZ2VvSGFuZGxlci5jbGFzc05hbWVzLnJl +Z2lvblNlbGVjdCkuc2VsZWN0ZWRJbmRleCA9IDA7DQoJCQkJJChhbGxIb2xkZXIp +LmdldEVsZW1lbnQoJy4nICsgZ2VvSGFuZGxlci5jbGFzc05hbWVzLmNpdHlTZWxl +Y3QpLnNlbGVjdGVkSW5kZXggPSAwOw0KCQkJfSBlbHNlIGlmIChnZXRfdHlwZSA9 +PSAnY2l0aWVzJykgew0KCQkJCSQoYWxsSG9sZGVyKS5nZXRFbGVtZW50KCcuJyAr +IGdlb0hhbmRsZXIuY2xhc3NOYW1lcy5jaXR5SG9sZGVyKS5hZGRDbGFzcygnaGlk +ZGVuJyk7DQoJCQkJJChhbGxIb2xkZXIpLmdldEVsZW1lbnQoJy4nICsgZ2VvSGFu +ZGxlci5jbGFzc05hbWVzLmNpdHlTZWxlY3QpLnNlbGVjdGVkSW5kZXggPSAwOw0K +CQkJfQ0KCQkJDQoJCX0gZWxzZSB7DQoJCQl2YXIgZGF0YSA9IHNlbmRfdHlwZSAr +ICc9JyArIHNlbGVjdF9vYmoudmFsdWU7DQoJCQl2YXIgdXJsID0gJy9hamF4L2dl +by8nICsgZ2V0X3R5cGUgKyAnLyc7DQoJCQlhamF4TG9hZFBvc3QodXJsLCBkYXRh +LCBnZW9IYW5kbGVyLnNlbmREYXRhT25sb2FkLCB3aW5kb3csIHtzZWxlY3Rfb2Jq +OnNlbGVjdF9vYmosIHNlbmRfdHlwZTpzZW5kX3R5cGUsIGdldF90eXBlOmdldF90 +eXBlfSk7DQoJCX0NCgl9LA0KCQ0KCXNlbmREYXRhT25sb2FkIDogZnVuY3Rpb24o +YWpheE9iaiwgcGFyYW1zKSB7DQoJCWlmKGFqYXhPYmogJiYgYWpheE9iai5yZXNw +b25zZVhNTCl7DQoJCQl2YXIgeG1sT2JqID0gYWpheE9iai5yZXNwb25zZVhNTDsN +CgkJCXZhciB4bWxOb2RlcyA9IGdlb0hhbmRsZXIueG1sLnBhcnNlKHhtbE9iaik7 +DQoJCQlpZih4bWxOb2Rlcy5lcnJvciAmJiB4bWxOb2Rlcy5lcnJvci5sZW5ndGgp +ew0KCQkJCXZhciBlcnJvcnNfbGVuZ3RoID0geG1sTm9kZXMuZXJyb3IubGVuZ3Ro +Ow0KCQkJCWZvciAodmFyIGkgPSAwOyBpIDwgZXJyb3JzX2xlbmd0aDsgaSsrKSB7 +DQoJCQkJCWZ1dHVfYWxlcnQoRkFULmdlb19oZWFkZXIsIHhtbE5vZGVzLmVycm9y +W2ldLmZpcnN0Q2hpbGQuZGF0YSwgdHJ1ZSwgJ2Vycm9yJyk7DQoJCQkJfQ0KCQkJ +fQ0KCQkJaWYoeG1sTm9kZXMucmVzdWx0ICYmIHhtbE5vZGVzLnJlc3VsdC5sZW5n +dGgpIHsNCgkJCQlnZW9IYW5kbGVyLnNob3dSZXN1bHQoeG1sTm9kZXMsIHBhcmFt +cyk7DQoJCQl9DQoJCX0NCgl9LA0KCQ0KCXNob3dSZXN1bHQgOiBmdW5jdGlvbiAo +eG1sTm9kZXMsIHBhcmFtcykgew0KDQoJCXZhciBhbGxIb2xkZXIgPSAkKHBhcmFt +cy5zZWxlY3Rfb2JqKS5nZXRQYXJlbnQoJy4nICsgZ2VvSGFuZGxlci5jbGFzc05h +bWVzLmFsbEhvbGRlcik7DQogICAgICAgIA0KCQlpZiAocGFyYW1zLmdldF90eXBl +ID09ICdyZWdpb25zJykgew0KCQkJdmFyIHNlbGVjdFJlZ2lvbnMgPSAkKGFsbEhv +bGRlcikuZ2V0RWxlbWVudCgnLicgKyBnZW9IYW5kbGVyLmNsYXNzTmFtZXMucmVn +aW9uU2VsZWN0KTsNCgkJCXZhciBzZWxlY3RSZWdpb25zSG9sZGVyID0gJChhbGxI +b2xkZXIpLmdldEVsZW1lbnQoJy4nICsgZ2VvSGFuZGxlci5jbGFzc05hbWVzLnJl +Z2lvbkhvbGRlcik7DQoJCQkNCgkJCXZhciBjdXJPcHRpb25zID0gc2VsZWN0UmVn +aW9ucy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb3B0aW9uJyk7DQoJCQl2YXIgY3Vy +T3B0aW9uc0xlbmd0aCA9IGN1ck9wdGlvbnMubGVuZ3RoOw0KCQkJDQoJCQlmb3Ig +KHZhciBpID0gMTsgaSA8IGN1ck9wdGlvbnNMZW5ndGg7IGkrKykgew0KCQkJCXNl +bGVjdFJlZ2lvbnMucmVtb3ZlKDEpOw0KCQkJfQ0KCQkJDQoJCQlpZiAoeG1sTm9k +ZXMucmVnaW9uICYmIHhtbE5vZGVzLnJlZ2lvbi5sZW5ndGgpIHsNCgkJCQlsID0g +eG1sTm9kZXMucmVnaW9uLmxlbmd0aDsNCgkJCQlmb3IgKHZhciBpID0gMDsgaSA8 +IGw7IGkrKykgew0KCQkJCQl2YXIgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxl +bWVudCgnb3B0aW9uJyk7DQoJCQkJCW9wdGlvbi52YWx1ZSA9IHhtbE5vZGVzLnJl +Z2lvbltpXS5nZXRBdHRyaWJ1dGUoJ2lkJyk7DQoJCQkJCW9wdGlvbi5pbm5lckhU +TUwgPSB4bWxOb2Rlcy5yZWdpb25baV0uZmlyc3RDaGlsZC5kYXRhOw0KCQkJCQlz +ZWxlY3RSZWdpb25zLmFwcGVuZENoaWxkKG9wdGlvbik7DQoJCQkJCSQoc2VsZWN0 +UmVnaW9ucykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpOw0KCQkJCQkkKHNlbGVjdFJl +Z2lvbnNIb2xkZXIpLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTsNCgkJCQl9DQoJCQkJ +JChhbGxIb2xkZXIpLmdldEVsZW1lbnQoJy4nICsgZ2VvSGFuZGxlci5jbGFzc05h +bWVzLmNpdHlIb2xkZXIpLmFkZENsYXNzKCdoaWRkZW4nKTsNCgkJCQkkKGFsbEhv +bGRlcikuZ2V0RWxlbWVudCgnLicgKyBnZW9IYW5kbGVyLmNsYXNzTmFtZXMuY2l0 +eVNlbGVjdCkuc2VsZWN0ZWRJbmRleCA9IDA7DQoJCQl9DQoJCQkNCgkJfSBlbHNl +IGlmIChwYXJhbXMuZ2V0X3R5cGUgPT0gJ2NpdGllcycpIHsNCgkJCXZhciBzZWxl +Y3RDaXRpZXMgPSAkKGFsbEhvbGRlcikuZ2V0RWxlbWVudCgnLicgKyBnZW9IYW5k +bGVyLmNsYXNzTmFtZXMuY2l0eVNlbGVjdCk7DQoJCQl2YXIgc2VsZWN0Q2l0aWVz +SG9sZGVyID0gJChhbGxIb2xkZXIpLmdldEVsZW1lbnQoJy4nICsgZ2VvSGFuZGxl +ci5jbGFzc05hbWVzLmNpdHlIb2xkZXIpOw0KCQkJDQoJCQl2YXIgY3VyT3B0aW9u +cyA9IHNlbGVjdENpdGllcy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb3B0aW9uJyk7 +DQoJCQl2YXIgY3VyT3B0aW9uc0xlbmd0aCA9IGN1ck9wdGlvbnMubGVuZ3RoOw0K +CQkJDQoJCQlmb3IgKHZhciBpID0gMTsgaSA8IGN1ck9wdGlvbnNMZW5ndGg7IGkr +Kykgew0KCQkJCXNlbGVjdENpdGllcy5yZW1vdmUoMSk7DQoJCQl9DQoJCQlpZiAo +eG1sTm9kZXMuY2l0eSAmJiB4bWxOb2Rlcy5jaXR5Lmxlbmd0aCkgew0KCQkJCWwg +PSB4bWxOb2Rlcy5jaXR5Lmxlbmd0aDsNCgkJCQlmb3IgKHZhciBpID0gMDsgaSA8 +IGw7IGkrKykgew0KCQkJCQl2YXIgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxl +bWVudCgnb3B0aW9uJyk7DQoJCQkJCW9wdGlvbi52YWx1ZSA9IHhtbE5vZGVzLmNp +dHlbaV0uZ2V0QXR0cmlidXRlKCdpZCcpOw0KCQkJCQlvcHRpb24uaW5uZXJIVE1M +ID0geG1sTm9kZXMuY2l0eVtpXS5maXJzdENoaWxkLmRhdGE7DQoJCQkJCXNlbGVj +dENpdGllcy5hcHBlbmRDaGlsZChvcHRpb24pOw0KCQkJCQkkKHNlbGVjdENpdGll +cykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpOw0KCQkJCQkkKHNlbGVjdENpdGllc0hv +bGRlcikucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpOw0KCQkJCX0NCgkJCX0NCgkJfQ0K +CX0NCn07CgoKCi8qICAgYWpheEZvcm0gICAqLwovKg0KCWFqYXhGb3JtQ2xhc3MN +CgnQkdCw0LfQvtCy0YvQuSDQutC70LDRgdGBLCDQvdC1INC/0YDQuNC80LXQvdGP +0Y7RidC40LnRgdGPINGB0LDQvNC+0YHRgtC+0Y/RgtC10LvRjNC90L4gKNC+0YIg +0L3QtdCz0L4g0YPQttC1INC90LDRgdC70LXQtNGD0Y7RgiDQv9C+0LTQutC70LDR +gdGB0YssINC+0LHRgdC70YPQttC40LLQsNGO0YnQuNC1INC60L7QvdC60YDQtdGC +0L3Ri9C1INGE0L7RgNC80YspDQoNCiovDQp2YXIgYWpheEZvcm1DbGFzcyA9IGZ1 +bmN0aW9uKCl7DQoNCgkvLyDQstC+0LfQvNC+0LbQvdGL0LUgdXJsICjQt9Cw0LTQ +sNGO0YLRgdGPINGB0LLQvtC40Lwg0LrQvtC90LrRgNC10YLQvdGL0Lwg0L/QvtC0 +0LrQu9Cw0YHRgdC+0LwpDQoJLy8g0L/RgNC4INC+0YLQv9GA0LDQstC60LUg0LTQ +sNC90L3Ri9GFINC90LAg0YHQtdGA0LLQtdGAINC90LAg0YTQvtGA0LzRgyDQvdCw +0LLQtdGI0LjQstCw0Y7RgtGB0Y8g0LDQvdCw0LvQvtCz0LjRh9C90YvQtSDQutC7 +0LDRgdGB0Ys6DQoJLy8gc2F2ZS1sb2FkaW5nLCBwcmV2aWV3LWxvYWRpbmcsIGRy +YWZ0LWxvYWRpbmcNCgl0aGlzLmFqYXhVcmxzID0gew0KCQlzYXZlOiAnJyAvLyDR +gdC+0YXRgNCw0L3QtdC90LjQtSDQv9C+0YHRgtCwDQoJCS8vcHJldmlldzogJycs +IC8vINC/0YDQtdC00L/RgNC+0YHQvNC+0YLRgA0KCQkvL2RyYWZ0OiAnJywgLy8g +0LIg0YfQtdGA0L3QvtCy0LjQutC4DQoJCS8vYXV0b3NhdmU6ICcnIC8vINCyINCw +0LLRgtC+0YHRjdC50LINCgl9Ow0KDQoJLy8g0JjQvNC10L3QsCB4bWwg0L3QvtC0 +0L7QsiDQuCDRgdC+0L7RgtCy0LXRgdGC0LLRg9GO0YnQuNC1INC40Lwg0LjQvNC1 +0L3QsCDRhNGD0L3QutGG0LjQuS3QvtCx0YDQsNCx0L7RgtGH0LjQutC+0LINCgl0 +aGlzLnhtbFJlc3BvbnNlID0gew0KCQltZXNzYWdlOiB7DQoJCQlub2RlOiAnbWVz +c2FnZScsDQoJCQloYW5kbGVyOiBudWxsDQoJCX0sDQoNCgkJZXJyb3I6IHsNCgkJ +CW5vZGU6ICdlcnJvcicsDQoJCQloYW5kbGVyOiAneG1sUmVzcG9uc2VIYW5kbGVy +X2Vycm9yJw0KCQl9LA0KDQoJCXJlZGlyZWN0OiB7DQoJCQlub2RlOiAncmVkaXJl +Y3RfdXJsJywNCgkJCWhhbmRsZXI6ICd4bWxSZXNwb25zZUhhbmRsZXJfcmVkaXJl +Y3QnDQoJCX0NCgl9Ow0KDQoJLy8g0JjRgdC/0L7Qu9GM0LfRg9C10LzRi9C1INCy +INGE0L7RgNC80LUgY2xhc3NOYW1lcw0KCXRoaXMuY2xhc3NOYW1lcyA9IHsNCgkJ +ZmllbGRIb2xkZXI6ICdqcy1maWVsZC1ob2xkZXInLCAvLyDQutC+0L3RgtC10LnQ +vdC10YAt0YDQvtC00LjRgtC10LvRjCDQv9C+0LvRjyDRhNC+0YDQvNGLINC4INC+ +0YjQuNCx0LrQuA0KCQlmaWVsZERhdGE6ICdqcy1maWVsZC1kYXRhJywgLy8g0L/Q +vtC70LUg0YTQvtGA0LzRiywg0LrQvtGC0L7RgNC+0LUg0L3Rg9C20L3QviDRgdC1 +0YDQuNCw0LvQuNC30L7QstCw0YLRjA0KCQlmaWVsZEVycm9yTXNnQm94OiAnanMt +ZmllbGQtZXJyb3ItbXNnJywgLy8g0LrQvtC90YLQtdC50L3QtdGAINC00LvRjyDQ +stGL0LLQvtC00LAg0YHQvtC+0LHRidC10L3QuNGPINC+0LEg0L7RiNC40LHQutC1 +DQoJCWZpZWxkTWFya2VkRXJyb3I6ICdqcy1tYXJrZWQtZXJyb3InLCAvLyDQv9C+ +0LzQtdGH0LDQtdC8INC60L7QvdGC0LXQudC90LXRgCwg0LXRgdC70Lgg0LIg0L/Q +vtC70LUgLSDQvtGI0LjQsdC60LANCgkJZmllbGRNYXJrZWRDaGVja2VkOiAnanMt +bWFya2VkLWNoZWNrZWQnLCAvLyDQv9C+0LzQtdGH0LDQtdC8INC60L7QvdGC0LXQ +udC90LXRgCwg0LXRgdC70Lgg0L/QvtC70LUg0L/RgNC+0YjQu9C+INC/0YDQvtCy +0LXRgNC60YMNCgkJZmllbGRJc1JlcXVpcmVkOiAnanMtcmVxdWlyZWQnLCAvLyDQ +v9C+0LvQtSwg0L7QsdGP0LfQsNGC0LXQu9GM0L3QvtC1INC00LvRjyDQt9Cw0L/Q +vtC70L3QtdC90LjRjyANCgkJZmllbGRQYXNzXzE6ICdqcy1wYXNzLWZpZWxkLW1h +aW4nLCAvLyDQv9C+0LvQtSDRgSDQvtGB0L3QvtCy0L3Ri9C8INC/0LDRgNC+0LvQ +tdC8DQoJCWZpZWxkUGFzc18yOiAnanMtcGFzcy1maWVsZC1yZXBlYXQnLCAvLyDQ +v9C+0LvQtSDRgSDQv9C+0LLRgtC+0YDQvtC8INC/0LDRgNC+0LvRjw0KCQlpc0xv +YWRpbmc6ICdsb2FkaW5nJywgLy8g0L/RgNC10LvQvtCw0LTQtdGADQoJCXVua25v +d25FcnJvckhvbGRlcjogJ2pzLXVua25vd24tZXJyb3ItaG9sZGVyJywgLy8g0LTQ +tdGA0LbQsNGC0LXQu9GMINCy0YvQstC+0LTQsCDQvdC10L7Qv9C+0LfQvdCw0L3Q +vdC+0Lkg0L7RiNC40LHQutC4DQoJCXVua25vd25FcnJvck1zZzogJ2pzLXVua25v +d24tZXJyb3ItbXNnJyAvLyDRgdCw0LzQviDQv9C+0LvQtSDQvdC10L7Qv9C+0LfQ +vdCw0L3QvdC+0Lkg0L7RiNC40LHQutC4DQoJfTsNCg0KCS8vINCS0YvQstC+0LTQ +uNC80YvQtSDQutC70LjQtdC90YLQvtC8INGB0L7QvtCx0YnQtdC90LjRjyDQvtCx +INC+0YjQuNCx0LrQsNGFDQoJdGhpcy5lcnJvck1lc3NhZ2VzID0gew0KCQlmaWVs +ZElzRW1wdHk6ICfQndC10L7QsdGF0L7QtNC40LzQviDQt9Cw0L/QvtC70L3QuNGC +0Ywg0Y3RgtC+INC/0L7Qu9C1JywNCgkJaW5wdXRJc0luY29ycmVjdDogJ9CS0Ysg +0LLQstC10LvQuCDQvdC10LTQvtC/0YPRgdGC0LjQvNGL0Lkg0YHQuNC80LLQvtC7 +JywNCgkJaW5wdXRJc0luc3VmZmljaWVudDogJ9CS0Ysg0LLQstC10LvQuCDQvdC1 +0LTQvtGB0YLQsNGC0L7Rh9C90L4g0YHQuNC80LLQvtC70L7QsicsDQoJCWVtYWls +SXNJbmNvcnJlY3Q6ICfQktGLINCy0LLQtdC70Lgg0L3QtdC00L7Qv9GD0YHRgtC4 +0LzRi9C5IGVtYWlsJywNCgkJdXJsSXNJbmNvcnJlY3Q6ICfQktGLINCy0LLQtdC7 +0Lgg0L3QtdC00L7Qv9GD0YHRgtC40LzRi9C5IHVybCcsDQoJCWlucHV0Q2hhcnNO +dW1iZXJJc0luY29ycmVjdDogJ9CS0Ysg0LLQstC10LvQuCDQvdC10LLQtdGA0L3Q +vtC1INGH0LjRgdC70L4g0LHRg9C60LInLA0KCQlwYXNzd29yZElzU2hvcnQ6ICfQ +n9Cw0YDQvtC70Ywg0YHQu9C40YjQutC+0Lwg0LrQvtGA0L7RgtC60LjQuScsDQoJ +CXBhc3N3b3Jkc0FyZU5vdEVxdWFsOiAn0J/QsNGA0L7Qu9C4INC90LUg0YHQvtCy +0L/QsNC00LDRjtGCJywNCgkJdW5rbm93bkVycm9yOiAn0J3QtdC+0L/QvtC30L3Q +sNC90L3QsNGPINC+0YjQuNCx0LrQsCcgLy8g0J/Rg9GB0YLQvtC1INGB0L7QvtCx +0YnQtdC90LjQtSDQvtCxINC+0YjQuNCx0LrQtQ0KCX07DQoNCn07DQoNCg0KT2Jq +ZWN0LmV4dGVuZE9iamVjdCgNCglhamF4Rm9ybUNsYXNzLnByb3RvdHlwZSwgew0K +DQoJLy8J0J/QtdGA0LXQutC70Y7Rh9C10L3QuNC1INC80LXQttC00YMg0YTQvtGA +0LzQsNC80Lgg0L3QsCDRgdGC0YDQsNC90LjRhtC1DQoJc3dpdGNoRm9ybTogZnVu +Y3Rpb24obGluayl7DQoJCQkkKCdyZWctd3JhcHBlcicpLmNsYXNzTmFtZSA9IGxp +bmsuY2xhc3NOYW1lOw0KCQkJcmV0dXJuIGZhbHNlOw0KCX0sDQoNCg0KCS8vINCf +0LXRgNC10LLQvtC00LjQvCB4bWwg0LTQtdGA0LXQstC+INCyINC+0LHRitC10LrR +gg0KCXBhcnNlWE1MOiBmdW5jdGlvbih4bWxPYmopew0KCQkJdmFyIHhtbE5vZGVz +ID0ge307DQoJCQlmb3IgKHByb3AgaW4gdGhpcy54bWxSZXNwb25zZSl7DQoJCQkJ +eG1sTm9kZXNbcHJvcF0gPSB4bWxPYmouZ2V0RWxlbWVudHNCeVRhZ05hbWUodGhp +cy54bWxSZXNwb25zZVtwcm9wXS5ub2RlKTsNCgkJCX0NCgkJCXJldHVybiB4bWxO +b2RlczsNCgl9LA0KDQoNCgkvLyDQktC+0LfQstGA0LDRidCw0LXRgiDQsdC70L7Q +uiDQstGL0LLQvtC00LAg0L7RiNC40LHQutC4INC00LvRjyDQtNCw0L3QvdC+0LPQ +viDQv9C+0LvRjyDRhNC+0YDQvNGLDQoJZ2V0RXJyb3JNc2dCb3hCeUZpZWxkOiBm +dW5jdGlvbihmaWVsZCl7DQoJCQl2YXIgZmllbGRIb2xkZXIgPSAkKGZpZWxkKS5n +ZXRQYXJlbnQoJy4nICsgdGhpcy5jbGFzc05hbWVzLmZpZWxkSG9sZGVyKTsNCgkJ +CWlmKGZpZWxkSG9sZGVyKXsNCgkJCQl2YXIgZXJyb3JNc2dCb3hlcyA9ICQoZmll +bGRIb2xkZXIpLmdldEVsZW1lbnRzKCcuJyArIHRoaXMuY2xhc3NOYW1lcy5maWVs +ZEVycm9yTXNnQm94KTsNCgkJCQlpZihlcnJvck1zZ0JveGVzICYmIGVycm9yTXNn +Qm94ZXMubGVuZ3RoKXsNCgkJCQkJcmV0dXJuIGVycm9yTXNnQm94ZXNbMF07DQoJ +CQkJfSANCgkJCX1lbHNlIHsNCgkJCQlyZXR1cm4gbnVsbDsNCgkJCX0NCgl9LA0K +DQoNCgkvLyANCgljb21wbGV0ZUZvcm06IGZ1bmN0aW9uKHJlZGlyZWN0VXJsKXsN +CgkJCWlmKHJlZGlyZWN0VXJsKXsNCgkJCQl3aW5kb3cubG9jYXRpb24uaHJlZiA9 +IHJlZGlyZWN0VXJsOw0KCQkJfSBlbHNlIHsNCgkJCQl3aW5kb3cubG9jYXRpb24u +aHJlZiA9ICIvIjsNCgkJCX0NCgl9LA0KDQoNCgkvLwnQn9GA0L7QstC10YDQutCw +INC30LDQv9C+0LvQvdC10L3QvdC+0YHRgtC4INGE0L7RgNC80Ysg0Lgg0L7RgtGB +0YPRgtGB0LLQuNGPINC+0YjQuNCx0L7QuiAo0YHQtNC10LvQsNGC0YwgY2xhc3NO +YW1lPSdyZXF1aXJlZCcg0LTQu9GPINC/0L7Qu9C10LkpDQoJY2hlY2tGb3JtQ29t +cGxpdGlvbjogZnVuY3Rpb24oZm9ybSl7DQoJCQl2YXIgZm9ybUlzQ29tcGxpdGVk +ID0gdHJ1ZTsgDQoJCQl2YXIgZGF0YXMgPSAkKGZvcm0pLmdldEVsZW1lbnRzKCcu +JyArIHRoaXMuY2xhc3NOYW1lcy5maWVsZERhdGEpOw0KDQoJCQlmb3IgKHZhciBp +PTAsIGxlbmd0aD1kYXRhcy5sZW5ndGg7IGk8bGVuZ3RoOyBpKyspew0KCQkJCQ0K +CQkJCQ0KCQkJCXZhciBmaWVsZEhvbGRlciA9ICQoZGF0YXNbaV0pLmdldFBhcmVu +dCgnLicgKyB0aGlzLmNsYXNzTmFtZXMuZmllbGRIb2xkZXIpOw0KCQkJCQ0KCQkJ +CWlmICgNCgkJCQkJCShkYXRhc1tpXS52YWx1ZSA9PSAnJyAmJiAvLyDQv9GD0YHR +gtC+0LUg0L7QsdGP0LfQsNGC0LXQu9GM0L3QvtC1INC/0L7Qu9C1DQoJCQkJCQkJ +JChkYXRhc1tpXSkuaGFzQ2xhc3ModGhpcy5jbGFzc05hbWVzLmZpZWxkSXNSZXF1 +aXJlZCkpIHx8DQoJCQkJCQkNCgkJCQkJCShkYXRhc1tpXS5nZXRBdHRyaWJ1dGUo +J3R5cGUnKSA9PSAnY2hlY2tib3gnICYmIC8vINC+0LHRj9C30LDRgtC10LvRjNC9 +0YvQuSDRh9C10LrQsdC+0LrRgQ0KCQkJCQkJCSQoZGF0YXNbaV0pLmhhc0NsYXNz +KHRoaXMuY2xhc3NOYW1lcy5maWVsZElzUmVxdWlyZWQpICYmDQoJCQkJCQkJIWRh +dGFzW2ldLmNoZWNrZWQpDQoJCQkJCSl7DQoJCQkJCWZvcm1Jc0NvbXBsaXRlZCA9 +IGZhbHNlOw0KCQkJCQl0aGlzLm1hcmtGaWVsZF9lcnJvcihkYXRhc1tpXSwgdGhp +cy5lcnJvck1lc3NhZ2VzLmZpZWxkSXNFbXB0eSk7DQoNCgkJCQl9IGVsc2UgaWYo +DQoJCQkJCQkoZmllbGRIb2xkZXIgJiYgLy8g0L/QvtC70LUg0YEg0L3QtdC40YHQ +v9GA0LDQstC70LXQvdC90L7QuSDQvtGI0LjQsdC60L7QuQ0KCQkJCQkJCSQoZmll +bGRIb2xkZXIpLmhhc0NsYXNzKHRoaXMuY2xhc3NOYW1lcy5maWVsZE1hcmtlZEVy +cm9yKSkNCgkJCQkJKXsNCgkJCQkJdmFyIGVycm9yTXNnQm94ID0gdGhpcy5nZXRF +cnJvck1zZ0JveEJ5RmllbGQoZGF0YXNbaV0pOw0KCQkJCQlpZiAoZXJyb3JNc2dC +b3gpIHsNCgkJCQkJCWVycm9yTXNnQm94LmlubmVySFRNTCA9ICcnOw0KCQkJCQl9 +DQoJDQoJCQkJCXRoaXMubWFya0ZpZWxkX2NsZWFyKGRhdGFzW2ldKTsNCgkJCQl9 +DQoJCQl9DQoJCQlyZXR1cm4gZm9ybUlzQ29tcGxpdGVkOw0KCX0sDQoNCgkvLyDQ +odC10YDQuNCw0LvQuNC30LDRhtC40Y8g0L/QvtC70LXQuSDRhNC+0YDQvNGLDQoJ +c2VyaWFsaXplRm9ybTogZnVuY3Rpb24oZm9ybSl7DQoJCQl2YXIgZGF0YSA9ICcn +Ow0KCQkJDQoJCQl2YXIgZGF0YXMgPSAkKGZvcm0pLmdldEVsZW1lbnRzKCcuJyAr +IHRoaXMuY2xhc3NOYW1lcy5maWVsZERhdGEpOw0KCQkJZm9yICh2YXIgaT0wLCBs +ZW5ndGg9ZGF0YXMubGVuZ3RoOyBpPGxlbmd0aDsgaSsrKXsNCgkJCQl2YXIgdHlw +ZSA9IGRhdGFzW2ldLmdldEF0dHJpYnV0ZSgndHlwZScpOw0KCQkJCXZhciBwYXJh +bSA9IGRhdGFzW2ldLmdldEF0dHJpYnV0ZSgnbmFtZScpOw0KCQkJCXZhciB2YWx1 +ZSA9IGRhdGFzW2ldLnZhbHVlOw0KDQoJCQkJaWYodHlwZSA9PSAncmFkaW8nICYm +ICFkYXRhc1tpXS5jaGVja2VkKXsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0KDQoJ +CQkJaWYodHlwZSA9PSAnY2hlY2tib3gnKXsNCgkJCQkJdmFsdWUgPSBkYXRhc1tp +XS5jaGVja2VkID8gdHJ1ZSA6IGZhbHNlOw0KCQkJCX0gZWxzZSB7DQoJCQkJCXZh +bHVlID0gZGF0YXNbaV0udmFsdWU7DQoJCQkJfQ0KCQkJCWRhdGEgKz0gKGkhPTAg +PyAnJicgOiAnJykgKyBwYXJhbSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2 +YWx1ZSk7DQoJCQl9DQoJCQlyZXR1cm4gZGF0YTsNCgl9LA0KCQ0KCS8vINCh0LXR +gNC40LDQu9C40LfQsNGG0LjRjyDQv9C+0LvQtdC5INGE0L7RgNC80YsNCgljbGFz +c2ljU2VyaWFsaXplRm9ybTogZnVuY3Rpb24oZm9ybSl7DQoJCQl2YXIgZGF0YSA9 +ICcnOw0KCQkJDQoJCQl2YXIgZGF0YXMgPSAkKGZvcm0pLmdldEVsZW1lbnRzKCcu +JyArIHRoaXMuY2xhc3NOYW1lcy5maWVsZERhdGEpOw0KCQkJZm9yICh2YXIgaT0w +LCBsZW5ndGg9ZGF0YXMubGVuZ3RoOyBpPGxlbmd0aDsgaSsrKXsNCgkJCQl2YXIg +dHlwZSA9IGRhdGFzW2ldLmdldEF0dHJpYnV0ZSgndHlwZScpOw0KCQkJCXZhciBw +YXJhbSA9IGRhdGFzW2ldLmdldEF0dHJpYnV0ZSgnbmFtZScpOw0KCQkJCXZhciB2 +YWx1ZSA9IGRhdGFzW2ldLnZhbHVlOw0KDQoJCQkJaWYodHlwZSA9PSAncmFkaW8n +ICYmICFkYXRhc1tpXS5jaGVja2VkKXsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0K +DQoJCQkJaWYodHlwZSA9PSAnY2hlY2tib3gnICYmICFkYXRhc1tpXS5jaGVja2Vk +KXsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0KCQkJCWRhdGEgKz0gKGRhdGEhPScn +ID8gJyYnIDogJycpICsgcGFyYW0gKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQo +dmFsdWUpOw0KCQkJfQ0KCQkJcmV0dXJuIGRhdGE7DQoJfSwNCg0KCS8vINCh0LXR +gNC40LDQu9C40LfQsNGG0LjRjyDQv9C+0LvQtdC5INGE0L7RgNC80YsNCglyZWFs +U2VyaWFsaXplRm9ybTogZnVuY3Rpb24oZm9ybSl7DQoJCQl2YXIgZGF0YSA9ICcn +Ow0KCQkJDQoJCQl2YXIgZGF0YXMgPSBmb3JtLmVsZW1lbnRzOw0KCQkJZm9yICh2 +YXIgaT0wLCBsZW5ndGg9ZGF0YXMubGVuZ3RoOyBpPGxlbmd0aDsgaSsrKXsNCgkJ +CQl2YXIgdHlwZSA9IGRhdGFzW2ldLmdldEF0dHJpYnV0ZSgndHlwZScpOw0KCQkJ +CXZhciBwYXJhbSA9IGRhdGFzW2ldLmdldEF0dHJpYnV0ZSgnbmFtZScpOw0KCQkJ +CXZhciB2YWx1ZSA9IGRhdGFzW2ldLnZhbHVlOw0KDQoJCQkJaWYodHlwZSA9PSAn +cmFkaW8nICYmICFkYXRhc1tpXS5jaGVja2VkKXsNCgkJCQkJY29udGludWU7DQoJ +CQkJfQ0KDQoJCQkJaWYodHlwZSA9PSAnY2hlY2tib3gnICYmICFkYXRhc1tpXS5j +aGVja2VkKXsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0KCQkJCWRhdGEgKz0gKGRh +dGEhPScnID8gJyYnIDogJycpICsgcGFyYW0gKyAnPScgKyBlbmNvZGVVUklDb21w +b25lbnQodmFsdWUpOw0KCQkJfQ0KCQkJcmV0dXJuIGRhdGE7DQoJfSwNCg0KDQoJ +Ly8g0J7RgtC/0YDQsNCy0LrQsCDQstGB0LXRhSDQv9C+0LvQtdC5INGE0L7RgNC8 +0Ysg0L3QsCDRgdC10YDQstC10YANCgkvLyBzdWJtaXRUeXBlIC0g0L3QtdC+0LHR +j9C30LDRgtC10LvRjNC90YvQuSDQv9Cw0YDQsNC80LXRgtGADQoJLy8gZkNoZWNr +Rm9ybUNvbXBsaXRpb24gLSDQvdC10L7QsdGP0LfQsNGC0LXQu9GM0L3Ri9C5INC/ +0LDRgNCw0LzQtdGC0YAgKNGB0LLQvtGPINGE0YPQvdC60YbQuNGPINC/0YDQvtCy +0LXRgNC60Lgg0YTQvtGA0LzRiyDQvdCwINC30LDQv9C+0LvQvdC10L3QvdC+0YHR +gtGMKQ0KCS8vCQlmQ2hlY2tGb3JtQ29tcGxpdGlvbiA9PSBmKCl7fSAo0L3QtSDQ +vdCw0LTQviDQv9GA0L7QstC10YDRj9GC0YwpDQoJLy8JCWZDaGVja0Zvcm1Db21w +bGl0aW9uID09IGZhbHNlINC40LvQuCBmQ2hlY2tGb3JtQ29tcGxpdGlvbiA9PSB1 +bmRlZmluZWQgKNC90LDQtNC+INC/0YDQvtCy0LXRgNGP0YLRjCkNCglzZW5kRGF0 +YTogZnVuY3Rpb24gKGZvcm0sIHN1Ym1pdFR5cGUsIGZDaGVja0Zvcm1Db21wbGl0 +aW9uLCBjbGFzc2ljU2VyaWFsaXplKXsNCgkJCS8vINCf0YDQvtCy0LXRgNC60LAg +0L3QsCDQt9Cw0L/QvtC70L3QtdC90L3QvtGB0YLRjCDQstGB0LXRhSDQv9C+0LvQ +tdC5INC4INC90LAg0LjRhSDQstCw0LvQuNC00L3QvtGB0YLRjA0KCQkJaWYoIWZD +aGVja0Zvcm1Db21wbGl0aW9uICYmICF0aGlzLmNoZWNrRm9ybUNvbXBsaXRpb24o +Zm9ybSkpIHsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9IGVsc2UgaWYoZkNoZWNr +Rm9ybUNvbXBsaXRpb24gJiYgIWZDaGVja0Zvcm1Db21wbGl0aW9uKGZvcm0pKXsN +CgkJCQlhbGVydCgnZmFsc2UnKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoN +CgkJCS8vINCX0LDQtNCw0LXQvCDQutC70LDRgdGB0L3QtdC50LwsINC+0L/RgNC1 +0LTQtdC70Y/RjtGJ0LjQuSwg0YfRgtC+INC40LzQtdC90L3QviDQs9GA0YPQt9C4 +0YLRgdGPINCyINC00LDQvdC90YvQuSDQvNC+0LzQtdC90YINCgkJCXZhciBsb2Fk +aW5nQ2xhc3NOYW1lID0gKHN1Ym1pdFR5cGUgfHwgJ3NhdmUnKSArICctJyArIHRo +aXMuY2xhc3NOYW1lcy5pc0xvYWRpbmc7DQoNCgkJCS8vINCf0YDQvtCy0LXRgNC6 +0LAg0YLQvtCz0L4sINGH0YLQviDRhNC+0YDQvNCwINC90LUg0L7QsdGA0LDQsdCw +0YLRi9Cy0LDQtdGCINGD0LbQtSDRgtC+0LPQviwg0YfRgtC+INC80Ysg0LfQsNC/ +0YDQvtGB0LjQu9C4INCyINC00LDQvdC90YvQuSDQvNC+0LzQtdC90YINCgkJCWlm +KCQoZm9ybSkuaGFzQ2xhc3MobG9hZGluZ0NsYXNzTmFtZSkpew0KCQkJCXJldHVy +biBmYWxzZTsNCgkJCX0NCgkJCQ0KCQkJLy8g0LXRgdC70Lggc3VibWl0VHlwZSDQ +vdC1INC/0LXRgNC10LTQsNC9LCDRgtC+INC40YHQv9C+0LvRjNC30YPQtdC8IHRo +aXMuYWpheFVybHMuc2F2ZQ0KCQkJdmFyIHVybCA9IHRoaXMuYWpheFVybHNbc3Vi +bWl0VHlwZV0gfHwgdGhpcy5hamF4VXJscy5zYXZlOw0KCQkJDQoJCQlpZiAoIWNs +YXNzaWNTZXJpYWxpemUpIHsNCgkJCQl2YXIgZGF0YSA9IHRoaXMuc2VyaWFsaXpl +Rm9ybShmb3JtKTsNCgkJCX0gZWxzZSB7DQoJCQkJdmFyIGRhdGEgPSB0aGlzLmNs +YXNzaWNTZXJpYWxpemVGb3JtKGZvcm0pOw0KCQkJfQ0KDQoJCQl2YXIgcGFyYW1z +ID0gew0KCQkJCWZvcm06IGZvcm0sDQoJCQkJbG9hZGluZ0NsYXNzTmFtZTogbG9h +ZGluZ0NsYXNzTmFtZQ0KCQkJfTsNCg0KCQkJJChmb3JtKS5hZGRDbGFzcyhsb2Fk +aW5nQ2xhc3NOYW1lKTsNCgkJCQ0KCQkJYWpheFBvc3QoDQoJCQkJdXJsLA0KCQkJ +CWRhdGEsDQoJCQkJdGhpcy5zZW5kRGF0YU9ubG9hZCwNCgkJCQlwYXJhbXMsDQoJ +CQkJdGhpcyk7DQoJCQkNCgkJCXRoaXMuX2Zvcm0gPSAkKGZvcm0pOw0KCQkJcmV0 +dXJuIGZhbHNlOw0KCX0sDQoNCg0KCS8vINCn0YLQtdC90LjQtSDQvtGC0LLQtdGC +0LAg0YHQtdGA0LLQtdGA0LAg0L3QsCDQv9C10YDQtdGB0YvQu9C60YMgINCy0YHQ +tdGFINC00LDQvdC90YvRhSDRhNC+0YDQvNGLINC4INC+0LHRgNCw0LHQvtGC0LrQ +sCDQstGL0LTQsNC90L3Ri9GFINC+0YjQuNCx0L7Qug0KCXNlbmREYXRhT25sb2Fk +OiBmdW5jdGlvbiAoYWpheE9iaiwgcGFyYW1zKXsNCg0KCQkJaWYgKHRoaXMuX2Zv +cm0pIHRoaXMuX2Zvcm0ucmVtb3ZlQ2xhc3MocGFyYW1zLmxvYWRpbmdDbGFzc05h +bWUpOw0KCQkJaWYoYWpheE9iaiAmJiBhamF4T2JqLnJlc3BvbnNlWE1MKXsNCgkJ +CQl2YXIgeG1sT2JqID0gYWpheE9iai5yZXNwb25zZVhNTDsNCgkJCQl2YXIgeG1s +Tm9kZXMgPSB0aGlzLnBhcnNlWE1MKHhtbE9iaik7DQoNCgkJCQlmb3IgKHByb3Ag +aW4geG1sTm9kZXMpew0KCQkJCQlpZih0aGlzW3RoaXMueG1sUmVzcG9uc2VbcHJv +cF0uaGFuZGxlcl0pIHsNCgkJCQkJCXRoaXNbdGhpcy54bWxSZXNwb25zZVtwcm9w +XS5oYW5kbGVyXSh4bWxOb2RlcywgcGFyYW1zKTsNCgkJCQkJfQ0KCQkJCX0NCgkJ +CX0NCgl9LA0KDQoJLy8g0J7QsdGA0LDQsdC+0YLRh9C40Log0L7RgtCy0LXRgtCw +INGB0LXRgNCy0LXRgNCwINC/0YDQuCDQv9C+0LvRg9GH0LXQvdC40Lgg0L7RiNC4 +0LHQutC4DQoJeG1sUmVzcG9uc2VIYW5kbGVyX2Vycm9yOiBmdW5jdGlvbih4bWxO +b2RlcywgcGFyYW1zKXsNCgkJaWYoeG1sTm9kZXMuZXJyb3IgJiYgeG1sTm9kZXMu +ZXJyb3IubGVuZ3RoKSB7DQoJCQkkKHBhcmFtcy5mb3JtKS5yZW1vdmVDbGFzcyhw +YXJhbXMubG9hZGluZ0NsYXNzTmFtZSk7DQoNCgkJCWZvciAodmFyIGk9MDsgaTx4 +bWxOb2Rlcy5lcnJvci5sZW5ndGg7IGkrKyl7DQoJCQkJdmFyIGZpZWxkTWFya2Vk +RXJyb3IgPSBwYXJhbXMuZm9ybVt4bWxOb2Rlcy5lcnJvcltpXS5nZXRBdHRyaWJ1 +dGUoJ2ZpZWxkJyldOw0KCQkJCXZhciBlcnJvck1lc3NhZ2UgPSB4bWxOb2Rlcy5l +cnJvcltpXS5maXJzdENoaWxkID8geG1sTm9kZXMuZXJyb3JbaV0uZmlyc3RDaGls +ZC5kYXRhIDogdGhpcy5lcnJvck1lc3NhZ2VzLnVua25vd25FcnJvcjsNCg0KCQkJ +CWlmKCFmaWVsZE1hcmtlZEVycm9yKSB7DQoJCQkJCWZpZWxkTWFya2VkRXJyb3Ig +PSAkKHBhcmFtcy5mb3JtKS5nZXRFbGVtZW50KCcuJyArIHRoaXMuY2xhc3NOYW1l +cy51bmtub3duRXJyb3JNc2cpOw0KCQkJCX0gDQoJCQkJDQoJCQkJaWYgKGZpZWxk +TWFya2VkRXJyb3IpIHsNCgkJCQkJdGhpcy5tYXJrRmllbGRfZXJyb3IoZmllbGRN +YXJrZWRFcnJvciwgZXJyb3JNZXNzYWdlKTsNCgkJCQl9DQoJCQl9DQoNCgkJfQ0K +CX0sDQoNCgkvLyDQntCx0YDQsNCx0L7RgtGH0LjQuiDQvtGC0LLQtdGC0LAg0YHQ +tdGA0LLQtdGA0LAg0L/RgNC4INGA0LXQtNC40YDQtdC60YLQtQ0KCXhtbFJlc3Bv +bnNlSGFuZGxlcl9yZWRpcmVjdDogZnVuY3Rpb24oeG1sTm9kZXMsIHBhcmFtcyl7 +DQoJCWlmKHhtbE5vZGVzLnJlZGlyZWN0ICYmIHhtbE5vZGVzLnJlZGlyZWN0Lmxl +bmd0aCkgew0KCQkJdGhpcy5jb21wbGV0ZUZvcm0oeG1sTm9kZXMucmVkaXJlY3Rb +MF0uZmlyc3RDaGlsZC5kYXRhKTsNCgkJfQ0KCX0sDQoNCg0KCS8vINCf0LXRgNC1 +0YHRi9C70LrQsCDQv9C+0LvQtdC5INGE0L7RgNC80YsgKNC/0LXRgNCy0L7QtSDQ +v9C+0LvQtSDQvNCw0YHRgdC40LLQsCAtINGC0LXQutGD0YnQtdC1KQ0KCWNoZWNr +RGF0YTogZnVuY3Rpb24gKGZpZWxkcywgYWN0aW9uLCBzdWJtaXRUeXBlKXsNCgkJ +CQ0KCQkJLy8g0LXRgdC70Lggc3VibWl0VHlwZSDQvdC1INC/0LXRgNC10LTQsNC9 +LCDRgtC+INC40YHQv9C+0LvRjNC30YPQtdC8IHRoaXMuYWpheFVybHMuc2F2ZQ0K +CQkJdmFyIHVybCA9IHRoaXMuYWpheFVybHNbc3VibWl0VHlwZV0gfHwgdGhpcy5h +amF4VXJscy5zYXZlOw0KDQoJCQl2YXIgZGF0YSA9ICIiOw0KCQkJdmFyIGZpZWxk +Ow0KCQkJDQoJCQlpZiAoZmllbGRzLmxlbmd0aCAmJiBmaWVsZHMubGVuZ3RoID4g +MSkgew0KCQkJCWZpZWxkID0gZmllbGRzWzBdOw0KCQkJCQ0KCQkJCWZvciAodmFy +IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7DQoJCQkJCXZhciB0eXBl +ID0gZmllbGRzW2ldLmdldEF0dHJpYnV0ZSgndHlwZScpOw0KCQkJCQl2YXIgcGFy +YW0gPSBmaWVsZHNbaV0uZ2V0QXR0cmlidXRlKCduYW1lJyk7DQoJCQkJCXZhciB2 +YWx1ZTsNCg0KCQkJCQlpZih0eXBlID09ICdjaGVja2JveCcpew0KCQkJCQkJdmFs +dWUgPSBmaWVsZHNbaV0uY2hlY2tlZCA/IHRydWUgOiBmYWxzZTsNCgkJCQkJfSBl +bHNlIHsNCgkJCQkJCXZhbHVlID0gZmllbGRzW2ldLnZhbHVlOw0KCQkJCQl9DQoN +CgkJCQkJZGF0YSArPSAoaSE9MCA/ICcmJyA6ICcnKSArIHBhcmFtICsgJz0nICsg +ZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTsNCgkJCQl9DQoJCQkJDQoJCQl9IGVs +c2Ugew0KCQkJCWZpZWxkID0gZmllbGRzLmxlbmd0aCA/IGZpZWxkc1swXSA6IGZp +ZWxkczsNCgkJCQl2YXIgcGFyYW0gPSBmaWVsZC5nZXRBdHRyaWJ1dGUoJ25hbWUn +KTsNCgkJCQl2YXIgdmFsdWUgPSBmaWVsZC52YWx1ZTsNCgkJCQlkYXRhID0gcGFy +YW0gKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpOw0KCQkJfQ0KCQkJ +DQoNCgkJCWRhdGEgKz0gIiZhY3Rpb249IiArIGFjdGlvbjsNCg0KCQkJdmFyIGZp +ZWxkUGFyZW50ID0gJChmaWVsZCkuZ2V0UGFyZW50KCcuJyArIHRoaXMuY2xhc3NO +YW1lcy5maWVsZEhvbGRlcik7DQoJCQlpZihmaWVsZFBhcmVudCkgJChmaWVsZFBh +cmVudCkuYWRkQ2xhc3ModGhpcy5jbGFzc05hbWVzLmlzTG9hZGluZyk7DQoJCQkN +CgkJCWFqYXhQb3N0KA0KCQkJCXVybCwNCgkJCQlkYXRhLA0KCQkJCXRoaXMuY2hl +Y2tEYXRhT25sb2FkLA0KCQkJCWZpZWxkLA0KCQkJCXRoaXMpOw0KCX0sDQoNCgkN +CgkvLyDQp9GC0LXQvdC40LUg0L7RgtCy0LXRgtCwINGB0LXRgNCy0LXRgNCwINC9 +0LAg0L/QtdGA0LXRgdGL0LvQutGDINC60L7QvdC60YDQtdGC0L3QvtCz0L4g0L/Q +vtC70Y8g0YTQvtGA0LzRiyDQuCDQvtCx0YDQsNCx0L7RgtC60LAg0LLRi9C00LDQ +vdC90YvRhSDQvtGI0LjQsdC+0LoNCgljaGVja0RhdGFPbmxvYWQ6IGZ1bmN0aW9u +IChhamF4T2JqLCBmaWVsZCl7DQoJCQkNCgkJCXZhciBmaWVsZFBhcmVudCA9ICQo +ZmllbGQpLmdldFBhcmVudCgnLicgKyB0aGlzLmNsYXNzTmFtZXMuZmllbGRIb2xk +ZXIpOw0KCQkJaWYoZmllbGRQYXJlbnQpICQoZmllbGRQYXJlbnQpLnJlbW92ZUNs +YXNzKHRoaXMuY2xhc3NOYW1lcy5pc0xvYWRpbmcpOw0KDQoJCQlpZihhamF4T2Jq +ICYmIGFqYXhPYmoucmVzcG9uc2VYTUwpew0KCQkJCQ0KCQkJCXZhciB4bWxPYmog +PSBhamF4T2JqLnJlc3BvbnNlWE1MOw0KCQkJCXZhciB4bWxOb2RlcyA9IHRoaXMu +cGFyc2VYTUwoeG1sT2JqKTsNCgkJCQkNCgkJCQlpZih4bWxOb2Rlcy5lcnJvciAm +JiB4bWxOb2Rlcy5lcnJvci5sZW5ndGgpIHsNCgkJCQkJZm9yICh2YXIgaT0wOyBp +PHhtbE5vZGVzLmVycm9yLmxlbmd0aDsgaSsrKXsNCgkJCQkJCXZhciBmaWVsZE1h +cmtlZEVycm9yID0gZmllbGQ7DQoJCQkJCQl2YXIgZXJyb3JNZXNzYWdlID0geG1s +Tm9kZXMuZXJyb3JbaV0uZmlyc3RDaGlsZC5kYXRhOw0KCQkJCQkJdGhpcy5tYXJr +RmllbGRfZXJyb3IoZmllbGRNYXJrZWRFcnJvciwgZXJyb3JNZXNzYWdlKTsNCgkJ +CQkJfQ0KDQoJCQkJfSBlbHNlIGlmKHhtbE5vZGVzLnJlZGlyZWN0ICYmIHhtbE5v +ZGVzLnJlZGlyZWN0Lmxlbmd0aCkgew0KCQkJCQl0aGlzLmNvbXBsZXRlRm9ybSh4 +bWxOb2Rlcy5yZWRpcmVjdFswXS5maXJzdENoaWxkLmRhdGEpOw0KDQoJCQkJfSBl +bHNlIHsNCgkJCQkJdGhpcy5tYXJrRmllbGRfY2hlY2tlZChmaWVsZCk7DQoJCQkJ +fQ0KDQoJCQl9DQoJfSwNCg0KDQoNCg0KCS8vINCe0YfQuNGJ0LDQtdC8INC/0L7Q +u9C1INC+0YIg0LvRjtCx0YvRhSDQvtGC0LzQtdGC0L7Qug0KCW1hcmtGaWVsZF9j +bGVhcjogZnVuY3Rpb24oZmllbGQpew0KCQkJdmFyIGZpZWxkSG9sZGVyID0gJChm +aWVsZCkuZ2V0UGFyZW50KCcuJyArIHRoaXMuY2xhc3NOYW1lcy5maWVsZEhvbGRl +cik7DQoJCQlpZihmaWVsZEhvbGRlcil7DQoJCQkJJChmaWVsZEhvbGRlcikucmVt +b3ZlQ2xhc3ModGhpcy5jbGFzc05hbWVzLmZpZWxkTWFya2VkRXJyb3IpOw0KCQkJ +CSQoZmllbGRIb2xkZXIpLnJlbW92ZUNsYXNzKHRoaXMuY2xhc3NOYW1lcy5maWVs +ZE1hcmtlZENoZWNrZWQpOw0KCQkJfQ0KCX0sDQoNCg0KCS8vINCe0YLQvNC10YfQ +sNC10Lwg0L/QvtC70LUg0LrQsNC6INC/0YDQvtGI0LXQtNGI0LXQtSDQv9GA0L7Q +stC10YDQutGDDQoJbWFya0ZpZWxkX2NoZWNrZWQ6IGZ1bmN0aW9uKGZpZWxkKXsN +CgkJCXZhciBmaWVsZEhvbGRlciA9ICQoZmllbGQpLmdldFBhcmVudCgnLicgKyB0 +aGlzLmNsYXNzTmFtZXMuZmllbGRIb2xkZXIpOw0KCQkJaWYoZmllbGRIb2xkZXIp +ew0KCQkJCSQoZmllbGRIb2xkZXIpLnJlbW92ZUNsYXNzKHRoaXMuY2xhc3NOYW1l +cy5maWVsZE1hcmtlZEVycm9yKTsNCgkJCQkkKGZpZWxkSG9sZGVyKS5hZGRDbGFz +cyh0aGlzLmNsYXNzTmFtZXMuZmllbGRNYXJrZWRDaGVja2VkKTsNCgkJCX0NCgl9 +LA0KDQoNCgkvLyDQntGC0LzQtdGH0LDQtdC8INC/0L7Qu9C1INC60LDQuiDQvtGI +0LjQsdC+0YfQvdC+0LUg0Lgg0LLRi9Cy0L7QtNC40Lwg0YHQvtC+0LHRidC10L3Q +uNC1INC+0LEg0L7RiNC40LHQutC1DQoJbWFya0ZpZWxkX2Vycm9yOiBmdW5jdGlv +bihmaWVsZCwgZXJyb3JNZXNzYWdlKSB7DQoJCQl2YXIgZmllbGRIb2xkZXIgPSAk +KGZpZWxkKS5nZXRQYXJlbnQoJy4nICsgdGhpcy5jbGFzc05hbWVzLmZpZWxkSG9s +ZGVyKTsNCgkJCWlmKGZpZWxkSG9sZGVyKXsNCgkJCQkkKGZpZWxkSG9sZGVyKS5y +ZW1vdmVDbGFzcyh0aGlzLmNsYXNzTmFtZXMuZmllbGRNYXJrZWRDaGVja2VkKTsN +CgkJCQkkKGZpZWxkSG9sZGVyKS5hZGRDbGFzcyh0aGlzLmNsYXNzTmFtZXMuZmll +bGRNYXJrZWRFcnJvcik7DQoNCgkJCQl2YXIgZXJyb3JNc2dCb3ggPSB0aGlzLmdl +dEVycm9yTXNnQm94QnlGaWVsZChmaWVsZCk7DQoJCQkJaWYoZXJyb3JNc2dCb3gp +ew0KCQkJCQllcnJvck1zZ0JveC5pbm5lckhUTUwgPSBlcnJvck1lc3NhZ2U7DQoJ +CQkJfQ0KCQkJfQ0KCQkJDQoJfSwNCg0KDQoJLy8J0J/RgNC+0LLQtdGA0LrQsCDQ +v9C+0LvRjyDQvdCwINC/0YPRgdGC0L7RgtGDDQoJY2hlY2tGaWVsZF9lbXB0eTog +ZnVuY3Rpb24oZSwgZmllbGQpew0KDQoJCQlpZihlID09IG51bGwgJiYgZmllbGQu +dmFsdWUgIT0gJycpIHsNCgkJCQl0aGlzLm1hcmtGaWVsZF9jbGVhcihmaWVsZCk7 +DQoJCQkJcmV0dXJuOw0KCQkJfQ0KDQoJCQlpZighZSkgZSA9IHdpbmRvdy5ldmVu +dDsNCgkJCQ0KCQkJc3dpdGNoKGUudHlwZSl7DQoJCQkJY2FzZSAnYmx1cic6DQoJ +CQkJCWlmKGZpZWxkLnZhbHVlLmxlbmd0aCAhPSAwKXsNCgkJCQkJCXRoaXMubWFy +a0ZpZWxkX2NsZWFyKGZpZWxkKTsNCgkJCQkJfQ0KCQkJCQlicmVhazsNCg0KCQkJ +CWNhc2UgJ2tleXVwJzoNCgkJCQkJdGhpcy5tYXJrRmllbGRfY2xlYXIoZmllbGQp +Ow0KCQkJCQlicmVhazsNCg0KCQkJCWNhc2UgJ2NoYW5nZSc6DQoJCQkJCWlmKGZp +ZWxkLnZhbHVlICE9ICcnKXsNCgkJCQkJCXRoaXMubWFya0ZpZWxkX2NsZWFyKGZp +ZWxkKTsNCgkJCQkJfQ0KCQkJCQlicmVhazsNCgkJCX0NCgl9DQoNCn0pOwoKCgov +KiAgIHBvbGxGb3JtICAgKi8KdmFyIHBvbGxGb3JtQ2xhc3MgPSBmdW5jdGlvbigp +ew0KCXBvbGxGb3JtQ2xhc3Muc3VwZXJDbGFzcy5hcHBseSh0aGlzLCBhcmd1bWVu +dHMpOw0KDQoJdGhpcy5hamF4VXJscyA9IHsNCgkJc2F2ZTogIi9hamF4L3BvbGwv +Ig0KCX07DQoJDQoJT2JqZWN0LmV4dGVuZE9iamVjdCgNCgkJdGhpcy54bWxSZXNw +b25zZSwgew0KCQkNCgkJdHdpdHRlciA6IHsNCgkJCW5vZGU6ICd0d2l0dGVyJywN +CgkJCWhhbmRsZXI6ICd4bWxSZXNwb25zZUhhbmRsZXJfdHdpdHRlcicNCgkJfSwN +CgkJDQoJCXJlZ2lvbiA6IHsNCgkJCW5vZGU6ICdyZWdpb24nLA0KCQkJaGFuZGxl +cjogJ3htbFJlc3BvbnNlSGFuZGxlcl9yZWdpb24nDQoJCX0sDQoJCQ0KCQljaXR5 +IDogew0KCQkJbm9kZTogJ2NpdHknLA0KCQkJaGFuZGxlcjogJ3htbFJlc3BvbnNl +SGFuZGxlcl9jaXR5Jw0KCQl9LA0KCQkNCgkJdGV4dCA6IHsNCgkJCW5vZGU6ICd0 +ZXh0JywNCgkJCWhhbmRsZXI6ICd4bWxSZXNwb25zZUhhbmRsZXJfdGV4dCcNCgkJ +fSwNCgkJDQoJCWh0bWwgOiB7DQoJCQlub2RlOiAnaHRtbCcsDQoJCQloYW5kbGVy +OiAneG1sUmVzcG9uc2VIYW5kbGVyX2h0bWwnDQoJCX0NCgl9KTsNCg0KfTsNCg0K +cG9sbEZvcm1DbGFzcy5pbmhlcml0c0Zyb20oYWpheEZvcm1DbGFzcyk7DQoNCk9i +amVjdC5leHRlbmRPYmplY3QoDQoJcG9sbEZvcm1DbGFzcy5wcm90b3R5cGUsIHsN +CgkNCglzZW5kRGF0YTogZnVuY3Rpb24gKGZvcm0sIHN1Ym1pdFR5cGUsIHBvc3Rf +aWQpew0KCQkvLyDQl9Cw0LTQsNC10Lwg0LrQu9Cw0YHRgdC90LXQudC8LCDQvtC/ +0YDQtdC00LXQu9GP0Y7RidC40LksINGH0YLQviDQuNC80LXQvdC90L4g0LPRgNGD +0LfQuNGC0YHRjyDQsiDQtNCw0L3QvdGL0Lkg0LzQvtC80LXQvdGCDQoJCXZhciBs +b2FkaW5nQ2xhc3NOYW1lID0gKHN1Ym1pdFR5cGUgfHwgJ3NhdmUnKSArICctJyAr +IHRoaXMuY2xhc3NOYW1lcy5pc0xvYWRpbmc7DQoNCgkJLy8g0J/RgNC+0LLQtdGA +0LrQsCDRgtC+0LPQviwg0YfRgtC+INGE0L7RgNC80LAg0L3QtSDQvtCx0YDQsNCx +0LDRgtGL0LLQsNC10YIg0YPQttC1INGC0L7Qs9C+LCDRh9GC0L4g0LzRiyDQt9Cw +0L/RgNC+0YHQuNC70Lgg0LIg0LTQsNC90L3Ri9C5INC80L7QvNC10L3Rgg0KCQlp +ZigkKGZvcm0pLmhhc0NsYXNzKGxvYWRpbmdDbGFzc05hbWUpKXsNCgkJCXJldHVy +biBmYWxzZTsNCgkJfQ0KCQlpZiAoc3VibWl0VHlwZSA9PSAncG9sbCcpIHsNCgkJ +CXZhciBkYXRhID0gJ2FjdGlvbj12b3RlJzsNCgkJfSBlbHNlIGlmIChzdWJtaXRU +eXBlID09ICdjYW5jZWwnKSB7DQoJCQl2YXIgZGF0YSA9ICdhY3Rpb249cGFzcyc7 +DQoJCX0NCgkJZGF0YSArPSAnJnBvc3RfaWQ9JyArIHBvc3RfaWQgKyAnJic7DQoJ +CWRhdGEgKz0gdGhpcy5jbGFzc2ljU2VyaWFsaXplRm9ybShmb3JtKTsNCgkJDQoJ +CQ0KCQkvLyDQtdGB0LvQuCBzdWJtaXRUeXBlINC90LUg0L/QtdGA0LXQtNCw0L0s +INGC0L4g0LjRgdC/0L7Qu9GM0LfRg9C10LwgdGhpcy5hamF4VXJscy5zYXZlDQoJ +CXZhciB1cmwgPSB0aGlzLmFqYXhVcmxzW3N1Ym1pdFR5cGVdIHx8IHRoaXMuYWph +eFVybHMuc2F2ZTsNCgkJDQoJCQ0KCQl2YXIgcGFyYW1zID0gew0KCQkJZm9ybTog +Zm9ybSwNCgkJCWxvYWRpbmdDbGFzc05hbWU6IGxvYWRpbmdDbGFzc05hbWUNCgkJ +fTsNCg0KCQkkKGZvcm0pLmFkZENsYXNzKGxvYWRpbmdDbGFzc05hbWUpOw0KCQkN +CgkJYWpheFBvc3QoDQoJCQl1cmwsDQoJCQlkYXRhLA0KCQkJdGhpcy5zZW5kRGF0 +YU9ubG9hZCwNCgkJCXBhcmFtcywNCgkJCXRoaXMpOw0KCQkNCgkJcmV0dXJuIGZh +bHNlOw0KCX0sDQoJeG1sUmVzcG9uc2VIYW5kbGVyX2h0bWw6IGZ1bmN0aW9uKHht +bE5vZGVzLCBwYXJhbXMpew0KCQlpZih4bWxOb2Rlcy5odG1sICYmIHhtbE5vZGVz +Lmh0bWwubGVuZ3RoKSB7DQoJCQlwYXJhbXMuZm9ybS5wYXJlbnROb2RlLmlubmVy +SFRNTCA9IHhtbE5vZGVzLmh0bWxbMF0uZmlyc3RDaGlsZC5kYXRhOw0KCQl9DQoJ +fSwNCgkvLyDQntCx0YDQsNCx0L7RgtGH0LjQuiDQvtGC0LLQtdGC0LAg0YHQtdGA +0LLQtdGA0LAg0L/RgNC4INC/0L7Qu9GD0YfQtdC90LjQuCDQvtGI0LjQsdC60LgN +Cgl4bWxSZXNwb25zZUhhbmRsZXJfZXJyb3I6IGZ1bmN0aW9uKHhtbE5vZGVzLCBw +YXJhbXMpew0KCQlpZih4bWxOb2Rlcy5lcnJvciAmJiB4bWxOb2Rlcy5lcnJvci5s +ZW5ndGgpIHsNCgkJCSQocGFyYW1zLmZvcm0pLnJlbW92ZUNsYXNzKHBhcmFtcy5s +b2FkaW5nQ2xhc3NOYW1lKTsNCg0KCQkJZm9yICh2YXIgaT0wOyBpPHhtbE5vZGVz +LmVycm9yLmxlbmd0aDsgaSsrKXsNCgkJCQl2YXIgZmllbGRNYXJrZWRFcnJvciA9 +IHBhcmFtcy5mb3JtW3htbE5vZGVzLmVycm9yW2ldLmdldEF0dHJpYnV0ZSgnZmll +bGQnKV07DQoJCQkJaWYgKGZpZWxkTWFya2VkRXJyb3IpIHsNCgkJCQkJdmFyIGVy +cm9yTWVzc2FnZSA9IHhtbE5vZGVzLmVycm9yW2ldLmZpcnN0Q2hpbGQgPyB4bWxO +b2Rlcy5lcnJvcltpXS5maXJzdENoaWxkLmRhdGEgOiB0aGlzLmVycm9yTWVzc2Fn +ZXMudW5rbm93bkVycm9yOw0KDQoJCQkJCWlmKCFmaWVsZE1hcmtlZEVycm9yKQ0K +CQkJCQkJZmllbGRNYXJrZWRFcnJvciA9ICQocGFyYW1zLmZvcm0pLmdldEVsZW1l +bnQoJy4nICsgdGhpcy5jbGFzc05hbWVzLnVua25vd25FcnJvck1zZyk7DQoNCgkJ +CQkJdGhpcy5tYXJrRmllbGRfZXJyb3IoZmllbGRNYXJrZWRFcnJvciwgZXJyb3JN +ZXNzYWdlKTsNCgkJCQl9IGVsc2Ugew0KCQkJCQl2YXIgZXJyb3JNZXNzYWdlID0g +eG1sTm9kZXMuZXJyb3JbaV0uZmlyc3RDaGlsZCA/IHhtbE5vZGVzLmVycm9yW2ld +LmZpcnN0Q2hpbGQuZGF0YSA6IHRoaXMuZXJyb3JNZXNzYWdlcy51bmtub3duRXJy +b3I7DQoJCQkJCWZ1dHVfYWxlcnQoRkFULnBvbGxfaGVhZGVyLCBlcnJvck1lc3Nh +Z2UsIGZhbHNlLCAnZXJyb3InKTsNCgkJCQl9DQoJCQl9DQoNCgkJfQ0KCX0NCn0p +Ow0KDQoNCnZhciBwb2xsRm9ybSA9IG5ldyBwb2xsRm9ybUNsYXNzKCk7CgoKCi8q +ICAgYmxvZ3MgICAqLwpibG9nc0hhbmRsZXIgPSB7DQoNCgl1cmxfbGVhdmVfam9p +bjogJy9hamF4L2Jsb2dzL21lbWJlcnNoaXAvJywNCgl1cmxfZ2V0X2luZm86ICcv +YWpheC9ibG9ncy9nZXRpbmZvLycsDQoJDQoJeG1sOiB7DQoJCXJlc3BvbnNlTm9k +ZXM6IHsNCgkJCWVycm9yIDogJ2Vycm9yJywNCgkJCW1lbWJlcnNfY291bnRfc3Ry +IDogJ21lbWJlcnNfY291bnRfc3RyJywNCgkJCXJlc3VsdCA6ICdtZXNzYWdlJywN +CgkJCXBhcmFtIDogJ3BhcmFtJywNCgkJCWRpdmNvbnRlbnQgOiAnZGl2Y29udGVu +dCcNCgkJfSwNCg0KCQlwYXJzZTogZnVuY3Rpb24oeG1sT2JqKXsNCgkJCXZhciB4 +bWxOb2RlcyA9IHt9Ow0KCQkJZm9yIChwcm9wIGluIGJsb2dzSGFuZGxlci54bWwu +cmVzcG9uc2VOb2Rlcykgew0KCQkJCXhtbE5vZGVzW3Byb3BdID0geG1sT2JqLmdl +dEVsZW1lbnRzQnlUYWdOYW1lKGJsb2dzSGFuZGxlci54bWwucmVzcG9uc2VOb2Rl +c1twcm9wXSk7DQoJCQl9DQoJCQlyZXR1cm4geG1sTm9kZXM7DQoJCX0NCgl9LA0K +CQ0KCWpvaW5MZWF2ZUJsb2cgOiBmdW5jdGlvbihhY3Rpb24sIHRhcmdldF9pZCkg +ew0KCQl2YXIgZGF0YSA9ICdhY3Rpb249JysgYWN0aW9uICsnJmJsb2dfaWQ9JyAr +IHRhcmdldF9pZDsNCgkJYWpheExvYWRQb3N0KGJsb2dzSGFuZGxlci51cmxfbGVh +dmVfam9pbiArIGFjdGlvbiArICcvJywgZGF0YSwgYmxvZ3NIYW5kbGVyLmpvaW5M +ZWF2ZUJsb2dPbmxvYWQpOw0KCX0sDQoJDQoJDQoJam9pbkxlYXZlQmxvZ09ubG9h +ZCA6IGZ1bmN0aW9uKGFqYXhPYmopIHsNCgkJaWYoYWpheE9iaiAmJiBhamF4T2Jq +LnJlc3BvbnNlWE1MKXsNCgkJCXZhciB4bWxPYmogPSBhamF4T2JqLnJlc3BvbnNl +WE1MOw0KCQkJdmFyIHhtbE5vZGVzID0gYmxvZ3NIYW5kbGVyLnhtbC5wYXJzZSh4 +bWxPYmopOw0KCQkJaWYoeG1sTm9kZXMuZXJyb3IgJiYgeG1sTm9kZXMuZXJyb3Iu +bGVuZ3RoKXsNCgkJCQl2YXIgZXJyb3JzX2xlbmd0aCA9IHhtbE5vZGVzLmVycm9y +Lmxlbmd0aDsNCgkJCQlmb3IgKHZhciBpID0gMDsgaSA8IGVycm9yc19sZW5ndGg7 +IGkrKykgew0KCQkJCQlmdXR1X2FsZXJ0KEZBVC5ibG9ncy5oZWFkZXIsIHhtbE5v +ZGVzLmVycm9yW2ldLmZpcnN0Q2hpbGQuZGF0YSwgdHJ1ZSwgJ2Vycm9yJyk7DQoJ +CQkJfQ0KCQkJfQ0KCQkJaWYoeG1sTm9kZXMucmVzdWx0ICYmIHhtbE5vZGVzLnJl +c3VsdC5sZW5ndGgpIHsNCgkJCQlpZih4bWxOb2Rlcy5wYXJhbSAmJiB4bWxOb2Rl +cy5wYXJhbS5sZW5ndGgpIHsNCgkJCQkJaWYgKHhtbE5vZGVzLnBhcmFtWzBdLmZp +cnN0Q2hpbGQuZGF0YSA9PSAnbGVhdmUnKSB7DQoJCQkJCQkkKCdqcy1hZGRCbG9n +TWVtYmVyJykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpOw0KCQkJCQkJJCgnanMtcmVt +b3ZlQmxvZ01lbWJlcicpLmFkZENsYXNzKCdoaWRkZW4nKTsNCgkJCQkJCWZ1dHVf +YWxlcnQoRkFULmJsb2dzLmhlYWRlciwgRkFULmJsb2dzLmJsb2dfbGVhdmUsIGZh +bHNlLCAnbWVzc2FnZScpOw0KCQkJCQl9IGVsc2UgaWYgKHhtbE5vZGVzLnBhcmFt +WzBdLmZpcnN0Q2hpbGQuZGF0YSA9PSAnam9pbicpIHsNCgkJCQkJCSQoJ2pzLWFk +ZEJsb2dNZW1iZXInKS5hZGRDbGFzcygnaGlkZGVuJyk7DQoJCQkJCQkkKCdqcy1y +ZW1vdmVCbG9nTWVtYmVyJykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpOw0KCQkJCQkJ +ZnV0dV9hbGVydChGQVQuYmxvZ3MuaGVhZGVyLCBGQVQuYmxvZ3MuYmxvZ19qb2lu +LCBmYWxzZSwgJ21lc3NhZ2UnKTsNCgkJCQkJfQ0KCQkJCQkkKCdtZW1iZXJzX2Nv +dW50Jykuc2V0KCdodG1sJywgeG1sTm9kZXMubWVtYmVyc19jb3VudF9zdHJbMF0u +Zmlyc3RDaGlsZC5kYXRhKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9LA0KCQ0KCWdl +dEJsb2dQZW9wbGUgOiBmdW5jdGlvbihhY3Rpb24sIHRhcmdldF9pZCkgew0KCQlp +ZiAoYWN0aW9uID09ICdhZG1pbmlzdHJhdGlvbicpIHsNCgkJCWlmICgkKCdqcy1h +ZG1pbnNfbW9kZXJhdG9yc19ob2xkZXInKS5oYXNDbGFzcygnanMtaXNfbG9hZGVk +JykpIHsNCgkJCQkkKCdqcy1hZG1pbnNfbW9kZXJhdG9yc19ob2xkZXInKS5yZW1v +dmVDbGFzcygnaGlkZGVuJyk7DQoJCQkJDQovLwkJCQlhZGRDbGFzcygkKCdqcy1h +ZG1pbnNfbW9kZXJhdG9yc19ob2xkZXJfc2hvdycpLCAnaGlkZGVuJyk7DQovLwkJ +CQlyZW1vdmVDbGFzcygkKCdqcy1hZG1pbnNfbW9kZXJhdG9yc19ob2xkZXJfaGlk +ZScpLCAnaGlkZGVuJyk7DQoJCQl9IGVsc2UgaWYgKCEkKCdqcy1hZG1pbnNfbW9k +ZXJhdG9yc19ob2xkZXInKS5oYXNDbGFzcygnanMtaXNfbG9hZGluZycpKSB7DQoJ +CQkJdmFyIGRhdGEgPSAna2luZD0nKyBhY3Rpb24gKycmYmxvZ19pZD0nICsgdGFy +Z2V0X2lkOw0KCQkJCWFqYXhMb2FkUG9zdChibG9nc0hhbmRsZXIudXJsX2dldF9p +bmZvLCBkYXRhLCBibG9nc0hhbmRsZXIuZ2V0QmxvZ1Blb3BsZU9ubG9hZCwgd2lu +ZG93LCB7YWN0aW9uOmFjdGlvbn0pOw0KCQkJCSQoJ2pzLWFkbWluc19tb2RlcmF0 +b3JzX2hvbGRlcicpLmFkZENsYXNzKCdqcy1pc19sb2FkaW5nJyk7DQoJCQkJDQov +LwkJCQlhZGRDbGFzcygkKCdqcy1hZG1pbnNfbW9kZXJhdG9yc19ob2xkZXJfc2hv +dycpLCAnaGlkZGVuJyk7DQovLwkJCQlyZW1vdmVDbGFzcygkKCdqcy1hZG1pbnNf +bW9kZXJhdG9yc19ob2xkZXJfaGlkZScpLCAnaGlkZGVuJyk7DQoJCQl9DQoJCQkJ +DQoJCX0gZWxzZSBpZiAoYWN0aW9uID09ICdtZW1iZXJzJykgew0KCQkJaWYgKCQo +J2pzLWFkbWluc19yZWFkZXJzX2hvbGRlcicpLmhhc0NsYXNzKCdqcy1pc19sb2Fk +ZWQnKSkgew0KCQkJCSQoJ2pzLWFkbWluc19yZWFkZXJzX2hvbGRlcicpLnJlbW92 +ZUNsYXNzKCdoaWRkZW4nKTsNCgkJCQkNCgkJCQkkKCdqcy1hZG1pbnNfcmVhZGVy +c19ob2xkZXJfc2hvdycpLmFkZENsYXNzKCdoaWRkZW4nKTsNCgkJCQkkKCdqcy1h +ZG1pbnNfcmVhZGVyc19ob2xkZXJfaGlkZScpLnJlbW92ZUNsYXNzKCdoaWRkZW4n +KTsNCgkJCX0gZWxzZSBpZiAoISQoJ2pzLWFkbWluc19yZWFkZXJzX2hvbGRlcicp +Lmhhc0NsYXNzKCdqcy1pc19sb2FkaW5nJykpIHsNCgkJCQl2YXIgZGF0YSA9ICdr +aW5kPScrIGFjdGlvbiArJyZibG9nX2lkPScgKyB0YXJnZXRfaWQ7DQoJCQkJYWph +eExvYWRQb3N0KGJsb2dzSGFuZGxlci51cmxfZ2V0X2luZm8sIGRhdGEsIGJsb2dz +SGFuZGxlci5nZXRCbG9nUGVvcGxlT25sb2FkLCB3aW5kb3csIHthY3Rpb246YWN0 +aW9ufSk7DQoJCQkJJCgnanMtYWRtaW5zX3JlYWRlcnNfaG9sZGVyJykuYWRkQ2xh +c3MoJ2pzLWlzX2xvYWRpbmcnKTsNCgkJCQkNCgkJCQkkKCdqcy1hZG1pbnNfcmVh +ZGVyc19ob2xkZXJfc2hvdycpLmFkZENsYXNzKCdoaWRkZW4nKTsNCgkJCQkkKCdq +cy1hZG1pbnNfcmVhZGVyc19ob2xkZXJfaGlkZScpLnJlbW92ZUNsYXNzKCdoaWRk +ZW4nKTsNCgkJCX0NCgkJfQ0KCQkNCgl9LA0KCQ0KCWhpZGVCbG9nUGVvcGxlIDog +ZnVuY3Rpb24oYWN0aW9uKSB7DQoJCWlmIChhY3Rpb24gPT0gJ2FkbWluaXN0cmF0 +aW9uJykgew0KCQkJJCgnanMtYWRtaW5zX21vZGVyYXRvcnNfaG9sZGVyJykuYWRk +Q2xhc3MoJ2hpZGRlbicpOw0KCQkJJCgnanMtYWRtaW5zX21vZGVyYXRvcnNfaG9s +ZGVyX3Nob3cnKS5yZW1vdmVDbGFzcygnaGlkZGVuJyk7DQoJCQkkKCdqcy1hZG1p +bnNfbW9kZXJhdG9yc19ob2xkZXJfaGlkZScpLmFkZENsYXNzKCdoaWRkZW4nKTsN +CgkJfSBlbHNlIGlmIChhY3Rpb24gPT0gJ21lbWJlcnMnKSB7DQoJCQkkKCdqcy1h +ZG1pbnNfcmVhZGVyc19ob2xkZXInKS5hZGRDbGFzcygnaGlkZGVuJyk7DQoJCQkk +KCdqcy1hZG1pbnNfcmVhZGVyc19ob2xkZXJfc2hvdycpLnJlbW92ZUNsYXNzKCdo +aWRkZW4nKTsNCgkJCSQoJ2pzLWFkbWluc19yZWFkZXJzX2hvbGRlcl9oaWRlJyku +YWRkQ2xhc3MoJ2hpZGRlbicpOw0KCQl9DQoJfSwNCgkNCglnZXRCbG9nUGVvcGxl +T25sb2FkIDogZnVuY3Rpb24oYWpheE9iaiwgcGFyYW1zKSB7DQoJCWlmKGFqYXhP +YmogJiYgYWpheE9iai5yZXNwb25zZVhNTCl7DQoJCQl2YXIgeG1sT2JqID0gYWph +eE9iai5yZXNwb25zZVhNTDsNCgkJCXZhciB4bWxOb2RlcyA9IGJsb2dzSGFuZGxl +ci54bWwucGFyc2UoeG1sT2JqKTsNCgkJCWlmKHhtbE5vZGVzLmVycm9yICYmIHht +bE5vZGVzLmVycm9yLmxlbmd0aCl7DQoJCQkJdmFyIGVycm9yc19sZW5ndGggPSB4 +bWxOb2Rlcy5lcnJvci5sZW5ndGg7DQoJCQkJZm9yICh2YXIgaSA9IDA7IGkgPCBl +cnJvcnNfbGVuZ3RoOyBpKyspIHsNCgkJCQkJZnV0dV9hbGVydChGQVQuYmxvZ3Mu +aGVhZGVyLCB4bWxOb2Rlcy5lcnJvcltpXS5maXJzdENoaWxkLmRhdGEsIHRydWUs +ICdlcnJvcicpOw0KCQkJCX0NCgkJCX0NCgkJCWlmKHhtbE5vZGVzLnJlc3VsdCAm +JiB4bWxOb2Rlcy5yZXN1bHQubGVuZ3RoKSB7DQoJCQkJaWYoeG1sTm9kZXMuZGl2 +Y29udGVudCAmJiB4bWxOb2Rlcy5kaXZjb250ZW50Lmxlbmd0aCkgew0KCQkJCQlp +ZiAocGFyYW1zLmFjdGlvbiA9PSAnYWRtaW5pc3RyYXRpb24nKSB7DQoJCQkJCQkk +KCdqcy1hZG1pbnNfbW9kZXJhdG9yc19ob2xkZXInKS5pbm5lckhUTUwgPSB4bWxO +b2Rlcy5kaXZjb250ZW50WzBdLmZpcnN0Q2hpbGQuZGF0YTsNCgkJCQkJCSQoJ2pz +LWFkbWluc19tb2RlcmF0b3JzX2hvbGRlcicpLnJlbW92ZUNsYXNzKCdoaWRkZW4n +KTsNCgkJCQkJCSQoJ2pzLWFkbWluc19tb2RlcmF0b3JzX2hvbGRlcicpLnJlbW92 +ZUNsYXNzKCdqcy1pc19sb2FkaW5nJyk7DQoJCQkJCQkkKCdqcy1hZG1pbnNfbW9k +ZXJhdG9yc19ob2xkZXInKS5hZGRDbGFzcygnanMtaXNfbG9hZGVkJyk7DQoJCQkJ +CQkNCi8vCQkJCQkJYWRkQ2xhc3MoJCgnanMtYWRtaW5zX21vZGVyYXRvcnNfaG9s +ZGVyX3Nob3cnKSwgJ2hpZGRlbicpOw0KLy8JCQkJCQlyZW1vdmVDbGFzcygkKCdq +cy1hZG1pbnNfbW9kZXJhdG9yc19ob2xkZXJfaGlkZScpLCAnaGlkZGVuJyk7DQoJ +CQkJCX0gZWxzZSBpZiAocGFyYW1zLmFjdGlvbiA9PSAnbWVtYmVycycpIHsNCgkJ +CQkJCSQoJ2pzLWFkbWluc19yZWFkZXJzX2hvbGRlcicpLmlubmVySFRNTCA9IHht +bE5vZGVzLmRpdmNvbnRlbnRbMF0uZmlyc3RDaGlsZC5kYXRhOw0KCQkJCQkJJCgn +anMtYWRtaW5zX3JlYWRlcnNfaG9sZGVyJykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicp +Ow0KCQkJCQkJJCgnanMtYWRtaW5zX3JlYWRlcnNfaG9sZGVyJykucmVtb3ZlQ2xh +c3MoJ2pzLWlzX2xvYWRpbmcnKTsNCgkJCQkJCSQoJ2pzLWFkbWluc19yZWFkZXJz +X2hvbGRlcicpLmFkZENsYXNzKCdqcy1pc19sb2FkZWQnKTsNCgkJCQkJCQ0KLy8J +CQkJCQlhZGRDbGFzcygkKCdqcy1hZG1pbnNfcmVhZGVyc19ob2xkZXJfc2hvdycp +LCAnaGlkZGVuJyk7DQovLwkJCQkJCXJlbW92ZUNsYXNzKCQoJ2pzLWFkbWluc19y +ZWFkZXJzX2hvbGRlcl9oaWRlJyksICdoaWRkZW4nKTsNCgkJCQkJfQ0KCQkJCX0N +CgkJCX0NCgkJfQ0KCX0sDQoJDQoJdG9nZ2xlQmxvZ0luZm8gOiBmdW5jdGlvbiAo +dGFyZ2V0X2lkLGVsZW1lbnQpIHsNCgkJdmFyIF9ib3ggPSAkKCdqcy1ibG9nX2lu +Zm8nKTsNCgkJaWYgKF9ib3guaGFzQ2xhc3MoJ2hpZGRlbicpKSB7DQoJCQlfYm94 +LnJlbW92ZUNsYXNzKCdoaWRkZW4nKTsNCgkJCWJsb2dzSGFuZGxlci5nZXRCbG9n +UGVvcGxlKCdhZG1pbmlzdHJhdGlvbicsIHRhcmdldF9pZCk7IA0KCQkJDQoJCQkN +CgkJCXZhciBwID0gZWxlbWVudC5nZXRQb3NpdGlvbigpOw0KCQkJX2JveC5zdHls +ZS50b3AgPSAocC55IC0gMTQpICsgJ3B4JzsNCgkJCWlmIChwLnggPiAoJChkb2N1 +bWVudCkuZ2V0U2l6ZSgpLngvMikpIHsNCgkJCQlfYm94LmFkZENsYXNzKCJ0aXBC +b3gtdG9vLW1hY2gtcmlnaHQiKQ0KCQkJfSBlbHNlIHsNCgkJCQlfYm94LnJlbW92 +ZUNsYXNzKCJ0aXBCb3gtdG9vLW1hY2gtcmlnaHQiKQ0KCQkJfQ0KCQkJX2JveC5z +dHlsZS5sZWZ0ID0gcC54ICsgJ3B4JzsNCgkJCV9ib3guc3R5bGUuZGlzcGxheSA9 +ICdibG9jayc7DQoJCQkNCgkJCQ0KCQkJDQoJCX0gZWxzZSB7DQoJCQlfYm94LmFk +ZENsYXNzKCdoaWRkZW4nKTsNCgkJfQ0KCQkNCgl9LA0KCQ0KCWZpbHRlciA6IGZ1 +bmN0aW9uIChvYmopIHsNCgkJdmFyIGZpZWxkcyA9ICQob2JqLmZvcm0pLmdldEVs +ZW1lbnRzKCcuanMtZmllbGQtZGF0YScpOw0KCQlmb3IgKHZhciBpPTAsIGo9Zmll +bGRzLmxlbmd0aDsgaTxqOyBpKyspIHsNCgkJCWlmKGZpZWxkc1tpXS5jaGVja2Vk +ID09IHRydWUpIHsNCgkJCQl3aW5kb3cubG9jYXRpb24uaHJlZiA9ICcvYmxvZycg +KyBmaWVsZHNbaV0udmFsdWU7DQoJCQl9DQoJCX0NCgl9DQp9Ow0KDQoNCg0KDQp2 +YXIgYWRtaW5CbG9nUGVvcGxlRm9ybUNsYXNzID0gZnVuY3Rpb24oKXsNCglhZG1p +bkJsb2dQZW9wbGVGb3JtQ2xhc3Muc3VwZXJDbGFzcy5hcHBseSh0aGlzLCBhcmd1 +bWVudHMpOw0KDQoJdGhpcy5hamF4VXJscyA9IHsNCgkJc2F2ZTogIi9hamF4L2Js +b2dzL21lbWJlcnNoaXAvc2V0X2dyb3VwLyINCgl9Ow0KCQ0KCU9iamVjdC5leHRl +bmRPYmplY3QoDQoJCXRoaXMueG1sUmVzcG9uc2UsIHsNCgkJDQoJCW1lc3NhZ2U6 +IHsNCgkJCW5vZGU6ICdtZXNzYWdlJywNCgkJCWhhbmRsZXI6ICd4bWxSZXNwb25z +ZUhhbmRsZXJfbWVzc2FnZScNCgkJfQ0KCQkNCgl9KTsNCg0KfTsNCg0KYWRtaW5C +bG9nUGVvcGxlRm9ybUNsYXNzLmluaGVyaXRzRnJvbShhamF4Rm9ybUNsYXNzKTsN +Cg0KT2JqZWN0LmV4dGVuZE9iamVjdCgNCglhZG1pbkJsb2dQZW9wbGVGb3JtQ2xh +c3MucHJvdG90eXBlLCB7DQoJDQoJc2VyaWFsaXplRm9ybTogZnVuY3Rpb24oZm9y +bSl7DQoJCQl2YXIgZGF0YSA9ICcnOw0KCQkJDQoJCQl2YXIgZGF0YXMgPSAkKGZv +cm0pLmdldEVsZW1lbnRzKCcuJyArIHRoaXMuY2xhc3NOYW1lcy5maWVsZERhdGEp +Ow0KCQkJZm9yICh2YXIgaT0wLCBsZW5ndGg9ZGF0YXMubGVuZ3RoOyBpPGxlbmd0 +aDsgaSsrKXsNCgkJCQl2YXIgdHlwZSA9IGRhdGFzW2ldLmdldEF0dHJpYnV0ZSgn +dHlwZScpOw0KCQkJCXZhciBwYXJhbSA9IGRhdGFzW2ldLmdldEF0dHJpYnV0ZSgn +bmFtZScpOw0KCQkJCXZhciB2YWx1ZSA9IGRhdGFzW2ldLnZhbHVlOw0KDQoJCQkJ +aWYodHlwZSA9PSAncmFkaW8nICYmICFkYXRhc1tpXS5jaGVja2VkKXsNCgkJCQkJ +Y29udGludWU7DQoJCQkJfQ0KDQoJCQkJaWYodHlwZSA9PSAnY2hlY2tib3gnICYm +ICFkYXRhc1tpXS5jaGVja2VkKXsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0KCQkJ +CWRhdGEgKz0gKGRhdGEhPScnID8gJyYnIDogJycpICsgcGFyYW0gKyAnPScgKyBl +bmNvZGVVUklDb21wb25lbnQodmFsdWUpOw0KCQkJfQ0KCQkJcmV0dXJuIGRhdGE7 +DQoJfSwNCglzZW5kRGF0YU9ubG9hZDogZnVuY3Rpb24gKGFqYXhPYmosIHBhcmFt +cyl7DQoJCQlpZihhamF4T2JqICYmIGFqYXhPYmoucmVzcG9uc2VYTUwpew0KCQkJ +CXZhciB4bWxPYmogPSBhamF4T2JqLnJlc3BvbnNlWE1MOw0KCQkJCXZhciB4bWxO +b2RlcyA9IHRoaXMucGFyc2VYTUwoeG1sT2JqKTsNCg0KCQkJCWZvciAocHJvcCBp +biB4bWxOb2Rlcyl7DQoJCQkJCWlmKHRoaXNbdGhpcy54bWxSZXNwb25zZVtwcm9w +XS5oYW5kbGVyXSkgew0KCQkJCQkJdGhpc1t0aGlzLnhtbFJlc3BvbnNlW3Byb3Bd +LmhhbmRsZXJdKHhtbE5vZGVzLCBwYXJhbXMpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJ +fQ0KCQkJJChwYXJhbXMuZm9ybSkucmVtb3ZlQ2xhc3MoJ3NhdmUtbG9hZGluZycp +Ow0KCX0sDQoJeG1sUmVzcG9uc2VIYW5kbGVyX21lc3NhZ2U6IGZ1bmN0aW9uICh4 +bWxOb2RlcywgcGFyYW1zKSB7DQoJCWlmICh4bWxOb2Rlcy5tZXNzYWdlICYmIHht +bE5vZGVzLm1lc3NhZ2UubGVuZ3RoICYmIHhtbE5vZGVzLm1lc3NhZ2VbMF0uZmly +c3RDaGlsZC5kYXRhID09ICdvaycpIHsNCgkJCWZ1dHVfYWxlcnQoRkFULmJsb2dz +LmhlYWRlciwgJ9Cf0YDQsNCy0LAg0YHQvtGF0YDQsNC90LXQvdGLJywgZmFsc2Us +ICdtZXNzYWdlJyk7DQoJCX0NCgl9DQp9KTsNCg0KDQp2YXIgYWRtaW5CbG9nUGVv +cGxlRm9ybSA9IG5ldyBhZG1pbkJsb2dQZW9wbGVGb3JtQ2xhc3MoKTsNCg0KDQov +Kg0KdG0uaW5pdC5hZGQoZnVuY3Rpb24oKXsNCgkNCgl2YXIgYmxvZ0luZm9CbG9j +ayA9ICQoZG9jdW1lbnQpLmdldEVsZW1lbnQoIi5ibG9nLWFib3V0LXRleHQiKTsN +CglpZiAoYmxvZ0luZm9CbG9jaykgew0KCQl2YXIgYmxvZ2luZm9CbG9ja0Nsb3Nl +QnV0dG9uID0gYmxvZ0luZm9CbG9jay5nZXRFbGVtZW50KCJhLmNsb3NlLWJsb2ct +aW5mbyIpOw0KCQlpZiAoYmxvZ2luZm9CbG9ja0Nsb3NlQnV0dG9uKSB7DQoJCQli +bG9naW5mb0Jsb2NrQ2xvc2VCdXR0b24uYWRkRXZlbnQoImNsaWNrIixmdW5jdGlv +bigpew0KCQkJCWJsb2dJbmZvQmxvY2suYWRkQ2xhc3MoImhpZGRlbiIpOw0KCQkJ +CXJldHVybiBmYWxzZQ0KCQkJfSkNCgkJfQ0KCQl2YXIgYmxvZ0luZm9CbG9ja0No +aWxkcyA9IGJsb2dJbmZvQmxvY2suZ2V0RWxlbWVudHMoIioiKTsNCgkJZm9yICh2 +YXIgaT0wLGw9YmxvZ0luZm9CbG9ja0NoaWxkcy5sZW5ndGg7IGkgPCBsIDsgaSsr +KSB7DQoJCQlibG9nSW5mb0Jsb2NrQ2hpbGRzW2ldLmNsaWNrZXIgPSAiYmxvZ0lu +Zm9CbG9ja0NoaWxkcyI7DQoJCX07DQoJCXZhciB3aG9pcyA9JChkb2N1bWVudCku +Z2V0RWxlbWVudCgiLmJsb2ctd2hvaXMiKTsNCgkJaWYod2hvaXMpIHsNCgkJCXdo +b2lzLmNsaWNrZXIgPSAiYmxvZ0luZm9CbG9ja0NoaWxkcyI7DQoJCX0NCgkJJChk +b2N1bWVudCkuYWRkRXZlbnQoImNsaWNrIixmdW5jdGlvbihlKXsNCgkJCWlmICgh +ZS50YXJnZXQuY2xpY2tlciB8fCAhZS50YXJnZXQuY2xpY2tlciA9PSAiYmxvZ0lu +Zm9CbG9ja0NoaWxkcyIpIHsNCgkJCQlibG9nSW5mb0Jsb2NrLmFkZENsYXNzKCJo +aWRkZW4iKTsNCgkJCX0NCgkJfSkNCgl9DQp9KTsNCiovCgoK + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline; filename=validation.js +Content-Type: application/x-javascript; charset=utf-8; name=validation.js +Content-Location: http://habrahabr.ru/js/1307631427/tm/validation.js +Content-Transfer-Encoding: Base64 + +dmFyIHRtID0gKHR5cGVvZih0bSkgIT0gJ3VuZGVmaW5lZCcpID8gdG0gOiB7fTsK +Ci8qKgogKiDQmtC70LDRgdGBINC/0YDQvtCy0LXRgNC60Lgg0LfQvdCw0YfQtdC9 +0LjQuSDQv9C+0LvQtdC5INCy0L4g0LLRgdGP0LrQuNGFINGE0L7RgNC80LDRhQog +KiBAcGFyYW0g0KTQvtGA0LzQsCwg0LrQvtGC0L7RgNGD0Y4g0L3Rg9C20L3QviDQ +v9GA0L7QstC10YDRj9GC0YwKICogQGF1dGhvciBiZWJvcGtpZCwgbWRldmlscwog +Ki8KdG0uVmFsaWRhdG9yID0gQ2xhc3MoewoKCWluaXRpYWxpemU6IGZ1bmN0aW9u +ICgpIHsKCQkvKioKCQkgKiDQodC/0LjRgdC+0Log0Y3Qu9C10LzQtdC90YLQvtCy +INC00LvRjyDQstCw0LvQuNC00LDRhtC40LgKCQkgKi8KCQl0aGlzLl9lbGVtZW50 +cyA9IFtdOwoJfSwKCgkvKioKCSAqINCd0LXQv9C+0YHRgNC10LTRgdGC0LLQtdC9 +0L3QviDRhNGD0L3QutGG0LjQuCDQtNC70Y8g0LLQsNC70LjQtNCw0YbQuNC4INC3 +0L3QsNGH0LXQvdC40LksINC40Lwg0L/QtdGA0LXQtNCw0LXRgtGB0Y8g0YLRgNC4 +INC/0LDRgNCw0LzQtdGC0YDQsAoJICogQHBhcmFtIHtTdHJpbmd9INGB0YLRgNC+ +0LrQsCDQtNC70Y8g0LLQsNC70LjQtNCw0YbQuNC4CgkgKiBAcGFyYW0ge09iamVj +dH0g0L/RgNC+0LjQt9Cy0L7Qu9GM0L3Ri9C5INC/0LDRgNCw0LzQtdGC0YAKCSAq +IEBwYXJhbSB7RWxlbWVudH0g0L/QvtC70LUsINC60L7RgtC+0YDQvtC1INC80Ysg +0LLQsNC70LjQtNC40YDRg9C10LwKCSAqLwoJaGFuZGxlcnM6IHsKCQlyZXF1aXJl +ZDogZnVuY3Rpb24odmFsdWUpIHsKCQkJcmV0dXJuIHZhbHVlICYmICgodmFsdWUu +bGVuZ3RoID4gMCkgPyB0cnVlIDogZmFsc2UpOwoJCX0sCgkJbWlubGVuOiBmdW5j +dGlvbih2YWx1ZSwgbWluTGVuZ3RoKSB7CgkJCXJldHVybiB2YWx1ZSAmJiAoKHZh +bHVlLmxlbmd0aCA+PSBtaW5MZW5ndGgpID8gdHJ1ZSA6IGZhbHNlKTsKCQl9LAoJ +CW1heGxlbjogZnVuY3Rpb24odmFsdWUsIG1heExlbmd0aCkgewoJCQlyZXR1cm4g +dmFsdWUgJiYgKCh2YWx1ZS5sZW5ndGggPD0gbWF4TGVuZ3RoKSA/IHRydWUgOiBm +YWxzZSk7CgkJfSwKCQlsb2dpbjogZnVuY3Rpb24odmFsdWUpIHsKCQkJcmV0dXJu +IHZhbHVlICYmIC9eW2EtekEtWjAtOVwtX10qJC8udGVzdCh2YWx1ZSk7CgkJfSwK +CQllbWFpbDogZnVuY3Rpb24odmFsdWUpIHsKCQkJcmV0dXJuIHZhbHVlICYmIC9e +KFthLXpBLVowLTlfXC5cLVwrXSkrXEAoKFthLXpBLVowLTlcLV0pK1wuKSsoW2Et +ekEtWjAtOV17Miw0fSkrJC8udGVzdCh2YWx1ZSk7CgkJfSwKCQlyYWRpb1JlcXVp +cmVkOiBmdW5jdGlvbiAodmFsdWUpIHsKCQkgICAgdmFyIG9rPWZhbHNlOwoJCSAg +ICBpZiAodHlwZW9mKHZhbHVlKSA9PSAnb2JqZWN0JykgewoJCSAgICAgICAgZm9y +KHZhciBpIGluIHZhbHVlKSB7CgkJICAgICAgICAgICAgb2s9dHJ1ZTsKCQkgICAg +ICAgICAgICBicmVhazsKCQkgICAgICAgIH0KCQkgICAgfQoJCSAgICAKCQkgICAg +cmV0dXJuIG9rOwoJCX0sCgkJaGFicmFjdXRtZTogZnVuY3Rpb24odmFsdWUpewoJ +CQlpZiAoYXJndW1lbnRzLmNhbGxlZS5kb25lIHx8ICh2YWx1ZS5sZW5ndGggPCAx +NzAwKSB8fCAodmFsdWUuaW5kZXhPZignXDxoYWJyYWN1dCcpICE9IC0xKSkgewkJ +CQkKCQkJICByZXR1cm4gdHJ1ZQkJCQoJCQl9IGVsc2UgewkJCQkKCQkJCS8vYXJn +dW1lbnRzLmNhbGxlZS5kb25lID0gdHJ1ZTsKCQkJCXJldHVybiBmYWxzZQoJCQl9 +OwoJCX0KCX0sCgkKCS8qKgoJICog0J7Rh9C40YnQsNC10YIg0YHQvtGB0YLQvtGP +0L3QuNC1INCy0LDQu9C40LTQsNGC0L7RgNCwCgkgKi8KCWNsZWFyOiBmdW5jdGlv +bigpIHsKCQl0aGlzLl9lbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pewoJ +CQlpdGVtLmVsZW1lbnQuX3ZhbGlkYXRvciA9IGZhbHNlOyAKCQl9KTsKCQl0aGlz +Ll9lbGVtZW50cyA9IFtdOwoJfSwKCQoJLyoqCgkgKiDQlNC+0LHQsNCy0LvRj9C1 +0YIg0Y3Qu9C10LzQtdC90YLRiyDQtNC70Y8g0LHRg9C00YPRidC10Lkg0LLQsNC7 +0LjQtNCw0YbQuNC4CgkgKiBAcGFyYW0ge0VsZW1lbnR9IHBhcmVudAoJICovCglh +ZGRFbGVtZW50czogZnVuY3Rpb24ocGFyZW50KSB7CgkJdG0uZ2V0RWxlbWVudHNG +b3JWYWxpZGF0aW9uKHBhcmVudCkuZm9yRWFjaChmdW5jdGlvbihmaWVsZCl7CgkJ +CXRoaXMuX2FkZEVsZW1lbnQoZmllbGQpOwoJCX0sIHRoaXMpOwoJfSwKCQoJLyoq +CgkgKiDQlNC10LDQutGC0LjQstC40YDRg9C10YIg0Y3Qu9C10LzQtdC90YLRiyDQ +uNC3INCx0YPQtNGD0YnQtdC5INCy0LDQu9C40LTQsNGG0LjQuAoJICogQHBhcmFt +IHtFbGVtZW50fSBwYXJlbnQKCSAqLwoJZGlzYWJsZUVsZW1lbnRzOiBmdW5jdGlv +bihwYXJlbnQpIHsKCQl0bS5nZXRFbGVtZW50c0ZvclZhbGlkYXRpb24ocGFyZW50 +KS5mb3JFYWNoKGZ1bmN0aW9uKGZpZWxkKXsKCQkJZmllbGQuX3ZhbGlkYXRpb25F +bmFibGVkID0gZmFsc2U7CgkJfSwgdGhpcyk7Cgl9LAoKCS8qKgoJICog0JTQtdCw +0LrRgtC40LLQuNGA0YPQtdGCINGN0LvQtdC80LXQvdGC0Ysg0LjQtyDQsdGD0LTR +g9GJ0LXQuSDQstCw0LvQuNC00LDRhtC40LgKCSAqIEBwYXJhbSB7RWxlbWVudH0g +cGFyZW50CgkgKi8KCWVuYWJsZUVsZW1lbnRzOiBmdW5jdGlvbihwYXJlbnQpIHsK +CQl0bS5nZXRFbGVtZW50c0ZvclZhbGlkYXRpb24ocGFyZW50KS5mb3JFYWNoKGZ1 +bmN0aW9uKGZpZWxkKXsKCQkJZmllbGQuX3ZhbGlkYXRpb25FbmFibGVkID0gdHJ1 +ZTsKCQl9LCB0aGlzKTsKCX0sCgoJLyoqCgkgKiDQlNC+0LHQsNCy0LvRj9C10YIg +0Y3Qu9C10LzQtdC90YLRiyDQtNC70Y8g0LHRg9C00YPRidC10Lkg0LLQsNC70LjQ +tNCw0YbQuNC4CgkgKiBAcGFyYW0ge0VsZW1lbnR9IHBhcmVudAoJICovCglyZW1v +dmVFbGVtZW50czogZnVuY3Rpb24ocGFyZW50KSB7CgkJdG0uZ2V0RWxlbWVudHNG +b3JWYWxpZGF0aW9uKHBhcmVudCkuZm9yRWFjaChmdW5jdGlvbihmaWVsZCl7CgkJ +CXRoaXMuX3JlbW92ZUVsZW1lbnQoZmllbGQpOwoJCX0sIHRoaXMpOwoJfSwKCgkv +KioKCSAqINCU0L7QsdCw0LLQu9GP0LXRgiDRjdC70LXQvNC10L3RgiDQtNC70Y8g +0LHRg9C00YPRidC10Lkg0LLQsNC70LjQtNCw0YbQuNC4CgkgKiBAcGFyYW0ge0Vs +ZW1lbnR9IGVsZW1lbnQKCSAqLwoJX2FkZEVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1l +bnQpIHsKCQlpZiAoIWVsZW1lbnQuX3ZhbGlkYXRvcikgewoJCQllbGVtZW50Ll92 +YWxpZGF0b3IgPSB0aGlzOwoJCQllbGVtZW50Ll92YWxpZGF0aW9uRW5hYmxlZCA9 +IHRydWU7CgkJCXRoaXMuX2VsZW1lbnRzLnB1c2godGhpcy5fZ2V0RWxlbWVudE9i +amVjdChlbGVtZW50KSk7CgkJfQoJfSwKCgkvKioKCSAqINCf0LDRgNGB0LjRgiDQ +uNC90YTQvtGA0LzQsNGG0LjRjiDQvtCxINGN0LvQtdC80LXQvdGC0LUg0Lgg0LLQ +vtC30LLRgNCw0YnQsNC10YIg0L7QsdGK0LXQutGCINGN0LvQtdC80LXQvdGC0LAK +CSAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudAoJICovCglfZ2V0RWxlbWVudE9i +amVjdDogZnVuY3Rpb24oZWxlbWVudCkgewoJCXZhciB2YWxpZGF0aW9uU3RyaW5n +Qml0cyA9IGVsZW1lbnQuZ2V0KCd2YWxpZGF0ZScpLnNwbGl0KCcgJyk7IAoJCXZh +ciBlbGVtZW50T2JqZWN0ID0gewoJCQknZWxlbWVudCc6IGVsZW1lbnQsCgkJCSd2 +YWxpZGF0aW9ucyc6IFtdCgkJfTsKCQlmb3IgKHZhciBpPTA7IGk8dmFsaWRhdGlv +blN0cmluZ0JpdHMubGVuZ3RoOyBpKyspIHsKCQkJdmFyIHZhbGlkYXRpb25FeHBy +ZXNzaW9uID0gdmFsaWRhdGlvblN0cmluZ0JpdHNbaV07CgkJCXZhciBjb2xvbiA9 +IHZhbGlkYXRpb25FeHByZXNzaW9uLmluZGV4T2YoJzonKTsKCQkJdmFyIHBhcmFt +ID0gbnVsbDsKCQkJaWYgKGNvbG9uICE9IC0xKSB7CgkJCQl2YXIgaGFuZGxlciA9 +IHZhbGlkYXRpb25FeHByZXNzaW9uLnN1YnN0cigwLCBjb2xvbik7CgkJCQlwYXJh +bSA9IHZhbGlkYXRpb25FeHByZXNzaW9uLnN1YnN0cihjb2xvbisxKTsKCQkJfSBl +bHNlIHsKCQkJCXZhciBoYW5kbGVyID0gdmFsaWRhdGlvbkV4cHJlc3Npb247CgkJ +CX0KCQkJZWxlbWVudE9iamVjdC52YWxpZGF0aW9ucy5wdXNoKHsKCQkJCSdoYW5k +bGVyJzogaGFuZGxlciwKCQkJCSdwYXJhbSc6IHBhcmFtCgkJCX0pOwoJCX0KCQly +ZXR1cm4gZWxlbWVudE9iamVjdDsKCX0sCgoJLyoqCgkgKiDQo9C00LDQu9GP0LXR +giDRjdC70LXQvNC10L3RgtGLINC40Lcg0LLQsNC70LjQtNCw0YbQuNC4CgkgKiBA +cGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQKCSAqLwoJX3JlbW92ZUVsZW1lbnQ6IGZ1 +bmN0aW9uKGVsZW1lbnQpIHsKCQlmb3IgKHZhciBpPTA7IGk8dGhpcy5fZWxlbWVu +dHMubGVuZ3RoOyBpKyspIHsKCQkJaWYgKHRoaXMuX2VsZW1lbnRzW2ldLmVsZW1l +bnQgPT0gZWxlbWVudCkgewoJCQkJZWxlbWVudC5fdmFsaWRhdG9yID0gZmFsc2U7 +CgkJCQl0aGlzLl9lbGVtZW50cy5zcGxpY2UoaSwgMSk7CgkJCQlyZXR1cm47CgkJ +CX0KCQl9Cgl9LAoKCS8qKgoJICog0JLQvtC30LLRgNCw0YnQsNC10YIg0LfQvdCw +0YfQtdC90LjQtSDRjdC70LXQvNC10L3RgtCwCgkgKiBAcGFyYW0ge0VsZW1lbnR9 +IGVsZW1lbnQKCSAqLwoJX2dldFZhbHVlOiBmdW5jdGlvbihlbGVtZW50KSB7CgkJ +c3dpdGNoICgkKGVsZW1lbnQpLmdldCgndGFnJykpIHsKCQkJY2FzZSAnaW5wdXQn +OgoJCQkJc3dpdGNoIChlbGVtZW50LmdldCgidHlwZSIpKSB7CgkJCQkJY2FzZSAn +dGV4dCc6CgkJCQkJY2FzZSAncGFzc3dvcmQnOgoJCQkJCWNhc2UgJ2ZpbGUnOgoJ +CQkJCQlyZXR1cm4gZWxlbWVudC52YWx1ZTsKCQkJCQljYXNlICdjaGVja2JveCc6 +CgkJCQkJY2FzZSAncmFkaW8nOgoJCQkJCQlyZXR1cm4gZWxlbWVudC5nZXQoImNo +ZWNrZWQiKSA/IGVsZW1lbnQudmFsdWUgOiBudWxsOwoJCQkJCQoJCQkJfQoJCQkJ +YnJlYWs7CgkJCWNhc2UgJ3RleHRhcmVhJzoKCQkJCXJldHVybiBlbGVtZW50LnZh +bHVlOwoJCQljYXNlICdzZWxlY3QnOgoJCQkJcmV0dXJuIGVsZW1lbnQuZ2V0KCJ2 +YWx1ZSIpOwoJCQljYXNlICdmaWVsZHNldCc6CiAgICAgICAgICAgICAgICB2YXIg +ZmllbGRzID0gZWxlbWVudC5nZXRFbGVtZW50cygnaW5wdXQsc2VsZWN0LHRleHRh +cmVhLGZpZWxkc2V0Jyk7CiAgICAJCSAgICB2YXIgcmV0ID0ge307CiAgICAJCQlm +b3IgKHZhciBpID0gMCwgbCA9IGZpZWxkcy5sZW5ndGg7IGk8bDsgaSsrKSB7CiAg +ICAJCQkgICAgdmFyIGZpZWxkID0gZmllbGRzW2ldOwogICAgCQkJICAgIHZhciBu +YW1lID0gZmllbGQubmFtZTsKICAgIAkJCSAgICB2YXIgdmFsdWUgPSB0aGlzLl9n +ZXRWYWx1ZShmaWVsZCk7CiAgICAJCQkgICAgaWYodHlwZW9mKHZhbHVlKSAhPT0g +J3VuZGVmaW5lZCcgJiYgdmFsdWUgIT09IG51bGwpIHsKICAgIAkJCSAgICAgICAg +IXJldFtuYW1lXSA/CiAgICAJCQkgICAgICAgICAgICByZXRbbmFtZV0gPSB2YWx1 +ZSA6CiAgICAJCQkgICAgICAgICAgICByZXRbbmFtZV0uZm9yRWFjaCA/CiAgICAJ +CQkgICAgICAgICAgICAgICAgcmV0W25hbWVdLnB1c2godmFsdWUpIDoKICAgIAkJ +CSAgICAgICAgICAgICAgICAocmV0W25hbWVdID0gWyByZXRbbmFtZV0sIHZhbHVl +IF0pOwogICAgCQkJICAgIH0KICAgIAkJCX0KICAgIAkJCXJldHVybiByZXQ7CgkJ +CQlicmVhazsKCQl9Cgl9LAoKCS8qKgoJICog0J/RgNC+0LjQt9Cy0L7QtNC40YIg +0LLQsNC70LjQtNCw0YbQuNGOINC+0LHRitC10LrRgtCwINCy0LDQu9C40LTQsNGG +0LjQuAoJICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnQKCSAqLwoJX3ZhbGlkYXRl +RWxlbWVudE9iamVjdDogZnVuY3Rpb24oZWxlbWVudE9iamVjdCkgewoJCXZhciBl +bGVtZW50ID0gZWxlbWVudE9iamVjdC5lbGVtZW50OwoJCXZhciB2YWx1ZSA9IHRo +aXMuX2dldFZhbHVlKGVsZW1lbnQpOwoJCWZvciAodmFyIGk9MDsgaTxlbGVtZW50 +T2JqZWN0LnZhbGlkYXRpb25zLmxlbmd0aDsgaSsrKSB7CgkJCWlmIChlbGVtZW50 +T2JqZWN0LmVsZW1lbnQuX3ZhbGlkYXRpb25FbmFibGVkKSB7CgkJCQl2YXIgaGFu +ZGxlciA9IGVsZW1lbnRPYmplY3QudmFsaWRhdGlvbnNbaV0uaGFuZGxlcjsKCQkJ +CXZhciBwYXJhbSA9IGVsZW1lbnRPYmplY3QudmFsaWRhdGlvbnNbaV0ucGFyYW07 +CgkJCQlpZiAoIXRoaXMuaGFuZGxlcnNbaGFuZGxlcl0odmFsdWUsIHBhcmFtKSkg +CgkJCQkJcmV0dXJuIGhhbmRsZXI7CgkJCX0KCQl9CgkJcmV0dXJuIGZhbHNlOwoJ +fSwKCgkvKioKCSAqINCf0YDQvtC40LfQstC+0LTQuNGCINCy0LDQu9C40LTQsNGG +0LjRjiDQvtCx0YrQtdC60YLQsCDQstCw0LvQuNC00LDRhtC40LgKCSAqIEBwYXJh +bSB7RWxlbWVudH0gZWxlbWVudAoJICovCgl2YWxpZGF0ZUVsZW1lbnQ6IGZ1bmN0 +aW9uKGVsZW1lbnQpIHsKCQlyZXR1cm4gX3ZhbGlkYXRlRWxlbWVudE9iamVjdCh0 +aGlzLl9nZXRFbGVtZW50T2JqZWN0KGVsZW1lbnQpKTsKCX0sCgoJLyoqCgkgKiDQ +n9GA0L7QuNC30LLQvtC00LjRgiDQstCw0LvQuNC00LDRhtC40Y4g0LLRgdC10YUg +0L7QsdGK0LXQutGC0L7QsgoJICovCgl2YWxpZGF0ZTogZnVuY3Rpb24oKSB7CgkJ +dmFyIHJlc3VsdCA9IFtdOwoJCWZvciAodmFyIGk9MDsgaTx0aGlzLl9lbGVtZW50 +cy5sZW5ndGg7IGkrKykgewoJCQl2YXIgZXJyb3IgPSB0aGlzLl92YWxpZGF0ZUVs +ZW1lbnRPYmplY3QodGhpcy5fZWxlbWVudHNbaV0pOwoJCQlpZiAoZXJyb3IpIHsK +CQkJCXJlc3VsdC5wdXNoKHsKCQkJCQknZWxlbWVudCc6IHRoaXMuX2VsZW1lbnRz +W2ldLmVsZW1lbnQsCgkJCQkJJ2Vycm9yVHlwZSc6IGVycm9yCgkJCQl9KTsKCQkJ +fQoJCX0KCQlyZXR1cm4gcmVzdWx0OwoJfQp9KTsKCnRtLmdldEVsZW1lbnRzRm9y +VmFsaWRhdGlvbiA9IGZ1bmN0aW9uKGNvbnRhaW5lcikgewoJdmFyIGVsZW1lbnRz +ID0gW107CglpZiAoIWNvbnRhaW5lcikgeyByZXR1cm4gW107IH07CgkkKGNvbnRh +aW5lcikuZ2V0RWxlbWVudHMoJ2lucHV0LHNlbGVjdCx0ZXh0YXJlYSxmaWVsZHNl +dCcpLmZvckVhY2goCgkJZnVuY3Rpb24gKGZpZWxkKSB7CgkJCWlmICghdG0uYmFk +VGFncy5jb250YWlucyhmaWVsZC50YWdOYW1lKSAmJiBmaWVsZC5nZXQoJ3ZhbGlk +YXRlJykgIT0gbnVsbCkgewoJCQkJZWxlbWVudHMucHVzaChmaWVsZCk7CgkJCX07 +Cgl9LCB0aGlzKTsKCXJldHVybiBlbGVtZW50czsKfTs= + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline; filename=xmlhandler.js +Content-Type: application/x-javascript; charset=utf-8; name=xmlhandler.js +Content-Location: http://habrahabr.ru/js/1307631427/tm/xmlhandler.js +Content-Transfer-Encoding: Base64 + +dmFyIHRtID0gKHR5cGVvZih0bSkgIT0gJ3VuZGVmaW5lZCcpID8gdG0gOiB7fTsK +IAovKioKICog0J7QsdGA0LDQsdC+0YLRh9C40Log0L7RgtCy0LXRgtC+0LIg0L7R +giDRgdC10YDQstC10YDQsAogKiBAYXV0aG9yIG1kZXZpbHMKICogQGNvbnN0cnVj +dG9yCiAqLwp0bS5IYW5kbGVyID0gZnVuY3Rpb24oKXsKCQoJdGhpcy5oYW5kbGVy +cyA9IHsKCQkKCQkncmVkaXJlY3RfdXJsJyA6IGZ1bmN0aW9uKG5vZGVzLCByLCBq +c29uKSB7CgkJCWZvciAodmFyIGk9MDsgaTxub2Rlcy5sZW5ndGg7IGkrKykgewoJ +CQkgICAgaWYgKCEkKCdkZWJ1ZycpKSB7CgkJCSAgICAgICAgd2luZG93LmxvY2F0 +aW9uLmhyZWYgPSBqc29uID8gbm9kZXNbaV0gOiBub2Rlc1tpXS5maXJzdENoaWxk +LmRhdGE7CgkJCSAgICB9IGVsc2UgewoJCQkgICAgICAgIHRtLmxvZygncmVkaXJl +Y3Q6ICcsIGpzb24gPyBub2Rlc1tpXSA6IG5vZGVzW2ldLmZpcnN0Q2hpbGQuZGF0 +YSk7CgkJCSAgICB9CgkJCQkKCQkJfQoJCX0sCgkJCgkJCgkJJ3JlZGlyZWN0JyA6 +IGZ1bmN0aW9uKG5vZGVzLCByLCBqc29uKSB7CgkJCWZvciAodmFyIGk9MDsgaTxu +b2Rlcy5sZW5ndGg7IGkrKykgewoJCQkgICAgaWYgKCEkKCdkZWJ1ZycpKSB7CgkJ +CSAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBqc29uID8gbm9kZXNbaV0g +OiBub2Rlc1tpXS5maXJzdENoaWxkLmRhdGE7CgkJCSAgICB9IGVsc2UgewoJCQkg +ICAgICAgIHRtLmxvZygncmVkaXJlY3Q6ICcsIGpzb24gPyBub2Rlc1tpXSA6IG5v +ZGVzW2ldLmZpcnN0Q2hpbGQuZGF0YSk7CgkJCSAgICB9CgkJCX0KCQl9LAoJCQoJ +CSdodG1sJzogZnVuY3Rpb24obm9kZXMpIHsKCQkJZm9yICh2YXIgaT0wOyBpPG5v +ZGVzLmxlbmd0aDsgaSsrKSB7CgkJCQlpZiAobm9kZXNbaV0uZ2V0QXR0cmlidXRl +KCdmb3InKSkgewoJCQkJCXZhciBlbGVtZW50ID0gJChub2Rlc1tpXS5nZXRBdHRy +aWJ1dGUoJ2ZvcicpKTsKCQkJCQlpZiAoZWxlbWVudCkgewoJCQkJCQllbGVtZW50 +LmlubmVySFRNTCA9IG5vZGVzW2ldLmZpcnN0Q2hpbGQuZGF0YTsKCQkJCQl9CgkJ +CQl9CgkJCX0JCQkKCQl9LAoJCQoJCSdyZW1vdmUnOiBmdW5jdGlvbihub2Rlcykg +ewoJCQlmb3IgKHZhciBpPTA7IGk8bm9kZXMubGVuZ3RoOyBpKyspIHsKCQkJCWlm +IChub2Rlc1tpXS5nZXRBdHRyaWJ1dGUoJ2VsZW1lbnQnKSkgewoJCQkJCXZhciBl +bGVtZW50ID0gJChub2Rlc1tpXS5nZXRBdHRyaWJ1dGUoJ2VsZW1lbnQnKSk7CgkJ +CQkJaWYgKGVsZW1lbnQpIHsKCQkJCQkJZWxlbWVudC5wYXJlbnROb2RlLnJlbW92 +ZUNoaWxkKGVsZW1lbnQpOwoJCQkJCX0KCQkJCX0KCQkJfQkJCgkJfSwKCgkJJ3No +b3cnOiBmdW5jdGlvbihub2RlcykgewoJCQlmb3IgKHZhciBpPTA7IGk8bm9kZXMu +bGVuZ3RoOyBpKyspIHsKCQkJCWlmIChub2Rlc1tpXS5nZXRBdHRyaWJ1dGUoJ2Vs +ZW1lbnQnKSkgewoJCQkJCXZhciBlbGVtZW50ID0gJChub2Rlc1tpXS5nZXRBdHRy +aWJ1dGUoJ2VsZW1lbnQnKSk7CgkJCQkJaWYgKGVsZW1lbnQpIHsKCQkJCQkJZWxl +bWVudC5yZW1vdmVDbGFzcygnaGlkZGVuJyk7CgkJCQkJfQoJCQkJfQoJCQl9CQkK +CQl9LAoJCQkJCgkJJ2hpZGUnOiBmdW5jdGlvbihub2RlcykgewoJCQlmb3IgKHZh +ciBpPTA7IGk8bm9kZXMubGVuZ3RoOyBpKyspIHsKCQkJCWlmIChub2Rlc1tpXS5n +ZXRBdHRyaWJ1dGUoJ2VsZW1lbnQnKSkgewoJCQkJCXZhciBlbGVtZW50ID0gJChu +b2Rlc1tpXS5nZXRBdHRyaWJ1dGUoJ2VsZW1lbnQnKSk7CgkJCQkJaWYgKGVsZW1l +bnQpIHsKCQkJCQkJZWxlbWVudC5hZGRDbGFzcygnaGlkZGVuJyk7CgkJCQkJfQoJ +CQkJfQoJCQl9CQkKCQl9LAoJCQoJCQoJCQoJCSdzZXR2YWx1ZSc6IGZ1bmN0aW9u +KG5vZGVzKSB7CgkJCWZvciAodmFyIGk9MDsgaTxub2Rlcy5sZW5ndGg7IGkrKykg +ewoJCQkJaWYgKG5vZGVzW2ldLmdldEF0dHJpYnV0ZSgnZWxlbWVudCcpKSB7CgkJ +CQkJdmFyIGVsZW1lbnQgPSAkKG5vZGVzW2ldLmdldEF0dHJpYnV0ZSgnZWxlbWVu +dCcpKTsKCQkJCQlpZiAoZWxlbWVudCkgewoJCQkJCQllbGVtZW50LnNldCgidmFs +dWUiLCBub2Rlc1tpXS5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpOwoJCQkJCX0KCQkJ +CX0KCQkJfQkJCgkJfSwKCgkJJ2FsZXJ0JzogZnVuY3Rpb24obm9kZXMpIHsKCQkJ +Zm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykgewoJCQkJZnV0 +dV9hbGVydChGQVQucHJvZmlsZV9oZWFkZXIsIG5vZGVzW2ldLmZpcnN0Q2hpbGQu +ZGF0YSwgZmFsc2UsICdtZXNzYWdlJyk7CgkJCX0KCQl9CgoJfTsKfTsKCnRtLkhh +bmRsZXIucHJvdG90eXBlID0gewoJCQoJLyoqCgkgKiDQoNCw0YHRiNC40YDQtdC9 +0LjQtSDRgdC/0LjRgdC60LAg0L7QsdGA0LDQsdC+0YLRh9C40LrQvtCyCgkgKiBA +cGFyYW0ge09iamVjdH0gb2JqZWN0CgkgKi8KCWV4dGVuZDogZnVuY3Rpb24ob2Jq +ZWN0KSB7CgkJJGV4dGVuZCh0aGlzLmhhbmRsZXJzLCBvYmplY3QpOwoJfSwKCgkv +KioKCSAqIAoJICogQHBhcmFtIHtFbGVtZW50fSB4bWxPYmplY3QKCSAqIEBwYXJh +bSB7T2JqZWN0fSB0aGlzT2JqZWN0CgkgKi8KCXByb2Nlc3M6IGZ1bmN0aW9uKHJl +c3BvbnNlLCB0aGlzT2JqZWN0KSB7CgkgICAgdmFyIGpzb24gPSAhcmVzcG9uc2Uu +Y2hpbGROb2RlczsKCgkgICAgaWYgKGpzb24pIHsKICAgIAkJZm9yICh2YXIgdGFn +IGluIHRoaXMuaGFuZGxlcnMpIHsKICAgIAkJICAgIGlmIChyZXNwb25zZVt0YWdd +KSB7CiAgICAJCSAgICAgICAgdGhpcy5oYW5kbGVyc1t0YWddLmNhbGwoCiAgICAJ +CSAgICAgICAgICAgIHRoaXNPYmplY3QsCgkJICAgICAgICAgICAgICAgIHJlc3Bv +bnNlW3RhZ10uZm9yRWFjaCA/CgkJICAgICAgICAgICAgICAgICAgICByZXNwb25z +ZVt0YWddIDoKCQkgICAgICAgICAgICAgICAgICAgIFtyZXNwb25zZVt0YWddXSwK +CQkgICAgICAgICAgICAgICAgcmVzcG9uc2UsCgkJICAgICAgICAgICAgICAgIHRy +dWUKICAgIAkJICAgICAgICApOwogICAgCQkgICAgfQogICAgCQl9CgkgICAgfSBl +bHNlIHsKICAgICAgICAgICAgZm9yICh2YXIgdGFnIGluIHRoaXMuaGFuZGxlcnMp +IHsKICAgIAkJCXZhciBub2RlcyA9IHJlc3BvbnNlLmdldEVsZW1lbnRzQnlUYWdO +YW1lKHRhZyk7CiAgICAJCQlpZiAobm9kZXMubGVuZ3RoID4gMCkgewogICAgCQkJ +CXRoaXMuaGFuZGxlcnNbdGFnXS5jYWxsKHRoaXNPYmplY3QsIG5vZGVzLCByZXNw +b25zZSk7CiAgICAJCQl9CiAgICAJCX0KCSAgICB9Cgl9CgkKfTsKCnRtLkFqYXgg +PSAodHlwZW9mKHRtLkFqYXgpICE9ICd1bmRlZmluZWQnKSA/IHRtLkFqYXggOiB7 +fTsKdG0uQWpheC5RdWljayA9IHsKCWdldDogZnVuY3Rpb24odXJsLCBkYXRhICxv +cHRpb25zKSB7CgkJdmFyIG9wcyA9IHsKCQkJJ2hhbmRsZXInOiBuZXcgdG0uSGFu +ZGxlcigpLAoJCQknZmFpbHR1cmUnOiBmdW5jdGlvbigpewoJCQkJZnV0dV9hbGVy +dChGQVQucHJvZmlsZV9oZWFkZXIsICfQntGI0LjQsdC60LAg0L/QtdGA0LXQtNCw +0YfQuCDQtNCw0L3QvdGL0YUnLCBmYWxzZSwgJ21lc3NhZ2UnKTsKCQkJfSwKCQkJ +J3RoaXNPYmplY3QnOiB0aGlzLAoJCQknYWZ0ZXInOiBudWxsLAoJCQknYmVmb3Jl +JzogbnVsbAoJCX07CgkJb3B0aW9ucyAmJiAkZXh0ZW5kKG9wcywgb3B0aW9ucyk7 +CgkJdmFyIHJlcXVlc3QgPSBuZXcgUmVxdWVzdCh7CgkJCSdtZXRob2QnOiAnZ2V0 +JywKCQkJJ3VybCc6IHVybCwKCQkJJ29uQ29tcGxldGUnOiAoZnVuY3Rpb24ocmVz +cG9uc2VUZXh0LCByZXNwb25zZVhtbCl7CgkJCQlvcHMuYmVmb3JlICYmIG9wcy5i +ZWZvcmUoKTsKCQkJCW9wcy5oYW5kbGVyLnByb2Nlc3MocmVzcG9uc2VYbWwsIG9w +cy50aGlzT2JqZWN0KTsKCQkJCW9wcy5hZnRlciAmJiBvcHMuYWZ0ZXIoKTsKCQkJ +fSkuYmluZCh0aGlzKSwKCQkJJ29uRmFpbHVyZSc6IGZ1bmN0aW9uKCl7CgkJCQlv +cHMuZmFpbHR1cmUgJiYgb3BzLmZhaWx0dXJlKCk7CgkJCX0KCQl9KS5zZW5kKCk7 +Cgl9LAoJCglwb3N0OiBmdW5jdGlvbih1cmwsIGRhdGEsIG9wdGlvbnMpIHsKCQl2 +YXIgb3BzID0gewoJCQknaGFuZGxlcic6IG5ldyB0bS5IYW5kbGVyKCksCgkJCSdm +YWlsdHVyZSc6IGZ1bmN0aW9uKCl7CgkJCQlmdXR1X2FsZXJ0KEZBVC5wcm9maWxl +X2hlYWRlciwgJ9Ce0YjQuNCx0LrQsCDQv9C10YDQtdC00LDRh9C4INC00LDQvdC9 +0YvRhScsIGZhbHNlLCAnbWVzc2FnZScpOwoJCQl9LAoJCQkndGhpc09iamVjdCc6 +IHRoaXMsCgkJCSdhZnRlcic6IG51bGwsCgkJCSdiZWZvcmUnOiBudWxsCgkJfTsK +CQlvcHRpb25zICYmICRleHRlbmQob3BzLCBvcHRpb25zKTsKCQl2YXIgcmVxdWVz +dCA9IG5ldyBSZXF1ZXN0KHsKCQkJJ21ldGhvZCc6ICdwb3N0JywKCQkJJ3VybCc6 +IHVybCwKCQkJJ2RhdGEnOiBkYXRhLAoJCQknb25Db21wbGV0ZSc6IChmdW5jdGlv +bihyZXNwb25zZVRleHQsIHJlc3BvbnNlWG1sKXsKCQkJCW9wcy5iZWZvcmUgJiYg +b3BzLmJlZm9yZSgpOwoJCQkJb3BzLmhhbmRsZXIucHJvY2VzcyhyZXNwb25zZVht +bCwgb3BzLnRoaXNPYmplY3QpOwoJCQkJb3BzLmFmdGVyICYmIG9wcy5hZnRlcigp +OwoJCQl9KS5iaW5kKHRoaXMpLAoJCQknb25GYWlsdXJlJzogZnVuY3Rpb24oKXsK +CQkJCW9wcy5mYWlsdHVyZSAmJiBvcHMuZmFpbHR1cmUoKTsKCQkJfQoJCX0pLnNl +bmQoKTsKCX0KfTs= + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline; filename=control.js +Content-Type: application/x-javascript; charset=utf-8; name=control.js +Content-Location: http://habrahabr.ru/js/1307631427/tm/controls/control.js +Content-Transfer-Encoding: Base64 + +dmFyIHRtID0gKHR5cGVvZih0bSkgIT0gJ3VuZGVmaW5lZCcpID8gdG0gOiB7fTsK +dG0uQ29udHJvbHMgPSAodHlwZW9mKHRtLkNvbnRyb2xzKSAhPSAndW5kZWZpbmVk +JykgPyB0bS5Db250cm9scyA6IHt9OwoKdG0uQ29udHJvbHMuYXR0YWNoRWxlbWVu +dHMgPSBmdW5jdGlvbihwYXJlbnQpIHsKCSQocGFyZW50KS5nZXRFbGVtZW50cygn +KicpLmZvckVhY2goCgkJZnVuY3Rpb24gKGZpZWxkKSB7CgkJICAgIGlmIChmaWVs +ZCAmJiAhdG0uYmFkVGFncy5jb250YWlucyhmaWVsZC50YWdOYW1lKSAmJiAoICgo +ZmllbGQuY2xhc3NOYW1lLmluZGV4T2YoInRtLWNvbnRyb2wiKSAhPSAtMSkgJiYg +ZmllbGQuZ2V0QXR0cmlidXRlKCdyZXYnKSkgfHwgZmllbGQuZ2V0QXR0cmlidXRl +KCdjb250cm9sJykgKSkgewoJCQkJdmFyIGNuYW1lID0gZmllbGQuZ2V0QXR0cmli +dXRlKCdyZXYnKTsKCQkJCWlmICghY25hbWUpIHsKCQkJCQljbmFtZSA9IGZpZWxk +LmdldEF0dHJpYnV0ZSgnY29udHJvbCcpOwoJCQkJfQoJCQkJaWYgKHRtLkNvbnRy +b2xzW2NuYW1lXSkgewoJCQkJCXZhciBjbCA9IHRtLkNvbnRyb2xzW2NuYW1lXTsK +CQkJCQl2YXIgY29udHJvbCA9IG5ldyBjbChmaWVsZCk7CgkJCQl9IGVsc2UgewoJ +CQkJCXRtLkNvbnRyb2xzLmxvYWQoY25hbWUsIGZ1bmN0aW9uKCl7CgkJCQkJCWlm +IChhcmd1bWVudHMuY2FsbGVlLmRvbmUpIHJldHVybjsKCQkJCQkJdmFyIGNsID0g +dG0uQ29udHJvbHNbY25hbWVdOwoJCQkJCQl2YXIgY29udHJvbCA9IG5ldyBjbChm +aWVsZCk7CgkJCQkJCWFyZ3VtZW50cy5jYWxsZWUuZG9uZSA9IHRydWU7CgkJCQkJ +fSk7CgkJCQl9CgkJCX07Cgl9LCB0aGlzKTsKfQoKdG0uQ29udHJvbHMuX3dhaXRp +bmdGb3JMb2FkID0ge307Cgp0bS5Db250cm9scy5sb2FkID0gZnVuY3Rpb24obmFt +ZSwgY29tcGxldGUpIHsKCXZhciBzaXRlYmFzZSA9ICIiCglpZiAodGVtcC5iYXNl +X3Nob3J0KSB7c2l0ZWJhc2UgPSAiaHR0cDovLyIgKyB0ZW1wLmJhc2Vfc2hvcnR9 +CglpZiAodG0uQ29udHJvbHNbbmFtZV0pIHsKCQljb21wbGV0ZSgpOwoJfSBlbHNl +IHsKCQlpZiAodG0uQ29udHJvbHMuX3dhaXRpbmdGb3JMb2FkW25hbWVdKSB7CgkJ +CXRtLkNvbnRyb2xzLl93YWl0aW5nRm9yTG9hZFtuYW1lXS5wdXNoKGNvbXBsZXRl +KTsKCQkJCgkJfSBlbHNlIHsKCQkJdG0uQ29udHJvbHMuX3dhaXRpbmdGb3JMb2Fk +W25hbWVdID0gW2NvbXBsZXRlXTsKCQkJdmFyIHVybCA9IHNpdGViYXNlICsgJy9q +cy90bS9jb250cm9scy8nICsgbmFtZSArICcuanMnOwoJCQl2YXIgbXlTY3JpcHQg +PSBuZXcgQXNzZXQuamF2YXNjcmlwdCh1cmwsIHsKCQkJCW9ubG9hZDogKGZ1bmN0 +aW9uKCl7CgkJCQkJZm9yICh2YXIgaT0wO2k8dG0uQ29udHJvbHMuX3dhaXRpbmdG +b3JMb2FkW25hbWVdLmxlbmd0aDtpKyspIHsKCQkJCQkJdG0uQ29udHJvbHMuX3dh +aXRpbmdGb3JMb2FkW25hbWVdW2ldKCk7CgkJCQkJfQoJCQkJfSkKCQkJfSk7CgkJ +fQoJfQp9OwoKdG0uQ29udHJvbHMuYmFzZSA9IENsYXNzKHsKCQoJaW5pdGlhbGl6 +ZTogZnVuY3Rpb24oZWxlbWVudCwgb3B0aW9ucykgewoJCSRleHRlbmQodGhpcywg +b3B0aW9ucyk7CgkJdGhpcy5fZWxlbWVudCA9ICQoZWxlbWVudCk7Cgl9LAoJCgln +ZXRGb3JtOiBmdW5jdGlvbigpIHsKCQl2YXIgZm9ybVRhZyA9IHRoaXMuX2VsZW1l +bnQuZ2V0UGFyZW50KCdmb3JtJyk7CgkJcmV0dXJuIGZvcm1UYWcgJiYgZm9ybVRh +Zy5hdHRhY2hlZDsKCX0KCQp9KTsKCgp0bS5pbml0LmFkZChmdW5jdGlvbigpewoK +CXRtLkNvbnRyb2xzLmF0dGFjaEVsZW1lbnRzKGRvY3VtZW50KTsKCn0pOwo= + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline; filename=favourites_add.js +Content-Type: application/x-javascript; charset=utf-8; name=favourites_add.js +Content-Location: http://habrahabr.ru/js/1307631427/tm/forms/favourites_add.js +Content-Transfer-Encoding: Base64 + +dG09dG18fHt9Owp0bS5Gb3Jtcz10bS5Gb3Jtc3x8e307Cgp0bS5Gb3Jtcy5mYXZv +dXJpdGVzX2FkZCA9IGZ1bmN0aW9uICgpIHsKCXRoaXMuX2hhbmRsZXIuZXh0ZW5k +KHsKCQknbWVzc2FnZSc6IGZ1bmN0aW9uKG5vZGVzKSB7CgkJCWlmICh0ZW1wLmZh +dm91cml0ZXNfYWRkLmNvbnRhaW5lcikgewoJCQkJdmFyIGZhdiA9IHRlbXAuZmF2 +b3VyaXRlc19hZGQuY29udGFpbmVyLmdldEVsZW1lbnQoJ2Rpdi5qcy10b19mYXZz +X2hvbGRlcicpOwoJCQkJZmF2ICYmIGZhdi5yZW1vdmVDbGFzcygndG8tZmF2cycp +LmFkZENsYXNzKCdmYXZfYWRkZWQnKTsKCQkJCXRlbXAuZmF2b3VyaXRlc19hZGQu +c2V0VGFncyh0ZW1wLmZhdm91cml0ZXNfYWRkLnRhZ3MudmFsdWUpOwoJCQl9OwoJ +CQl0ZW1wLmZhdm91cml0ZXNfYWRkLmhpZGUoKTsKCQl9Cgl9KTsKfTs= + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline; filename=button.js +Content-Type: application/x-javascript; charset=utf-8; name=button.js +Content-Location: http://habrahabr.ru/js/1307631427/tm/controls/button.js +Content-Transfer-Encoding: Base64 + +dG0uQ29udHJvbHMuYnV0dG9uID0gbmV3IENsYXNzKHsKCUV4dGVuZHM6IHRtLkNv +bnRyb2xzLmJhc2UsCglpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50KSB7CgkJ +dGhpcy5fZWxlbWVudCA9ICQoZWxlbWVudCk7CgkJLyoKCQkgKiB1cmwKCQkgKiBk +ZWYKCQkgKi8KCQl2YXIgbz17fTsKCQkKCQlpZiAoZWxlbWVudC5nZXQoInJlbCIp +KSB7CgkJCXRoaXMuX3BhcmFtcyA9IGV2YWwoJ289JyArIGVsZW1lbnQuZ2V0KCJy +ZWwiKSk7CgkJCQoJCX0KCQl0aGlzLl9lbGVtZW50LmFkZEV2ZW50KCdjbGljaycs +IHRoaXMuY2xpY2suYmluZCh0aGlzKSk7CgkJdGhpcy5faGFuZGxlciA9IG5ldyB0 +bS5IYW5kbGVyKCk7CgkJCgkJaWYgKHRoaXMuX3BhcmFtcy5kZWYucXVpY2tfdm90 +ZSkgewoJCQl0aGlzLl9oYW5kbGVyLmV4dGVuZCh7CgkJCQkic2NvcmUiOiBmdW5j +dGlvbihub2Rlcyl7CgkJCQkJdmFyIG5ld1VzZXJzY29yZSwgbWludXNNYXJrID0g +IiI7CgkJCQkJZm9yICh2YXIgaT0wOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHsK +CQkJCQkJaWYgKG5vZGVzW2ldLnRhZ05hbWUgPT0gInNjb3JlIil7CgkJCQkJCQlu +ZXdVc2Vyc2NvcmUgPSBub2Rlc1tpXS5maXJzdENoaWxkLmRhdGE7CgkJCQkJCQl2 +YXIgcGFyc2VkTmV3VXNlcnNjb3JlID0gbmV3VXNlcnNjb3JlICsgIiI7Ly9jb252 +ZXJ0cyBOb2RlTGlzdCB0byBzdHJpbmcKCQkJCQkJCWlmIChwYXJzZWROZXdVc2Vy +c2NvcmUuY2hhckF0KDApID09ICLigJMiKSB7IG1pbnVzTWFyayA9ICIgY2xhc3M9 +J21pbnVzJyJ9OwoJCQkJCQl9CgkJCQkJfTsKCQkJCQllbGVtZW50LnBhcmVudE5v +ZGUuc2V0KCJodG1sIiwiPHNwYW4iK21pbnVzTWFyaysiPiIrIG5ld1VzZXJzY29y +ZSArIjwvc3Bhbj4iKTsKCQkJCX0sCgkJCQkiZXJyb3IiOiBmdW5jdGlvbihub2Rl +cyl7CgkJCQkJdmFyIGVycm9ydGV4dCA9ICIiOwoJCQkJCWZvciAodmFyIGk9MDsg +aSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7CgkJCQkJCWlmIChub2Rlc1tpXS50YWdO +YW1lID09ICJlcnJvciIpewoJCQkJCQkJZXJyb3J0ZXh0ICs9IG5vZGVzW2ldLmZp +cnN0Q2hpbGQuZGF0YSArICI8YnIvPiI7CgkJCQkJCX0KCQkJCQl9OwoJCQkJCWZ1 +dHVfYWxlcnQoItCe0Lkt0L7QuS3QvtC5INGBINC60L7Qu9Cx0LDRgdC+0LkhIiwg +ZXJyb3J0ZXh0LCBmYWxzZSwgJ2Vycm9yJyk7CgkJCQl9CgkJCX0pCgkJfQoJfSwK +CWNsaWNrOiBmdW5jdGlvbihlKSB7CgkJZS5zdG9wKCk7CgkJdmFyIHVybCA9IHRo +aXMuX3BhcmFtcy51cmw7CgkJdmFyIHBhcmFtcyA9ICRtZXJnZSh0aGlzLl9wYXJh +bXMuZGVmKTsKCQl2YXIgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHsKCQkJJ21ldGhv +ZCc6ICdwb3N0JywKCQkJJ3VybCc6IHVybCwKCQkJJ2RhdGEnOiBwYXJhbXMsCgkJ +CSdvbkNvbXBsZXRlJzogKGZ1bmN0aW9uKHJlc3BvbnNlVGV4dCwgcmVzcG9uc2VY +bWwpewoJCQkJdGhpcy5faGFuZGxlci5wcm9jZXNzKHJlc3BvbnNlWG1sLCB0aGlz +KTsKCQkJfSkuYmluZCh0aGlzKQoJCX0pLnNlbmQoKTsKCX0KfSk7 + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline; filename=form.js +Content-Type: application/x-javascript; charset=utf-8; name=form.js +Content-Location: http://habrahabr.ru/js/1307631427/tm/form.js +Content-Transfer-Encoding: Base64 + +dmFyIHRtID0gKHR5cGVvZih0bSkgIT0gJ3VuZGVmaW5lZCcpID8gdG0gOiB7fTsK +CnRtLkZvcm1zID0gKHR5cGVvZih0bS5Gb3JtcykgIT0gJ3VuZGVmaW5lZCcpID8g +dG0uRm9ybXMgOiB7fTsKCnRtLkZvcm1zLl93YWl0aW5nRm9yTG9hZCA9IHt9OwoK +dG0uRm9ybXMubG9hZCA9IGZ1bmN0aW9uKG5hbWUsIGNvbXBsZXRlKSB7CglpZiAo +dG0uRm9ybXNbbmFtZV0pIHsKCQljb21wbGV0ZSgpOwoJfSBlbHNlIHsKCQlpZiAo +dG0uRm9ybXMuX3dhaXRpbmdGb3JMb2FkW25hbWVdKSB7CgkJCXRtLkZvcm1zLl93 +YWl0aW5nRm9yTG9hZFtuYW1lXS5wdXNoKGNvbXBsZXRlKTsKCQl9IGVsc2UgewoJ +CQl0bS5Gb3Jtcy5fd2FpdGluZ0ZvckxvYWRbbmFtZV0gPSBbY29tcGxldGVdOwoJ +CQl2YXIgdXJsID0gJy9qcy90bS9mb3Jtcy8nICsgbmFtZSArICcuanMnOwoJCQl2 +YXIgbXlTY3JpcHQgPSBuZXcgQXNzZXQuamF2YXNjcmlwdCh1cmwsIHsKCQkJCW9u +bG9hZDogKGZ1bmN0aW9uKCl7CgkJCQkJZm9yICh2YXIgaT0wO2k8dG0uRm9ybXMu +X3dhaXRpbmdGb3JMb2FkW25hbWVdLmxlbmd0aDtpKyspCgkJCQkJCXRtLkZvcm1z +Ll93YWl0aW5nRm9yTG9hZFtuYW1lXVtpXSgpOwoJCQkJfSkKCQkJfSk7CgkJfQoJ +fQp9OwoKLyoqCiAqINCa0LvQsNGB0YEg0LDQstGC0L7QvNCw0YLQuNC30LDRhtC4 +0LggQWpheCDQtNC70Y8g0YTQvtGA0LwKICogQGF1dGhvciBtZGV2aWxzCiAqLwp0 +bS5Gb3JtID0gQ2xhc3MoewoJCglhZGRFdmVudDogZnVuY3Rpb24obmFtZSwgY2Fs +bGJhY2spIHsKCQl0aGlzLl9mb3JtLmFkZEV2ZW50KG5hbWUsIGNhbGxiYWNrKTsK +CX0sCgkKCWZpcmVFdmVudDogZnVuY3Rpb24obmFtZSkgewoJCXRoaXMuX2Zvcm0u +ZmlyZUV2ZW50KG5hbWUpOwoJfSwKCQoJc3VibWl0Q2FuY2VsZWQ6IGZhbHNlLAoJ +Cglpbml0aWFsaXplOiBmdW5jdGlvbihmb3JtKSB7CgkJdmFyIHNlbGYgPSB0aGlz +OwoJCQoJCXRoaXMuX2Zvcm0gPSAkKGZvcm0pOwoJCXRoaXMuX2Zvcm0uYXR0YWNo +ZWQgPSB0aGlzOwoJCXRoaXMuX3ZhbGlkYXRvciA9IG5ldyB0bS5WYWxpZGF0b3Io +KTsKCQkKCQl0aGlzLnJlc2V0VmFsaWRhdGlvbigpOwoKCQl0aGlzLmFqYXggPSBm +YWxzZTsKCQlpZiAodGhpcy5fZm9ybS5oYXNDbGFzcygnYWpheCcpKSB7CgkJCXRo +aXMuZW5hYmxlQWpheCgpOwoJCX0KCQkKCQl0aGlzLmNhcHRjaGEgPSBmYWxzZTsK +CQlpZiAodGhpcy5fZm9ybS5oYXNDbGFzcygnY2FwdGNoYScpKSB7CgkJCXRoaXMu +Y2FwdGNoYSA9IHRydWU7CgkJfQoJCQoJCWlmICh0aGlzLl9mb3JtLmhhc0NsYXNz +KCdpZnJhbWUtYWpheCcpKSB7CgkJICAgIHRoaXMuaWZyYW1lQWpheCA9IHRydWU7 +CgkJfQoJCQoJCXZhciBvblN1Ym1pdEZ1bmN0aW9uID0gZnVuY3Rpb24oZXZlbnQp +ewogICAgCQlpZiAoJChldmVudC50YXJnZXQpLmhhc0NsYXNzKCdsb2FkaW5nJykp +IHsKICAgIAkJCWV2ZW50LnN0b3AoKTsKICAgIAkJCXJldHVybiBmYWxzZTsKICAg +IAkJfQogICAgCQl2YXIgbyA9IG51bGw7CiAgICAJCWlmIChzZWxmLnN1Ym1pdChl +dmVudC50YXJnZXQubmFtZSwgZXZlbnQudGFyZ2V0LmdldCgicmVsIikgJiYgKGV2 +YWwoJ289JyArIGV2ZW50LnRhcmdldC5nZXQoInJlbCIpKSkpKQogICAgCQkJZXZl +bnQuc3RvcCgpOwogICAgCX0KCQkKCQlmb3IgKHZhciBpPTA7IGk8Zm9ybS5lbGVt +ZW50cy5sZW5ndGg7IGkrKykgewoJCQlpZiAodGhpcy5fZm9ybS5lbGVtZW50c1tp +XS50eXBlID09ICdzdWJtaXQnKSB7CgkJCQkkKHRoaXMuX2Zvcm0uZWxlbWVudHNb +aV0pLmFkZEV2ZW50KCdjbGljaycsIG9uU3VibWl0RnVuY3Rpb24pOwoJCQl9CgkJ +fQoJCQoJCWZvcm0uYWRkRXZlbnQoJ3N1Ym1pdCcsIG9uU3VibWl0RnVuY3Rpb24p +OwoJCQoJCQoJCXZhciBleHRlbmRlciA9IHRoaXMuX2Zvcm0uZ2V0RWxlbWVudCgi +YS5mb3JtLWV4dGVuZGVyIiksIAoJCWV4dHM7CgkJCgkJaWYgKGV4dGVuZGVyKSB7 +CgkJCWV4dHMgPSAkKGV4dGVuZGVyKS5nZXRBdHRyaWJ1dGUoInJldiIpOwoJCX07 +CgkJIAoJCWlmICghZXh0cykgeyBleHRzID0gdGhpcy5fZm9ybS5nZXRBdHRyaWJ1 +dGUoImV4dGVuZCIpO30KCQlpZiAoZXh0cykgewoJCQl2YXIgZXh0ZW5kaW5ncyA9 +IGV4dHMuc3BsaXQoJywnKTsKCQkJZm9yICh2YXIgaT0wO2k8ZXh0ZW5kaW5ncy5s +ZW5ndGg7aSsrKSB7CgkJCQl2YXIgZXhuYW1lID0gZXh0ZW5kaW5nc1tpXTsKCQkJ +CWlmICh0bS5Gb3Jtc1tleG5hbWVdKSB7CgkJCQkJdG0uRm9ybXNbZXhuYW1lXS5j +YWxsKHRoaXMpOwoJCQkJfSBlbHNlIHsKCQkJCQkoZnVuY3Rpb24obm0pewoJCQkJ +CQl0bS5Gb3Jtcy5sb2FkKG5tLCAoZnVuY3Rpb24oKXsKCQkJCQkJCWlmICh0bS5G +b3Jtc1tubV0pCgkJCQkJCQkJdG0uRm9ybXNbbm1dLmNhbGwodGhpcyk7CgkJCQkJ +CX0pLmJpbmQodGhpcykpOwoJCQkJCX0pLmJpbmQodGhpcykoZXhuYW1lKTsKCQkJ +CX0KCQkJfQoJCX0KCX0sCgoJcmVzZXRWYWxpZGF0aW9uOiBmdW5jdGlvbigpIHsK +CQl0aGlzLl92YWxpZGF0b3IuY2xlYXIoKTsKCQl0aGlzLl92YWxpZGF0b3IuYWRk +RWxlbWVudHModGhpcy5fZm9ybSk7CgkJdGhpcy5fZm9ybS5nZXRFbGVtZW50cygn +Lm5vLXZhbGlkYXRlJykuZm9yRWFjaCgoZnVuY3Rpb24oaXRlbSl7CgkJCXRoaXMu +X3ZhbGlkYXRvci5yZW1vdmVFbGVtZW50cyhpdGVtKTsKCQl9KS5iaW5kKHRoaXMp +KTsKCX0sCgoJZXJyb3JEZXNjcmlwdGlvbnM6IHsKCQkncmVxdWlyZWQnOiAn0KHQ +u9C10LTRg9C10YIg0LfQsNC/0L7Qu9C90LjRgtGMINC/0L7Qu9C1JywKCQknbWlu +bGVuJzogJ9Ci0LXQutGB0YIg0YHQu9C40YjQutC+0Lwg0LrQvtGA0L7RgtC60LjQ +uScsCgkJJ21heGxlbic6ICfQotC10LrRgdGCINGB0LvQuNGI0LrQvtC8INC00LvQ +uNC90L3Ri9C5JywKCQknbG9naW4nOiAn0J3QtdCy0LXRgNC90L4g0YPQutCw0LfQ +sNC9INC70L7Qs9C40L0nLAoJCSdlbWFpbCc6ICfQndC10LLQtdGA0L3QviDRg9C6 +0LDQt9Cw0L0g0LDQtNGA0LXRgSDRjdC70LXQutGC0YDQvtC90L3QvtC5INC/0L7R +h9GC0YsnLAoJCSdoYWJyYWN1dG1lJyA6ICfQmNGB0L/QvtC70YzQt9GD0LnRgtC1 +INGF0LDQsdGA0LDQutCw0YIsINGH0YLQviDQsdGLINGB0LrRgNGL0YLRjCDQsdC+ +0LvRjNGI0L7QuSDRgtC10LrRgdGCINC30LAg0YHRgdGL0LvQutC+0LkgwqvRh9C4 +0YLQsNGC0Ywg0LTQsNC70YzRiNC1wrsnLAoJCSdyYWRpb1JlcXVpcmVkJzogJ9Ch +0LvQtdC00YPQtdGCINC30LDQv9C+0LvQvdC40YLRjCDQv9C+0LvQtScKCX0sCgkK +CS8qKgoJICog0JLQsNC70LjQtNCw0YbQuNGPINCy0YHQtdC5INGE0L7RgNC80Ysg +0Lgg0LLRi9Cy0L7QtCDQvtGI0LjQsdC+0Log0YDRj9C00L7QvCDRgSDQv9C+0LvR +j9C80LgKCSAqLwoJdmFsaWRhdGU6IGZ1bmN0aW9uKCkgewoJCQoJCXZhciBpbnZh +bGlkRmllbGRzID0gdGhpcy5fZm9ybS5nZXRFbGVtZW50cygnLmludmFsaWQnKS5m +b3JFYWNoKGZ1bmN0aW9uKGRsKXsKCQkJZGwucmVtb3ZlQ2xhc3MoJ2ludmFsaWQn +KTsKCQl9KTsKCQl0aGlzLnNob3dVbmtub3duRXJyb3IoJycpOwoJCQoJCXZhciBl +cnJvcnMgPSB0aGlzLl92YWxpZGF0b3IudmFsaWRhdGUoKTsKCQkKCQkvLyBDQVBU +Q0hBCgkJaWYodGhpcy5jYXB0Y2hhICYmICQoJ2NhcHRjaGFfd3JhcHBlcicpLmhh +c0NsYXNzKCdoaWRkZW4nKSAmJiBlcnJvcnMubGVuZ3RoID4gMCl7CgkJICBmb3Ig +KHZhciBpPTA7IGk8ZXJyb3JzLmxlbmd0aDsgaSsrKSB7CgkJICAgIC8vYWxlcnQo +J2ExOiAnK2Vycm9yc1tpXS5lbGVtZW50Lm5hbWUpOwoJCSAgICBpZihlcnJvcnNb +aV0uZWxlbWVudC5uYW1lID09ICdjYXB0Y2hhJyl7CgkJICAgICAgZXJyb3JzLnNw +bGljZShpLDEpOyAKCQkgICAgfQoJCSAgfQoJCX0KCQkJICAJICAgIAoJCQoJCQoJ +CWlmIChlcnJvcnMubGVuZ3RoID4gMCkgewoJCQlmb3IgKHZhciBpPTA7IGk8ZXJy +b3JzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgLy9hbGVydCgnYTI6ICcrZXJyb3Jz +W2ldLmVsZW1lbnQubmFtZSk7CgkJCQl2YXIgZmllbGRIb2xkZXIgPSAkKGVycm9y +c1tpXS5lbGVtZW50KS5nZXRQYXJlbnQoJ2RsJyk7CgkJCQl2YXIgZXJyb3JGaWVs +ZEhvbGRlciA9IGZpZWxkSG9sZGVyLmdldEVsZW1lbnQoJy5lcnJvcicpOwoJCQkJ +dmFyIGVycm9yRmllbGQgPSBlcnJvckZpZWxkSG9sZGVyLmdldEVsZW1lbnQoJ3Nw +YW4nKTsKCQkJCXZhciBlcnJvckxpc3QgPSBlcnJvckZpZWxkSG9sZGVyLmdldEVs +ZW1lbnQoJ3VsJyk7CgkJCQkKCQkJCXZhciBlcnJvclRleHQgPSB0aGlzLmVycm9y +RGVzY3JpcHRpb25zW2Vycm9yc1tpXS5lcnJvclR5cGVdOwoJCQkJCgkJCQlpZiAo +ZXJyb3JMaXN0KSB7CgkJCQkJdmFyIGVycm9yTGkgPSBlcnJvckxpc3QuZ2V0RWxl +bWVudCgnLicgKyBlcnJvcnNbaV0uZXJyb3JUeXBlKTsKCQkJCQlpZiAoZXJyb3JM +aSkgewoJCQkJCQllcnJvclRleHQgPSBlcnJvckxpLmdldCgnaHRtbCcpOwoJCQkJ +CX0KCQkJCX0KCQkJCQoJCQkJdGhpcy5zaG93RXJyb3IoZXJyb3JzW2ldLmVsZW1l +bnQsIGVycm9yVGV4dCk7CgoJCQl9CgkJCXJldHVybiBmYWxzZTsKCQl9IGVsc2Ug +ewoJCQlyZXR1cm4gdHJ1ZTsKCQl9CgkJCgl9LAoJCgkvKioKCSAqINCf0L7QutCw +0Lcg0YHQvtC+0LHRidC10L3QuNGPINC+0LEg0L7RiNC40LHQutC1CgkgKiBAcGFy +YW0ge0VsZW1lbnR9IGVsZW1lbnQKCSAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0Cgkg +Ki8KCXNob3dFcnJvcjogZnVuY3Rpb24oZWxlbWVudCwgdGV4dCkgewoKCQl2YXIg +ZmllbGRIb2xkZXIgPSAkKGVsZW1lbnQpLmdldFBhcmVudCgnZGwnKTsKCQlpZiAo +IWZpZWxkSG9sZGVyKSB7IHRoaXMuc2hvd1Vua25vd25FcnJvcih0ZXh0KTsgcmV0 +dXJuOyB9CgkJdmFyIGVycm9yRmllbGRIb2xkZXIgPSBmaWVsZEhvbGRlci5nZXRF +bGVtZW50KCcuZXJyb3InKTsKCQlpZiAoIWVycm9yRmllbGRIb2xkZXIpIHsgdGhp +cy5zaG93VW5rbm93bkVycm9yKHRleHQpOyByZXR1cm47IH0KCQl2YXIgZXJyb3JG +aWVsZCA9IGVycm9yRmllbGRIb2xkZXIuZ2V0RWxlbWVudCgnc3BhbicpOwoJCWlm +ICghZXJyb3JGaWVsZCkgeyB0aGlzLnNob3dVbmtub3duRXJyb3IodGV4dCk7IHJl +dHVybjsgfQoJCWVycm9yRmllbGQuc2V0KCdodG1sJywgdGV4dCk7CgkJZmllbGRI +b2xkZXIuYWRkQ2xhc3MoJ2ludmFsaWQnKTsKCgl9LAoJCgkvKioKCSAqINCf0L7Q +utCw0Lcg0L3QtdC40LfQstC10YHRgtC90L7QuSDQvtGI0LjQsdC60LgKCSAqIEBw +YXJhbSB7T2JqZWN0fSB0ZXh0CgkgKi8KCXNob3dVbmtub3duRXJyb3I6IGZ1bmN0 +aW9uKHRleHQpIHsKCQkKCQl2YXIgZWxlbWVudCA9IHRoaXMuX2Zvcm0uZ2V0RWxl +bWVudCgnLnVua25vd24tZXJyb3InKTsKCQlpZiAoZWxlbWVudCkgewoJCQllbGVt +ZW50LmlubmVySFRNTCA9IHRleHQ7CgkJfQoJCQoJfSwKCgkvKioKCSAqINCY0L3Q +uNGG0LjQsNGG0LjRjyDQstCw0LvQuNC00LDRhtC40Lgg0Lgg0L7RgtC/0YDQsNCy +0LrQuCDRhNC+0YDQvNGLCgkgKiBAcGFyYW0ge1N0cmluZ30gYWN0aW9uCgkgKi8K +CXN1Ym1pdDogZnVuY3Rpb24oYWN0aW9uLCBwYXJhbXMpIHsKCQlwYXJhbXMgJiYg +cGFyYW1zLnJlc2V0VmFsaWRhdGlvbiAmJiB0aGlzLnJlc2V0VmFsaWRhdGlvbigp +OwoJCQoJCWlmKGFjdGlvbikgewoJCSAgICB2YXIgaW5wdXQgPSB0aGlzLl9mb3Jt +LmdldEVsZW1lbnQoJ2lucHV0W25hbWU9YWN0aW9uXScpOwoJCSAgICBpZiAoaW5w +dXQpIHsKCQkgICAgICAgIGlucHV0LnZhbHVlID0gYWN0aW9uOwoJCSAgICB9CgkJ +fQoJCQoJCWlmICh0aGlzLnZhbGlkYXRlKCkpCgkJCWlmICh0aGlzLmFqYXgpIHsK +CQkJCXRoaXMuc3VibWl0Q2FuY2VsZWQgPSBmYWxzZTsKCQkJCXRoaXMuZmlyZUV2 +ZW50KCJ0bTpiZWZvcmUtc2VuZCIpOwoJCQkJaWYgKCF0aGlzLnN1Ym1pdENhbmNl +bGVkKSB7CgkJCQkJdGhpcy5zZW5kQWpheChhY3Rpb24sIHBhcmFtcyk7CgkJCQkJ +dGhpcy5maXJlRXZlbnQoInRtOmFmdGVyLXNlbmQiKTsKCQkJCX0gZWxzZQoJCQkJ +CXJldHVybiBmYWxzZTsKCQkJfQoJCQllbHNlIAoJCQkJcmV0dXJuIGZhbHNlOwoJ +CXJldHVybiB0cnVlOwoJfSwKCQoJc2V0TG9hZGluZzogZnVuY3Rpb24obCkgewoJ +CWlmIChsKSB7CgkJCXRoaXMuZmlyZUV2ZW50KCdmb3JtOmRpc2FibGVkJyk7CgkJ +CWZvciAodmFyIGk9MDtpPHRoaXMuX2Zvcm0uZWxlbWVudHMubGVuZ3RoO2krKykg +ewoJCQkJaWYgKHRoaXMuX2Zvcm0uZWxlbWVudHNbaV0udHlwZSA9PSAnc3VibWl0 +JykgewoJCQkJCSQodGhpcy5fZm9ybS5lbGVtZW50c1tpXSkuYWRkQ2xhc3MoJ2xv +YWRpbmcnKTsKCQkJCQkkKHRoaXMuX2Zvcm0uZWxlbWVudHNbaV0pLmRpc2FibGVk +ID0gdHJ1ZTsKCQkJCX0KCQkJfQoJCX0gZWxzZSB7CgkJCXRoaXMuZmlyZUV2ZW50 +KCdmb3JtOmVuYWJsZWQnKTsKCQkJZm9yICh2YXIgaT0wO2k8dGhpcy5fZm9ybS5l +bGVtZW50cy5sZW5ndGg7aSsrKSB7CgkJCQlpZiAodGhpcy5fZm9ybS5lbGVtZW50 +c1tpXS50eXBlID09ICdzdWJtaXQnKSB7CgkJCQkJJCh0aGlzLl9mb3JtLmVsZW1l +bnRzW2ldKS5yZW1vdmVDbGFzcygnbG9hZGluZycpOwoJCQkJCSQodGhpcy5fZm9y +bS5lbGVtZW50c1tpXSkuZGlzYWJsZWQgPSBmYWxzZTsKCQkJCX0KCQkJfQoJCX0K +CX0sCgkKCS8qKgoJICog0J7RgtC/0YDQsNCy0LrQuCDRhNC+0YDQvNGLINGH0LXR +gNC10LcgQWpheAoJICogQHBhcmFtIHtTdHJpbmd9IGFjdGlvbgoJICovCglzZW5k +QWpheDogZnVuY3Rpb24oYWN0aW9uLCBwYXJhbXMpIHsJCgkJdGhpcy5zZXRMb2Fk +aW5nKHRydWUpOwoKCQl2YXIgc2VsZiA9IHRoaXMsCgkJICAgIG9uU3VjY2VzcyA9 +IGZ1bmN0aW9uIChyZXNwb25zZVRleHQsIHJlc3BvbnNlWE1MKSB7CgkJICAgIHNl +bGYuX2hhbmRsZXIucHJvY2VzcyhyZXNwb25zZVhNTHx8cmVzcG9uc2VUZXh0LCBz +ZWxmKTsKCQl9LAoJCSAgICBvbkNvbXBsZXRlID0gZnVuY3Rpb24gKCkgewoJCSAg +ICBzZWxmLnNldExvYWRpbmcoZmFsc2UpOwoJCX0KCQkKCQlpZiAodGhpcy5pZnJh +bWVBamF4KSB7CgkJICAgIHRtLnNlbmRGb3JtVmlhSWZyYW1lKHsKCQkgICAgICAg +ICdmb3JtJzogdGhpcy5fZm9ybSwKCQkgICAgICAgICdvblN1Y2Nlc3MnOiBvblN1 +Y2Nlc3MsCgkJICAgICAgICAnb25Db21wbGV0ZSc6IG9uQ29tcGxldGUKCQkgICAg +fSk7CgkJfSBlbHNlIHsKCQkgICAgdmFyIGV4dGVuZERhdGEgPSB7fTsKICAgIAkJ +ZXh0ZW5kRGF0YVthY3Rpb25dID0gJ3RydWUnOwogICAgCQl2YXIgZGF0YSA9IHRo +aXMudG9PYmplY3QoZXh0ZW5kRGF0YSk7CgogICAgCQlpZiAodGhpcy5fZm9ybS5n +ZXRBdHRyaWJ1dGVOb2RlKSB7CiAgICAJCQl2YXIgeHVybCA9IHRoaXMuX2Zvcm0u +Z2V0QXR0cmlidXRlTm9kZSgnYWN0aW9uJykudmFsdWU7CiAgICAJCX0gZWxzZSB7 +CiAgICAJCQl2YXIgeHVybCA9IHRoaXMuX2Zvcm0uZ2V0KCdhY3Rpb24nKTsgCiAg +ICAJCX0KCiAgICAJCXBhcmFtcyAmJiBwYXJhbXMudXJsICYmICh4dXJsID0gcGFy +YW1zLnVybCk7CgogICAgCQl2YXIgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHsKICAg +IAkJCSdtZXRob2QnOiAncG9zdCcsCiAgICAJCQkndXJsJzogeHVybCwKICAgIAkJ +CSdkYXRhJzogZGF0YSwKICAgIAkJCSdvblN1Y2Nlc3MnOiBvblN1Y2Nlc3MsCiAg +ICAJCQknb25Db21wbGV0ZSc6IG9uQ29tcGxldGUKICAgIAkJfSkuc2VuZCgpOwoJ +CX0KCX0sCgkKCS8qKgoJICog0JfQsNC/0LjRgdGMINC00LDQvdC90YvRhSDRhNC+ +0YDQvNGLINCyINC+0LHRitC10LrRggoJICogQHBhcmFtIHtPYmplY3R9IGV4dGVu +ZAoJICovCgl0b09iamVjdDogZnVuY3Rpb24oZXh0ZW5kKSB7CgkJdmFyIHJlc3Vs +dCA9IHt9OwoKCQl2YXIgZWxlbWVudHMgPSB0aGlzLl9mb3JtLmVsZW1lbnRzOwoJ +CWZvciAodmFyIGk9MCwgbGVuZ3RoPWVsZW1lbnRzLmxlbmd0aDsgaTxsZW5ndGg7 +IGkrKykgewoJCQkKCQkJdmFyIGVsZW1lbnQgPSAkKGVsZW1lbnRzW2ldKTsKCQkJ +CgkJCWlmIChlbGVtZW50LmdldFBhcmVudCgnLm5vLXNlbmQnKSkgY29udGludWU7 +CgoJCQl2YXIgdHlwZSAgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgndHlwZScpOwoJ +CQl2YXIgcGFyYW0gPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnbmFtZScpOwoJCQl2 +YXIgdmFsdWUgPSBlbGVtZW50LnZhbHVlOwoJCQkKCQkJaWYgKHBhcmFtKSB7CgkJ +CQoJCQkJaWYgKHR5cGUgPT0gJ3JhZGlvJyAmJiAhZWxlbWVudC5jaGVja2VkKSB7 +CgkJCQkJY29udGludWU7CgkJCQl9CgkJCQkKCQkJCWlmICh0eXBlID09ICdjaGVj +a2JveCcpIHsKCQkJCQlpZiAoIWVsZW1lbnQuY2hlY2tlZCkgCgkJCQkJCWNvbnRp +bnVlOwoJCQkJCWVsc2UgewoJCQkJCQlyZXN1bHRbcGFyYW1dID0gdmFsdWU9PSdv +bicgfHwgIXZhbHVlID8gJ3RydWUnIDogdmFsdWU7CgkJCQkJCWNvbnRpbnVlOwoJ +CQkJCX0KCQkJCX0KCQkJCQoJCQkJaWYgKHR5cGUgPT0gJ3N1Ym1pdCcgfHwgdHlw +ZSA9PSAncmVzZXQnKSB7CgkJCQkJY29udGludWU7CgkJCQl9CgkJCQkKCQkJCXJl +c3VsdFtwYXJhbV0gPSB2YWx1ZTsKCQkJfQoJCX0KCgkJaWYgKGV4dGVuZCkKCQkJ +JGV4dGVuZChyZXN1bHQsIGV4dGVuZCk7CgoJCXJldHVybiByZXN1bHQ7CgoJfSwK +CQoJLyoqCgkgKiDQktC60LvRjtGH0LDQtdGCINC/0L7QtNC00LXRgNC20LrRgyBB +amF4INC00LvRjyDRhNC+0YDQvNGLCgkgKi8KCWVuYWJsZUFqYXg6IGZ1bmN0aW9u +KCkgewoJCQoJCWlmICghdGhpcy5faGFuZGxlcikgewoJCQl0aGlzLl9oYW5kbGVy +ID0gbmV3IHRtLkhhbmRsZXIoKTsKCQkJdGhpcy5faGFuZGxlci5leHRlbmQoewoJ +CQkJJ2Vycm9yJzogZnVuY3Rpb24obm9kZXMsIGpzb24pIHsKCQkJCQkKCQkJCQlm +b3IgKHZhciBpPTA7IGk8bm9kZXMubGVuZ3RoOyBpKyspIHsKCQkJCQkJdmFyIG5v +ZGUgPSBub2Rlc1tpXTsKCQkJCQkJaWYgKG5vZGUuZ2V0QXR0cmlidXRlKCJmaWVs +ZCIpKSB7CgkJCQkJCQlmb3IgKHZhciBlPTA7IGU8dGhpcy5fZm9ybS5lbGVtZW50 +cy5sZW5ndGg7IGUrKykgewoJCQkJCQkJCXZhciBpdGVtID0gdGhpcy5fZm9ybS5l +bGVtZW50c1tlXTsKCQkJCQkJCQlpZiAoJChpdGVtKS5nZXQoIm5hbWUiKSA9PSBu +b2RlLmdldEF0dHJpYnV0ZSgiZmllbGQiKSkgewoJCQkJCQkJCQl0aGlzLnNob3dF +cnJvcihpdGVtLCBub2RlLmZpcnN0Q2hpbGQuZGF0YSk7CQkJCQkJCQkJCgkJCQkJ +CQkJfQoJCQkJCQkJfQoJCQkJCQl9IGVsc2UgewoJCQkJCQkJaWYgKHRoaXMuX2Zv +cm0uZ2V0RWxlbWVudCgnLnVua25vd24tZXJyb3InKSkgewoJCQkJCQkJCXRoaXMu +c2hvd1Vua25vd25FcnJvcihub2RlLmZpcnN0Q2hpbGQuZGF0YSk7CgkJCQkJCQl9 +IGVsc2UgewoJCQkJCQkJCWZ1dHVfYWxlcnQoRkFULnZvdGluZ3NfaGVhZGVyLCBu +b2RlLmZpcnN0Q2hpbGQuZGF0YSwgdHJ1ZSwgJ2Vycm9yJyk7CgkJCQkJCQl9CgkJ +CQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0pOwoJCX0KCQkKCQl0aGlzLmFqYXggPSB0 +cnVlOwoJCQoJfSwKCgkvKioKCSAqINCS0YvQutC70Y7Rh9Cw0LXRgiDQv9C+0LTQ +tNC10YDQttC60YMgQWpheCDQtNC70Y8g0YTQvtGA0LzRiwoJICovCglkaXNhYmxl +QWpheDogZnVuY3Rpb24oKSB7CgoJCXRoaXMuYWpheCA9IGZhbHNlOwoKCX0KCn0p +OwoKLyoqCiAqINCf0YDQuNGB0L7QtdC00LjQvdC10L3QuNC1INC90LDRiNC10Lkg +0YTQvtGA0LzRiyDQutC+INCy0YHQtdC8INC90YPQttC90YvQvCDRhNC+0YDQvNCw +0LwKICog0LIg0LTQvtC60YPQvNC10L3RgtC1LgogKi8KdG0uRm9ybS5hdHRhY2gg +PSBmdW5jdGlvbigpIHsKCQoJZm9yICh2YXIgaT0wOyBpPGRvY3VtZW50LmZvcm1z +Lmxlbmd0aDsgaSsrKSB7CgkJdmFyIGZvcm0gPSAkKGRvY3VtZW50LmZvcm1zW2ld +KTsKCQlpZiAoIWZvcm0uYXR0YWNoZWQpIHsKCQkJaWYgKGZvcm0uaGFzQ2xhc3Mo +InRtLWZvcm0iKSkgewoJCQkJdmFyIHRtRm9ybSA9IG5ldyB0bS5Gb3JtKGRvY3Vt +ZW50LmZvcm1zW2ldKTsKCQkJCS8vIC4uLgoJCQl9CgkJfQoJfQoKfTsKCnRtLmlu +aXQuYWRkKGZ1bmN0aW9uKCl7CgkKCXRtLkZvcm0uYXR0YWNoKCk7CgkKfSk7 + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline; filename=autosuggest.js +Content-Type: application/x-javascript; charset=utf-8; name=autosuggest.js +Content-Location: http://habrahabr.ru/js/1307631427/autosuggest.js +Content-Transfer-Encoding: Base64 + +dmFyIGF1dG9zdWdnZXN0Q2xhc3MgPSBmdW5jdGlvbihmaWVsZCwgc3VibWl0VHlw +ZSwgaXNNdWx0aXBseVN1Z2dlc3Rpb25zT24sIHN5bWJvbCkgew0KDQoJZmllbGQu +c2V0QXR0cmlidXRlKCdhdXRvY29tcGxldGUnLCAnb2ZmJyk7DQoJDQoJaWYoaXNN +dWx0aXBseVN1Z2dlc3Rpb25zT24gJiYgIXN5bWJvbCkgew0KCQl0aGlzLmlzTXVs +dGlwbHlTdWdnZXN0aW9uc09uID0gaXNNdWx0aXBseVN1Z2dlc3Rpb25zT247DQoJ +CXRoaXMuc3ltYm9sID0gWycsJ107DQoJfQ0KCWVsc2UgaWYgKCFpc011bHRpcGx5 +U3VnZ2VzdGlvbnNPbikgewkNCgkJdGhpcy5pc011bHRpcGx5U3VnZ2VzdGlvbnNP +biA9IGZhbHNlOw0KCQl0aGlzLnN5bWJvbCA9ICcnOw0KCX0NCgllbHNlIGlmKGlz +TXVsdGlwbHlTdWdnZXN0aW9uc09uICYmIHN5bWJvbCkgew0KCQl0aGlzLmlzTXVs +dGlwbHlTdWdnZXN0aW9uc09uID0gdHJ1ZTsNCgkJdGhpcy5zeW1ib2wgPSBzeW1i +b2w7DQoJfQ0KCWlmKCFzdWJtaXRUeXBlKSB7DQoJCXZhciBzdWJtaXRUeXBlID0g +J3NlYXJjaCc7DQoJfQ0KCQ0KCXZhciBfdGhpcyA9IHRoaXM7DQoJdGhpcy5wb3Np +dGlvbiA9IDA7DQoJdGhpcy5jdXJyVmFsdWVzID0gW107DQoJDQoJdGhpcy5sYXN0 +VmFsdWUgPSAnJzsNCgl0aGlzLm5ld1ZhbHVlID0gJyc7DQoJDQoJdGhpcy5wYXJh +bXMgPSB7fTsNCgkNCgl0aGlzLmFqYXhVcmwgPSAnL2FqYXgvc3VnZ2VzdC8nOw0K +CQ0KCS8vINCY0YHQv9C+0LvRjNC30YPQtdC80YvQtSDQsiDRhNC+0YDQvNC1IGNs +YXNzTmFtZXMNCgl0aGlzLmNsYXNzTmFtZXMgPSB7DQoJCWhvbGRlciA6ICdqcy1h +dXRvc3VnZ2VzdC1ob2xkZXInLCAJLy/RgNC+0LTQuNGC0LXQu9GMINC/0L7Qu9GP +INCy0LLQvtC00LAg0Lgg0L/QvtC70Y8g0LLRi9Cy0L7QtNCwINGA0LXQt9GD0LvR +jNGC0LDRgtC+0LIg0L/QvtC40YHQutCwDQoJCWZpZWxkIDogJ2pzLWF1dG9zdWdn +ZXN0LWZpZWxkJywgCS8v0L/QvtC70LUg0LLQstC+0LTQsA0KCQlvdXRwdXQgOiAn +anMtYXV0b3N1Z2dlc3Qtb3V0cHV0JywJLy/RgNC+0LTQuNGC0LXQu9GMINC/0L7Q +u9C10Lkg0LLRi9Cy0L7QtNCwINGA0LXRg9C30LvRjNGC0LDRgtC+0LINCgkJaXNM +b2FkaW5nIDogJ2pzLWF1dG9zdWdnZXN0LWxvYWRpbmcnCS8v0L/RgNC10LvQvtCw +0LTQtdGADQoJfTsNCgkNCgkvLyDQmNC80LXQvdCwIHhtbCDQvdC+0LTQvtCyINC4 +INGB0L7QvtGC0LLQtdGB0YLQstGD0Y7RidC40LUg0LjQvCDQuNC80LXQvdCwINGE +0YPQvdC60YbQuNC5LdC+0LHRgNCw0LHQvtGC0YfQuNC60L7Qsg0KCXRoaXMueG1s +UmVzcG9uc2UgPSB7DQoJCW5vZGF0YTogew0KCQkJbm9kZTogJ25vZGF0YScsDQoJ +CQloYW5kbGVyOiBudWxsDQoJCX0sDQoNCgkJZXJyb3I6IHsNCgkJCW5vZGU6ICdl +cnJvcicsDQoJCQloYW5kbGVyOiAneG1sUmVzcG9uc2VIYW5kbGVyX2Vycm9yJw0K +CQl9LA0KDQoJCWl0ZW06IHsNCgkJCW5vZGU6ICdpdGVtJywNCgkJCWhhbmRsZXI6 +ICd4bWxSZXNwb25zZUhhbmRsZXJfb3V0cHV0Jw0KCQl9DQoJfTsNCgkNCgkNCgkv +LyDQktGL0LLQvtC00LjQvNGL0LkgaHRtbCANCgl0aGlzLmh0bWxSZXNwb25zZSA9 +IHsNCgkJaXRlbTogJ2RpdicsDQoJCXZhbHVlOiAnZW0nDQoJfTsNCgkNCglpZiAo +aXNPcGVyYSB8fCB3aW5kb3cud2Via2l0KSB7DQoJCWZpZWxkLm9ua2V5cHJlc3Mg +PSBmdW5jdGlvbihldikgew0KCQkJdmFyIHRhcmcgPSBudWxsOw0KCQkJaWYgKGV2 +LnRhcmdldCkgdGFyZyA9IGV2LnRhcmdldDsNCgkJCWVsc2UgaWYgKGV2LnNyY0Vs +ZW1lbnQpIHRhcmcgPSBldi5zcmNFbGVtZW50Ow0KCQkJaWYgKHRhcmcubm9kZVR5 +cGUgPT0gMykgLy8gZGVmZWF0IFNhZmFyaSBidWcNCgkJCQl0YXJnID0gdGFyZy5w +YXJlbnROb2RlOw0KCQkJc2V0VGltZW91dChmdW5jdGlvbigpeyBfdGhpcy5vbkNo +YW5nZSh0YXJnLCBzdWJtaXRUeXBlKTsgfSwgMzApOw0KCQl9DQoJfQ0KCQ0KCWZp +ZWxkLm9ua2V5ZG93biA9IGZ1bmN0aW9uKGV2KXsNCgkJZXYgPSBldiB8fCB3aW5k +b3cuZXZlbnQ7DQoJCWlmIChfdGhpcy5pc0FjdGlvbktleShldikpIHsNCgkJCV90 +aGlzLm9uS2V5VXAoZXYpOw0KCQl9DQoJfTsNCgkNCglmaWVsZC5vbmtleXVwID0g +ZnVuY3Rpb24oZXYpew0KCQlldiA9IGV2IHx8IHdpbmRvdy5ldmVudDsNCgkJaWYg +KF90aGlzLmlzQWN0aW9uS2V5KGV2KSkgcmV0dXJuOw0KCQlpZiAoIWlzT3BlcmEg +JiYgIXdpbmRvdy53ZWJraXQpIHsNCgkJCXZhciB0YXJnID0gbnVsbDsNCgkJCWlm +IChldi50YXJnZXQpIHRhcmcgPSBldi50YXJnZXQ7DQoJCQllbHNlIGlmIChldi5z +cmNFbGVtZW50KSB0YXJnID0gZXYuc3JjRWxlbWVudDsNCgkJCWlmICh0YXJnLm5v +ZGVUeXBlID09IDMpIC8vIGRlZmVhdCBTYWZhcmkgYnVnDQoJCQkJdGFyZyA9IHRh +cmcucGFyZW50Tm9kZTsNCgkJCXNldFRpbWVvdXQoZnVuY3Rpb24oKXsgX3RoaXMu +b25DaGFuZ2UodGFyZywgc3VibWl0VHlwZSk7IH0sIDMwKTsNCgkJfQ0KCX07DQoJ +DQp9Ow0KDQovLyDQn9C10YDQtdCy0L7QtNC40LwgeG1sINC00LXRgNC10LLQviDQ +siDQvtCx0YrQtdC60YINCmF1dG9zdWdnZXN0Q2xhc3MucHJvdG90eXBlLnBhcnNl +WE1MID0gZnVuY3Rpb24oeG1sT2JqKXsNCgkJdmFyIHhtbE5vZGVzID0ge307DQoN +CgkJZm9yIChwcm9wIGluIHRoaXMueG1sUmVzcG9uc2Upew0KCQkJeG1sTm9kZXNb +cHJvcF0gPSB4bWxPYmouZ2V0RWxlbWVudHNCeVRhZ05hbWUodGhpcy54bWxSZXNw +b25zZVtwcm9wXS5ub2RlKTsNCgkJfQ0KCQlyZXR1cm4geG1sTm9kZXM7DQp9Ow0K +DQphdXRvc3VnZ2VzdENsYXNzLnByb3RvdHlwZS5vbktleVVwID0gZnVuY3Rpb24o +ZXYpIHsNCglldiA9IGV2IHx8IHdpbmRvdy5ldmVudDsNCglyZXR1cm4gdGhpcy5h +Y3Rpb24oZXYpOw0KfTsNCg0KYXV0b3N1Z2dlc3RDbGFzcy5wcm90b3R5cGUub25D +aGFuZ2UgPSBmdW5jdGlvbihmaWVsZCwgc3VibWl0VHlwZSkgew0KCWlmICghZmll +bGQuZmFrZUNoYW5nZSkgew0KCQl0aGlzLnByb2Nlc3NRdW90ZXMoZmllbGQpOw0K +CQl0aGlzLnJlcXVlc3RTdWdnZXN0cyhmaWVsZCwgc3VibWl0VHlwZSk7DQoJfQ0K +CQ0KfTsNCg0KYXV0b3N1Z2dlc3RDbGFzcy5wcm90b3R5cGUuaXNBY3Rpb25LZXkg +PSBmdW5jdGlvbihldikgew0KCXN3aXRjaCAoZ2V0Q2hhckNvZGUoZXYpKSB7DQoJ +CWNhc2UgMTM6IC8vIEVudGVyDQoJCWNhc2UgMjc6IC8vIEVzY2FwZQ0KCQljYXNl +IDQwOiAvLyBEb3duDQoJCWNhc2UgMzg6IC8vIFVwDQoJCQlyZXR1cm4gdHJ1ZTsN +CgkJYnJlYWs7DQoJfQ0KfQ0KDQphdXRvc3VnZ2VzdENsYXNzLnByb3RvdHlwZS5h +Y3Rpb24gPSBmdW5jdGlvbihldikgew0KCXN3aXRjaCAoZ2V0Q2hhckNvZGUoZXYp +KSB7DQoJCWNhc2UgMTM6CS8v0LXRgdC70Lgg0L3QsNC20LDRgtCwINC60LvQsNCy +0LjRiNCwIEVudGVyDQoJCQlpZih0eXBlb2YodGhpcy5vdXRwdXQpICE9ICd1bmRl +ZmluZWQnICYmICEkKHRoaXMub3V0cHV0KS5oYXNDbGFzcygnaGlkZGVuJykpIHsg +Ly8gZml4ZWQgIzExMTcNCgkJCQlpZiAodGhpcy5zZXRWYWx1ZSgpKSB7DQoJCQkJ +CWlmICghZG9jdW1lbnQuYWxsKQ0KCQkJCQkJZXYucHJldmVudERlZmF1bHQoKTsN +CgkJCQkJZWxzZQ0KCQkJCQkJZXYucmV0dXJuVmFsdWUgPSBmYWxzZTsNCgkJCQl9 +DQoJCQl9DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJCWJyZWFrOw0KCQljYXNlIDI3OiAv +LyBFc2NhcGUNCgkJCWlmICghJCh0aGlzLm91dHB1dCkuaGFzQ2xhc3MoJ2hpZGRl +bicpKSB7DQoJCQkJJCh0aGlzLm91dHB1dCkuYWRkQ2xhc3MoJ2hpZGRlbicpOw0K +CQkJfQ0KCQkJcmV0dXJuIHRydWU7DQoJCQlicmVhazsNCgkJY2FzZSA0MDoJLy/Q +tdGB0LvQuCDQvdCw0LbQsNGC0LAg0LrQu9Cw0LLQuNGI0LAgItCS0L3QuNC3Ig0K +CQkJdGhpcy5tYWtlU3RlcHMoJ2Rvd24nKTsNCgkJCXJldHVybiB0cnVlOw0KCQli +cmVhazsNCgkJY2FzZSAzODoJLy/QtdGB0LvQuCDQvdCw0LbQsNGC0LAg0LrQu9Cw +0LLQuNGI0LAgItCS0LLQtdGA0YUiDQoJCQl0aGlzLm1ha2VTdGVwcygndXAnKTsN +CgkJCXJldHVybiB0cnVlOw0KCQlicmVhazsNCgl9DQoJcmV0dXJuIGZhbHNlOw0K +fQ0KDQphdXRvc3VnZ2VzdENsYXNzLnByb3RvdHlwZS5wcm9jZXNzUXVvdGVzID0g +ZnVuY3Rpb24oZmllbGQpIHsNCgl0aGlzLmlzUXVvdGVPcGVuZWQgPSBmYWxzZTsN +Cgl0aGlzLmlzUXVvdGVDbG9zZWRQcmV2aW91c2x5ID0gZmFsc2U7DQoJdGhpcy5u +b0luZGV4ZWRTdHJpbmcgPScnOw0KCWlmKGZpZWxkLnZhbHVlLmluZGV4T2YoJyIn +KSAhPSAtMSkgew0KCQl2YXIgcXVvdGVzUmVzdWx0cyA9IGZpZWxkLnZhbHVlLm1h +dGNoKC8iL2cpOw0KCX0NCglpZihxdW90ZXNSZXN1bHRzICYmIHF1b3Rlc1Jlc3Vs +dHMubGVuZ3RoJTI9PTApIHsNCgkJdGhpcy5pc1F1b3RlT3BlbmVkID0gZmFsc2U7 +DQoJCWlmKGZpZWxkLnZhbHVlLm1hdGNoKC8iJHwiXG58IlxyXG4vKSkgew0KCQkJ +dGhpcy5pc1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9IHRydWU7DQoJCX0NCgkJZWxz +ZSB7DQoJCQl0aGlzLmlzUXVvdGVDbG9zZWRQcmV2aW91c2x5ID0gZmFsc2U7DQoJ +CX0NCgl9DQoJZWxzZSBpZiAocXVvdGVzUmVzdWx0cyAmJiBxdW90ZXNSZXN1bHRz +Lmxlbmd0aCUyIT0wKSB7IHRoaXMuaXNRdW90ZU9wZW5lZCA9IHRydWU7IH0NCgkN +CglpZiAodGhpcy5pc011bHRpcGx5U3VnZ2VzdGlvbnNPbiA9PSB0cnVlKSB7IC8v +0LXRgdC70Lgg0LLQutC70Y7Rh9C10L3QsCDQvtC/0YbQuNGPINC80L3QvtC20LXR +gdGC0LLQtdC90L3Ri9GFINC/0L7QtNGB0LrQsNC30L7QuiANCgkJaWYodGhpcy5p +c1F1b3RlT3BlbmVkID09IHRydWUgfHwgdGhpcy5pc1F1b3RlQ2xvc2VkUHJldmlv +dXNseSA9PSB0cnVlKSB7IC8v0LXRgdC70Lgg0L7RgtC60YDRi9GC0LAg0LrQsNCy +0YvRh9C60LANCgkJCXZhciB3b3Jkc19xdW90ZXMgPSBmaWVsZC52YWx1ZS5zcGxp +dCgnIicpOw0KCQkJdGhpcy5pc1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9PSB0cnVl +PyB0aGlzLm5ld1ZhbHVlID0gd29yZHNfcXVvdGVzW3dvcmRzX3F1b3Rlcy5sZW5n +dGgtMl0gOiB0aGlzLm5ld1ZhbHVlID0gd29yZHNfcXVvdGVzW3dvcmRzX3F1b3Rl +cy5sZW5ndGgtMV0NCgkJCXRoaXMubmV3VmFsdWUgPSB0aGlzLm5ld1ZhbHVlLnJl +cGxhY2UoLyheXHMrKXwoXG4pL2csICcnKTsNCgkJCXZhciB3b3JkcyA9IGZpZWxk +LnZhbHVlLnNwbGl0KHRoaXMuc3ltYm9sKTsNCgkJCXZhciB3b3Jkc19sZW5ndGg9 +d29yZHMubGVuZ3RoLTE7DQoJCQlmb3IodmFyIGs9MDsgazx3b3Jkc19sZW5ndGg7 +IGsrKykgew0KCQkJCWlmKGs9PTApIHsNCgkJCQkJdGhpcy5ub0luZGV4ZWRTdHJp +bmcgKz0gd29yZHNba107DQoJCQkJfQ0KCQkJCWVsc2Ugew0KCQkJCQl0aGlzLm5v +SW5kZXhlZFN0cmluZyArPSB0aGlzLnN5bWJvbCArIHdvcmRzW2tdOw0KCQkJCX0N +CgkJCX0NCgkJfSBlbHNlIHsNCgkJCXZhciB3b3JkcyA9IGZpZWxkLnZhbHVlLnNw +bGl0KHRoaXMuc3ltYm9sKTsNCgkJCXRoaXMubmV3VmFsdWUgPSB3b3Jkc1t3b3Jk +cy5sZW5ndGgtMV0ucmVwbGFjZSgvKF5ccyspfChcbikvZywgJycpOw0KCQkJdmFy +IHdvcmRzX2xlbmd0aD13b3Jkcy5sZW5ndGgtMTsNCgkJCWZvcih2YXIgaz0wOyBr +PHdvcmRzX2xlbmd0aDsgaysrKSB7DQoJCQkJaWYoaz09MCkgew0KCQkJCQl0aGlz +Lm5vSW5kZXhlZFN0cmluZyArPSB3b3Jkc1trXTsNCgkJCQl9DQoJCQkJZWxzZSB7 +DQoJCQkJCXRoaXMubm9JbmRleGVkU3RyaW5nICs9IHRoaXMuc3ltYm9sICsgd29y +ZHNba107DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KCWVsc2Ugew0KCQlpZih0aGlz +LmlzUXVvdGVPcGVuZWQgPT0gdHJ1ZSkgew0KCQkJdmFyIHdvcmRzX3F1b3RlcyA9 +IGZpZWxkLnZhbHVlLnNwbGl0KCciJyk7DQoJCQl0aGlzLm5ld1ZhbHVlID0gd29y +ZHNfcXVvdGVzW3dvcmRzX3F1b3Rlcy5sZW5ndGgtMV0ucmVwbGFjZSgvKF5ccysp +fChcbikvZywgJycpOw0KCQl9DQoJCWVsc2Ugew0KCQkJdGhpcy5uZXdWYWx1ZSA9 +IGZpZWxkLnZhbHVlOw0KCQl9DQoJfQ0KfQ0KDQphdXRvc3VnZ2VzdENsYXNzLnBy +b3RvdHlwZS5yZXF1ZXN0U3VnZ2VzdHMgPSBmdW5jdGlvbihmaWVsZCwgc3VibWl0 +VHlwZSkgew0KCQkJdGhpcy5ob2xkZXIgPSB0aGlzLmhvbGRlciB8fCAkKGZpZWxk +KS5nZXRQYXJlbnQoJy4nICsgdGhpcy5jbGFzc05hbWVzLmhvbGRlcik7DQoJCQl0 +aGlzLm91dHB1dCA9IHRoaXMub3V0cHV0IHx8ICQodGhpcy5ob2xkZXIpLmdldEVs +ZW1lbnQoJy4nICsgdGhpcy5jbGFzc05hbWVzLm91dHB1dCk7DQoJCQlpZiAodGhp +cy5uZXdWYWx1ZSA9PSAnJykgew0KCQkJCSQodGhpcy5vdXRwdXQpLmFkZENsYXNz +KCdoaWRkZW4nKTsNCgkJCQl0aGlzLm91dHB1dC5pbm5lckhUTUwgPScnOw0KCQkJ +CXRoaXMubGFzdFZhbHVlID0gdGhpcy5uZXdWYWx1ZTsNCgkJCQlyZXR1cm4gZmFs +c2U7DQoJCQl9DQoJCQllbHNlIHsNCgkJCQkkKHRoaXMub3V0cHV0KS5yZW1vdmVD +bGFzcygnaGlkZGVuJyk7DQoJCQl9DQoJCQlpZiAoJCh0aGlzLmhvbGRlcikuaGFz +Q2xhc3ModGhpcy5jbGFzc05hbWVzLmlzTG9hZGluZykgfHwgdGhpcy5sYXN0VmFs +dWUgPT0gdGhpcy5uZXdWYWx1ZSkgew0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0N +CgkJCXZhciBkYXRhID0gJ2xldHRlcnM9JyArIHRoaXMubmV3VmFsdWUgKyAnJnR5 +cGU9JyArIHN1Ym1pdFR5cGU7DQoJCQl0aGlzLnBhcmFtcyA9IHsNCgkJCQlob2xk +ZXIgOiB0aGlzLmhvbGRlciwNCgkJCQlmaWVsZCA6IGZpZWxkLA0KCQkJCXN0cmlu +ZyA6IHRoaXMubmV3VmFsdWUsDQoJCQkJb3V0cHV0IDogdGhpcy5vdXRwdXQsDQoJ +CQkJbm9JbmRleGVkU3RyaW5nIDogdGhpcy5ub0luZGV4ZWRTdHJpbmcNCgkJCX07 +DQoJCQlhamF4TG9hZFBvc3QodGhpcy5hamF4VXJsLCBkYXRhLCB0aGlzLnNlbmRE +YXRhT25sb2FkLCB0aGlzLCB0aGlzLnBhcmFtcyk7DQoJCQkkKHRoaXMuaG9sZGVy +KS5hZGRDbGFzcyh0aGlzLmNsYXNzTmFtZXMuaXNMb2FkaW5nKTsNCgkJCXRoaXMu +bGFzdFZhbHVlID0gdGhpcy5uZXdWYWx1ZTsNCn0NCg0KLy8g0KfRgtC10L3QuNC1 +INC+0YLQstC10YLQsCDRgdC10YDQstC10YDQsCDQvdCwINC/0LXRgNC10YHRi9C7 +0LrRgyAg0LLRgdC10YUg0LTQsNC90L3Ri9GFINGE0L7RgNC80Ysg0Lgg0L7QsdGA +0LDQsdC+0YLQutCwINCy0YvQtNCw0L3QvdGL0YUg0L7RiNC40LHQvtC6DQphdXRv +c3VnZ2VzdENsYXNzLnByb3RvdHlwZS5zZW5kRGF0YU9ubG9hZCA9IGZ1bmN0aW9u +KGFqYXhPYmosIHBhcmFtcykgew0KCSQocGFyYW1zLmhvbGRlcikucmVtb3ZlQ2xh +c3ModGhpcy5jbGFzc05hbWVzLmlzTG9hZGluZyk7DQoJaWYoYWpheE9iaiAmJiBh +amF4T2JqLnJlc3BvbnNlWE1MKXsNCgkJdmFyIHhtbE9iaiA9IGFqYXhPYmoucmVz +cG9uc2VYTUw7DQoJCXZhciB4bWxOb2RlcyA9IHRoaXMucGFyc2VYTUwoeG1sT2Jq +KTsNCg0KCQlmb3IgKHByb3AgaW4geG1sTm9kZXMpew0KCQkJaWYodGhpc1t0aGlz +LnhtbFJlc3BvbnNlW3Byb3BdLmhhbmRsZXJdKSB7DQoJCQkJdGhpc1t0aGlzLnht +bFJlc3BvbnNlW3Byb3BdLmhhbmRsZXJdKHhtbE5vZGVzLCBwYXJhbXMpOw0KCQkJ +fQ0KCQl9DQoJfQ0KfTsNCg0KLy8g0JLRi9Cy0L7QtCDQtNCw0L3QvdGL0YUNCmF1 +dG9zdWdnZXN0Q2xhc3MucHJvdG90eXBlLnhtbFJlc3BvbnNlSGFuZGxlcl9vdXRw +dXQgPSBmdW5jdGlvbih4bWxOb2RlcywgcGFyYW1zKSB7DQoJdmFyIF90aGlzID0g +dGhpczsNCgkkKHBhcmFtcy5vdXRwdXQpLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTsN +Cgl0aGlzLnBvc2l0aW9uID0gMDsNCgl0aGlzLnBhcmFtcy5vdXRwdXQuaW5uZXJI +VE1MID0gJyc7DQoJaWYoeG1sTm9kZXMuaXRlbSAmJiB4bWxOb2Rlcy5pdGVtLmxl +bmd0aCkgew0KCQlmb3IodmFyIGk9MDsgaTx4bWxOb2Rlcy5pdGVtLmxlbmd0aDsg +aSsrKSB7DQoJCQl2YXIgaXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhp +cy5odG1sUmVzcG9uc2UuaXRlbSk7DQoJCQl2YXIgaHRtbCA9IHhtbE5vZGVzLml0 +ZW1baV0uZmlyc3RDaGlsZC5kYXRhOw0KCQkJdGhpcy5jdXJyVmFsdWVzW2ldID0g +eG1sTm9kZXMuaXRlbVtpXS5maXJzdENoaWxkLmRhdGE7DQoJCQl2YXIgc2VhcmNo +U3RyaW5nID0gbmV3IFJlZ0V4cCgnKCcgKyBwYXJhbXMuc3RyaW5nICsgJyknLCAn +Z2knKTsNCgkJCXZhciByZXBsYWNlU3RyaW5nID0gJzwnICt0aGlzLmh0bWxSZXNw +b25zZS52YWx1ZSArICc+JyArICckMScgKyAnPC8nICsgdGhpcy5odG1sUmVzcG9u +c2UudmFsdWUgKyAnPic7DQoJCQl2YXIgaHRtbCA9IGh0bWwucmVwbGFjZShzZWFy +Y2hTdHJpbmcsIHJlcGxhY2VTdHJpbmcpOw0KCQkJcGFyYW1zLm91dHB1dC5hcHBl +bmRDaGlsZChpdGVtKTsNCgkJCWl0ZW0uaW5uZXJIVE1MID0gaHRtbDsNCgkJfQ0K +DQoJCXBhcmFtcy5maWVsZC5vbmZvY3VzID0gZnVuY3Rpb24oKSB7DQoJCQkkKHBh +cmFtcy5vdXRwdXQpLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTsNCgkJfQkNCgkJDQoJ +CXBhcmFtcy5maWVsZC5vbmJsdXIgPSBmdW5jdGlvbihldikgew0KDQoJCQlpZigh +ZXYpIHsgZXYgPSB3aW5kb3cuZXZlbnQ7IH0NCg0KCQkJdmFyIHRhcmc7DQoJCQkJ +aWYgKCFldikgdmFyIGV2ID0gd2luZG93LmV2ZW50Ow0KCQkJCWlmIChldi50YXJn +ZXQpIHRhcmcgPSBldi50YXJnZXQ7DQoJCQkJZWxzZSBpZiAoZXYuc3JjRWxlbWVu +dCkgdGFyZyA9IGV2LnNyY0VsZW1lbnQ7DQoJCQkJaWYgKHRhcmcubm9kZVR5cGUg +PT0gMykgLy8gZGVmZWF0IFNhZmFyaSBidWcNCgkJCQkJdGFyZyA9IHRhcmcucGFy +ZW50Tm9kZTsNCgkJCQ0KCQkJaWYodGFyZyE9cGFyYW1zLmZpZWxkICYmIHRhcmcu +cGFyZW50Tm9kZSE9cGFyYW1zLm91dHB1dCkgew0KCQkJCSQocGFyYW1zLm91dHB1 +dCkuYWRkQ2xhc3MoJ2hpZGRlbicpOw0KCQkJfQ0KCQl9DQoJCQ0KCQlkb2N1bWVu +dC5hZGRFdmVudCgnY2xpY2snLCBmdW5jdGlvbiAoZSkgew0KCQkgICAgdmFyIHQg +PSBlLnRhcmdldDsNCgkJICAgIGlmICh0IT1wYXJhbXMuZmllbGQgJiYgdCE9cGFy +YW1zLm91dHB1dCkgew0KCQkgICAgICAgICQocGFyYW1zLm91dHB1dCkuYWRkQ2xh +c3MoJ2hpZGRlbicpOw0KCQkgICAgfQ0KCQl9KTsNCg0KCQl0aGlzLm1vdXNlSGFu +ZGxlcigpOw0KCX0NCn07DQoNCi8vINGD0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdC8 +INC30L3QsNGH0LXQvdC40LUNCmF1dG9zdWdnZXN0Q2xhc3MucHJvdG90eXBlLnNl +dFZhbHVlID0gZnVuY3Rpb24oKSB7DQoJdmFyIHJlc3VsdCA9IGZhbHNlOw0KCWlm +KHRoaXMucGFyYW1zLm91dHB1dCAmJiB0aGlzLnBhcmFtcy5vdXRwdXQuZ2V0RWxl +bWVudHNCeVRhZ05hbWUodGhpcy5odG1sUmVzcG9uc2UuaXRlbSlbMF0pIHsNCgkJ +dmFyIHJlc3VsdF9pdGVtcyA9IHRoaXMucGFyYW1zLm91dHB1dC5nZXRFbGVtZW50 +c0J5VGFnTmFtZSh0aGlzLmh0bWxSZXNwb25zZS5pdGVtKTsNCgkJdmFyIHJlc3Vs +dF9pdGVtc19sZW5ndGggPSByZXN1bHRfaXRlbXMubGVuZ3RoOw0KCQlmb3IgKHZh +ciBpPTA7IGk8cmVzdWx0X2l0ZW1zLmxlbmd0aDsgaSsrKSB7DQoJCQlpZihyZXN1 +bHRfaXRlbXNbaV0uY2xhc3NOYW1lID09ICdhY3RpdmUnKSB7DQoJCQkJaWYodGhp +cy5pc011bHRpcGx5U3VnZ2VzdGlvbnNPbiA9PSB0cnVlKSB7DQoJCQkJCWlmKHRo +aXMuaXNRdW90ZU9wZW5lZCA9PSB0cnVlIHx8IHRoaXMuaXNRdW90ZUNsb3NlZFBy +ZXZpb3VzbHkgPT0gdHJ1ZSkgew0KCQkJCQkJdmFyIHJlcGxhY2VkVmFsdWUgPSB0 +aGlzLnBhcmFtcy5zdHJpbmcucmVwbGFjZSh0aGlzLnBhcmFtcy5zdHJpbmcsIHRo +aXMuY3VyclZhbHVlc1t0aGlzLnBvc2l0aW9uLTFdKTsNCgkJCQkJCWlmKHRoaXMu +cGFyYW1zLm5vSW5kZXhlZFN0cmluZyE9JycpIHsNCgkJCQkJCQl0aGlzLnBhcmFt +cy5maWVsZC52YWx1ZSA9IHRoaXMucGFyYW1zLm5vSW5kZXhlZFN0cmluZyArIHRo +aXMuc3ltYm9sICsgdGhpcy5zcGFjZXIgKyAnIicgKyByZXBsYWNlZFZhbHVlOw0K +CQkJCQkJCWlmKHRoaXMuaXNRdW90ZUNsb3NlZFByZXZpb3VzbHkgPT0gdHJ1ZSkg +ew0KCQkJCQkJCQl0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSArPSAnIic7DQoJCQkJ +CQkJCXJlc3VsdCA9IHRydWU7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQkJZWxz +ZSB7DQoJCQkJCQkJdGhpcy5wYXJhbXMuZmllbGQudmFsdWUgPSAnIicgKyByZXBs +YWNlZFZhbHVlOw0KCQkJCQkJCXJlc3VsdCA9IHRydWU7DQoJCQkJCQkJaWYodGhp +cy5pc1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9PSB0cnVlKSB7IHRoaXMucGFyYW1z +LmZpZWxkLnZhbHVlICs9ICciJzsgfQ0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCWVs +c2Ugew0KCQkJCQkJdmFyIHJlcGxhY2VkVmFsdWUgPSB0aGlzLnBhcmFtcy5zdHJp +bmcucmVwbGFjZSh0aGlzLnBhcmFtcy5zdHJpbmcsIHRoaXMuY3VyclZhbHVlc1t0 +aGlzLnBvc2l0aW9uLTFdKTsNCgkJCQkJCWlmKHRoaXMucGFyYW1zLm5vSW5kZXhl +ZFN0cmluZyE9JycpIHsNCgkJCQkJCQl0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSA9 +IHRoaXMucGFyYW1zLm5vSW5kZXhlZFN0cmluZyArIHRoaXMuc3ltYm9sICsgdGhp +cy5zcGFjZXIgKyByZXBsYWNlZFZhbHVlOw0KCQkJCQkJCXJlc3VsdCA9IHRydWU7 +DQoJCQkJCQl9DQoJCQkJCQllbHNlIHsNCgkJCQkJCQl0aGlzLnBhcmFtcy5maWVs +ZC52YWx1ZSA9IHJlcGxhY2VkVmFsdWU7DQoJCQkJCQkJcmVzdWx0ID0gdHJ1ZTsN +CgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQllbHNlIHsNCgkJCQkJaWYodGhp +cy5pc1F1b3RlT3BlbmVkID09IHRydWUgfHwgdGhpcy5pc1F1b3RlQ2xvc2VkUHJl +dmlvdXNseSA9PSB0cnVlKSB7DQoJCQkJCQkNCgkJCQkJCXRoaXMucGFyYW1zLmZp +ZWxkLnZhbHVlID0gJyInICsgdGhpcy5jdXJyVmFsdWVzW3RoaXMucG9zaXRpb24t +MV07DQoJCQkJCQlyZXN1bHQgPSB0cnVlOw0KCQkJCQl9DQoJCQkJCWVsc2Ugew0K +CQkJCQkJdGhpcy5wYXJhbXMuZmllbGQudmFsdWUgPSB0aGlzLmN1cnJWYWx1ZXNb +dGhpcy5wb3NpdGlvbi0xXTsNCgkJCQkJCXJlc3VsdCA9IHRydWU7DQoJCQkJCX0N +CgkJCQl9DQoJCQkJDQoJCQkJJCh0aGlzLnBhcmFtcy5vdXRwdXQpLmFkZENsYXNz +KCdoaWRkZW4nKTsNCgkJCQkNCgkJCQl0aGlzLnBhcmFtcy5vdXRwdXQuaW5uZXJI +VE1MID0gJyc7DQoJCQkJDQoJCQkJaWYodGhpcy5wYXJhbXMuZmllbGQudmFsdWUg +JiYgdGhpcy5wYXJhbXMuZmllbGQudmFsdWUubWF0Y2goL1xyXG4kLykpIHsNCgkJ +CQkJdGhpcy5wYXJhbXMuZmllbGQudmFsdWUgPSB0aGlzLnBhcmFtcy5maWVsZC52 +YWx1ZS5yZXBsYWNlKC9cclxuJC8sICcnKTsNCgkJCQl9DQoJCQkJDQoJCQkJZWxz +ZSB7DQoJCQkJCXRoaXMucGFyYW1zLmZpZWxkID0gdGhpcy5jdXJyVmFsdWVzW2ld +Ow0KCQkJCQkkKHRoaXMucGFyYW1zLm91dHB1dCkuYWRkQ2xhc3MoJ2hpZGRlbicp +Ow0KCQkJCQl0aGlzLnBhcmFtcy5vdXRwdXQuaW5uZXJIVE1MID0gJyc7DQoJCQkJ +fQ0KCQkJfQ0KCQl9DQoJfQ0KCXJldHVybiByZXN1bHQ7DQp9Ow0KDQovLyDQvdCw +0LLQuNCz0LDRhtC40Y8g0L/QviDRgNC10LfRg9C70YzRgtCw0YLQsNC8INC30LDQ +v9GA0L7RgdCwINGBINC/0L7QvNC+0YnRjNGOINC60LvQsNCy0LjQsNGC0YPRgNGL +DQphdXRvc3VnZ2VzdENsYXNzLnByb3RvdHlwZS5tYWtlU3RlcHMgPSBmdW5jdGlv +bihkaXJlY3Rpb24pIHsNCglfdGhpcyA9IHRoaXMNCglpZih0aGlzLnBhcmFtcy5v +dXRwdXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGhpcy5odG1sUmVzcG9uc2UuaXRl +bSlbMF0pIHsNCgkJdGhpcy5wYXJhbXMuZmllbGQuZmFrZUNoYW5nZSA9IHRydWU7 +DQoJCQ0KCQl2YXIgcmVzdWx0X2l0ZW1zID0gdGhpcy5wYXJhbXMub3V0cHV0Lmdl +dEVsZW1lbnRzQnlUYWdOYW1lKHRoaXMuaHRtbFJlc3BvbnNlLml0ZW0pOw0KCQl2 +YXIgcmVzdWx0X2l0ZW1zX2xlbmd0aCA9IHJlc3VsdF9pdGVtcy5sZW5ndGg7DQoJ +CWZvciAodmFyIGk9MDsgaTxyZXN1bHRfaXRlbXMubGVuZ3RoOyBpKyspIHsNCgkJ +CXJlc3VsdF9pdGVtc1tpXS5jbGFzc05hbWUgPSAnJzsNCgkJfQ0KCQl0aGlzLnNw +YWNlciA9ICcnOw0KCQl0aGlzLnN5bWJvbCA9PSAnLCcgPyB0aGlzLnNwYWNlciA9 +ICcgJyA6IHRoaXMuc3BhY2VyID0gJyc7DQoJCWlmKGRpcmVjdGlvbiA9PSAnZG93 +bicgJiYgdGhpcy5wb3NpdGlvbjw9cmVzdWx0X2l0ZW1zX2xlbmd0aC0xKSB7DQoJ +CQlyZXN1bHRfaXRlbXNbdGhpcy5wb3NpdGlvbl0uY2xhc3NOYW1lID0gJ2FjdGl2 +ZSc7DQoJCQlpZih0aGlzLmlzTXVsdGlwbHlTdWdnZXN0aW9uc09uID09IHRydWUp +IHsNCgkJCQlpZih0aGlzLmlzUXVvdGVPcGVuZWQgPT0gdHJ1ZSB8fCB0aGlzLmlz +UXVvdGVDbG9zZWRQcmV2aW91c2x5ID09IHRydWUpIHsNCgkJCQkJdmFyIHJlcGxh +Y2VkVmFsdWUgPSB0aGlzLnBhcmFtcy5zdHJpbmcucmVwbGFjZSh0aGlzLnBhcmFt +cy5zdHJpbmcsIHRoaXMuY3VyclZhbHVlc1t0aGlzLnBvc2l0aW9uXSk7DQoJCQkJ +CWlmKHRoaXMucGFyYW1zLm5vSW5kZXhlZFN0cmluZyE9JycpIHsNCgkJCQkJCXRo +aXMucGFyYW1zLmZpZWxkLnZhbHVlID0gdGhpcy5wYXJhbXMubm9JbmRleGVkU3Ry +aW5nICsgdGhpcy5zeW1ib2wgKyB0aGlzLnNwYWNlciArICciJyArIHJlcGxhY2Vk +VmFsdWU7DQoJCQkJCQlpZih0aGlzLmlzUXVvdGVDbG9zZWRQcmV2aW91c2x5ID09 +IHRydWUpIHsgdGhpcy5wYXJhbXMuZmllbGQudmFsdWUgKz0gJyInOyB9DQoJCQkJ +CX0NCgkJCQkJZWxzZSB7DQoJCQkJCQl0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSA9 +ICciJyArIHJlcGxhY2VkVmFsdWU7DQoJCQkJCQlpZih0aGlzLmlzUXVvdGVDbG9z +ZWRQcmV2aW91c2x5ID09IHRydWUpIHsgdGhpcy5wYXJhbXMuZmllbGQudmFsdWUg +Kz0gJyInOyB9DQoJCQkJCX0NCgkJCQl9DQoJCQkJZWxzZSB7DQoJCQkJCXZhciBy +ZXBsYWNlZFZhbHVlID0gdGhpcy5wYXJhbXMuc3RyaW5nLnJlcGxhY2UodGhpcy5w +YXJhbXMuc3RyaW5nLCB0aGlzLmN1cnJWYWx1ZXNbdGhpcy5wb3NpdGlvbl0pOw0K +CQkJCQlpZih0aGlzLnBhcmFtcy5ub0luZGV4ZWRTdHJpbmchPScnKSB7DQoJCQkJ +CQl0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSA9IHRoaXMucGFyYW1zLm5vSW5kZXhl +ZFN0cmluZyArIHRoaXMuc3ltYm9sICsgdGhpcy5zcGFjZXIgKyByZXBsYWNlZFZh +bHVlOw0KCQkJCQl9DQoJCQkJCWVsc2Ugew0KCQkJCQkJdGhpcy5wYXJhbXMuZmll +bGQudmFsdWUgPSByZXBsYWNlZFZhbHVlOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0K +CQkJZWxzZSB7DQoJCQkJaWYodGhpcy5pc1F1b3RlT3BlbmVkID09IHRydWUgfHwg +dGhpcy5pc1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9PSB0cnVlKSB7DQoJCQkJCXRo +aXMucGFyYW1zLmZpZWxkLnZhbHVlID0gJyInICsgdGhpcy5jdXJyVmFsdWVzW3Ro +aXMucG9zaXRpb25dOw0KCQkJCQlpZih0aGlzLmlzUXVvdGVDbG9zZWRQcmV2aW91 +c2x5ID09IHRydWUpIHsgdGhpcy5wYXJhbXMuZmllbGQudmFsdWUgKz0gJyInOyB9 +DQoJCQkJfQ0KCQkJCWVsc2Ugew0KCQkJCQl0aGlzLnBhcmFtcy5maWVsZC52YWx1 +ZSA9IHRoaXMuY3VyclZhbHVlc1t0aGlzLnBvc2l0aW9uXTsNCgkJCQl9DQoJCQl9 +DQoJCQl0aGlzLnBvc2l0aW9uKys7DQoJCX0NCgkJZWxzZSBpZihkaXJlY3Rpb24g +PT0gJ3VwJyAmJiB0aGlzLnBvc2l0aW9uPjEpIHsNCgkJCXJlc3VsdF9pdGVtc1t0 +aGlzLnBvc2l0aW9uLTJdLmNsYXNzTmFtZSA9ICdhY3RpdmUnOw0KCQkJaWYodGhp +cy5pc011bHRpcGx5U3VnZ2VzdGlvbnNPbiA9PSB0cnVlKSB7DQoJCQkJaWYodGhp +cy5pc1F1b3RlT3BlbmVkID09IHRydWUgfHwgdGhpcy5pc1F1b3RlQ2xvc2VkUHJl +dmlvdXNseSA9PSB0cnVlKSB7DQoJCQkJCXZhciByZXBsYWNlZFZhbHVlID0gdGhp +cy5wYXJhbXMuc3RyaW5nLnJlcGxhY2UodGhpcy5wYXJhbXMuc3RyaW5nLCB0aGlz +LmN1cnJWYWx1ZXNbdGhpcy5wb3NpdGlvbi0yXSk7DQoJCQkJCWlmKHRoaXMucGFy +YW1zLm5vSW5kZXhlZFN0cmluZyE9JycpIHsNCgkJCQkJCXRoaXMucGFyYW1zLmZp +ZWxkLnZhbHVlID0gdGhpcy5wYXJhbXMubm9JbmRleGVkU3RyaW5nICsgdGhpcy5z +eW1ib2wgKyB0aGlzLnNwYWNlciArICciJyArIHJlcGxhY2VkVmFsdWU7DQoJCQkJ +CQlpZih0aGlzLmlzUXVvdGVDbG9zZWRQcmV2aW91c2x5ID09IHRydWUpIHsgdGhp +cy5wYXJhbXMuZmllbGQudmFsdWUgKz0gJyInOyB9DQoJCQkJCX0NCgkJCQkJZWxz +ZSB7DQoJCQkJCQl0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSA9ICciJyArIHJlcGxh +Y2VkVmFsdWU7DQoJCQkJCQlpZih0aGlzLmlzUXVvdGVDbG9zZWRQcmV2aW91c2x5 +ID09IHRydWUpIHsgdGhpcy5wYXJhbXMuZmllbGQudmFsdWUgKz0gJyInOyB9DQoJ +CQkJCX0NCgkJCQl9DQoJCQkJZWxzZSB7DQoJCQkJCXZhciByZXBsYWNlZFZhbHVl +ID0gdGhpcy5wYXJhbXMuc3RyaW5nLnJlcGxhY2UodGhpcy5wYXJhbXMuc3RyaW5n +LCB0aGlzLmN1cnJWYWx1ZXNbdGhpcy5wb3NpdGlvbi0yXSk7DQoJCQkJCWlmKHRo +aXMucGFyYW1zLm5vSW5kZXhlZFN0cmluZyE9JycpIHsNCgkJCQkJCXRoaXMucGFy +YW1zLmZpZWxkLnZhbHVlID0gdGhpcy5wYXJhbXMubm9JbmRleGVkU3RyaW5nICsg +dGhpcy5zeW1ib2wgKyB0aGlzLnNwYWNlciArIHJlcGxhY2VkVmFsdWU7DQoJCQkJ +CX0NCgkJCQkJZWxzZSB7DQoJCQkJCQl0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSA9 +IHJlcGxhY2VkVmFsdWU7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQllbHNlIHsN +CgkJCQlpZih0aGlzLmlzUXVvdGVPcGVuZWQgPT0gdHJ1ZSB8fCB0aGlzLmlzUXVv +dGVDbG9zZWRQcmV2aW91c2x5ID09IHRydWUpIHsNCgkJCQkJdGhpcy5wYXJhbXMu +ZmllbGQudmFsdWUgPSAnIicgKyB0aGlzLmN1cnJWYWx1ZXNbdGhpcy5wb3NpdGlv +bi0yXTsNCgkJCQkJaWYodGhpcy5pc1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9PSB0 +cnVlKSB7IHRoaXMucGFyYW1zLmZpZWxkLnZhbHVlICs9ICciJzsgfQ0KCQkJCX0N +CgkJCQllbHNlIHsNCgkJCQkJdGhpcy5wYXJhbXMuZmllbGQudmFsdWUgPSB0aGlz +LmN1cnJWYWx1ZXNbdGhpcy5wb3NpdGlvbi0yXTsNCgkJCQl9DQoJCQl9DQoJCQl0 +aGlzLnBvc2l0aW9uLS07DQoJCX0NCgkJZWxzZSBpZiAodGhpcy5wb3NpdGlvbj5y +ZXN1bHRfaXRlbXNfbGVuZ3RoLTEpIHsNCgkJCXRoaXMucG9zaXRpb249MDsNCgkJ +CXJlc3VsdF9pdGVtc1t0aGlzLnBvc2l0aW9uXS5jbGFzc05hbWUgPSAnYWN0aXZl +JzsNCgkJCWlmKHRoaXMuaXNNdWx0aXBseVN1Z2dlc3Rpb25zT24gPT0gdHJ1ZSkg +ew0KCQkJCWlmKHRoaXMuaXNRdW90ZU9wZW5lZCA9PSB0cnVlIHx8IHRoaXMuaXNR +dW90ZUNsb3NlZFByZXZpb3VzbHkgPT0gdHJ1ZSkgew0KCQkJCQl2YXIgcmVwbGFj +ZWRWYWx1ZSA9IHRoaXMucGFyYW1zLnN0cmluZy5yZXBsYWNlKHRoaXMucGFyYW1z +LnN0cmluZywgdGhpcy5jdXJyVmFsdWVzW3RoaXMucG9zaXRpb25dKTsNCgkJCQkJ +aWYodGhpcy5wYXJhbXMubm9JbmRleGVkU3RyaW5nIT0nJykgew0KCQkJCQkJdGhp +cy5wYXJhbXMuZmllbGQudmFsdWUgPSB0aGlzLnBhcmFtcy5ub0luZGV4ZWRTdHJp +bmcgKyB0aGlzLnN5bWJvbCArIHRoaXMuc3BhY2VyICsgJyInICsgcmVwbGFjZWRW +YWx1ZTsNCgkJCQkJCWlmKHRoaXMuaXNRdW90ZUNsb3NlZFByZXZpb3VzbHkgPT0g +dHJ1ZSkgeyB0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSArPSAnIic7IH0NCgkJCQkJ +fQ0KCQkJCQllbHNlIHsNCgkJCQkJCXRoaXMucGFyYW1zLmZpZWxkLnZhbHVlID0g +JyInICsgcmVwbGFjZWRWYWx1ZTsNCgkJCQkJCWlmKHRoaXMuaXNRdW90ZUNsb3Nl +ZFByZXZpb3VzbHkgPT0gdHJ1ZSkgeyB0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSAr +PSAnIic7IH0NCgkJCQkJfQ0KCQkJCX0NCgkJCQllbHNlIHsNCgkJCQkJdmFyIHJl +cGxhY2VkVmFsdWUgPSB0aGlzLnBhcmFtcy5zdHJpbmcucmVwbGFjZSh0aGlzLnBh +cmFtcy5zdHJpbmcsIHRoaXMuY3VyclZhbHVlc1t0aGlzLnBvc2l0aW9uXSk7DQoJ +CQkJCWlmKHRoaXMucGFyYW1zLm5vSW5kZXhlZFN0cmluZyE9JycpIHsNCgkJCQkJ +CXRoaXMucGFyYW1zLmZpZWxkLnZhbHVlID0gdGhpcy5wYXJhbXMubm9JbmRleGVk +U3RyaW5nICsgdGhpcy5zeW1ib2wgKyB0aGlzLnNwYWNlciArIHJlcGxhY2VkVmFs +dWU7DQoJCQkJCX0NCgkJCQkJZWxzZSB7DQoJCQkJCQl0aGlzLnBhcmFtcy5maWVs +ZC52YWx1ZSA9IHJlcGxhY2VkVmFsdWU7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJ +CQllbHNlIHsNCgkJCQlpZih0aGlzLmlzUXVvdGVPcGVuZWQgPT0gdHJ1ZSB8fCB0 +aGlzLmlzUXVvdGVDbG9zZWRQcmV2aW91c2x5ID09IHRydWUpIHsNCgkJCQkJdGhp +cy5wYXJhbXMuZmllbGQudmFsdWUgPSAnIicgKyB0aGlzLmN1cnJWYWx1ZXNbdGhp +cy5wb3NpdGlvbl07DQoJCQkJCWlmKHRoaXMuaXNRdW90ZUNsb3NlZFByZXZpb3Vz +bHkgPT0gdHJ1ZSkgeyB0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSArPSAnIic7IH0N +CgkJCQl9DQoJCQkJZWxzZSB7DQoJCQkJCXRoaXMucGFyYW1zLmZpZWxkLnZhbHVl +ID0gdGhpcy5jdXJyVmFsdWVzW3RoaXMucG9zaXRpb25dOw0KCQkJCX0NCgkJCX0N +CgkJCXRoaXMucG9zaXRpb24rKzsNCgkJfQ0KCQllbHNlIGlmKGRpcmVjdGlvbiA9 +PSAndXAnICYmIHRoaXMucG9zaXRpb248PTEpIHsNCgkJCXRoaXMucG9zaXRpb249 +cmVzdWx0X2l0ZW1zX2xlbmd0aC0xOw0KCQkJcmVzdWx0X2l0ZW1zW3RoaXMucG9z +aXRpb25dLmNsYXNzTmFtZSA9ICdhY3RpdmUnOw0KCQkJaWYodGhpcy5pc011bHRp +cGx5U3VnZ2VzdGlvbnNPbiA9PSB0cnVlKSB7DQoJCQkJaWYodGhpcy5pc1F1b3Rl +T3BlbmVkID09IHRydWUgfHwgdGhpcy5pc1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9 +PSB0cnVlKSB7DQoJCQkJCXZhciByZXBsYWNlZFZhbHVlID0gdGhpcy5wYXJhbXMu +c3RyaW5nLnJlcGxhY2UodGhpcy5wYXJhbXMuc3RyaW5nLCB0aGlzLmN1cnJWYWx1 +ZXNbdGhpcy5wb3NpdGlvbl0pOw0KCQkJCQlpZih0aGlzLnBhcmFtcy5ub0luZGV4 +ZWRTdHJpbmchPScnKSB7DQoJCQkJCQl0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSA9 +IHRoaXMucGFyYW1zLm5vSW5kZXhlZFN0cmluZyArIHRoaXMuc3ltYm9sICsgdGhp +cy5zcGFjZXIgKyAnIicgKyByZXBsYWNlZFZhbHVlOw0KCQkJCQkJaWYodGhpcy5p +c1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9PSB0cnVlKSB7IHRoaXMucGFyYW1zLmZp +ZWxkLnZhbHVlICs9ICciJzsgfQ0KCQkJCQl9DQoJCQkJCWVsc2Ugew0KCQkJCQkJ +dGhpcy5wYXJhbXMuZmllbGQudmFsdWUgPSAnIicgKyByZXBsYWNlZFZhbHVlOw0K +CQkJCQkJaWYodGhpcy5pc1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9PSB0cnVlKSB7 +IHRoaXMucGFyYW1zLmZpZWxkLnZhbHVlICs9ICciJzsgfQ0KCQkJCQl9DQoJCQkJ +fQ0KCQkJCWVsc2Ugew0KCQkJCQl2YXIgcmVwbGFjZWRWYWx1ZSA9IHRoaXMucGFy +YW1zLnN0cmluZy5yZXBsYWNlKHRoaXMucGFyYW1zLnN0cmluZywgdGhpcy5jdXJy +VmFsdWVzW3RoaXMucG9zaXRpb25dKTsNCgkJCQkJaWYodGhpcy5wYXJhbXMubm9J +bmRleGVkU3RyaW5nIT0nJykgew0KCQkJCQkJdGhpcy5wYXJhbXMuZmllbGQudmFs +dWUgPSB0aGlzLnBhcmFtcy5ub0luZGV4ZWRTdHJpbmcgKyB0aGlzLnN5bWJvbCAr +IHRoaXMuc3BhY2VyICsgcmVwbGFjZWRWYWx1ZTsNCgkJCQkJfQ0KCQkJCQllbHNl +IHsNCgkJCQkJCXRoaXMucGFyYW1zLmZpZWxkLnZhbHVlID0gcmVwbGFjZWRWYWx1 +ZTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCWVsc2Ugew0KCQkJCWlmKHRoaXMu +aXNRdW90ZU9wZW5lZCA9PSB0cnVlIHx8IHRoaXMuaXNRdW90ZUNsb3NlZFByZXZp +b3VzbHkgPT0gdHJ1ZSkgew0KCQkJCQl0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSA9 +ICciJyArIHRoaXMuY3VyclZhbHVlc1t0aGlzLnBvc2l0aW9uXTsNCgkJCQkJaWYo +dGhpcy5pc1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9PSB0cnVlKSB7IHRoaXMucGFy +YW1zLmZpZWxkLnZhbHVlICs9ICciJzsgfQ0KCQkJCX0NCgkJCQllbHNlIHsNCgkJ +CQkJdGhpcy5wYXJhbXMuZmllbGQudmFsdWUgPSB0aGlzLmN1cnJWYWx1ZXNbdGhp +cy5wb3NpdGlvbl07DQoJCQkJfQ0KCQkJfQ0KCQkJdGhpcy5wb3NpdGlvbisrOw0K +CQl9DQoJCXNldFRpbWVvdXQoZnVuY3Rpb24oKXsNCgkJCV90aGlzLnBhcmFtcy5m +aWVsZC5mYWtlQ2hhbmdlID0gZmFsc2U7DQoJCX0sNTApDQoJCQ0KCQkNCgl9DQp9 +Ow0KDQovL9C90LDQstC40LPQsNGG0LjRjyDQv9C+INGA0LXQt9GD0LvRjNGC0LDR +gtCw0Lwg0LfQsNC/0YDQvtGB0LAg0YEg0L/QvtC80L7RidGM0Y4g0LzRi9GI0LrQ +uA0KYXV0b3N1Z2dlc3RDbGFzcy5wcm90b3R5cGUubW91c2VIYW5kbGVyID0gZnVu +Y3Rpb24oKSB7DQoJdmFyIF90aGlzID0gdGhpczsNCgl2YXIgaXRlbXMgPSB0aGlz +LnBhcmFtcy5vdXRwdXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGhpcy5odG1sUmVz +cG9uc2UuaXRlbSk7DQoJdmFyIGl0ZW1zX2xlbmd0aCA9IGl0ZW1zLmxlbmd0aDsN +CgkNCg0KDQoNCglmb3IgKHZhciBpPTA7IGk8aXRlbXNfbGVuZ3RoOyBpKyspIHsN +CgkJaXRlbXNbaV0ub25tb3VzZW92ZXIgPSBmdW5jdGlvbihpXykgew0KCQkJcmV0 +dXJuIGZ1bmN0aW9uICgpIHsNCgkJCQlmb3IgKHZhciBrPTA7IGs8aXRlbXNfbGVu +Z3RoOyBrKyspIHsNCgkJCQkJaXRlbXNba10uY2xhc3NOYW1lID0gJyc7DQoJCQkJ +fQ0KCQkJCXRoaXMuY2xhc3NOYW1lID0gJ2FjdGl2ZSc7DQoJCQkJX3RoaXMucG9z +aXRpb24gPSBpXysxOw0KCQkJfQ0KCQl9KGkpOw0KCQlpdGVtc1tpXS5vbm1vdXNl +b3V0ID0gZnVuY3Rpb24oKSB7DQoJCQl0aGlzLmNsYXNzTmFtZSA9ICcnOw0KCQkJ +LyogX3RoaXMucG9zaXRpb24gPSAwOyAqLw0KCQl9DQoJCWl0ZW1zW2ldLm9uY2xp +Y2sgPSBmdW5jdGlvbihpXykgew0KCQkJcmV0dXJuIGZ1bmN0aW9uKCkgew0KCQkJ +CXZhciBob2xkZXIgPSAkKHRoaXMpLmdldFBhcmVudCgnLicgKyBfdGhpcy5jbGFz +c05hbWVzLmhvbGRlcik7DQoJCQkJdmFyIGZpZWxkID0gJChob2xkZXIpLmdldEVs +ZW1lbnQoJy4nICsgX3RoaXMuY2xhc3NOYW1lcy5maWVsZCk7DQoJCQkJaWYoX3Ro +aXMuaXNNdWx0aXBseVN1Z2dlc3Rpb25zT24gPT0gdHJ1ZSkgew0KCQkJCQlpZihf +dGhpcy5pc1F1b3RlT3BlbmVkID09IHRydWUpIHsNCgkJCQkJCXZhciByZXBsYWNl +ZFZhbHVlID0gX3RoaXMucGFyYW1zLnN0cmluZy5yZXBsYWNlKF90aGlzLnBhcmFt +cy5zdHJpbmcsIF90aGlzLmN1cnJWYWx1ZXNbaV9dKTsNCgkJCQkJCV90aGlzLnNw +YWNlciA9Jyc7DQoJCQkJCQlfdGhpcy5zeW1ib2wgPT0gJywnID8gX3RoaXMuc3Bh +Y2VyID0gJyAnIDogX3RoaXMuc3BhY2VyID0gJyc7DQoJCQkJCQlpZihfdGhpcy5w +YXJhbXMubm9JbmRleGVkU3RyaW5nIT0nJykgew0KCQkJCQkJCV90aGlzLnBhcmFt +cy5maWVsZC52YWx1ZSA9IF90aGlzLnBhcmFtcy5ub0luZGV4ZWRTdHJpbmcgKyBf +dGhpcy5zeW1ib2wgKyBfdGhpcy5zcGFjZXIgKyAnIicgKyByZXBsYWNlZFZhbHVl +Ow0KCQkJCQkJfQ0KCQkJCQkJZWxzZSB7DQoJCQkJCQkJX3RoaXMucGFyYW1zLmZp +ZWxkLnZhbHVlID0gJyInICsgcmVwbGFjZWRWYWx1ZTsNCgkJCQkJCX0NCgkJCQkJ +fQ0KCQkJCQllbHNlIHsNCgkJCQkJCXZhciByZXBsYWNlZFZhbHVlID0gX3RoaXMu +cGFyYW1zLnN0cmluZy5yZXBsYWNlKF90aGlzLnBhcmFtcy5zdHJpbmcsIF90aGlz +LmN1cnJWYWx1ZXNbaV9dKTsNCgkJCQkJCV90aGlzLnNwYWNlciA9Jyc7DQoJCQkJ +CQlfdGhpcy5zeW1ib2wgPT0gJywnID8gX3RoaXMuc3BhY2VyID0gJyAnIDogX3Ro +aXMuc3BhY2VyID0gJyc7DQoJCQkJCQlpZihfdGhpcy5wYXJhbXMubm9JbmRleGVk +U3RyaW5nIT0nJykgew0KCQkJCQkJCV90aGlzLnBhcmFtcy5maWVsZC52YWx1ZSA9 +IF90aGlzLnBhcmFtcy5ub0luZGV4ZWRTdHJpbmcgKyBfdGhpcy5zeW1ib2wgKyBf +dGhpcy5zcGFjZXIgKyByZXBsYWNlZFZhbHVlOw0KCQkJCQkJfQ0KCQkJCQkJZWxz +ZSB7DQoJCQkJCQkJX3RoaXMucGFyYW1zLmZpZWxkLnZhbHVlID0gcmVwbGFjZWRW +YWx1ZTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCQkkKF90aGlzLnBhcmFtcy5vdXRw +dXQpLmFkZENsYXNzKCdoaWRkZW4nKTsNCgkJCQl9DQoJCQkJZWxzZSB7DQoJCQkJ +CWlmKF90aGlzLmlzUXVvdGVPcGVuZWQgPT0gdHJ1ZSkgew0KCQkJCQkJZmllbGQu +dmFsdWUgPSAnIicgKyBfdGhpcy5jdXJyVmFsdWVzW2lfXTsNCgkJCQkJfQ0KCQkJ +CQllbHNlIHsNCgkJCQkJCWZpZWxkLnZhbHVlID0gX3RoaXMuY3VyclZhbHVlc1tp +X107DQoJCQkJCX0NCgkJCQl9DQoJCQkJCQ0KCQkJCSQoX3RoaXMucGFyYW1zLm91 +dHB1dCkuYWRkQ2xhc3MoJ2hpZGRlbicpOw0KCQkJCQ0KCQkJCV90aGlzLnBhcmFt +cy5vdXRwdXQuaW5uZXJIVE1MID0gJyc7DQoJCQkJDQoJCQkJZmllbGQuZm9jdXMo +KTsNCgkJCX0NCgkJfShpKTsNCgl9DQp9Ow0KDQoNCg0Kd2luZG93LmFkZEV2ZW50 +KCdsb2FkJywgZnVuY3Rpb24oKSB7DQoJaWYgKCQoJ3RvcGljLXRhZ3MnKSkgew0K +CQl2YXIgQXV0b3N1Z2dlc3QwMSA9IG5ldyBhdXRvc3VnZ2VzdENsYXNzKCQoJ3Rv +cGljLXRhZ3MnKSwgJ3RhZ3MnLCB0cnVlLCAnLCcpOw0KCX0NCglpZiAoJCgnc2Vh +cmNoJykpIHsNCgkJdmFyIEF1dG9zdWdnZXN0MDIgPSBuZXcgYXV0b3N1Z2dlc3RD +bGFzcygkKCdzZWFyY2gnKSwgJ3NlYXJjaCcsIGZhbHNlLCAnJyk7DQoJfQ0KICAv +KmlmICgkKCd0bycpKSB7DQoJCXZhciBBdXRvc3VnZ2VzdDAzID0gbmV3IGF1dG9z +dWdnZXN0Q2xhc3MoJCgndG8nKSwgJ3VzZXInLCB0cnVlLCAnLCcpOw0KCX0qLw0K +CWlmICgkKCd0YWctc2VhcmNoLWZpZWxkJykpIHsNCgkJdmFyIEF1dG9zdWdnZXN0 +MDQgPSBuZXcgYXV0b3N1Z2dlc3RDbGFzcygkKCd0YWctc2VhcmNoLWZpZWxkJyks +ICd0YWdzJywgZmFsc2UsICcnKTsNCgl9DQoJaWYgKCQoJ21haW4tc2VhcmNoLWZp +ZWxkJykpIHsNCgkJdmFyIEF1dG9zdWdnZXN0MDUgPSBuZXcgYXV0b3N1Z2dlc3RD +bGFzcygkKCdtYWluLXNlYXJjaC1maWVsZCcpLCAnc2VhcmNoJywgZmFsc2UsICcn +KTsNCgl9DQoJaWYgKCQoJ2Zhdm91cml0ZXNfYWRkX3RhZ3MnKSkgew0KCSAgICB2 +YXIgQXV0b3N1Z2dlc3QwNiA9IG5ldyBhdXRvc3VnZ2VzdENsYXNzKCQoJ2Zhdm91 +cml0ZXNfYWRkX3RhZ3MnKSwgJ3RhZ3MnLCB0cnVlLCAnLCcpOw0KCX0NCn0pOw0K + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline; filename=highlight.js +Content-Type: application/x-javascript; charset=utf-8; name=highlight.js +Content-Location: http://habrahabr.ru/js/1307631427/highlight.js +Content-Transfer-Encoding: Base64 + +dmFyIGhsanM9bmV3IGZ1bmN0aW9uKCl7dmFyIHE9e307dmFyIGE9e307ZnVuY3Rp +b24gbyhjKXtyZXR1cm4gYy5yZXBsYWNlKC8mL2dtLCImYW1wOyIpLnJlcGxhY2Uo +LzwvZ20sIiZsdDsiKS5yZXBsYWNlKC8+L2dtLCImZ3Q7Iil9ZnVuY3Rpb24gbCh0 +LHMpe2lmKCF0KXtyZXR1cm4gZmFsc2V9Zm9yKHZhciBjPTA7Yzx0Lmxlbmd0aDtj +Kyspe2lmKHRbY109PXMpe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9ZnVuY3Rp +b24gZSh0LHMsYyl7dmFyIHU9Im0iKyh0LmNJPyJpIjoiIikrKGM/ImciOiIiKTty +ZXR1cm4gbmV3IFJlZ0V4cChzLHUpfWZ1bmN0aW9uIGsocyl7Zm9yKHZhciBjPTA7 +YzxzLmNoaWxkTm9kZXMubGVuZ3RoO2MrKyl7bm9kZT1zLmNoaWxkTm9kZXNbY107 +aWYobm9kZS5ub2RlTmFtZT09IkNPREUiKXtyZXR1cm4gbm9kZX1pZighKG5vZGUu +bm9kZVR5cGU9PTMmJm5vZGUubm9kZVZhbHVlLm1hdGNoKC9ccysvKSkpe3JldHVy +biBudWxsfX19ZnVuY3Rpb24gaSh0KXt2YXIgcz0iIjtmb3IodmFyIGM9MDtjPHQu +Y2hpbGROb2Rlcy5sZW5ndGg7YysrKXtpZih0LmNoaWxkTm9kZXNbY10ubm9kZVR5 +cGU9PTMpe3MrPXQuY2hpbGROb2Rlc1tjXS5ub2RlVmFsdWV9ZWxzZXtpZih0LmNo +aWxkTm9kZXNbY10ubm9kZU5hbWU9PSJCUiIpe3MrPSJcbiJ9ZWxzZXtzKz1pKHQu +Y2hpbGROb2Rlc1tjXSl9fX1yZXR1cm4gc31mdW5jdGlvbiBiKHUpe3ZhciBzPXUu +Y2xhc3NOYW1lLnNwbGl0KC9ccysvKTtzPXMuY29uY2F0KHUucGFyZW50Tm9kZS5j +bGFzc05hbWUuc3BsaXQoL1xzKy8pKTtmb3IodmFyIGM9MDtjPHMubGVuZ3RoO2Mr +Kyl7dmFyIHQ9c1tjXS5yZXBsYWNlKC9ebGFuZ3VhZ2UtLywiIik7aWYodD09Im5v +LWhpZ2hsaWdodCIpe3Rocm93Ik5vIGhpZ2hsaWdodCJ9aWYocVt0XSl7cmV0dXJu +IHR9fX1mdW5jdGlvbiBkKGMpe3ZhciBzPVtdOyhmdW5jdGlvbih1LHYpe2Zvcih2 +YXIgdD0wO3Q8dS5jaGlsZE5vZGVzLmxlbmd0aDt0Kyspe2lmKHUuY2hpbGROb2Rl +c1t0XS5ub2RlVHlwZT09Myl7dis9dS5jaGlsZE5vZGVzW3RdLm5vZGVWYWx1ZS5s +ZW5ndGh9ZWxzZXtpZih1LmNoaWxkTm9kZXNbdF0ubm9kZU5hbWU9PSJCUiIpe3Yr +PTF9ZWxzZXtzLnB1c2goe2V2ZW50OiJzdGFydCIsb2Zmc2V0OnYsbm9kZTp1LmNo +aWxkTm9kZXNbdF19KTt2PWFyZ3VtZW50cy5jYWxsZWUodS5jaGlsZE5vZGVzW3Rd +LHYpO3MucHVzaCh7ZXZlbnQ6InN0b3AiLG9mZnNldDp2LG5vZGU6dS5jaGlsZE5v +ZGVzW3RdfSl9fX1yZXR1cm4gdn0pKGMsMCk7cmV0dXJuIHN9ZnVuY3Rpb24gbihB +LEIseil7dmFyIHQ9MDt2YXIgeT0iIjt2YXIgdj1bXTtmdW5jdGlvbiB3KCl7aWYo +QS5sZW5ndGgmJkIubGVuZ3RoKXtpZihBWzBdLm9mZnNldCE9QlswXS5vZmZzZXQp +e3JldHVybihBWzBdLm9mZnNldDxCWzBdLm9mZnNldCk/QTpCfWVsc2V7cmV0dXJu +KEFbMF0uZXZlbnQ9PSJzdGFydCImJkJbMF0uZXZlbnQ9PSJzdG9wIik/QjpBfX1l +bHNle3JldHVybiBBLmxlbmd0aD9BOkJ9fWZ1bmN0aW9uIHUoRil7dmFyIEc9Ijwi +K0Yubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtmb3IodmFyIEQ9MDtEPEYuYXR0cmli +dXRlcy5sZW5ndGg7RCsrKXt2YXIgRT1GLmF0dHJpYnV0ZXNbRF07Rys9IiAiK0Uu +bm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZihFLm5vZGVWYWx1ZSE9dW5kZWZpbmVk +KXtHKz0nPSInK28oRS5ub2RlVmFsdWUpKyciJ319cmV0dXJuIEcrIj4ifWZ1bmN0 +aW9uIEMoRCl7cmV0dXJuIjwvIitELm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkrIj4i +fXdoaWxlKEEubGVuZ3RofHxCLmxlbmd0aCl7dmFyIHg9dygpLnNwbGljZSgwLDEp +WzBdO3krPW8oei5zdWJzdHIodCx4Lm9mZnNldC10KSk7dD14Lm9mZnNldDtpZih4 +LmV2ZW50PT0ic3RhcnQiKXt5Kz11KHgubm9kZSk7di5wdXNoKHgubm9kZSl9ZWxz +ZXtpZih4LmV2ZW50PT0ic3RvcCIpe3ZhciBzPXYubGVuZ3RoO2Rve3MtLTt2YXIg +Yz12W3NdO3krPUMoYyl9d2hpbGUoYyE9eC5ub2RlKTt2LnNwbGljZShzLDEpO3do +aWxlKHM8di5sZW5ndGgpe3krPXUodltzXSk7cysrfX19fXkrPXouc3Vic3RyKHQp +O3JldHVybiB5fWZ1bmN0aW9uIGgoSyxFKXtmdW5jdGlvbiBMKFEsUCl7US5zbT1b +XTtmb3IodmFyIE89MDtPPFEuYy5sZW5ndGg7TysrKXtmb3IodmFyIE49MDtOPFAu +bS5sZW5ndGg7TisrKXtpZihQLm1bTl0uY049PVEuY1tPXSl7US5zbVtRLnNtLmxl +bmd0aF09UC5tW05dfX19fWZ1bmN0aW9uIEEoTixQKXtpZighUC5jKXtyZXR1cm4g +bnVsbH1pZighUC5zbSl7TChQLEkpfWZvcih2YXIgTz0wO088UC5zbS5sZW5ndGg7 +TysrKXtpZihQLnNtW09dLmJSLnRlc3QoTikpe3JldHVybiBQLnNtW09dfX1yZXR1 +cm4gbnVsbH1mdW5jdGlvbiB4KE8sTil7aWYoRFtPXS5lJiZEW09dLmVSLnRlc3Qo +Tikpe3JldHVybiAxfWlmKERbT10uZVcpe3ZhciBQPXgoTy0xLE4pO3JldHVybiBQ +P1ArMTowfXJldHVybiAwfWZ1bmN0aW9uIHkoTixPKXtyZXR1cm4gTy5pUiYmTy5p +Ui50ZXN0KE4pfWZ1bmN0aW9uIEIoVCxSKXt2YXIgUD1bXTtmdW5jdGlvbiBTKFUp +e2lmKCFsKFAsVSkpe1BbUC5sZW5ndGhdPVV9fWlmKFQuYyl7Zm9yKHZhciBPPTA7 +TzxSLm0ubGVuZ3RoO08rKyl7aWYobChULmMsUi5tW09dLmNOKSl7UyhSLm1bT10u +Yil9fX12YXIgTj1ELmxlbmd0aC0xO2Rve2lmKERbTl0uZSl7UyhEW05dLmUpfU4t +LX13aGlsZShEW04rMV0uZVcpO2lmKFQuaSl7UyhULmkpfXZhciBRPSIoIitQWzBd +O2Zvcih2YXIgTz0wO088UC5sZW5ndGg7TysrKXtRKz0ifCIrUFtPXX1RKz0iKSI7 +cmV0dXJuIGUoUixRKX1mdW5jdGlvbiB0KFAsTyl7dmFyIFE9RFtELmxlbmd0aC0x +XTtpZighUS50KXtRLnQ9QihRLEkpfVA9UC5zdWJzdHIoTyk7dmFyIE49US50LmV4 +ZWMoUCk7aWYoIU4pe3JldHVybltQLCIiLHRydWVdfWlmKE4uaW5kZXg9PTApe3Jl +dHVyblsiIixOWzBdLGZhbHNlXX1lbHNle3JldHVybltQLnN1YnN0cigwLE4uaW5k +ZXgpLE5bMF0sZmFsc2VdfX1mdW5jdGlvbiBzKFIsTil7dmFyIE89SS5jST9OWzBd +LnRvTG93ZXJDYXNlKCk6TlswXTtmb3IodmFyIFEgaW4gUi5rZXl3b3JkR3JvdXBz +KXtpZighUi5rZXl3b3JkR3JvdXBzLmhhc093blByb3BlcnR5KFEpKXtjb250aW51 +ZX12YXIgUD1SLmtleXdvcmRHcm91cHNbUV0uaGFzT3duUHJvcGVydHkoTyk7aWYo +UCl7cmV0dXJuW1EsUF19fXJldHVybiBmYWxzZX1mdW5jdGlvbiBHKFEsVCl7aWYo +IVQua3x8IVQubCl7cmV0dXJuIG8oUSl9aWYoIVQubFIpe3ZhciBTPSIoIitULmxb +MF07Zm9yKHZhciBQPTE7UDxULmwubGVuZ3RoO1ArKyl7Uys9InwiK1QubFtQXX1T +Kz0iKSI7VC5sUj1lKEksUyx0cnVlKX12YXIgUj0iIjt2YXIgVT0wO1QubFIubGFz +dEluZGV4PTA7dmFyIE89VC5sUi5leGVjKFEpO3doaWxlKE8pe1IrPW8oUS5zdWJz +dHIoVSxPLmluZGV4LVUpKTt2YXIgTj1zKFQsTyk7aWYoTil7dSs9TlsxXTtSKz0n +PHNwYW4gY2xhc3M9IicrTlswXSsnIj4nK28oT1swXSkrIjwvc3Bhbj4ifWVsc2V7 +Uis9byhPWzBdKX1VPVQubFIubGFzdEluZGV4O089VC5sUi5leGVjKFEpfVIrPW8o +US5zdWJzdHIoVSxRLmxlbmd0aC1VKSk7cmV0dXJuIFJ9ZnVuY3Rpb24gTShOLFAp +e2lmKFAuc3ViTGFuZ3VhZ2UmJmFbUC5zdWJMYW5ndWFnZV0pe3ZhciBPPWgoUC5z +dWJMYW5ndWFnZSxOKTt1Kz1PLmtleXdvcmRfY291bnQ7Qys9Ty5yO3JldHVybiBP +LnZhbHVlfWVsc2V7cmV0dXJuIEcoTixQKX19ZnVuY3Rpb24gSihQLE4pe3ZhciBP +PVAubk0/IiI6JzxzcGFuIGNsYXNzPSInK1AuZGlzcGxheUNsYXNzTmFtZSsnIj4n +O2lmKFAuckIpe2MrPU87UC5idWZmZXI9IiJ9ZWxzZXtpZihQLmVCKXtjKz1vKE4p +K087UC5idWZmZXI9IiJ9ZWxzZXtjKz1PO1AuYnVmZmVyPU59fURbRC5sZW5ndGhd +PVB9ZnVuY3Rpb24gRihTLE8sVCl7dmFyIFU9RFtELmxlbmd0aC0xXTtpZihUKXtj +Kz1NKFUuYnVmZmVyK1MsVSk7cmV0dXJuIGZhbHNlfXZhciBQPUEoTyxVKTtpZihQ +KXtjKz1NKFUuYnVmZmVyK1MsVSk7SihQLE8pO0MrPVAucjtyZXR1cm4gUC5yQn12 +YXIgTj14KEQubGVuZ3RoLTEsTyk7aWYoTil7dmFyIFI9VS5uTT8iIjoiPC9zcGFu +PiI7aWYoVS5yRSl7Yys9TShVLmJ1ZmZlcitTLFUpK1J9ZWxzZXtpZihVLmVFKXtj +Kz1NKFUuYnVmZmVyK1MsVSkrUitvKE8pfWVsc2V7Yys9TShVLmJ1ZmZlcitTK08s +VSkrUn19d2hpbGUoTj4xKXtSPURbRC5sZW5ndGgtMl0ubk0/IiI6Ijwvc3Bhbj4i +O2MrPVI7Ti0tO0QubGVuZ3RoLS19RC5sZW5ndGgtLTtEW0QubGVuZ3RoLTFdLmJ1 +ZmZlcj0iIjtpZihVLnN0YXJ0cyl7Zm9yKHZhciBRPTA7UTxJLm0ubGVuZ3RoO1Er +Kyl7aWYoSS5tW1FdLmNOPT1VLnN0YXJ0cyl7SihJLm1bUV0sIiIpO2JyZWFrfX19 +cmV0dXJuIFUuckV9aWYoeShPLFUpKXt0aHJvdyJJbGxlZ2FsIn19dmFyIEk9cVtL +XTt2YXIgRD1bSS5kTV07dmFyIEM9MDt2YXIgdT0wO3ZhciBjPSIiO3RyeXt2YXIg +dz0wO0kuZE0uYnVmZmVyPSIiO2Rve3ZhciB6PXQoRSx3KTt2YXIgdj1GKHpbMF0s +elsxXSx6WzJdKTt3Kz16WzBdLmxlbmd0aDtpZighdil7dys9elsxXS5sZW5ndGh9 +fXdoaWxlKCF6WzJdKTtpZihELmxlbmd0aD4xKXt0aHJvdyJJbGxlZ2FsIn1yZXR1 +cm57cjpDLGtleXdvcmRfY291bnQ6dSx2YWx1ZTpjfX1jYXRjaChIKXtpZihIPT0i +SWxsZWdhbCIpe3JldHVybntyOjAsa2V5d29yZF9jb3VudDowLHZhbHVlOm8oRSl9 +fWVsc2V7dGhyb3cgSH19fWZ1bmN0aW9uIGooKXtmb3IodmFyIHMgaW4gcSl7aWYo +IXEuaGFzT3duUHJvcGVydHkocykpe2NvbnRpbnVlfXZhciB0PXFbc107Zm9yKHZh +ciBjPTA7Yzx0Lm0ubGVuZ3RoO2MrKyl7dmFyIHU9dC5tW2NdO2lmKHUuYil7dS5i +Uj1lKHQsIl4iK3UuYil9aWYodS5lKXt1LmVSPWUodCwiXiIrdS5lKX1pZih1Lmkp +e3UuaVI9ZSh0LCJeKD86Iit1LmkrIikiKX10LmRNLmlSPWUodCwiXig/OiIrdC5k +TS5pKyIpIik7aWYodS5yPT11bmRlZmluZWQpe3Uucj0xfWlmKCF1LmRpc3BsYXlD +bGFzc05hbWUpe3UuZGlzcGxheUNsYXNzTmFtZT11LmNOfX19fWZ1bmN0aW9uIGco +KXtmdW5jdGlvbiB0KHcpe2lmKCF3LmtleXdvcmRHcm91cHMpe2Zvcih2YXIgdiBp +biB3Lmspe2lmKCF3LmsuaGFzT3duUHJvcGVydHkodikpe2NvbnRpbnVlfWlmKHcu +a1t2XSBpbnN0YW5jZW9mIE9iamVjdCl7dy5rZXl3b3JkR3JvdXBzPXcua31lbHNl +e3cua2V5d29yZEdyb3Vwcz17a2V5d29yZDp3Lmt9fWJyZWFrfX19Zm9yKHZhciBz +IGluIHEpe2lmKCFxLmhhc093blByb3BlcnR5KHMpKXtjb250aW51ZX12YXIgdT1x +W3NdO3QodS5kTSk7Zm9yKHZhciBjPTA7Yzx1Lm0ubGVuZ3RoO2MrKyl7dCh1Lm1b +Y10pfX19ZnVuY3Rpb24gZigpe2lmKGYuY2FsbGVkKXtyZXR1cm59Zi5jYWxsZWQ9 +dHJ1ZTtqKCk7ZygpO2E9cX1mdW5jdGlvbiByKHksQyl7ZigpO3RyeXt2YXIgRj1p +KHkpO3ZhciB2PWIoeSl9Y2F0Y2goeil7aWYoej09Ik5vIGhpZ2hsaWdodCIpe3Jl +dHVybn19aWYodil7dmFyIEI9aCh2LEYpLnZhbHVlfWVsc2V7dmFyIEQ9MDtmb3Io +dmFyIEUgaW4gYSl7aWYoIWEuaGFzT3duUHJvcGVydHkoRSkpe2NvbnRpbnVlfXZh +ciB0PWgoRSxGKTt2YXIgYz10LmtleXdvcmRfY291bnQrdC5yO2lmKGM+RCl7RD1j +O3ZhciBCPXQudmFsdWU7dj1FfX19aWYoQil7dmFyIHg9eS5jbGFzc05hbWU7aWYo +IXgubWF0Y2godikpe3grPSIgIit2fXZhciBzPWQoeSk7aWYocy5sZW5ndGgpe3Zh +ciB1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInByZSIpO3UuaW5uZXJIVE1MPUI7 +Qj1uKHMsZCh1KSxGKX1pZihDKXtCPUIucmVwbGFjZSgvXigoPFtePl0rPnxcdCkr +KS9nbSxmdW5jdGlvbihHLEosSSxIKXtyZXR1cm4gSi5yZXBsYWNlKC9cdC9nLEMp +fSl9dmFyIEE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7QS5pbm5lckhU +TUw9JzxwcmU+PGNvZGUgY2xhc3M9IicreCsnIj4nK0IrIjwvY29kZT48L3ByZT4i +O3ZhciB3PXkucGFyZW50Tm9kZS5wYXJlbnROb2RlO3cucmVwbGFjZUNoaWxkKEEu +Zmlyc3RDaGlsZCx5LnBhcmVudE5vZGUpfX1mdW5jdGlvbiBtKCl7aWYobS5jYWxs +ZWQpe3JldHVybn1tLmNhbGxlZD10cnVlO2YoKTtpZihhcmd1bWVudHMubGVuZ3Ro +KXtmb3IodmFyIGM9MDtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKXtpZihxW2FyZ3Vt +ZW50c1tjXV0pe2FbYXJndW1lbnRzW2NdXT1xW2FyZ3VtZW50c1tjXV19fX12YXIg +dD1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicHJlIik7Zm9yKHZhciBj +PTA7Yzx0Lmxlbmd0aDtjKyspe3ZhciBzPWsodFtjXSk7aWYocyl7cihzLGhsanMu +dGFiUmVwbGFjZSl9fX1mdW5jdGlvbiBwKCl7dmFyIGM9YXJndW1lbnRzO3ZhciBz +PWZ1bmN0aW9uKCl7bS5hcHBseShudWxsLGMpfTtpZih3aW5kb3cuYWRkRXZlbnRM +aXN0ZW5lcil7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2Fk +ZWQiLHMsZmFsc2UpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixzLGZh +bHNlKX1lbHNle2lmKHdpbmRvdy5hdHRhY2hFdmVudCl7d2luZG93LmF0dGFjaEV2 +ZW50KCJvbmxvYWQiLHMpfWVsc2V7d2luZG93Lm9ubG9hZD1zfX19dGhpcy5MQU5H +VUFHRVM9cTt0aGlzLmluaXRIaWdobGlnaHRpbmdPbkxvYWQ9cDt0aGlzLmhpZ2hs +aWdodEJsb2NrPXI7dGhpcy5pbml0SGlnaGxpZ2h0aW5nPW07dGhpcy5JUj0iW2Et +ekEtWl1bYS16QS1aMC05X10qIjt0aGlzLlVJUj0iW2EtekEtWl9dW2EtekEtWjAt +OV9dKiI7dGhpcy5OUj0iXFxiXFxkKyhcXC5cXGQrKT8iO3RoaXMuQ05SPSJcXGIo +MHhbQS1aYS16MC05XSt8XFxkKyhcXC5cXGQrKT8pIjt0aGlzLlJTUj0iIXwhPXwh +PT18JXwlPXwmfCYmfCY9fFxcKnxcXCo9fFxcK3xcXCs9fCx8XFwufC18LT18L3wv +PXw6fDt8PHw8PHw8PD18PD18PXw9PXw9PT18Pnw+PXw+Pnw+Pj18Pj4+fD4+Pj18 +XFw/fFxcW3xcXHt8XFwofFxcXnxcXF49fFxcfHxcXHw9fFxcfFxcfHx+Ijt0aGlz +LkFTTT17Y046InN0cmluZyIsYjoiJyIsZToiJyIsaToiXFxuIixjOlsiZXNjYXBl +Il0scjowfTt0aGlzLlFTTT17Y046InN0cmluZyIsYjonIicsZTonIicsaToiXFxu +IixjOlsiZXNjYXBlIl0scjowfTt0aGlzLkJFPXtjTjoiZXNjYXBlIixiOiJcXFxc +LiIsZToiXiIsbk06dHJ1ZSxyOjB9O3RoaXMuQ0xDTT17Y046ImNvbW1lbnQiLGI6 +Ii8vIixlOiIkIixyOjB9O3RoaXMuQ0JMQ0xNPXtjTjoiY29tbWVudCIsYjoiL1xc +KiIsZToiXFwqLyJ9O3RoaXMuSENNPXtjTjoiY29tbWVudCIsYjoiIyIsZToiJCJ9 +O3RoaXMuQ05NPXtjTjoibnVtYmVyIixiOnRoaXMuQ05SLGU6Il4iLHI6MH19KCk7 +dmFyIGluaXRIaWdobGlnaHRpbmdPbkxvYWQ9aGxqcy5pbml0SGlnaGxpZ2h0aW5n +T25Mb2FkO2hsanMuTEFOR1VBR0VTLmJhc2g9ZnVuY3Rpb24oKXt2YXIgYT17InRy +dWUiOjEsImZhbHNlIjoxfTtyZXR1cm57ZE06e2w6W2hsanMuSVJdLGM6WyJzdHJp +bmciLCJzaGViYW5nIiwiY29tbWVudCIsIm51bWJlciIsInRlc3RfY29uZGl0aW9u +Iiwic3RyaW5nIiwidmFyaWFibGUiXSxrOntrZXl3b3JkOnsiaWYiOjEsdGhlbjox +LCJlbHNlIjoxLGZpOjEsImZvciI6MSwiYnJlYWsiOjEsImNvbnRpbnVlIjoxLCJ3 +aGlsZSI6MSwiaW4iOjEsImRvIjoxLGRvbmU6MSxlY2hvOjEsZXhpdDoxLCJyZXR1 +cm4iOjEsc2V0OjEsZGVjbGFyZToxfSxsaXRlcmFsOmF9fSxjSTpmYWxzZSxtOlt7 +Y046InNoZWJhbmciLGI6IigjIVxcL2JpblxcL2Jhc2gpfCgjIVxcL2JpblxcL3No +KSIsZToiXiIscjoxMH0saGxqcy5IQ00se2NOOiJ0ZXN0X2NvbmRpdGlvbiIsYjoi +XFxbICIsZToiIFxcXSIsYzpbInN0cmluZyIsInZhcmlhYmxlIiwibnVtYmVyIl0s +bDpbaGxqcy5JUl0sazp7bGl0ZXJhbDphfSxyOjB9LHtjTjoidGVzdF9jb25kaXRp +b24iLGI6IlxcW1xcWyAiLGU6IiBcXF1cXF0iLGM6WyJzdHJpbmciLCJ2YXJpYWJs +ZSIsIm51bWJlciJdLGw6W2hsanMuSVJdLGs6e2xpdGVyYWw6YX19LHtjTjoidmFy +aWFibGUiLGI6IlxcJChbYS16QS1aMC05X10rKVxcYiIsZToiXiJ9LHtjTjoidmFy +aWFibGUiLGI6IlxcJFxceygoW159XSl8KFxcXFx9KSkrXFx9IixlOiJeIixjOlsi +bnVtYmVyIl19LHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxpOiJcXG4iLGM6WyJl +c2NhcGUiLCJ2YXJpYWJsZSJdLHI6MH0se2NOOiJzdHJpbmciLGI6JyInLGU6JyIn +LGk6IlxcbiIsYzpbImVzY2FwZSIsInZhcmlhYmxlIl0scjowfSxobGpzLkJFLGhs +anMuQ05NLHtjTjoiY29tbWVudCIsYjoiXFwvXFwvIixlOiIkIixpOiIuIn1dfX0o +KTtobGpzLkxBTkdVQUdFUy5jcz17ZE06e2w6W2hsanMuVUlSXSxjOlsiY29tbWVu +dCIsInN0cmluZyIsIm51bWJlciJdLGs6eyJhYnN0cmFjdCI6MSxhczoxLGJhc2U6 +MSxib29sOjEsImJyZWFrIjoxLCJieXRlIjoxLCJjYXNlIjoxLCJjYXRjaCI6MSwi +Y2hhciI6MSxjaGVja2VkOjEsImNsYXNzIjoxLCJjb25zdCI6MSwiY29udGludWUi +OjEsZGVjaW1hbDoxLCJkZWZhdWx0IjoxLGRlbGVnYXRlOjEsImRvIjoxLCJkbyI6 +MSwiZG91YmxlIjoxLCJlbHNlIjoxLCJlbnVtIjoxLGV2ZW50OjEsZXhwbGljaXQ6 +MSxleHRlcm46MSwiZmFsc2UiOjEsImZpbmFsbHkiOjEsZml4ZWQ6MSwiZmxvYXQi +OjEsImZvciI6MSxmb3JlYWNoOjEsImdvdG8iOjEsImlmIjoxLGltcGxpY2l0OjEs +ImluIjoxLCJpbnQiOjEsImludGVyZmFjZSI6MSxpbnRlcm5hbDoxLGlzOjEsbG9j +azoxLCJsb25nIjoxLG5hbWVzcGFjZToxLCJuZXciOjEsIm51bGwiOjEsb2JqZWN0 +OjEsb3BlcmF0b3I6MSxvdXQ6MSxvdmVycmlkZToxLHBhcmFtczoxLCJwcml2YXRl +IjoxLCJwcm90ZWN0ZWQiOjEsInB1YmxpYyI6MSxyZWFkb25seToxLHJlZjoxLCJy +ZXR1cm4iOjEsc2J5dGU6MSxzZWFsZWQ6MSwic2hvcnQiOjEsc2l6ZW9mOjEsc3Rh +Y2thbGxvYzoxLCJzdGF0aWMiOjEsc3RyaW5nOjEsc3RydWN0OjEsInN3aXRjaCI6 +MSwidGhpcyI6MSwidGhyb3ciOjEsInRydWUiOjEsInRyeSI6MSwidHlwZW9mIjox +LHVpbnQ6MSx1bG9uZzoxLHVuY2hlY2tlZDoxLHVuc2FmZToxLHVzaG9ydDoxLHVz +aW5nOjEsdmlydHVhbDoxLCJ2b2xhdGlsZSI6MSwidm9pZCI6MSwid2hpbGUiOjEs +YXNjZW5kaW5nOjEsZGVzY2VuZGluZzoxLGZyb206MSxnZXQ6MSxncm91cDoxLGlu +dG86MSxqb2luOjEsbGV0OjEsb3JkZXJieToxLHBhcnRpYWw6MSxzZWxlY3Q6MSxz +ZXQ6MSx2YWx1ZToxLCJ2YXIiOjEsd2hlcmU6MSx5aWVsZDoxfX0sbTpbe2NOOiJj +b21tZW50IixiOiIvLy8iLGU6IiQiLHJCOnRydWUsYzpbInhtbERvY1RhZyJdfSx7 +Y046InhtbERvY1RhZyIsYjoiLy8vfDwhLS18LS0+IixlOiJeIn0se2NOOiJ4bWxE +b2NUYWciLGI6IjwvPyIsZToiPiJ9LHtjTjoic3RyaW5nIixiOidAIicsZTonIics +YzpbInF1b3RlUXVvdGUiXX0se2NOOiJxdW90ZVF1b3RlIixiOiciIicsZToiXiJ9 +LGhsanMuQ0xDTSxobGpzLkNCTENMTSxobGpzLkFTTSxobGpzLlFTTSxobGpzLkJF +LGhsanMuQ05NXX07aGxqcy5MQU5HVUFHRVMucnVieT1mdW5jdGlvbigpe3ZhciBh +PSJbYS16QS1aX11bYS16QS1aMC05X10qKFxcIXxcXD8pPyI7dmFyIGM9IlthLXpB +LVpfXVxcdypbIT89XT98Wy0rfl1cXEB8PDx8Pj58PX58PT09P3w8PT58Wzw+XT0/ +fFxcKlxcKnxbLS8rJV4mKn5gfF18XFxbXFxdPT8iO3ZhciBiPVsiY29tbWVudCIs +InN0cmluZyIsImNoYXIiLCJjbGFzcyIsImZ1bmN0aW9uIiwiY29uc3RhbnQiLCJz +eW1ib2wiLCJudW1iZXIiLCJ2YXJpYWJsZSIsImlkZW50aWZpZXIiLCJyZWdleHBf +Y29udGFpbmVyIl07dmFyIGQ9e2tleXdvcmQ6e2FuZDoxLCJmYWxzZSI6MSx0aGVu +OjEsZGVmaW5lZDoxLG1vZHVsZToxLCJpbiI6MSwicmV0dXJuIjoxLHJlZG86MSwi +aWYiOjEsQkVHSU46MSxyZXRyeToxLGVuZDoxLCJmb3IiOjEsInRydWUiOjEsc2Vs +ZjoxLHdoZW46MSxuZXh0OjEsdW50aWw6MSwiZG8iOjEsYmVnaW46MSx1bmxlc3M6 +MSxFTkQ6MSxyZXNjdWU6MSxuaWw6MSwiZWxzZSI6MSwiYnJlYWsiOjEsdW5kZWY6 +MSxub3Q6MSwic3VwZXIiOjEsImNsYXNzIjoxLCJjYXNlIjoxLHJlcXVpcmU6MSx5 +aWVsZDoxLGFsaWFzOjEsIndoaWxlIjoxLGVuc3VyZToxLGVsc2lmOjEsb3I6MSxk +ZWY6MX0sa2V5bWV0aG9kczp7X19pZF9fOjEsX19zZW5kX186MSxhYm9ydDoxLGFi +czoxLCJhbGw/IjoxLGFsbG9jYXRlOjEsYW5jZXN0b3JzOjEsImFueT8iOjEsYXJp +dHk6MSxhc3NvYzoxLGF0OjEsYXRfZXhpdDoxLGF1dG9sb2FkOjEsImF1dG9sb2Fk +PyI6MSwiYmV0d2Vlbj8iOjEsYmluZGluZzoxLGJpbm1vZGU6MSwiYmxvY2tfZ2l2 +ZW4/IjoxLGNhbGw6MSxjYWxsY2M6MSxjYWxsZXI6MSxjYXBpdGFsaXplOjEsImNh +cGl0YWxpemUhIjoxLGNhc2VjbXA6MSwiY2F0Y2giOjEsY2VpbDoxLGNlbnRlcjox +LGNob21wOjEsImNob21wISI6MSxjaG9wOjEsImNob3AhIjoxLGNocjoxLCJjbGFz +cyI6MSxjbGFzc19ldmFsOjEsImNsYXNzX3ZhcmlhYmxlX2RlZmluZWQ/IjoxLGNs +YXNzX3ZhcmlhYmxlczoxLGNsZWFyOjEsY2xvbmU6MSxjbG9zZToxLGNsb3NlX3Jl +YWQ6MSxjbG9zZV93cml0ZToxLCJjbG9zZWQ/IjoxLGNvZXJjZToxLGNvbGxlY3Q6 +MSwiY29sbGVjdCEiOjEsY29tcGFjdDoxLCJjb21wYWN0ISI6MSxjb25jYXQ6MSwi +Y29uc3RfZGVmaW5lZD8iOjEsY29uc3RfZ2V0OjEsY29uc3RfbWlzc2luZzoxLGNv +bnN0X3NldDoxLGNvbnN0YW50czoxLGNvdW50OjEsY3J5cHQ6MSwiZGVmYXVsdCI6 +MSxkZWZhdWx0X3Byb2M6MSwiZGVsZXRlIjoxLCJkZWxldGUhIjoxLGRlbGV0ZV9h +dDoxLGRlbGV0ZV9pZjoxLGRldGVjdDoxLGRpc3BsYXk6MSxkaXY6MSxkaXZtb2Q6 +MSxkb3duY2FzZToxLCJkb3duY2FzZSEiOjEsZG93bnRvOjEsZHVtcDoxLGR1cDox +LGVhY2g6MSxlYWNoX2J5dGU6MSxlYWNoX2luZGV4OjEsZWFjaF9rZXk6MSxlYWNo +X2xpbmU6MSxlYWNoX3BhaXI6MSxlYWNoX3ZhbHVlOjEsZWFjaF93aXRoX2luZGV4 +OjEsImVtcHR5PyI6MSxlbnRyaWVzOjEsZW9mOjEsImVvZj8iOjEsImVxbD8iOjEs +ImVxdWFsPyI6MSwiZXZhbCI6MSxleGVjOjEsZXhpdDoxLCJleGl0ISI6MSxleHRl +bmQ6MSxmYWlsOjEsZmNudGw6MSxmZXRjaDoxLGZpbGVubzoxLGZpbGw6MSxmaW5k +OjEsZmluZF9hbGw6MSxmaXJzdDoxLGZsYXR0ZW46MSwiZmxhdHRlbiEiOjEsZmxv +b3I6MSxmbHVzaDoxLGZvcl9mZDoxLGZvcmVhY2g6MSxmb3JrOjEsZm9ybWF0OjEs +ZnJlZXplOjEsImZyb3plbj8iOjEsZnN5bmM6MSxnZXRjOjEsZ2V0czoxLGdsb2Jh +bF92YXJpYWJsZXM6MSxncmVwOjEsZ3N1YjoxLCJnc3ViISI6MSwiaGFzX2tleT8i +OjEsImhhc192YWx1ZT8iOjEsaGFzaDoxLGhleDoxLGlkOjEsaW5jbHVkZToxLCJp +bmNsdWRlPyI6MSxpbmNsdWRlZF9tb2R1bGVzOjEsaW5kZXg6MSxpbmRleGVzOjEs +aW5kaWNlczoxLGluZHVjZWRfZnJvbToxLGluamVjdDoxLGluc2VydDoxLGluc3Bl +Y3Q6MSxpbnN0YW5jZV9ldmFsOjEsaW5zdGFuY2VfbWV0aG9kOjEsaW5zdGFuY2Vf +bWV0aG9kczoxLCJpbnN0YW5jZV9vZj8iOjEsImluc3RhbmNlX3ZhcmlhYmxlX2Rl +ZmluZWQ/IjoxLGluc3RhbmNlX3ZhcmlhYmxlX2dldDoxLGluc3RhbmNlX3Zhcmlh +YmxlX3NldDoxLGluc3RhbmNlX3ZhcmlhYmxlczoxLCJpbnRlZ2VyPyI6MSxpbnRl +cm46MSxpbnZlcnQ6MSxpb2N0bDoxLCJpc19hPyI6MSxpc2F0dHk6MSwiaXRlcmF0 +b3I/IjoxLGpvaW46MSwia2V5PyI6MSxrZXlzOjEsImtpbmRfb2Y/IjoxLGxhbWJk +YToxLGxhc3Q6MSxsZW5ndGg6MSxsaW5lbm86MSxsanVzdDoxLGxvYWQ6MSxsb2Nh +bF92YXJpYWJsZXM6MSxsb29wOjEsbHN0cmlwOjEsImxzdHJpcCEiOjEsbWFwOjEs +Im1hcCEiOjEsbWF0Y2g6MSxtYXg6MSwibWVtYmVyPyI6MSxtZXJnZToxLCJtZXJn +ZSEiOjEsbWV0aG9kOjEsIm1ldGhvZF9kZWZpbmVkPyI6MSxtZXRob2RfbWlzc2lu +ZzoxLG1ldGhvZHM6MSxtaW46MSxtb2R1bGVfZXZhbDoxLG1vZHVsbzoxLG5hbWU6 +MSxuZXN0aW5nOjEsIm5ldyI6MSxuZXh0OjEsIm5leHQhIjoxLCJuaWw/IjoxLG5p +dGVtczoxLCJub256ZXJvPyI6MSxvYmplY3RfaWQ6MSxvY3Q6MSxvcGVuOjEscGFj +azoxLHBhcnRpdGlvbjoxLHBpZDoxLHBpcGU6MSxwb3A6MSxwb3BlbjoxLHBvczox +LHByZWM6MSxwcmVjX2Y6MSxwcmVjX2k6MSxwcmludDoxLHByaW50ZjoxLHByaXZh +dGVfY2xhc3NfbWV0aG9kOjEscHJpdmF0ZV9pbnN0YW5jZV9tZXRob2RzOjEsInBy +aXZhdGVfbWV0aG9kX2RlZmluZWQ/IjoxLHByaXZhdGVfbWV0aG9kczoxLHByb2M6 +MSxwcm90ZWN0ZWRfaW5zdGFuY2VfbWV0aG9kczoxLCJwcm90ZWN0ZWRfbWV0aG9k +X2RlZmluZWQ/IjoxLHByb3RlY3RlZF9tZXRob2RzOjEscHVibGljX2NsYXNzX21l +dGhvZDoxLHB1YmxpY19pbnN0YW5jZV9tZXRob2RzOjEsInB1YmxpY19tZXRob2Rf +ZGVmaW5lZD8iOjEscHVibGljX21ldGhvZHM6MSxwdXNoOjEscHV0YzoxLHB1dHM6 +MSxxdW86MSxyYWlzZToxLHJhbmQ6MSxyYXNzb2M6MSxyZWFkOjEscmVhZF9ub25i +bG9jazoxLHJlYWRjaGFyOjEscmVhZGxpbmU6MSxyZWFkbGluZXM6MSxyZWFkcGFy +dGlhbDoxLHJlaGFzaDoxLHJlamVjdDoxLCJyZWplY3QhIjoxLHJlbWFpbmRlcjox +LHJlb3BlbjoxLHJlcGxhY2U6MSxyZXF1aXJlOjEsInJlc3BvbmRfdG8/IjoxLHJl +dmVyc2U6MSwicmV2ZXJzZSEiOjEscmV2ZXJzZV9lYWNoOjEscmV3aW5kOjEscmlu +ZGV4OjEscmp1c3Q6MSxyb3VuZDoxLHJzdHJpcDoxLCJyc3RyaXAhIjoxLHNjYW46 +MSxzZWVrOjEsc2VsZWN0OjEsc2VuZDoxLHNldF90cmFjZV9mdW5jOjEsc2hpZnQ6 +MSxzaW5nbGV0b25fbWV0aG9kX2FkZGVkOjEsc2luZ2xldG9uX21ldGhvZHM6MSxz +aXplOjEsc2xlZXA6MSxzbGljZToxLCJzbGljZSEiOjEsc29ydDoxLCJzb3J0ISI6 +MSxzb3J0X2J5OjEsc3BsaXQ6MSxzcHJpbnRmOjEsc3F1ZWV6ZToxLCJzcXVlZXpl +ISI6MSxzcmFuZDoxLHN0YXQ6MSxzdGVwOjEsc3RvcmU6MSxzdHJpcDoxLCJzdHJp +cCEiOjEsc3ViOjEsInN1YiEiOjEsc3VjYzoxLCJzdWNjISI6MSxzdW06MSxzdXBl +cmNsYXNzOjEsc3dhcGNhc2U6MSwic3dhcGNhc2UhIjoxLHN5bmM6MSxzeXNjYWxs +OjEsc3lzb3BlbjoxLHN5c3JlYWQ6MSxzeXNzZWVrOjEsc3lzdGVtOjEsc3lzd3Jp +dGU6MSx0YWludDoxLCJ0YWludGVkPyI6MSx0ZWxsOjEsdGVzdDoxLCJ0aHJvdyI6 +MSx0aW1lczoxLHRvX2E6MSx0b19hcnk6MSx0b19mOjEsdG9faGFzaDoxLHRvX2k6 +MSx0b19pbnQ6MSx0b19pbzoxLHRvX3Byb2M6MSx0b19zOjEsdG9fc3RyOjEsdG9f +c3ltOjEsdHI6MSwidHIhIjoxLHRyX3M6MSwidHJfcyEiOjEsdHJhY2VfdmFyOjEs +dHJhbnNwb3NlOjEsdHJhcDoxLHRydW5jYXRlOjEsInR0eT8iOjEsdHlwZToxLHVu +Z2V0YzoxLHVuaXE6MSwidW5pcSEiOjEsdW5wYWNrOjEsdW5zaGlmdDoxLHVudGFp +bnQ6MSx1bnRyYWNlX3ZhcjoxLHVwY2FzZToxLCJ1cGNhc2UhIjoxLHVwZGF0ZTox +LHVwdG86MSwidmFsdWU/IjoxLHZhbHVlczoxLHZhbHVlc19hdDoxLHdhcm46MSx3 +cml0ZToxLHdyaXRlX25vbmJsb2NrOjEsInplcm8/IjoxLHppcDoxfX07cmV0dXJu +e2RNOntsOlthXSxjOmIsazpkfSxtOlt7Y046ImNvbW1lbnQiLGI6IiMiLGU6IiQi +LGM6WyJ5YXJkb2N0YWciXX0se2NOOiJ5YXJkb2N0YWciLGI6IkBbQS1aYS16XSsi +LGU6Il4ifSx7Y046ImNvbW1lbnQiLGI6Il5cXD1iZWdpbiIsZToiXlxcPWVuZCIs +YzpbInlhcmRvY3RhZyJdLHI6MTB9LHtjTjoiY29tbWVudCIsYjoiXl9fRU5EX18i +LGU6IlxcbiQifSx7Y046InBhcmFtcyIsYjoiXFwoIixlOiJcXCkiLGw6W2FdLGs6 +ZCxjOmJ9LHtjTjoiZnVuY3Rpb24iLGI6IlxcYmRlZlxccysiLGU6IiB8JHw7Iixs +OlthXSxrOmQsYzpbImZ0aXRsZSIsInBhcmFtcyIsImNvbW1lbnQiXX0se2NOOiJm +dGl0bGUiLGRpc3BsYXlDbGFzc05hbWU6InRpdGxlIixiOmMsZToiXiIsbDpbYV0s +azpkfSx7Y046ImNsYXNzIixiOiJcXGIoY2xhc3N8bW9kdWxlKVxcYiIsZToiJHw7 +IixsOltobGpzLlVJUl0sazpkLGM6WyJ0aXRsZSIsImluaGVyaXRhbmNlIiwiY29t +bWVudCJdLGs6eyJjbGFzcyI6MSxtb2R1bGU6MX19LHtjTjoidGl0bGUiLGI6IltB +LVphLXpfXVxcdyooOjpcXHcrKSooXFw/fFxcISk/IixlOiJeIixyOjB9LHtjTjoi +aW5oZXJpdGFuY2UiLGI6IjxcXHMqIixlOiJeIixjOlsicGFyZW50Il19LHtjTjoi +cGFyZW50IixiOiIoIitobGpzLklSKyI6Oik/IitobGpzLklSLGU6Il4ifSx7Y046 +Im51bWJlciIsYjoiKFxcYjBbMC03X10rKXwoXFxiMHhbMC05YS1mQS1GX10rKXwo +XFxiWzEtOV1bMC05X10qKFxcLlswLTlfXSspPyl8WzBfXVxcYiIsZToiXiIscjow +fSx7Y046Im51bWJlciIsYjoiXFw/XFx3IixlOiJeIn0se2NOOiJzdHJpbmciLGI6 +IiciLGU6IiciLGM6WyJlc2NhcGUiLCJzdWJzdCJdLHI6MH0se2NOOiJzdHJpbmci +LGI6JyInLGU6JyInLGM6WyJlc2NhcGUiLCJzdWJzdCJdLHI6MH0se2NOOiJzdHJp +bmciLGI6IiVbcXddP1xcKCIsZToiXFwpIixjOlsiZXNjYXBlIiwic3Vic3QiXSxy +OjEwfSx7Y046InN0cmluZyIsYjoiJVtxd10/XFxbIixlOiJcXF0iLGM6WyJlc2Nh +cGUiLCJzdWJzdCJdLHI6MTB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT97IixlOiJ9 +IixjOlsiZXNjYXBlIiwic3Vic3QiXSxyOjEwfSx7Y046InN0cmluZyIsYjoiJVtx +d10/PCIsZToiPiIsYzpbImVzY2FwZSIsInN1YnN0Il0scjoxMH0se2NOOiJzdHJp +bmciLGI6IiVbcXddPy8iLGU6Ii8iLGM6WyJlc2NhcGUiLCJzdWJzdCJdLHI6MTB9 +LHtjTjoic3RyaW5nIixiOiIlW3F3XT8lIixlOiIlIixjOlsiZXNjYXBlIiwic3Vi +c3QiXSxyOjEwfSx7Y046InN0cmluZyIsYjoiJVtxd10/LSIsZToiLSIsYzpbImVz +Y2FwZSIsInN1YnN0Il0scjoxMH0se2NOOiJzdHJpbmciLGI6IiVbcXddP1xcfCIs +ZToiXFx8IixjOlsiZXNjYXBlIiwic3Vic3QiXSxyOjEwfSx7Y046ImNvbnN0YW50 +IixiOiIoOjopPyhbQS1aXVxcdyooOjopPykrIixlOiJeIixyOjB9LHtjTjoic3lt +Ym9sIixiOiI6IixlOiJeIixjOlsic3RyaW5nIiwiaWRlbnRpZmllciJdfSx7Y046 +ImlkZW50aWZpZXIiLGI6YSxlOiJeIixsOlthXSxrOmQscjowfSxobGpzLkJFLHtj +Tjoic3Vic3QiLGI6IiNcXHsiLGU6In0iLGw6W2FdLGs6ZCxjOmJ9LHtjTjoicmVn +ZXhwX2NvbnRhaW5lciIsYjoiKCIraGxqcy5SU1IrIilcXHMqIixlOiJeIixuTTp0 +cnVlLGM6WyJjb21tZW50IiwicmVnZXhwIl0scjowfSx7Y046InJlZ2V4cCIsYjoi +LyIsZToiL1thLXpdKiIsaToiXFxuIixjOlsiZXNjYXBlIl19LHtjTjoidmFyaWFi +bGUiLGI6IihcXCRcXFcpfCgoXFwkfFxcQFxcQD8pKFxcdyspKSIsZToiXiJ9XX19 +KCk7aGxqcy5YTUxfQ09NTUVOVD17Y046ImNvbW1lbnQiLGI6IjwhLS0iLGU6Ii0t +PiJ9O2hsanMuWE1MX0FUVFI9e2NOOiJhdHRyaWJ1dGUiLGI6Ilxcc1tBLVphLXow +LTlcXC5fOi1dKz0iLGU6Il4iLGM6WyJ2YWx1ZSJdfTtobGpzLlhNTF9WQUxVRV9R +VU9UPXtjTjoidmFsdWUiLGI6JyInLGU6JyInfTtobGpzLlhNTF9WQUxVRV9BUE9T +PXtjTjoidmFsdWUiLGI6IiciLGU6IicifTtobGpzLkxBTkdVQUdFUy54bWw9e2RN +OntjOlsicGkiLCJjb21tZW50IiwiY2RhdGEiLCJ0YWciXX0sY0k6dHJ1ZSxtOlt7 +Y046InBpIixiOiI8XFw/IixlOiJcXD8+IixyOjEwfSxobGpzLlhNTF9DT01NRU5U +LHtjTjoiY2RhdGEiLGI6IjxcXCFcXFtDREFUQVxcWyIsZToiXFxdXFxdPiJ9LHtj +TjoidGFnIixiOiI8Lz8iLGU6Ij4iLGM6WyJ0aXRsZSIsInRhZ19pbnRlcm5hbCJd +LHI6MS41fSx7Y046InRpdGxlIixiOiJbQS1aYS16MC05XFwuXzotXSsiLGU6Il4i +LHI6MH0se2NOOiJ0YWdfaW50ZXJuYWwiLGI6Il4iLGVXOnRydWUsbk06dHJ1ZSxj +OlsiYXR0cmlidXRlIl0scjowLGk6IltcXCtcXC5dIn0saGxqcy5YTUxfQVRUUixo +bGpzLlhNTF9WQUxVRV9RVU9ULGhsanMuWE1MX1ZBTFVFX0FQT1NdfTtobGpzLkhU +TUxfVEFHUz17Y29kZToxLGtiZDoxLGZvbnQ6MSxub3NjcmlwdDoxLHN0eWxlOjEs +aW1nOjEsdGl0bGU6MSxtZW51OjEsdHQ6MSx0cjoxLHBhcmFtOjEsbGk6MSx0Zm9v +dDoxLHRoOjEsaW5wdXQ6MSx0ZDoxLGRsOjEsYmxvY2txdW90ZToxLGZpZWxkc2V0 +OjEsYmlnOjEsZGQ6MSxhYmJyOjEsb3B0Z3JvdXA6MSxkdDoxLGJ1dHRvbjoxLGlz +aW5kZXg6MSxwOjEsc21hbGw6MSxkaXY6MSxkaXI6MSxlbToxLGZyYW1lOjEsbWV0 +YToxLHN1YjoxLGJkbzoxLGxhYmVsOjEsYWNyb255bToxLHN1cDoxLGJvZHk6MSx4 +bWw6MSxiYXNlZm9udDoxLGJhc2U6MSxicjoxLGFkZHJlc3M6MSxzdHJvbmc6MSxs +ZWdlbmQ6MSxvbDoxLHNjcmlwdDoxLGNhcHRpb246MSxzOjEsY29sOjEsaDI6MSxo +MzoxLGgxOjEsaDY6MSxoNDoxLGg1OjEsdGFibGU6MSxzZWxlY3Q6MSxub2ZyYW1l +czoxLHNwYW46MSxhcmVhOjEsZGZuOjEsc3RyaWtlOjEsY2l0ZToxLHRoZWFkOjEs +aGVhZDoxLG9wdGlvbjoxLGZvcm06MSxocjoxLCJ2YXIiOjEsbGluazoxLGI6MSxj +b2xncm91cDoxLHVsOjEsYXBwbGV0OjEsZGVsOjEsaWZyYW1lOjEscHJlOjEsZnJh +bWVzZXQ6MSxpbnM6MSx0Ym9keToxLGh0bWw6MSxzYW1wOjEsbWFwOjEsb2JqZWN0 +OjEsYToxLHhtbG5zOjEsY2VudGVyOjEsdGV4dGFyZWE6MSxpOjEscToxLHU6MX07 +aGxqcy5IVE1MX0RPQ1RZUEU9e2NOOiJkb2N0eXBlIixiOiI8IURPQ1RZUEUiLGU6 +Ij4iLHI6MTB9O2hsanMuSFRNTF9BVFRSPXtjTjoiYXR0cmlidXRlIixiOiJcXHNb +YS16QS1aXFw6Xy1dKz0iLGU6Il4iLGM6WyJ2YWx1ZSJdfTtobGpzLkhUTUxfU0hP +UlRfQVRUUj17Y046ImF0dHJpYnV0ZSIsYjoiIFthLXpBLVpdKyIsZToiXiJ9O2hs +anMuSFRNTF9WQUxVRT17Y046InZhbHVlIixiOiJbYS16QS1aMC05XSsiLGU6Il4i +fTtobGpzLkxBTkdVQUdFUy5odG1sPXtkTTp7YzpbInRhZyIsImNvbW1lbnQiLCJk +b2N0eXBlIiwidmJzY3JpcHQiXX0sY0k6dHJ1ZSxtOltobGpzLlhNTF9DT01NRU5U +LGhsanMuSFRNTF9ET0NUWVBFLHtjTjoidGFnIixsOltobGpzLklSXSxrOmhsanMu +SFRNTF9UQUdTLGI6IjxzdHlsZSIsZToiPiIsYzpbImF0dHJpYnV0ZSJdLGk6Iltc +XCtcXC5dIixzdGFydHM6ImNzcyJ9LHtjTjoidGFnIixsOltobGpzLklSXSxrOmhs +anMuSFRNTF9UQUdTLGI6IjxzY3JpcHQiLGU6Ij4iLGM6WyJhdHRyaWJ1dGUiXSxp +OiJbXFwrXFwuXSIsc3RhcnRzOiJqYXZhc2NyaXB0In0se2NOOiJ0YWciLGw6W2hs +anMuSVJdLGs6aGxqcy5IVE1MX1RBR1MsYjoiPFtBLVphLXovXSIsZToiPiIsYzpb +ImF0dHJpYnV0ZSJdLGk6IltcXCtcXC5dIn0se2NOOiJjc3MiLGU6Ijwvc3R5bGU+ +IixyRTp0cnVlLHN1Ykxhbmd1YWdlOiJjc3MifSx7Y046ImphdmFzY3JpcHQiLGU6 +IjxcL3NjcmlwdD4iLHJFOnRydWUsc3ViTGFuZ3VhZ2U6ImphdmFzY3JpcHQifSxo +bGpzLkhUTUxfQVRUUixobGpzLkhUTUxfU0hPUlRfQVRUUixobGpzLlhNTF9WQUxV +RV9RVU9ULGhsanMuWE1MX1ZBTFVFX0FQT1MsaGxqcy5IVE1MX1ZBTFVFLHtjTjoi +dmJzY3JpcHQiLGI6IjwlIixlOiIlPiIsc3ViTGFuZ3VhZ2U6InZic2NyaXB0In1d +fTtobGpzLkxBTkdVQUdFUy5qYXZhc2NyaXB0PXtkTTp7bDpbaGxqcy5VSVJdLGM6 +WyJzdHJpbmciLCJjb21tZW50IiwibnVtYmVyIiwicmVnZXhwX2NvbnRhaW5lciIs +ImZ1bmN0aW9uIl0sazp7a2V5d29yZDp7ImluIjoxLCJpZiI6MSwiZm9yIjoxLCJ3 +aGlsZSI6MSwiZmluYWxseSI6MSwidmFyIjoxLCJuZXciOjEsImZ1bmN0aW9uIjox +LCJkbyI6MSwicmV0dXJuIjoxLCJ2b2lkIjoxLCJlbHNlIjoxLCJicmVhayI6MSwi +Y2F0Y2giOjEsImluc3RhbmNlb2YiOjEsIndpdGgiOjEsInRocm93IjoxLCJjYXNl +IjoxLCJkZWZhdWx0IjoxLCJ0cnkiOjEsInRoaXMiOjEsInN3aXRjaCI6MSwiY29u +dGludWUiOjEsInR5cGVvZiI6MSwiZGVsZXRlIjoxfSxsaXRlcmFsOnsidHJ1ZSI6 +MSwiZmFsc2UiOjEsIm51bGwiOjF9fX0sbTpbaGxqcy5DTENNLGhsanMuQ0JMQ0xN +LGhsanMuQ05NLGhsanMuQVNNLGhsanMuUVNNLGhsanMuQkUse2NOOiJyZWdleHBf +Y29udGFpbmVyIixiOiIoIitobGpzLlJTUisifGNhc2V8cmV0dXJufHRocm93KVxc +cyoiLGU6Il4iLG5NOnRydWUsbDpbaGxqcy5JUl0sazp7InJldHVybiI6MSwidGhy +b3ciOjEsImNhc2UiOjF9LGM6WyJjb21tZW50IiwicmVnZXhwIl0scjowfSx7Y046 +InJlZ2V4cCIsYjoiLy4qP1teXFxcXC9dL1tnaW1dKiIsZToiXiJ9LHtjTjoiZnVu +Y3Rpb24iLGI6IlxcYmZ1bmN0aW9uXFxiIixlOiJ7IixsOltobGpzLlVJUl0sazp7 +ImZ1bmN0aW9uIjoxfSxjOlsidGl0bGUiLCJwYXJhbXMiXX0se2NOOiJ0aXRsZSIs +YjoiW0EtWmEteiRfXVswLTlBLVphLXokX10qIixlOiJeIn0se2NOOiJwYXJhbXMi +LGI6IlxcKCIsZToiXFwpIixjOlsic3RyaW5nIiwiY29tbWVudCJdfV19O2hsanMu +TEFOR1VBR0VTLmx1YT1mdW5jdGlvbigpe3ZhciBhPSJcXFs9KlxcWyIsYj0iXFxd +PSpcXF0iO3JldHVybntkTTp7bDpbaGxqcy5VSVJdLGs6e2tleXdvcmQ6e2FuZDox +LCJicmVhayI6MSwiZG8iOjEsImVsc2UiOjEsZWxzZWlmOjEsZW5kOjEsImZhbHNl +IjoxLCJmb3IiOjEsImlmIjoxLCJpbiI6MSxsb2NhbDoxLG5pbDoxLG5vdDoxLG9y +OjEscmVwZWF0OjEsInJldHVybiI6MSx0aGVuOjEsInRydWUiOjEsdW50aWw6MSwi +d2hpbGUiOjF9LGJ1aWx0X2luOntfRzoxLF9WRVJTSU9OOjEsYXNzZXJ0OjEsY29s +bGVjdGdhcmJhZ2U6MSxkb2ZpbGU6MSxlcnJvcjoxLGdldGZlbnY6MSxnZXRtZXRh +dGFibGU6MSxpcGFpcnM6MSxsb2FkOjEsbG9hZGZpbGU6MSxsb2Fkc3RyaW5nOjEs +bW9kdWxlOjEsbmV4dDoxLHBhaXJzOjEscGNhbGw6MSxwcmludDoxLHJhd2VxdWFs +OjEscmF3Z2V0OjEscmF3c2V0OjEscmVxdWlyZToxLHNlbGVjdDoxLHNldGZlbnY6 +MSxzZXRtZXRhdGFibGU6MSx0b251bWJlcjoxLHRvc3RyaW5nOjEsdHlwZToxLHVu +cGFjazoxLHhwY2FsbDoxLGNvcm91dGluZToxLGRlYnVnOjEsaW86MSxtYXRoOjEs +b3M6MSwicGFja2FnZSI6MSxzdHJpbmc6MSx0YWJsZToxfX0sYzpbImNvbW1lbnQi +LCJmdW5jdGlvbiIsIm51bWJlciIsInN0cmluZyJdfSxtOlt7Y046ImNvbW1lbnQi +LGI6Ii0tKD8hIithKyIpIixlOiIkIn0se2NOOiJjb21tZW50IixiOiItLSIrYSxl +OmIsYzpbImxvbmdfYnJhY2tldHMiXSxyOjEwfSx7Y046ImxvbmdfYnJhY2tldHMi +LGI6YSxlOmIsYzpbImxvbmdfYnJhY2tldHMiXSxuTTp0cnVlfSx7Y046ImZ1bmN0 +aW9uIixiOiJcXGJmdW5jdGlvblxcYiIsZToiXFwpIixsOltobGpzLlVJUl0sazp7 +ImZ1bmN0aW9uIjoxfSxjOlsidGl0bGUiLCJwYXJhbXMiLCJjb21tZW50Il19LHtj +TjoidGl0bGUiLGI6IihbX2EtekEtWl1cXHcqXFwuKSooW19hLXpBLVpdXFx3Kjop +P1tfYS16QS1aXVxcdyoiLGU6Il4ifSx7Y046InBhcmFtcyIsYjoiXFwoIixlVzp0 +cnVlLGM6WyJjb21tZW50Il19LGhsanMuQ05NLGhsanMuQVNNLGhsanMuUVNNLHtj +Tjoic3RyaW5nIixiOmEsZTpiLGM6WyJsb25nX2JyYWNrZXRzIl0scjoxMH0saGxq +cy5CRV19fSgpO2hsanMuTEFOR1VBR0VTLmxpc3A9ZnVuY3Rpb24oKXt2YXIgYT0i +W2EtekEtWl9cXC1cXCtcXCpcXC9cXDxcXD1cXD5cXCZcXCNdW2EtekEtWjAtOV9c +XC1cXCtcXCpcXC9cXDxcXD1cXD5cXCZcXCNdKiI7dmFyIGI9IihcXC18XFwrKT9c +XGQrKFxcLlxcZCt8XFwvXFxkKyk/KChkfGV8ZnxsfHMpKFxcK3xcXC0pP1xcZCsp +PyI7cmV0dXJue2NJOnRydWUsZE06e2w6W2FdLGM6WyJsaXRlcmFsIiwibnVtYmVy +Iiwic3RyaW5nIiwiY29tbWVudCIsInF1b3RlZCIsImxpc3QiXSxpOiJbXlxcc10i +fSxtOlt7Y046InN0cmluZyIsYjonIicsZTonIicsYzpbImVzY2FwZSJdLHI6MH0s +aGxqcy5CRSx7Y046Im51bWJlciIsYjpiLGU6Il4ifSx7Y046Im51bWJlciIsYjoi +I2JbMC0xXSsoL1swLTFdKyk/IixlOiJeIn0se2NOOiJudW1iZXIiLGI6IiNvWzAt +N10rKC9bMC03XSspPyIsZToiXiJ9LHtjTjoibnVtYmVyIixiOiIjeFswLTlhLWZd +KygvWzAtOWEtZl0rKT8iLGU6Il4ifSx7Y046Im51bWJlciIsYjoiI2NcXCgiK2Ir +IiArIitiLGU6IlxcKSJ9LHtjTjoiY29tbWVudCIsYjoiOyIsZToiJCJ9LHtjTjoi +cXVvdGVkIixiOiJbJ2BdXFwoIixlOiJcXCkiLGM6WyJudW1iZXIiLCJzdHJpbmci +LCJ2YXJpYWJsZSIsImtleXdvcmQiLCJxdW90ZWRfbGlzdCJdfSx7Y046InF1b3Rl +ZCIsYjoiXFwocXVvdGUgIixlOiJcXCkiLGM6WyJudW1iZXIiLCJzdHJpbmciLCJ2 +YXJpYWJsZSIsImtleXdvcmQiLCJxdW90ZWRfbGlzdCJdLGw6W2FdLGs6e3RpdGxl +OntxdW90ZToxfX19LHtjTjoicXVvdGVkX2xpc3QiLGI6IlxcKCIsZToiXFwpIixj +OlsicXVvdGVkX2xpc3QiLCJsaXRlcmFsIiwibnVtYmVyIiwic3RyaW5nIl19LHtj +TjoibGlzdCIsYjoiXFwoIixlOiJcXCkiLGM6WyJ0aXRsZSIsImJvZHkiXX0se2NO +OiJ0aXRsZSIsYjphLGU6Il4iLGVXOnRydWV9LHtjTjoiYm9keSIsYjoiXiIsZVc6 +dHJ1ZSxlRTp0cnVlLGM6WyJxdW90ZWQiLCJsaXN0IiwibGl0ZXJhbCIsIm51bWJl +ciIsInN0cmluZyIsImNvbW1lbnQiLCJ2YXJpYWJsZSIsImtleXdvcmQiXX0se2NO +OiJrZXl3b3JkIixiOiJbOiZdIithLGU6Il4ifSx7Y046InZhcmlhYmxlIixiOiJc +XCoiLGU6IlxcKiJ9LHtjTjoibGl0ZXJhbCIsYjoiXFxiKHR7MX18bmlsKVxcYiIs +ZToiXiJ9XX19KCk7aGxqcy5MQU5HVUFHRVMuamF2YT17ZE06e2w6W2hsanMuVUlS +XSxjOlsiamF2YWRvYyIsImNvbW1lbnQiLCJzdHJpbmciLCJjbGFzcyIsIm51bWJl +ciIsImFubm90YXRpb24iXSxrOnsiZmFsc2UiOjEsInN5bmNocm9uaXplZCI6MSwi +aW50IjoxLCJhYnN0cmFjdCI6MSwiZmxvYXQiOjEsInByaXZhdGUiOjEsImNoYXIi +OjEsImludGVyZmFjZSI6MSwiYm9vbGVhbiI6MSwic3RhdGljIjoxLCJudWxsIjox +LCJpZiI6MSwiY29uc3QiOjEsImZvciI6MSwidHJ1ZSI6MSwid2hpbGUiOjEsImxv +bmciOjEsInRocm93IjoxLHN0cmljdGZwOjEsImZpbmFsbHkiOjEsInByb3RlY3Rl +ZCI6MSwiZXh0ZW5kcyI6MSwiaW1wb3J0IjoxLCJuYXRpdmUiOjEsImZpbmFsIjox +LCJpbXBsZW1lbnRzIjoxLCJyZXR1cm4iOjEsInZvaWQiOjEsImVudW0iOjEsImVs +c2UiOjEsImJyZWFrIjoxLCJ0cmFuc2llbnQiOjEsIm5ldyI6MSwiY2F0Y2giOjEs +Imluc3RhbmNlb2YiOjEsImJ5dGUiOjEsInN1cGVyIjoxLCJjbGFzcyI6MSwidm9s +YXRpbGUiOjEsImNhc2UiOjEsYXNzZXJ0OjEsInNob3J0IjoxLCJwYWNrYWdlIjox +LCJkZWZhdWx0IjoxLCJkb3VibGUiOjEsInB1YmxpYyI6MSwidHJ5IjoxLCJ0aGlz +IjoxLCJzd2l0Y2giOjEsImNvbnRpbnVlIjoxLCJ0aHJvd3MiOjF9fSxtOlt7Y046 +ImNsYXNzIixsOltobGpzLlVJUl0sYjoiKGNsYXNzIHxpbnRlcmZhY2UgKSIsZToi +eyIsaToiOiIsazp7ImNsYXNzIjoxLCJpbnRlcmZhY2UiOjF9LGM6WyJpbmhlcml0 +YW5jZSIsInRpdGxlIl19LHtjTjoiaW5oZXJpdGFuY2UiLGI6IihpbXBsZW1lbnRz +fGV4dGVuZHMpIixlOiJeIixuTTp0cnVlLGw6W2hsanMuSVJdLGs6eyJleHRlbmRz +IjoxLCJpbXBsZW1lbnRzIjoxfSxyOjEwfSx7Y046InRpdGxlIixiOmhsanMuVUlS +LGU6Il4ifSx7Y046InBhcmFtcyIsYjoiXFwoIixlOiJcXCkiLGM6WyJzdHJpbmci +LCJhbm5vdGF0aW9uIl19LGhsanMuQ05NLGhsanMuQVNNLGhsanMuUVNNLGhsanMu +QkUsaGxqcy5DTENNLHtjTjoiamF2YWRvYyIsYjoiL1xcKlxcKiIsZToiXFwqLyIs +YzpbImphdmFkb2N0YWciXSxyOjEwfSx7Y046ImphdmFkb2N0YWciLGI6IkBbQS1a +YS16XSsiLGU6Il4ifSxobGpzLkNCTENMTSx7Y046ImFubm90YXRpb24iLGI6IkBb +QS1aYS16XSsiLGU6Il4ifV19O2hsanMuTEFOR1VBR0VTLnBocD17ZE06e2w6W2hs +anMuSVJdLGM6WyJjb21tZW50IiwibnVtYmVyIiwic3RyaW5nIiwidmFyaWFibGUi +LCJwcmVwcm9jZXNzb3IiXSxrOnthbmQ6MSxpbmNsdWRlX29uY2U6MSxsaXN0OjEs +ImFic3RyYWN0IjoxLGdsb2JhbDoxLCJwcml2YXRlIjoxLGVjaG86MSwiaW50ZXJm +YWNlIjoxLGFzOjEsInN0YXRpYyI6MSxlbmRzd2l0Y2g6MSxhcnJheToxLCJudWxs +IjoxLCJpZiI6MSxlbmR3aGlsZToxLG9yOjEsImNvbnN0IjoxLCJmb3IiOjEsZW5k +Zm9yZWFjaDoxLHNlbGY6MSwidmFyIjoxLCJ3aGlsZSI6MSxpc3NldDoxLCJwdWJs +aWMiOjEsInByb3RlY3RlZCI6MSxleGl0OjEsZm9yZWFjaDoxLCJ0aHJvdyI6MSxl +bHNlaWY6MSwiZXh0ZW5kcyI6MSxpbmNsdWRlOjEsX19GSUxFX186MSxlbXB0eTox +LHJlcXVpcmVfb25jZToxLCJmdW5jdGlvbiI6MSwiZG8iOjEseG9yOjEsInJldHVy +biI6MSwiaW1wbGVtZW50cyI6MSxwYXJlbnQ6MSxjbG9uZToxLHVzZToxLF9fQ0xB +U1NfXzoxLF9fTElORV9fOjEsImVsc2UiOjEsImJyZWFrIjoxLHByaW50OjEsImV2 +YWwiOjEsIm5ldyI6MSwiY2F0Y2giOjEsX19NRVRIT0RfXzoxLCJjbGFzcyI6MSwi +Y2FzZSI6MSxleGNlcHRpb246MSxwaHBfdXNlcl9maWx0ZXI6MSwiZGVmYXVsdCI6 +MSxkaWU6MSxyZXF1aXJlOjEsX19GVU5DVElPTl9fOjEsZW5kZGVjbGFyZToxLCJm +aW5hbCI6MSwidHJ5IjoxLCJ0aGlzIjoxLCJzd2l0Y2giOjEsImNvbnRpbnVlIjox +LGVuZGZvcjoxLGVuZGlmOjEsZGVjbGFyZToxLHVuc2V0OjF9fSxjSTp0cnVlLG06 +W2hsanMuQ0xDTSxobGpzLkhDTSx7Y046ImNvbW1lbnQiLGI6Ii9cXCoiLGU6Ilxc +Ki8iLGM6WyJwaHBkb2MiXX0se2NOOiJwaHBkb2MiLGI6Ilxcc0BbQS1aYS16XSsi +LGU6Il4iLHI6MTB9LGhsanMuQ05NLHtjTjoic3RyaW5nIixiOiInIixlOiInIixj +OlsiZXNjYXBlIl0scjowfSx7Y046InN0cmluZyIsYjonIicsZTonIicsYzpbImVz +Y2FwZSJdLHI6MH0saGxqcy5CRSx7Y046InZhcmlhYmxlIixiOiJcXCRbYS16QS1a +X1x4N2YtXHhmZl1bYS16QS1aMC05X1x4N2YtXHhmZl0qIixlOiJeIn0se2NOOiJw +cmVwcm9jZXNzb3IiLGI6IjxcXD9waHAiLGU6Il4iLHI6MTB9LHtjTjoicHJlcHJv +Y2Vzc29yIixiOiJcXD8+IixlOiJeIn1dfTtobGpzLkxBTkdVQUdFUy5weXRob249 +e2RNOntsOltobGpzLlVJUl0saToiKDwvfC0+KSIsYzpbImNvbW1lbnQiLCJzdHJp +bmciLCJmdW5jdGlvbiIsImNsYXNzIiwibnVtYmVyIiwiZGVjb3JhdG9yIl0sazp7 +a2V5d29yZDp7YW5kOjEsZWxpZjoxLGlzOjEsZ2xvYmFsOjEsYXM6MSwiaW4iOjEs +ImlmIjoxLGZyb206MSxyYWlzZToxLCJmb3IiOjEsZXhjZXB0OjEsImZpbmFsbHki +OjEscHJpbnQ6MSwiaW1wb3J0IjoxLHBhc3M6MSwicmV0dXJuIjoxLGV4ZWM6MSwi +ZWxzZSI6MSwiYnJlYWsiOjEsbm90OjEsIndpdGgiOjEsImNsYXNzIjoxLGFzc2Vy +dDoxLHlpZWxkOjEsInRyeSI6MSwid2hpbGUiOjEsImNvbnRpbnVlIjoxLGRlbDox +LG9yOjEsZGVmOjEsbGFtYmRhOjEsbm9ubG9jYWw6MTB9LGJ1aWx0X2luOntOb25l +OjEsVHJ1ZToxLEZhbHNlOjEsRWxsaXBzaXM6MSxOb3RJbXBsZW1lbnRlZDoxfX19 +LG06W3tjTjoiZnVuY3Rpb24iLGw6W2hsanMuVUlSXSxiOiJcXGJkZWYgIixlOiI6 +IixpOiIkIixrOntkZWY6MX0sYzpbInRpdGxlIiwicGFyYW1zIl0scjoxMH0se2NO +OiJjbGFzcyIsbDpbaGxqcy5VSVJdLGI6IlxcYmNsYXNzICIsZToiOiIsaToiWyR7 +XSIsazp7ImNsYXNzIjoxfSxjOlsidGl0bGUiLCJwYXJhbXMiXSxyOjEwfSx7Y046 +InRpdGxlIixiOmhsanMuVUlSLGU6Il4ifSx7Y046InBhcmFtcyIsYjoiXFwoIixl +OiJcXCkiLGM6WyJzdHJpbmciXX0saGxqcy5IQ00saGxqcy5DTk0se2NOOiJzdHJp +bmciLGI6InU/cj8nJyciLGU6IicnJyIscjoxMH0se2NOOiJzdHJpbmciLGI6J3U/ +cj8iIiInLGU6JyIiIicscjoxMH0saGxqcy5BU00saGxqcy5RU00saGxqcy5CRSx7 +Y046InN0cmluZyIsYjoiKHV8cnx1ciknIixlOiInIixjOlsiZXNjYXBlIl0scjox +MH0se2NOOiJzdHJpbmciLGI6Jyh1fHJ8dXIpIicsZTonIicsYzpbImVzY2FwZSJd +LHI6MTB9LHtjTjoiZGVjb3JhdG9yIixiOiJAIixlOiIkIn1dfTtobGpzLkxBTkdV +QUdFUy50ZXg9e2RNOntjOlsicGFyYW1ldGVyIiwiY29tbWFuZCIsInNwZWNpYWwi +LCJmb3JtdWxhIiwiY29tbWVudCJdfSxtOlt7Y046InBhcmFtZXRlciIsYjoiXFxc +XFthLXpBLVrQsC3Rj9CQLdGPXStbXFwqXT8gKj0gKi0/XFxkKlxcLj9cXGQrKHB0 +fHBjfG1tfGNtfGlufGRkfGNjfGV4fGVtKT8iLGU6Il4iLHJCOnRydWUsYzpbImNv +bW1hbmQiLCJudW1iZXIiXSxuTTp0cnVlLHI6MTB9LHtjTjoiY29tbWFuZCIsYjoi +XFxcXFthLXpBLVrQsC3Rj9CQLdGPXStbXFwqXT8iLGU6Il4iLHI6MTB9LHtjTjoi +Y29tbWFuZCIsYjoiXFxcXFteYS16QS1a0LAt0Y/QkC3RjzAtOV0iLGU6Il4iLHI6 +MH0se2NOOiJjb21tZW50IixiOiIlIixlOiIkIixyOjB9LHtjTjoic3BlY2lhbCIs +YjoiW3t9XFxbXFxdXFwmI35dIixlOiJeIixyOjB9LHtjTjoiZm9ybXVsYSIsYjoi +XFwkXFwkIixlOiJcXCRcXCQiLGM6WyJjb21tYW5kIiwic3BlY2lhbCJdLHI6MH0s +e2NOOiJmb3JtdWxhIixiOiJcXCQiLGU6IlxcJCIsYzpbImNvbW1hbmQiLCJzcGVj +aWFsIl0scjowfSx7Y046Im51bWJlciIsYjoiICo9IixlOiItP1xcZCpcXC4/XFxk +KyhwdHxwY3xtbXxjbXxpbnxkZHxjY3xleHxlbSk/IixlQjp0cnVlfV19O2hsanMu +TEFOR1VBR0VTLnNxbD17Y0k6dHJ1ZSxkTTp7YzpbIm9wZXJhdG9yIiwiY29tbWVu +dCJdLGk6IlteXFxzXSJ9LG06W3tjTjoib3BlcmF0b3IiLGI6IihifHN0YXJ0fGNv +bW1pdHxyb2xsYmFja3xzYXZlcG9pbnR8bG9ja3xhbHRlcnxjcmVhdGV8ZHJvcHxy +ZW5hbWV8Y2FsbHxkZWxldGV8ZG98aGFuZGxlcnxpbnNlcnR8bG9hZHxyZXBsYWNl +fHNlbGVjdHx0cnVuY2F0ZXx1cGRhdGV8c2V0fHNob3d8cHJhZ21hKVxcYiIsZToi +O3wkIixjOlsic3RyaW5nIiwibnVtYmVyIiwibmV3bGluZSJdLGw6WyJbYS16QS1a +XVthLXpBLVowLTlfXFwuXSoiXSxrOntrZXl3b3JkOnthbGw6MSxwYXJ0aWFsOjEs +Z2xvYmFsOjEsbW9udGg6MSxjdXJyZW50X3RpbWVzdGFtcDoxLHVzaW5nOjEsZ286 +MSxyZXZva2U6MSxzbWFsbGludDoxLGluZGljYXRvcjoxLCJlbmQtZXhlYyI6MSxk +aXNjb25uZWN0OjEsem9uZToxLCJ3aXRoIjoxLGNoYXJhY3RlcjoxLGFzc2VydGlv +bjoxLHRvOjEsYWRkOjEsY3VycmVudF91c2VyOjEsdXNhZ2U6MSxpbnB1dDoxLGxv +Y2FsOjEsYWx0ZXI6MSxtYXRjaDoxLGNvbGxhdGU6MSxyZWFsOjEsdGhlbjoxLHJv +bGxiYWNrOjEsZ2V0OjEscmVhZDoxLHRpbWVzdGFtcDoxLHNlc3Npb25fdXNlcjox +LG5vdDoxLGludGVnZXI6MSxiaXQ6MSx1bmlxdWU6MSxkYXk6MSxtaW51dGU6MSxk +ZXNjOjEsaW5zZXJ0OjEsZXhlY3V0ZToxLGxpa2U6MSxpbGlrZToyLGxldmVsOjEs +ZGVjaW1hbDoxLGRyb3A6MSwiY29udGludWUiOjEsaXNvbGF0aW9uOjEsZm91bmQ6 +MSx3aGVyZToxLGNvbnN0cmFpbnRzOjEsZG9tYWluOjEscmlnaHQ6MSxuYXRpb25h +bDoxLHNvbWU6MSxtb2R1bGU6MSx0cmFuc2FjdGlvbjoxLHJlbGF0aXZlOjEsc2Vj +b25kOjEsY29ubmVjdDoxLGVzY2FwZToxLGNsb3NlOjEsc3lzdGVtX3VzZXI6MSwi +Zm9yIjoxLGRlZmVycmVkOjEsc2VjdGlvbjoxLGNhc3Q6MSxjdXJyZW50OjEsc3Fs +c3RhdGU6MSxhbGxvY2F0ZToxLGludGVyc2VjdDoxLGRlYWxsb2NhdGU6MSxudW1l +cmljOjEsInB1YmxpYyI6MSxwcmVzZXJ2ZToxLGZ1bGw6MSwiZ290byI6MSxpbml0 +aWFsbHk6MSxhc2M6MSxubzoxLGtleToxLG91dHB1dDoxLGNvbGxhdGlvbjoxLGdy +b3VwOjEsYnk6MSx1bmlvbjoxLHNlc3Npb246MSxib3RoOjEsbGFzdDoxLGxhbmd1 +YWdlOjEsY29uc3RyYWludDoxLGNvbHVtbjoxLG9mOjEsc3BhY2U6MSxmb3JlaWdu +OjEsZGVmZXJyYWJsZToxLHByaW9yOjEsY29ubmVjdGlvbjoxLHVua25vd246MSxh +Y3Rpb246MSxjb21taXQ6MSx2aWV3OjEsb3I6MSxmaXJzdDoxLGludG86MSwiZmxv +YXQiOjEseWVhcjoxLHByaW1hcnk6MSxjYXNjYWRlZDoxLGV4Y2VwdDoxLHJlc3Ry +aWN0OjEsc2V0OjEscmVmZXJlbmNlczoxLG5hbWVzOjEsdGFibGU6MSxvdXRlcjox +LG9wZW46MSxzZWxlY3Q6MSxzaXplOjEsYXJlOjEscm93czoxLGZyb206MSxwcmVw +YXJlOjEsZGlzdGluY3Q6MSxsZWFkaW5nOjEsY3JlYXRlOjEsb25seToxLG5leHQ6 +MSxpbm5lcjoxLGF1dGhvcml6YXRpb246MSxzY2hlbWE6MSxjb3JyZXNwb25kaW5n +OjEsb3B0aW9uOjEsZGVjbGFyZToxLHByZWNpc2lvbjoxLGltbWVkaWF0ZToxLCJl +bHNlIjoxLHRpbWV6b25lX21pbnV0ZToxLGV4dGVybmFsOjEsdmFyeWluZzoxLHRy +YW5zbGF0aW9uOjEsInRydWUiOjEsImNhc2UiOjEsZXhjZXB0aW9uOjEsam9pbjox +LGhvdXI6MSwiZGVmYXVsdCI6MSwiZG91YmxlIjoxLHNjcm9sbDoxLHZhbHVlOjEs +Y3Vyc29yOjEsZGVzY3JpcHRvcjoxLHZhbHVlczoxLGRlYzoxLGZldGNoOjEscHJv +Y2VkdXJlOjEsImRlbGV0ZSI6MSxhbmQ6MSwiZmFsc2UiOjEsImludCI6MSxpczox +LGRlc2NyaWJlOjEsImNoYXIiOjEsYXM6MSxhdDoxLCJpbiI6MSx2YXJjaGFyOjEs +Im51bGwiOjEsdHJhaWxpbmc6MSxhbnk6MSxhYnNvbHV0ZToxLGN1cnJlbnRfdGlt +ZToxLGVuZDoxLGdyYW50OjEscHJpdmlsZWdlczoxLHdoZW46MSxjcm9zczoxLGNo +ZWNrOjEsd3JpdGU6MSxjdXJyZW50X2RhdGU6MSxwYWQ6MSxiZWdpbjoxLHRlbXBv +cmFyeToxLGV4ZWM6MSx0aW1lOjEsdXBkYXRlOjEsY2F0YWxvZzoxLHVzZXI6MSxz +cWw6MSxkYXRlOjEsb246MSxpZGVudGl0eToxLHRpbWV6b25lX2hvdXI6MSxuYXR1 +cmFsOjEsd2hlbmV2ZXI6MSxpbnRlcnZhbDoxLHdvcms6MSxvcmRlcjoxLGNhc2Nh +ZGU6MSxkaWFnbm9zdGljczoxLG5jaGFyOjEsaGF2aW5nOjEsbGVmdDoxLGNhbGw6 +MSwiZG8iOjEsaGFuZGxlcjoxLGxvYWQ6MSxyZXBsYWNlOjEsdHJ1bmNhdGU6MSxz +dGFydDoxLGxvY2s6MSxzaG93OjEscHJhZ21hOjF9LGFnZ3JlZ2F0ZTp7Y291bnQ6 +MSxzdW06MSxtaW46MSxtYXg6MSxhdmc6MX19fSx7Y046Im5ld2xpbmUiLGI6Ilxc +biIsZToiXiIsbk06dHJ1ZX0saGxqcy5DTk0saGxqcy5DQkxDTE0se2NOOiJjb21t +ZW50IixiOiItLSIsZToiJCJ9LHtjTjoic3RyaW5nIixiOiInIixlOiInIixjOlsi +ZXNjYXBlIiwic3F1b3RlIl0scjowfSx7Y046InNxdW90ZSIsYjoiJyciLGU6Il4i +LG5NOnRydWV9LHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxjOlsiZXNjYXBlIiwi +ZHF1b3RlIl0scjowfSx7Y046ImRxdW90ZSIsYjonIiInLGU6Il4iLG5NOnRydWV9 +LHtjTjoic3RyaW5nIixiOiJgIixlOiJgIixjOlsiZXNjYXBlIl19LGhsanMuQkVd +fTtobGpzLkxBTkdVQUdFUy5wZXJsPWZ1bmN0aW9uKCl7dmFyIGI9WyJjb21tZW50 +Iiwic3RyaW5nIiwibnVtYmVyIiwicmVnZXhwIiwic3ViIiwidmFyaWFibGUiLCJv +cGVyYXRvciIsInBvZCJdO3ZhciBhPXtnZXRwd2VudDoxLGdldHNlcnZlbnQ6MSxx +dW90ZW1ldGE6MSxtc2dyY3Y6MSxzY2FsYXI6MSxraWxsOjEsZGJtY2xvc2U6MSx1 +bmRlZjoxLGxjOjEsbWE6MSxzeXN3cml0ZToxLHRyOjEsc2VuZDoxLHVtYXNrOjEs +c3lzb3BlbjoxLHNobXdyaXRlOjEsdmVjOjEscXg6MSx1dGltZToxLGxvY2FsOjEs +b2N0OjEsc2VtY3RsOjEsbG9jYWx0aW1lOjEscmVhZHBpcGU6MSwiZG8iOjEsInJl +dHVybiI6MSxmb3JtYXQ6MSxyZWFkOjEsc3ByaW50ZjoxLGRibW9wZW46MSxwb3A6 +MSxnZXRwZ3JwOjEsbm90OjEsZ2V0cHduYW06MSxyZXdpbmRkaXI6MSxxcToxLGZp +bGVubzoxLHF3OjEsZW5kcHJvdG9lbnQ6MSx3YWl0OjEsc2V0aG9zdGVudDoxLGJs +ZXNzOjEsczoxLG9wZW5kaXI6MSwiY29udGludWUiOjEsZWFjaDoxLHNsZWVwOjEs +ZW5kZ3JlbnQ6MSxzaHV0ZG93bjoxLGR1bXA6MSxjaG9tcDoxLGNvbm5lY3Q6MSxn +ZXRzb2NrbmFtZToxLGRpZToxLHNvY2tldHBhaXI6MSxjbG9zZToxLGZsb2NrOjEs +ZXhpc3RzOjEsaW5kZXg6MSxzaG1nZXQ6MSxzdWI6MSwiZm9yIjoxLGVuZHB3ZW50 +OjEscmVkbzoxLGxzdGF0OjEsbXNnY3RsOjEsc2V0cGdycDoxLGFiczoxLGV4aXQ6 +MSxzZWxlY3Q6MSxwcmludDoxLHJlZjoxLGdldGhvc3RieWFkZHI6MSx1bnNoaWZ0 +OjEsZmNudGw6MSxzeXNjYWxsOjEsImdvdG8iOjEsZ2V0bmV0YnlhZGRyOjEsam9p +bjoxLGdtdGltZToxLHN5bWxpbms6MSxzZW1nZXQ6MSxzcGxpY2U6MSx4OjEsZ2V0 +cGVlcm5hbWU6MSxyZWN2OjEsbG9nOjEsc2V0c29ja29wdDoxLGNvczoxLGxhc3Q6 +MSxyZXZlcnNlOjEsZ2V0aG9zdGJ5bmFtZToxLGdldGdybmFtOjEsc3R1ZHk6MSxm +b3JtbGluZToxLGVuZGhvc3RlbnQ6MSx0aW1lczoxLGNob3A6MSxsZW5ndGg6MSxn +ZXRob3N0ZW50OjEsZ2V0bmV0ZW50OjEscGFjazoxLGdldHByb3RvZW50OjEsZ2V0 +c2VydmJ5bmFtZToxLHJhbmQ6MSxta2RpcjoxLHBvczoxLGNobW9kOjEseToxLHN1 +YnN0cjoxLGVuZG5ldGVudDoxLHByaW50ZjoxLG5leHQ6MSxvcGVuOjEsbXNnc25k +OjEscmVhZGRpcjoxLHVzZToxLHVubGluazoxLGdldHNvY2tvcHQ6MSxnZXRwcmlv +cml0eToxLHJpbmRleDoxLHdhbnRhcnJheToxLGhleDoxLHN5c3RlbToxLGdldHNl +cnZieXBvcnQ6MSxlbmRzZXJ2ZW50OjEsImludCI6MSxjaHI6MSx1bnRpZToxLHJt +ZGlyOjEscHJvdG90eXBlOjEsdGVsbDoxLGxpc3RlbjoxLGZvcms6MSxzaG1yZWFk +OjEsdWNmaXJzdDoxLHNldHByb3RvZW50OjEsImVsc2UiOjEsc3lzc2VlazoxLGxp +bms6MSxnZXRncmdpZDoxLHNobWN0bDoxLHdhaXRwaWQ6MSx1bnBhY2s6MSxnZXRu +ZXRieW5hbWU6MSxyZXNldDoxLGNoZGlyOjEsZ3JlcDoxLHNwbGl0OjEscmVxdWly +ZToxLGNhbGxlcjoxLGxjZmlyc3Q6MSx1bnRpbDoxLHdhcm46MSwid2hpbGUiOjEs +dmFsdWVzOjEsc2hpZnQ6MSx0ZWxsZGlyOjEsZ2V0cHd1aWQ6MSxteToxLGdldHBy +b3RvYnludW1iZXI6MSwiZGVsZXRlIjoxLGFuZDoxLHNvcnQ6MSx1YzoxLGRlZmlu +ZWQ6MSxzcmFuZDoxLGFjY2VwdDoxLCJwYWNrYWdlIjoxLHNlZWtkaXI6MSxnZXRw +cm90b2J5bmFtZToxLHNlbW9wOjEsb3VyOjEscmVuYW1lOjEsc2VlazoxLCJpZiI6 +MSxxOjEsY2hyb290OjEsc3lzcmVhZDoxLHNldHB3ZW50OjEsbm86MSxjcnlwdDox +LGdldGM6MSxjaG93bjoxLHNxcnQ6MSx3cml0ZToxLHNldG5ldGVudDoxLHNldHBy +aW9yaXR5OjEsZm9yZWFjaDoxLHRpZToxLHNpbjoxLG1zZ2dldDoxLG1hcDoxLHN0 +YXQ6MSxnZXRsb2dpbjoxLHVubGVzczoxLGVsc2lmOjEsdHJ1bmNhdGU6MSxleGVj +OjEsa2V5czoxLGdsb2I6MSx0aWVkOjEsY2xvc2VkaXI6MSxpb2N0bDoxLHNvY2tl +dDoxLHJlYWRsaW5rOjEsImV2YWwiOjEseG9yOjEscmVhZGxpbmU6MSxiaW5tb2Rl +OjEsc2V0c2VydmVudDoxLGVvZjoxLG9yZDoxLGJpbmQ6MSxhbGFybToxLHBpcGU6 +MSxhdGFuMjoxLGdldGdyZW50OjEsZXhwOjEsdGltZToxLHB1c2g6MSxzZXRncmVu +dDoxLGd0OjEsbHQ6MSxvcjoxLG5lOjEsbToxfTtyZXR1cm57ZE06e2w6W2hsanMu +SVJdLGM6YixrOmF9LG06W3tjTjoidmFyaWFibGUiLGI6IlxcJFxcZCIsZToiXiJ9 +LHtjTjoidmFyaWFibGUiLGI6IltcXCRcXCVcXEBcXCpdKFxcXlxcd1xcYnwjXFx3 +KyhcXDpcXDpcXHcrKSp8W15cXHNcXHd7XXx7XFx3K318XFx3KyhcXDpcXDpcXHcq +KSopIixlOiJeIn0se2NOOiJzdWJzdCIsYjoiWyRAXVxceyIsZToifSIsbDpbaGxq +cy5JUl0sazphLGM6YixyOjEwfSx7Y046Im51bWJlciIsYjoiKFxcYjBbMC03X10r +KXwoXFxiMHhbMC05YS1mQS1GX10rKXwoXFxiWzEtOV1bMC05X10qKFxcLlswLTlf +XSspPyl8WzBfXVxcYiIsZToiXiIscjowfSx7Y046InN0cmluZyIsYjoicVtxd3hy +XT9cXHMqXFwoIixlOiJcXCkiLGM6WyJlc2NhcGUiLCJzdWJzdCIsInZhcmlhYmxl +Il0scjo1fSx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMqXFxbIixlOiJcXF0i +LGM6WyJlc2NhcGUiLCJzdWJzdCIsInZhcmlhYmxlIl0scjo1fSx7Y046InN0cmlu +ZyIsYjoicVtxd3hyXT9cXHMqXFx7IixlOiJcXH0iLGM6WyJlc2NhcGUiLCJzdWJz +dCIsInZhcmlhYmxlIl0scjo1fSx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMq +XFx8IixlOiJcXHwiLGM6WyJlc2NhcGUiLCJzdWJzdCIsInZhcmlhYmxlIl0scjo1 +fSx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMqXFw8IixlOiJcXD4iLGM6WyJl +c2NhcGUiLCJzdWJzdCIsInZhcmlhYmxlIl0scjo1fSx7Y046InN0cmluZyIsYjoi +cXdcXHMrcSIsZToicSIsYzpbImVzY2FwZSIsInN1YnN0IiwidmFyaWFibGUiXSxy +OjV9LHtjTjoic3RyaW5nIixiOiInIixlOiInIixjOlsiZXNjYXBlIl0scjowfSx7 +Y046InN0cmluZyIsYjonIicsZTonIicsYzpbImVzY2FwZSIsInN1YnN0IiwidmFy +aWFibGUiXSxyOjB9LGhsanMuQkUse2NOOiJzdHJpbmciLGI6ImAiLGU6ImAiLGM6 +WyJlc2NhcGUiXX0se2NOOiJyZWdleHAiLGI6IihzfHRyfHkpLyhcXFxcLnxbXi9d +KSovKFxcXFwufFteL10pKi9bYS16XSoiLGU6Il4iLHI6MTB9LHtjTjoicmVnZXhw +IixiOiIobXxxcik/LyIsZToiL1thLXpdKiIsYzpbImVzY2FwZSJdLHI6MH0se2NO +OiJzdHJpbmciLGI6IntcXHcrfSIsZToiXiIscjowfSx7Y046InN0cmluZyIsYjoi +LT9cXHcrXFxzKlxcPVxcPiIsZToiXiIscjowfSx7Y046InN1YiIsYjoiXFxic3Vi +XFxiIixlOiIoXFxzKlxcKC4qP1xcKSk/Wzt7XSIsbDpbaGxqcy5JUl0sazp7c3Vi +OjF9LHI6NX0se2NOOiJvcGVyYXRvciIsYjoiLVxcd1xcYiIsZToiXiIscjowfSxo +bGpzLkhDTSx7Y046ImNvbW1lbnQiLGI6Il4oX19FTkRfX3xfX0RBVEFfXykiLGU6 +IlxcbiQiLHI6NX0se2NOOiJwb2QiLGI6IlxcPVxcdyIsZToiXFw9Y3V0In1dfX0o +KTtobGpzLkxBTkdVQUdFUy5zY2FsYT17ZE06e2w6W2hsanMuVUlSXSxjOlsiamF2 +YWRvYyIsImNvbW1lbnQiLCJzdHJpbmciLCJjbGFzcyIsIm51bWJlciIsImFubm90 +YXRpb24iXSxrOnt0eXBlOjEseWllbGQ6MSxsYXp5OjEsb3ZlcnJpZGU6MSxkZWY6 +MSwid2l0aCI6MSx2YWw6MSwidmFyIjoxLCJmYWxzZSI6MSwidHJ1ZSI6MSxzZWFs +ZWQ6MSwiYWJzdHJhY3QiOjEsInByaXZhdGUiOjEsdHJhaXQ6MSxvYmplY3Q6MSwi +bnVsbCI6MSwiaWYiOjEsImZvciI6MSwid2hpbGUiOjEsInRocm93IjoxLCJmaW5h +bGx5IjoxLCJwcm90ZWN0ZWQiOjEsImV4dGVuZHMiOjEsImltcG9ydCI6MSwiZmlu +YWwiOjEsInJldHVybiI6MSwiZWxzZSI6MSwiYnJlYWsiOjEsIm5ldyI6MSwiY2F0 +Y2giOjEsInN1cGVyIjoxLCJjbGFzcyI6MSwiY2FzZSI6MSwicGFja2FnZSI6MSwi +ZGVmYXVsdCI6MSwidHJ5IjoxLCJ0aGlzIjoxLG1hdGNoOjEsImNvbnRpbnVlIjox +LCJ0aHJvd3MiOjF9fSxtOlt7Y046ImNsYXNzIixsOltobGpzLlVJUl0sYjoiKChj +YXNlICk/Y2xhc3MgfG9iamVjdCB8dHJhaXQgKSIsZToiKHt8JCkiLGk6IjoiLGs6 +eyJjYXNlIjoxLCJjbGFzcyI6MSx0cmFpdDoxLG9iamVjdDoxfSxjOlsiaW5oZXJp +dGFuY2UiLCJ0aXRsZSIsInBhcmFtcyJdfSx7Y046ImluaGVyaXRhbmNlIixiOiIo +ZXh0ZW5kc3x3aXRoKSIsZToiXiIsbk06dHJ1ZSxsOltobGpzLklSXSxrOnsiZXh0 +ZW5kcyI6MSwid2l0aCI6MX0scjoxMH0se2NOOiJ0aXRsZSIsYjpobGpzLlVJUixl +OiJeIn0se2NOOiJwYXJhbXMiLGI6IlxcKCIsZToiXFwpIixjOlsic3RyaW5nIiwi +YW5ub3RhdGlvbiJdfSxobGpzLkNOTSxobGpzLkFTTSxobGpzLlFTTSxobGpzLkJF +LGhsanMuQ0xDTSx7Y046ImphdmFkb2MiLGI6Ii9cXCpcXCoiLGU6IlxcKi8iLGM6 +WyJqYXZhZG9jdGFnIl0scjoxMH0se2NOOiJqYXZhZG9jdGFnIixiOiJAW0EtWmEt +el0rIixlOiJeIn0saGxqcy5DQkxDTE0se2NOOiJhbm5vdGF0aW9uIixiOiJAW0Et +WmEtel0rIixlOiJeIn0se2NOOiJzdHJpbmciLGI6J3U/cj8iIiInLGU6JyIiIics +cjoxMH1dfTtobGpzLkxBTkdVQUdFUy5jcHA9ZnVuY3Rpb24oKXt2YXIgYT17a2V5 +d29yZDp7ImZhbHNlIjoxLCJpbnQiOjEsImZsb2F0IjoxLCJ3aGlsZSI6MSwicHJp +dmF0ZSI6MSwiY2hhciI6MSwiY2F0Y2giOjEsImV4cG9ydCI6MSx2aXJ0dWFsOjEs +b3BlcmF0b3I6MixzaXplb2Y6MixkeW5hbWljX2Nhc3Q6Mix0eXBlZGVmOjIsY29u +c3RfY2FzdDoyLCJjb25zdCI6MSxzdHJ1Y3Q6MSwiZm9yIjoxLHN0YXRpY19jYXN0 +OjIsdW5pb246MSxuYW1lc3BhY2U6MSx1bnNpZ25lZDoxLCJsb25nIjoxLCJ0aHJv +dyI6MSwidm9sYXRpbGUiOjIsInN0YXRpYyI6MSwicHJvdGVjdGVkIjoxLGJvb2w6 +MSx0ZW1wbGF0ZToxLG11dGFibGU6MSwiaWYiOjEsInB1YmxpYyI6MSxmcmllbmQ6 +MiwiZG8iOjEsInJldHVybiI6MSwiZ290byI6MSxhdXRvOjEsInZvaWQiOjIsImVu +dW0iOjEsImVsc2UiOjEsImJyZWFrIjoxLCJuZXciOjEsZXh0ZXJuOjEsdXNpbmc6 +MSwidHJ1ZSI6MSwiY2xhc3MiOjEsYXNtOjEsImNhc2UiOjEsdHlwZWlkOjEsInNo +b3J0IjoxLHJlaW50ZXJwcmV0X2Nhc3Q6MiwiZGVmYXVsdCI6MSwiZG91YmxlIjox +LHJlZ2lzdGVyOjEsZXhwbGljaXQ6MSxzaWduZWQ6MSx0eXBlbmFtZToxLCJ0cnki +OjEsInRoaXMiOjEsInN3aXRjaCI6MSwiY29udGludWUiOjEsd2NoYXJfdDoxLGlu +bGluZToxLCJkZWxldGUiOjF9LGJ1aWx0X2luOntzdGQ6MSxzdHJpbmc6MSxjaW46 +MSxjb3V0OjEsY2VycjoxLGNsb2c6MSxzdHJpbmdzdHJlYW06MSxpc3RyaW5nc3Ry +ZWFtOjEsb3N0cmluZ3N0cmVhbToxLGF1dG9fcHRyOjEsZGVxdWU6MSxsaXN0OjEs +cXVldWU6MSxzdGFjazoxLHZlY3RvcjoxLG1hcDoxLHNldDoxLGJpdHNldDoxLG11 +bHRpc2V0OjEsbXVsdGltYXA6MX19O3JldHVybntkTTp7bDpbaGxqcy5VSVJdLGk6 +IjwvIixjOlsiY29tbWVudCIsInN0cmluZyIsIm51bWJlciIsInByZXByb2Nlc3Nv +ciIsInN0bF9jb250YWluZXIiXSxrOmF9LG06W2hsanMuQ0xDTSxobGpzLkNCTENM +TSxobGpzLkNOTSxobGpzLlFTTSxobGpzLkJFLHtjTjoic3RyaW5nIixiOiInIixl +OiJbXlxcXFxdJyIsaToiW15cXFxcXVteJ10ifSx7Y046InByZXByb2Nlc3NvciIs +YjoiIyIsZToiJCJ9LHtjTjoic3RsX2NvbnRhaW5lciIsYjoiXFxiKGRlcXVlfGxp +c3R8cXVldWV8c3RhY2t8dmVjdG9yfG1hcHxzZXR8Yml0c2V0fG11bHRpc2V0fG11 +bHRpbWFwKVxccyo8IixlOiI+IixjOlsic3RsX2NvbnRhaW5lciJdLGw6W2hsanMu +VUlSXSxrOmEscjoxMH1dfX0oKTs= + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline; filename=commentForm.js +Content-Type: application/x-javascript; charset=utf-8; name=commentForm.js +Content-Location: http://habrahabr.ru/js/1307631427/commentForm.js +Content-Transfer-Encoding: Base64 + +LyoNCgljb21tZW50Rm9ybUNsYXNzDQoJ0YDQsNCx0L7RgtCw0LXRgiDQv9C+INC/ +0YDQuNC90YbQuNC/0YMg0YHRgtCw0YLQuNGH0LXRgdC60L7Qs9C+INC60LvQsNGB +0YHQsDoNCgnQtNC70Y8g0YDQsNCx0L7RgtGLINGC0YDQtdCx0YPQtdGCINGB0L7Q +t9C00LDQvdC40Y8g0L7QtNC90L7Qs9C+INC+0LHRitC10LrRgtCwDQoJdmFyIGNv +bW1lbnRGb3JtDQoqLw0KDQp2YXIgY29tbWVudEZvcm1DbGFzcyA9IGZ1bmN0aW9u +KCl7DQoJY29tbWVudEZvcm1DbGFzcy5zdXBlckNsYXNzLmFwcGx5KHRoaXMsIGFy +Z3VtZW50cyk7DQoJDQoJJGV4dGVuZCh0aGlzLCB0bS5jdXN0b21FdmVudE1hbmFn +ZXIpOw0KCQ0KCXRoaXMubmV3X3JlcGxpZXNfaSA9IC0xOw0KCQ0KCU9iamVjdC5l +eHRlbmRPYmplY3QoDQoJCXRoaXMuYWpheFVybHMsIHsNCgkJCXNhdmU6ICh3aW5k +b3cuYmFzZVVSTCB8fCAnJykgKyAnL2FqYXgvY29tbWVudHMvYWRkLycsDQoJCQlw +cmV2aWV3OiAod2luZG93LmJhc2VVUkwgfHwgJycpICsgJy9hamF4L2NvbW1lbnRz +L3ByZXZpZXcvJywNCgkJCWZlZWRiYWNrOiAod2luZG93LmJhc2VVUkwgfHwgJycp +ICsgJy9hamF4L2NvbW1lbnRzL2FkZF9mZWVkYmFjay8nDQoJfSk7DQoJDQoJLy8g +0JjRgdC/0L7Qu9GM0LfRg9C10LzRi9C1INCyINGE0L7RgNC80LUgY2xhc3NOYW1l +cw0KCXRoaXMuY2xhc3NOYW1lcyA9IHsNCgkJZmllbGRIb2xkZXI6ICdqcy1maWVs +ZC1ob2xkZXInLCAvLyDQutC+0L3RgtC10LnQvdC10YAt0YDQvtC00LjRgtC10LvR +jCDQv9C+0LvRjyDRhNC+0YDQvNGLINC4INC+0YjQuNCx0LrQuA0KCQlmaWVsZERh +dGE6ICdqcy1maWVsZC1kYXRhJywgLy8g0L/QvtC70LUg0YTQvtGA0LzRiywg0LrQ +vtGC0L7RgNC+0LUg0L3Rg9C20L3QviDRgdC10YDQuNCw0LvQuNC30L7QstCw0YLR +jA0KCQlmaWVsZEVycm9yTXNnQm94OiAnanMtZmllbGQtZXJyb3ItbXNnJywgLy8g +0LrQvtC90YLQtdC50L3QtdGAINC00LvRjyDQstGL0LLQvtC00LAg0YHQvtC+0LHR +idC10L3QuNGPINC+0LEg0L7RiNC40LHQutC1DQoJCWZpZWxkTWFya2VkRXJyb3I6 +ICdqcy1tYXJrZWQtZXJyb3InLCAvLyDQv9C+0LzQtdGH0LDQtdC8INC60L7QvdGC +0LXQudC90LXRgCwg0LXRgdC70Lgg0LIg0L/QvtC70LUgLSDQvtGI0LjQsdC60LAN +CgkJZmllbGRNYXJrZWRDaGVja2VkOiAnanMtbWFya2VkLWNoZWNrZWQnLCAvLyDQ +v9C+0LzQtdGH0LDQtdC8INC60L7QvdGC0LXQudC90LXRgCwg0LXRgdC70Lgg0L/Q +vtC70LUg0L/RgNC+0YjQu9C+INC/0YDQvtCy0LXRgNC60YMNCgkJZmllbGRJc1Jl +cXVpcmVkOiAnanMtcmVxdWlyZWQnLCAvLyDQv9C+0LvQtSwg0L7QsdGP0LfQsNGC +0LXQu9GM0L3QvtC1INC00LvRjyDQt9Cw0L/QvtC70L3QtdC90LjRjyANCgkJZmll +bGRQYXNzXzE6ICdqcy1wYXNzLWZpZWxkLW1haW4nLCAvLyDQv9C+0LvQtSDRgSDQ +vtGB0L3QvtCy0L3Ri9C8INC/0LDRgNC+0LvQtdC8DQoJCWZpZWxkUGFzc18yOiAn +anMtcGFzcy1maWVsZC1yZXBlYXQnLCAvLyDQv9C+0LvQtSDRgSDQv9C+0LLRgtC+ +0YDQvtC8INC/0LDRgNC+0LvRjw0KCQlpc0xvYWRpbmc6ICdsb2FkaW5nJywgLy8g +0L/RgNC10LvQvtCw0LTQtdGADQoJCXVua25vd25FcnJvckhvbGRlcjogJ2pzLXVu +a25vd24tZXJyb3ItaG9sZGVyJywgLy8g0LTQtdGA0LbQsNGC0LXQu9GMINCy0YvQ +stC+0LTQsCDQvdC10L7Qv9C+0LfQvdCw0L3QvdC+0Lkg0L7RiNC40LHQutC4DQoJ +CXVua25vd25FcnJvck1zZzogJ2pzLXVua25vd24tZXJyb3ItbXNnJywgLy8g0YHQ +sNC80L4g0L/QvtC70LUg0L3QtdC+0L/QvtC30L3QsNC90L3QvtC5INC+0YjQuNCx +0LrQuA0KCQljb21tZW50c0NvdW50OiAnanMtY29tbWVudHMtY291bnQnLCAvL9C6 +0L7Qu9C40YfQtdGB0YLQstC+INC60L7QvNC80LXQvdGC0LDRgNC40LXQsg0KCQlw +cmV2aWV3SG9sZGVyOiAnY29tbWVudC1wcmV2aWV3JywgLy/Qv9GA0LXQtNC/0YDQ +vtGB0LzQvtGC0YANCgkJdGhyZWFkOiAnaGVudHJ5JywgLy8g0LLQtdGC0LrQsCDQ +utC+0LzQvNC10L3RgtCw0YDQuNC10LINCgkJY29tbWVudEl0ZW06ICdjb21tZW50 +X2hvbGRlciB2b3RlX2hvbGRlcicgLy/QutC+0LzQvNC10L3RgtCw0YDQuNC5DQoJ +fTsNCgkNCglPYmplY3QuZXh0ZW5kT2JqZWN0KA0KCQl0aGlzLnhtbFJlc3BvbnNl +LCB7DQoJCXRpbWVmaWVsZDogew0KCQkJbm9kZTogJ3RpbWVmaWVsZCcsDQoJCQlo +YW5kbGVyOiBudWxsDQoJCX0sDQoJCWNvbW1lbnQ6IHsNCgkJCW5vZGU6ICdjb21t +ZW50JywNCgkJCWhhbmRsZXI6ICd4bWxSZXNwb25zZUhhbmRsZXJfY29tbWVudCcN +CgkJfSwNCgkJY29tcGFueV9jb21tZW50OiB7DQoJCQlub2RlOiAnY29tcGFueV9j +b21tZW50JywNCgkJCWhhbmRsZXI6ICd4bWxSZXNwb25zZUhhbmRsZXJfY29tcGFu +eV9jb21tZW50Jw0KCQl9LA0KCQlwcmV2aWV3OiB7DQoJCQlub2RlOiAncHJldmll +dycsDQoJCQloYW5kbGVyOiAneG1sUmVzcG9uc2VIYW5kbGVyX3ByZXZpZXcnDQoJ +CX0sDQoJCWVycm9yOiB7DQoJCQlub2RlOiAnZXJyb3InLA0KCQkJaGFuZGxlcjog +J3htbFJlc3BvbnNlSGFuZGxlcl9lcnJvcicNCgkJfQ0KCX0pOw0KfTsNCmNvbW1l +bnRGb3JtQ2xhc3MuaW5oZXJpdHNGcm9tKGFqYXhGb3JtQ2xhc3MpOw0KDQpPYmpl +Y3QuZXh0ZW5kT2JqZWN0KA0KCWNvbW1lbnRGb3JtQ2xhc3MucHJvdG90eXBlLCB7 +DQoJDQoJYnVpbGQ6IHsNCgkJY29tbWVudDogZnVuY3Rpb24oaWQsIHRleHQpew0K +CQkJdmFyIGVudHJ5X3JlcGx5X2l0ZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50 +KCdsaScpOw0KCQkJZW50cnlfcmVwbHlfaXRlbS5pZCA9ICdjb21tZW50XycgKyBp +ZDsNCgkJCWVudHJ5X3JlcGx5X2l0ZW0uY2xhc3NOYW1lID0gY29tbWVudEZvcm0u +Y2xhc3NOYW1lcy5jb21tZW50SXRlbTsNCgkJCWVudHJ5X3JlcGx5X2l0ZW0uaW5u +ZXJIVE1MID0gdGV4dDsNCgkJCXRoaXMuX2hpZ2hsaWdodChlbnRyeV9yZXBseV9p +dGVtKTsNCgkJCXJldHVybiBlbnRyeV9yZXBseV9pdGVtOwkJCQ0KCQl9LA0KCQkN +CgkJdGhyZWFkOiBmdW5jdGlvbigpew0KCQkJdmFyIGVudHJ5X3JlcGx5X3RocmVh +ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3VsJyk7DQoJCQllbnRyeV9yZXBs +eV90aHJlYWQuY2xhc3NOYW1lID0gY29tbWVudEZvcm0uY2xhc3NOYW1lcy50aHJl +YWQ7DQoJCQlyZXR1cm4gZW50cnlfcmVwbHlfdGhyZWFkOw0KCQl9LA0KCQ0KCSAg +ICBfaGlnaGxpZ2h0OiBmdW5jdGlvbihub2RlKSB7DQoJICAgICAgICB2YXIgcHJl +cyA9IG5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3ByZScpOw0KCSAgICAgICAg +Zm9yICh2YXIgaSA9IDA7IGkgPCBwcmVzLmxlbmd0aDsgaSsrKSB7DQogICAgICAg +ICAgICAgIHZhciBjb2RlID0gcHJlc1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgn +Y29kZScpOw0KICAgICAgICAgICAgICBpZiAoY29kZS5sZW5ndGgpIGhsanMuaGln +aGxpZ2h0QmxvY2soY29kZVswXSwgaGxqcy50YWJSZXBsYWNlKTsNCiAgICAgICAg +ICAgIH0NCgkgICAgfQ0KCX0sDQoJDQoJX2FkZENvbW1lbnRzOiBmdW5jdGlvbih4 +bWxOb2RlcywgbWVzc19ib3gpew0KCQl2YXIgcmVwbGllcyA9IFtdOw0KCQl2YXIg +Y29tbWVudHNIb2xkZXIgPSAkKCdjb21tZW50cycpOw0KCQlmb3IodmFyIGk9MDsg +aTx4bWxOb2Rlcy5jb21tZW50Lmxlbmd0aDsgaSsrKSB7DQoJCQl2YXIgdGV4dCA9 +IHhtbE5vZGVzLmNvbW1lbnRbaV0uZmlyc3RDaGlsZC5kYXRhOw0KCQkJdmFyIGVu +dHJ5X3JlcGx5X2l0ZW0gPSB0aGlzLmJ1aWxkLmNvbW1lbnQoeG1sTm9kZXMuY29t +bWVudFtpXS5nZXRBdHRyaWJ1dGUoJ2NvbW1lbnRfaWQnKSwgdGV4dCk7DQoJCQly +ZXBsaWVzW3JlcGxpZXMubGVuZ3RoXSA9IGVudHJ5X3JlcGx5X2l0ZW07DQoJCQlp +Zih4bWxOb2Rlcy5jb21tZW50W2ldLmdldEF0dHJpYnV0ZSgncGFyZW50X2lkJykh +PTApIHsNCgkJCQl2YXIgZW50cnkgPSAkKCdjb21tZW50XycgKyB4bWxOb2Rlcy5j +b21tZW50W2ldLmdldEF0dHJpYnV0ZSgncGFyZW50X2lkJykpOw0KCQkJCXZhciBl +bnRyeV9yZXBseV90aHJlYWQgPSBlbnRyeS5nZXRFbGVtZW50KCcuJyArIHRoaXMu +Y2xhc3NOYW1lcy50aHJlYWQpOw0KCQkJCWlmKCFlbnRyeV9yZXBseV90aHJlYWQp +IHsNCgkJCQkJZW50cnlfcmVwbHlfdGhyZWFkID0gdGhpcy5idWlsZC50aHJlYWQo +KTsNCgkJCQkJZW50cnlfcmVwbHlfdGhyZWFkLmFwcGVuZENoaWxkKGVudHJ5X3Jl +cGx5X2l0ZW0pOw0KCQkJCQllbnRyeS5hcHBlbmRDaGlsZChlbnRyeV9yZXBseV90 +aHJlYWQpOw0KCQkJCX0NCgkJCQllbnRyeV9yZXBseV90aHJlYWQuYXBwZW5kQ2hp +bGQoZW50cnlfcmVwbHlfaXRlbSk7DQoJCQl9IGVsc2Ugew0KCQkJCXZhciByZXBs +eV9ob2xkZXIgPSAkKCdjb21tZW50cycpLmdldEVsZW1lbnQoJy4nICsgdGhpcy5j +bGFzc05hbWVzLnRocmVhZCkNCg0KCQkJCQ0KCQkJCQ0KCQkJCQ0KCQkJCQ0KCQkJ +CWlmKCFyZXBseV9ob2xkZXIpIHsNCgkJCQkJdmFyIHJlcGx5X2hvbGRlciA9IGRv +Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3VsJyk7DQoJCQkJCXJlcGx5X2hvbGRlci5j +bGFzc05hbWUgPSB0aGlzLmNsYXNzTmFtZXMudGhyZWFkOw0KCQkJCQljb21tZW50 +c0hvbGRlci5pbnNlcnRCZWZvcmUocmVwbHlfaG9sZGVyLCBjb21tZW50c0hvbGRl +ci5nZXRFbGVtZW50KCcuYWRkLWNvbW1lbnQnKSk7DQoJCQkJfQ0KCQkJCWlmICgh +bWVzc19ib3gpew0KCQkJCQlyZXBseV9ob2xkZXIuYXBwZW5kQ2hpbGQoZW50cnlf +cmVwbHlfaXRlbSk7DQoJCQkJfSBlbHNlew0KCQkJCQllbnRyeV9yZXBseV9pdGVt +LmdldEVsZW1lbnQoJ3AucmVwbHknKS5kaXNwb3NlKHRydWUpOw0KCQkJCQkkKHJl +cGx5X2hvbGRlcikuZ3JhYihlbnRyeV9yZXBseV9pdGVtLCAndG9wJykNCgkJCQl9 +DQoJCQkJDQoJCQl9DQoJCQlpZih4bWxOb2Rlcy5jb21tZW50W2ldLmdldEF0dHJp +YnV0ZSgndXNlcl9jb21tZW50Jyk9PTEpIHsgDQoJCQkJJCgnY29tbWVudF8nICsg +eG1sTm9kZXMuY29tbWVudFtpXS5nZXRBdHRyaWJ1dGUoJ2NvbW1lbnRfaWQnKSku +YWRkQ2xhc3MoJ2pzLW15LXJlcGx5Jyk7CQ0KCQkJfSBlbHNlIHsNCgkJCQkkKCdj +b21tZW50XycgKyB4bWxOb2Rlcy5jb21tZW50W2ldLmdldEF0dHJpYnV0ZSgnY29t +bWVudF9pZCcpKS5nZXRFbGVtZW50KCdkaXYubXNnLW1ldGEnKS5hZGRDbGFzcygn +bmV3LXJlcGx5Jyk7DQoJCQl9IA0KCQl9DQoJCWlmIChyZXBsaWVzLmxlbmd0aCA+ +IDApIHsNCgkJCXZhciBjb21tZW50c0hlYWRlciA9ICQoJ2NvbW1lbnRzJykuZ2V0 +RWxlbWVudCgnLmNvbW1lbnRzLWhlYWRlcicpOw0KCQkJaWYgKGNvbW1lbnRzSGVh +ZGVyICYmIGNvbW1lbnRzSGVhZGVyLmhhc0NsYXNzKCdoaWRkZW4nKSkgew0KCQkJ +CWNvbW1lbnRzSGVhZGVyLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTsNCgkJCX0NCgkJ +fQ0KDQoJCXJldHVybiByZXBsaWVzOw0KCX0sDQoJDQoJeG1sUmVzcG9uc2VIYW5k +bGVyX2NvbW1lbnQ6IGZ1bmN0aW9uKHhtbE5vZGVzLCBwYXJhbXMpew0KCQlpZih4 +bWxOb2Rlcy5tZXNzYWdlICYmIHhtbE5vZGVzLm1lc3NhZ2UubGVuZ3RoICYmIHht +bE5vZGVzLmNvbW1lbnQgJiYgeG1sTm9kZXMuY29tbWVudC5sZW5ndGgpIHsNCgkJ +CXBhcmFtcy5mb3JtLmVsZW1lbnRzWyd0aW1lZmllbGQnXS52YWx1ZSA9IHhtbE5v +ZGVzLnRpbWVmaWVsZFswXS5maXJzdENoaWxkLmRhdGE7DQoJCQl2YXIgY29tbWVu +dHNIb2xkZXIgPSAkKCdjb21tZW50cycpOw0KCQkJDQoJCQl2YXIganNmbGRobGQ7 +DQoJCQlqc2ZsZGhsZCA9ICQoJ2pzLWZpZWxkLWhvbGRlci13aXRoLWhlbHAnKTsN +CgkJCWlmICghanNmbGRobGQpIHsNCgkJCQlqc2ZsZGhsZCA9ICQoJ2pzLWZpZWxk +LWhvbGRlcicpOw0KCQkJfTsNCgkJCXZhciBwcmV2aWV3SG9sZGVyID0ganNmbGRo +bGQuZ2V0RWxlbWVudCgnLicgKyB0aGlzLmNsYXNzTmFtZXMucHJldmlld0hvbGRl +cik7DQoJCQlpZiAoIWpzZmxkaGxkLmNsYXNzTmFtZS5tYXRjaCgvbWVzc2FnZS1i +b3gtZm9ybS8pKXsNCgkJCQlqc2ZsZGhsZC5hZGRDbGFzcygnaGlkZGVuJyk7DQoJ +CQkJdGhpcy5fYWRkQ29tbWVudHMoeG1sTm9kZXMpOw0KCQkJfSBlbHNlew0KCQkJ +CXRoaXMuX2FkZENvbW1lbnRzKHhtbE5vZGVzLCB0cnVlKTsNCgkJCQkNCgkJCQlw +YXJhbXMuZm9ybVsnY29tbWVudFttZXNzYWdlXSddLnZhbHVlPSIiOw0KCQkJfQ0K +CQkJDQoJCQkkKHBhcmFtcy5mb3JtKS5yZW1vdmVDbGFzcyhwYXJhbXMubG9hZGlu +Z0NsYXNzTmFtZSk7DQoJCQl0aGlzLmFkZE5ld0NvbW1lbnRzVG9CYXIoKTsNCgkJ +CXZhciBjb21tZW50c19oZWFkZXIgPSAkKCdjb21tZW50cy1oZWFkZXInKTsNCgkJ +CWlmIChjb21tZW50c19oZWFkZXIpIHsNCgkJCQljb21tZW50c19oZWFkZXIuYWRk +Q2xhc3MoJ2NvbW1lbnRzLWhlYWRlci12aXNpYmxlJyk7DQoJCQl9DQoJCQlwYXJh +bXMuZm9ybS5sYXN0X3RleHQgPSBwYXJhbXMuZm9ybVsnY29tbWVudFttZXNzYWdl +XSddLnZhbHVlOw0KCQkJdmFyIGlucHV0c190b19ibHVyID0gJChwYXJhbXMuZm9y +bSkuZ2V0RWxlbWVudHMoJ2lucHV0Jyk7DQoJCQlmb3IgKHZhciBpPTAsIGwgPSBp +bnB1dHNfdG9fYmx1ci5sZW5ndGg7IGkgPCBsOyBpKyspIHsNCgkJCQlpbnB1dHNf +dG9fYmx1cltpXS5ibHVyKCk7DQoJCQl9Ow0KCQl9DQoJCWlmICh4bWxOb2Rlcy5j +b21tZW50ICYmIHhtbE5vZGVzLmNvbW1lbnQubGVuZ3RoKQ0KCQkJdGhpcy5maXJl +RXZlbnQoJ3RtOmxvYWRpbmctZmluaXNoZWQnKTsNCgkJdGhpcy51cGRhdGVBbGxD +b21tZW50c0NvdW50KCk7DQoJCSQocGFyYW1zLmZvcm0pLnJlbW92ZUNsYXNzKCds +b2FkaW5nJyk7DQoJCQ0KCX0sDQoNCgl4bWxSZXNwb25zZUhhbmRsZXJfY29tcGFu +eV9jb21tZW50OiBmdW5jdGlvbih4bWxOb2RlcywgcGFyYW1zKXsNCgkJaWYoeG1s +Tm9kZXMubWVzc2FnZSAmJiB4bWxOb2Rlcy5tZXNzYWdlLmxlbmd0aCAmJiB4bWxO +b2Rlcy5jb21wYW55X2NvbW1lbnQgJiYgeG1sTm9kZXMuY29tcGFueV9jb21tZW50 +Lmxlbmd0aCkgew0KCQkJcGFyYW1zLmZvcm0uZWxlbWVudHNbJ3RpbWVmaWVsZCdd +LnZhbHVlID0geG1sTm9kZXMudGltZWZpZWxkWzBdLmZpcnN0Q2hpbGQuZGF0YTsN +CgkJCXZhciBjb21tZW50c0hvbGRlciA9ICQoJ2NvbW1lbnRzJyk7DQoJCQl2YXIg +cmVwbHlfaG9sZGVyID0gY29tbWVudHNIb2xkZXIuZ2V0RWxlbWVudCgnLicgKyB0 +aGlzLmNsYXNzTmFtZXMudGhyZWFkKTsNCgkJCXZhciBlbnRyeV9yZXBsaWVzID0g +Y29tbWVudHNIb2xkZXIuZ2V0RWxlbWVudHMoJy4nICsgdGhpcy5jbGFzc05hbWVz +LmNvbW1lbnRJdGVtKTsNCgkJCWZvcih2YXIgaT0wLCB4bWxfbGVuZ3RoID0geG1s +Tm9kZXMuY29tcGFueV9jb21tZW50Lmxlbmd0aDsgaTx4bWxfbGVuZ3RoOyBpKysp +IHsNCgkJCQllbnRyeV9yZXBsaWVzLnNvcnQodGhpcy5zb3J0QXJyYXkpOw0KCQkJ +CXJlcGx5X2hvbGRlci5pbnNlcnRCZWZvcmUoZW50cnlfcmVwbHlfaXRlbSwgZW50 +cnlfcmVwbGllc1swXSk7DQoJCQkJdGhpcy5idWlsZC5jb21tZW50KHhtbE5vZGVz +LmNvbXBhbnlfY29tbWVudFtpXS5nZXRBdHRyaWJ1dGUoJ2NvbW1lbnRfaWQnKSwg +eG1sTm9kZXMuY29tcGFueV9jb21tZW50W2ldLmZpcnN0Q2hpbGQuZGF0YSk7DQoJ +CQkJIGlmKHhtbE5vZGVzLmNvbXBhbnlfY29tbWVudFtpXS5nZXRBdHRyaWJ1dGUo +J3VzZXJfY29tbWVudCcpPT0xKSB7IA0KCQkJCQkkKCdjb21tZW50XycgKyB4bWxO +b2Rlcy5jb21wYW55X2NvbW1lbnRbaV0uZ2V0QXR0cmlidXRlKCdjb21tZW50X2lk +JykpLmFkZENsYXNzKCdteS1yZXBseScpOw0KCQkJCX0gZWxzZSB7DQoJCQkJCSQo +J2NvbW1lbnRfJyArIHhtbE5vZGVzLmNvbXBhbnlfY29tbWVudFtpXS5nZXRBdHRy +aWJ1dGUoJ2NvbW1lbnRfaWQnKSkuYWRkQ2xhc3MoJ25ldy1yZXBseScpOw0KCQkJ +CX0NCgkJCX0NCgkJCXZhciBqc2ZsZGhsZCA9ICQoJ2pzLWZpZWxkLWhvbGRlcicp +Ow0KCQkJdmFyIHByZXZpZXdIb2xkZXIgPSBqc2ZsZGhsZC5nZXRFbGVtZW50KCcu +JyArIHRoaXMuY2xhc3NOYW1lcy5wcmV2aWV3SG9sZGVyKTsNCgkJCWpzZmxkaGxk +LmFkZENsYXNzKCdoaWRkZW4nKTsNCgkJCSQocGFyYW1zLmZvcm0pLnJlbW92ZUNs +YXNzKHBhcmFtcy5sb2FkaW5nQ2xhc3NOYW1lKTsNCgkJCXRoaXMuYWRkTmV3Q29t +bWVudHNUb0JhcigpOw0KCQl9DQoJCWlmICh4bWxOb2Rlcy5jb21wYW55X2NvbW1l +bnQgJiYgeG1sTm9kZXMuY29tcGFueV9jb21tZW50Lmxlbmd0aCkNCgkJCXRoaXMu +ZmlyZUV2ZW50KCd0bTpsb2FkaW5nLWZpbmlzaGVkJyk7DQoJCXRoaXMudXBkYXRl +QWxsQ29tbWVudHNDb3VudCgpOw0KCQkkKHBhcmFtcy5mb3JtKS5yZW1vdmVDbGFz +cygnbG9hZGluZycpOw0KCX0sDQoJDQoJeG1sUmVzcG9uc2VIYW5kbGVyX3ByZXZp +ZXc6IGZ1bmN0aW9uKHhtbE5vZGVzLCBwYXJhbXMpew0KCQlpZih4bWxOb2Rlcy5w +cmV2aWV3ICYmIHhtbE5vZGVzLnByZXZpZXcubGVuZ3RoKSB7DQoJCQl2YXIgcHJl +dmlld0hvbGRlciA9ICQoJ2pzLWZpZWxkLWhvbGRlcicpLmdldEVsZW1lbnQoJy4n +ICsgdGhpcy5jbGFzc05hbWVzLnByZXZpZXdIb2xkZXIpOw0KCQkJcHJldmlld0hv +bGRlci5yZW1vdmVDbGFzcygnaGlkZGVuJykNCgkJCXByZXZpZXdIb2xkZXIuaW5u +ZXJIVE1MID0geG1sTm9kZXMucHJldmlld1swXS5maXJzdENoaWxkLmRhdGE7DQoJ +CQkkKHBhcmFtcy5mb3JtKS5yZW1vdmVDbGFzcyhwYXJhbXMubG9hZGluZ0NsYXNz +TmFtZSk7DQoJCQkkKHBhcmFtcy5mb3JtKS5yZW1vdmVDbGFzcygnbG9hZGluZycp +Ow0KCQkJaWYgKHBhcmFtcy5mb3JtLmlucHV0X3ByZXZpZXcpew0KCQkJCSQocGFy +YW1zLmZvcm0uaW5wdXRfcHJldmlldykucmVtb3ZlQ2xhc3MoJ2xvYWRpbmcnKTsN +CgkJCX0NCgkJCXRoaXMuYnVpbGQuX2hpZ2hsaWdodChwcmV2aWV3SG9sZGVyKTsN +CgkJfQ0KCX0sDQoJDQoJeG1sUmVzcG9uc2VIYW5kbGVyX2Vycm9yOiBmdW5jdGlv +bih4bWxOb2RlcywgcGFyYW1zKXsNCgkJaWYoeG1sTm9kZXMuZXJyb3IgJiYgeG1s +Tm9kZXMuZXJyb3IubGVuZ3RoKSB7DQoJCQkkKHBhcmFtcy5mb3JtKS5yZW1vdmVD +bGFzcyhwYXJhbXMubG9hZGluZ0NsYXNzTmFtZSk7DQoJCQlmb3IgKHZhciBpPTA7 +IGk8eG1sTm9kZXMuZXJyb3IubGVuZ3RoOyBpKyspew0KCQkJCXZhciBlcnJvck1l +c3NhZ2UgPSB4bWxOb2Rlcy5lcnJvcltpXS5maXJzdENoaWxkID8geG1sTm9kZXMu +ZXJyb3JbaV0uZmlyc3RDaGlsZC5kYXRhIDogdGhpcy5lcnJvck1lc3NhZ2VzLnVu +a25vd25FcnJvcjsNCgkJCX0NCgkJCXRoaXMuc2hvd0Vycm9yKGVycm9yTWVzc2Fn +ZSk7DQoJCX0NCgkJJChwYXJhbXMuZm9ybSkucmVtb3ZlQ2xhc3MoJ2xvYWRpbmcn +KTsNCgkJaWYgKHBhcmFtcy5mb3JtLmlucHV0X3ByZXZpZXcpew0KCQkJJChwYXJh +bXMuZm9ybS5pbnB1dF9wcmV2aWV3KS5yZW1vdmVDbGFzcygnbG9hZGluZycpOw0K +CQl9DQoJfSwNCgkNCglzZW5kQ29tbWVudDogZnVuY3Rpb24oZm9ybSwgc3VibWl0 +VHlwZSwgbm9kZSkgew0KCQkkKCdqcy1maWVsZC1ob2xkZXInKS5yZW1vdmVDbGFz +cygnanMtbWFya2VkLWVycm9yJyk7DQoJCSQobm9kZSkuYWRkQ2xhc3MoJ2xvYWRp +bmcnKQ0KCQl0aGlzLnNlbmREYXRhKGZvcm0sIHN1Ym1pdFR5cGUpOw0KCQl0aGlz +LmZpcmVFdmVudCgndG06bG9hZGluZy1zdGFydGVkJyk7DQoJfSwNCgkNCglzZW5k +T25FbnRlcjogZnVuY3Rpb24odGV4dGFyZWEpIHsNCgkJdGV4dGFyZWEub25rZXl1 +cCA9IGZ1bmN0aW9uKGV2KSB7DQoJCQlpZighZXYpIHsNCgkJCQlldiA9IHdpbmRv +dy5ldmVudDsNCgkJCX0NCgkJCXZhciBrZXkgPSBnZXRDaGFyQ29kZShldik7DQoJ +CQlpZihrZXk9PTEzICYmIGV2LmN0cmxLZXkpIHsNCgkJCQljb21tZW50Rm9ybS5z +ZW5kQ29tbWVudCh0aGlzLmZvcm0sICdjb21tZW50JywgdGhpcy5mb3JtKTsNCgkJ +CX0NCgkJfQ0KCX0sDQoJDQoJbW92ZUZvcm06IGZ1bmN0aW9uKHJlcGx5X2Zvcm1f +aWQpIHsNCgkJdmFyIGZvcm1Ib2xkZXIgPSAkKHJlcGx5X2Zvcm1faWQpOw0KCQl2 +YXIgcGFyZW50X2lkID0gcmVwbHlfZm9ybV9pZC5tYXRjaCgvcmVwbHlfZm9ybV8o +LiopLylbMV07DQoJCXBhcmVudF9pZCA9IHBhcnNlSW50KHBhcmVudF9pZCk7DQoJ +CWlmICghYXJndW1lbnRzLmNhbGxlZS5hZGRjKSB7DQoJCQlhcmd1bWVudHMuY2Fs +bGVlLmFkZGMgPSAkKCd3cmFwcGVyJykuZ2V0RWxlbWVudCgnLmFkZC1jb21tZW50 +Jyk7DQoJCQkNCgkJfQ0KCQl2YXIgaW5mb2xpbmVIb2xkZXIgPSBhcmd1bWVudHMu +Y2FsbGVlLmFkZGM7DQoJCWlmIChpbmZvbGluZUhvbGRlcikgew0KCQkNCgkJCQ0K +CQkJaWYgKCFhcmd1bWVudHMuY2FsbGVlLmpzZmxkaGxkKSB7DQoJCQkJaWYgKCEo +YXJndW1lbnRzLmNhbGxlZS5qc2ZsZGhsZCA9ICQoJ2pzLWZpZWxkLWhvbGRlci13 +aXRoLWhlbHAnKSkpIHsNCgkJCQkJYXJndW1lbnRzLmNhbGxlZS5qc2ZsZGhsZCA9 +ICQoJ2pzLWZpZWxkLWhvbGRlcicpOw0KCQkJCX0gZWxzZXsNCgkJCQkJYXJndW1l +bnRzLmNhbGxlZS53aXRoaGVscCA9IHRydWU7DQoJCQkJfQ0KCQkJCWFyZ3VtZW50 +cy5jYWxsZWUuY29tbWhvbGRyID0gYXJndW1lbnRzLmNhbGxlZS5qc2ZsZGhsZC5n +ZXRFbGVtZW50KCcjanMtZmllbGQtY29tbWVudCcpOw0KCQkJCWFyZ3VtZW50cy5j +YWxsZWUucHJ3aGxkID0gYXJndW1lbnRzLmNhbGxlZS5qc2ZsZGhsZC5nZXRFbGVt +ZW50KCcuJyArIHRoaXMuY2xhc3NOYW1lcy5wcmV2aWV3SG9sZGVyKTsNCgkJCQlh +cmd1bWVudHMuY2FsbGVlLnRyZWVpbnB1dCA9ICBhcmd1bWVudHMuY2FsbGVlLmpz +ZmxkaGxkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdmb3JtJylbMF0uZWxlbWVudHNb +J2NvbW1lbnRbcGFyZW50X2lkXSddOw0KDQoJCQl9DQoJCQlpZiAoIWFyZ3VtZW50 +cy5jYWxsZWUud2l0aGhlbHApIHsNCgkJCQl2YXIgaW5mb2xpbmUgPSBpbmZvbGlu +ZUhvbGRlci5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGwnKVswXTsNCgkJCQlpZiAo +aW5mb2xpbmUpIHsNCgkJCQkJaWYocGFyZW50X2lkPT0wKSB7DQoJCQkJCQkkKGlu +Zm9saW5lKS5yZW1vdmVDbGFzcygnaGlkZGVuJyk7DQoJCQkJCX0NCgkJCQkJZWxz +ZSB7DQoJCQkJCQkkKGluZm9saW5lKS5hZGRDbGFzcygnaGlkZGVuJyk7DQoJCQkJ +CX0NCgkJCQl9DQoJCQl9DQoJCQkNCgkJCXZhciBqc2ZsZGhsZCA9IGFyZ3VtZW50 +cy5jYWxsZWUuanNmbGRobGQ7DQoJCQl2YXIgY29tbWVudEhvbGRlciA9IGFyZ3Vt +ZW50cy5jYWxsZWUuY29tbWhvbGRyOw0KCQkJdmFyIHByZXZpZXdIb2xkZXIgPSBh +cmd1bWVudHMuY2FsbGVlLnByd2hsZDsNCgkJCXZhciB0cmVlaW5wdXQgPSBhcmd1 +bWVudHMuY2FsbGVlLnRyZWVpbnB1dDsNCgkJCWlmKGpzZmxkaGxkKSB7DQoJCQkJ +Zm9ybUhvbGRlci5hcHBlbmRDaGlsZChqc2ZsZGhsZCk7DQoJCQkJdHJlZWlucHV0 +LnZhbHVlID0gcGFyZW50X2lkOw0KCQkJCSQocHJldmlld0hvbGRlcikuYWRkQ2xh +c3MoJ2hpZGRlbicpOw0KCQkJCXByZXZpZXdIb2xkZXIuaW5uZXJIVE1MID0gJyc7 +DQoJCQkJY29tbWVudEhvbGRlci52YWx1ZSA9ICcnOw0KCQkJCWpzZmxkaGxkLnJl +bW92ZUNsYXNzKCdoaWRkZW4nKTsNCgkJCQljb21tZW50SG9sZGVyLmZvY3VzKCk7 +DQoJCQl9DQoJCX0NCg0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0sDQoJDQoJc2Ny +b2xsVG9BbmNob3I6IGZ1bmN0aW9uKGFuY2hvcil7DQoJCXdpbmRvdy5sb2NhdGlv +bi5ocmVmID0gd2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoJyMnKVswXSArIGFu +Y2hvcjsgDQoJfSwNCgkNCglyZWxvYWRDb21tZW50czogZnVuY3Rpb24oKSB7DQoJ +CXZhciB1cmwgPSAnL2FqYXgvY29tbWVudHMvZ2V0X25ld19jb21tZW50cy8nOw0K +CQlpZihkb2N1bWVudC5mb3Jtc1snY29tbWVudF9mb3JtJ10pIHsNCgkJCXZhciB0 +aW1lZmllbGQgPSBkb2N1bWVudC5mb3Jtc1snY29tbWVudF9mb3JtJ10uZWxlbWVu +dHNbJ3RpbWVmaWVsZCddLnZhbHVlOw0KCQkJdmFyIGRhdGEgPSAndGFyZ2V0X2lk +PScrIHRoaXMudGFyZ2V0SWQgKycmdGFyZ2V0X3R5cGU9JyArIHRoaXMudGFyZ2V0 +VHlwZSArICcmdGltZWZpZWxkPScgKyB0aW1lZmllbGQ7DQoJCQlfdGhpcyA9IHRo +aXM7DQoJCQlhamF4UG9zdCgNCgkJCQkJdXJsLA0KCQkJCQlkYXRhLA0KCQkJCQl0 +aGlzLnJlbG9hZENvbW1lbnRzT25sb2FkLA0KCQkJCQlfdGhpcw0KCQkJCQkpOw0K +CQkJfQ0KCQl0aGlzLmZpcmVFdmVudCgndG06bG9hZGluZy1zdGFydGVkJyk7DQoJ +CXJldHVybiBmYWxzZTsNCgl9LA0KCQ0KCXJlbG9hZENvbW1lbnRzT25sb2FkOiBm +dW5jdGlvbihhamF4T2JqLCBfdGhpcykgew0KCQl2YXIgY29tbWVudHNIb2xkZXIg +PSAkKCdjb21tZW50cycpOw0KCQl2YXIgeG1sT2JqID0gYWpheE9iai5yZXNwb25z +ZVhNTDsNCgkJdmFyIHhtbE5vZGVzID0gX3RoaXMucGFyc2VYTUwoeG1sT2JqKTsN +CgkJY29tbWVudHNIb2xkZXIuZ2V0RWxlbWVudHMoJy5uZXctcmVwbHknKS5yZW1v +dmVDbGFzcygnbmV3LXJlcGx5Jyk7DQoJCWlmKHhtbE5vZGVzLm1lc3NhZ2UgJiYg +eG1sTm9kZXMubWVzc2FnZS5sZW5ndGggJiYgeG1sTm9kZXMuY29tbWVudCAmJiB4 +bWxOb2Rlcy5jb21tZW50Lmxlbmd0aCkgew0KCQkJZG9jdW1lbnQuZm9ybXNbJ2Nv +bW1lbnRfZm9ybSddLmVsZW1lbnRzWyd0aW1lZmllbGQnXS52YWx1ZSA9IHhtbE5v +ZGVzLnRpbWVmaWVsZFswXS5maXJzdENoaWxkLmRhdGE7DQoJCQlfdGhpcy5fYWRk +Q29tbWVudHMoeG1sTm9kZXMpOw0KCQl9DQoJCV90aGlzLmFkZE5ld0NvbW1lbnRz +VG9CYXIoKTsNCgkJY29tbWVudEZvcm0uZmlyZUV2ZW50KCd0bTpsb2FkaW5nLWZp +bmlzaGVkJyk7DQoJCV90aGlzLnVwZGF0ZUFsbENvbW1lbnRzQ291bnQoKTsNCgl9 +LA0KCQ0KCWFkZE5ld0NvbW1lbnRzVG9CYXI6IGZ1bmN0aW9uKCkgew0KCQl0aGlz +Lm5ld19yZXBsaWVzID0gJChkb2N1bWVudCkuZ2V0RWxlbWVudHMoJy5uZXctcmVw +bHknKTsNCgkJZm9yICh2YXIgaT10aGlzLm5ld19yZXBsaWVzLmxlbmd0aC0xO2k+ +PTA7aS0tKSB7DQoJCQlpZiAodGhpcy5uZXdfcmVwbGllc1tpXS5oYXNDbGFzcygn +bXktcmVwbHknKSkgew0KCQkJCXRoaXMubmV3X3JlcGxpZXMuc3BsaWNlKGksIDEp +Ow0KCQkJfSBlbHNlIGlmICh0aGlzLm5ld19yZXBsaWVzW2ldLmhhc0NsYXNzKCdz +ZWVuJykpIHsNCgkJCQl0aGlzLm5ld19yZXBsaWVzLnNwbGljZShpLCAxKTsNCgkJ +CX0NCgkJfQ0KCQl0aGlzLnVwZGF0ZU5ld0NvbW1lbnRzQ291bnQoKTsNCgl9LA0K +CQ0KCW5leHROZXdDb21tZW50OiBmdW5jdGlvbigpew0KCQlpZiAodGhpcy5uZXdf +cmVwbGllcyAmJiB0aGlzLm5ld19yZXBsaWVzLmxlbmd0aCkgew0KCQkJdmFyIGNv +bW1lbnQgPSB0aGlzLm5ld19yZXBsaWVzWzBdOw0KCQkJY29tbWVudC5hZGRDbGFz +cygnc2VlbicpOw0KCQkJdGhpcy5uZXdfcmVwbGllcy5zcGxpY2UoMCwgMSk7DQoJ +CQl0aGlzLmdvVG9Db21tZW50KGNvbW1lbnQpOw0KCQkJdGhpcy51cGRhdGVOZXdD +b21tZW50c0NvdW50KCk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0sDQoJDQoJ +dXBkYXRlQWxsQ29tbWVudHNDb3VudDogZnVuY3Rpb24oKSB7DQoJCWlmICgkKCdj +b21tZW50cycpLmdldEVsZW1lbnQoJy5jb21tZW50cy1oZWFkZXIgLmpzLWNvbW1l +bnRzLWNvdW50JykpDQoJCQkkKCdjb21tZW50cycpLmdldEVsZW1lbnQoJy5jb21t +ZW50cy1oZWFkZXIgLmpzLWNvbW1lbnRzLWNvdW50JykuaW5uZXJIVE1MID0gJCgn +Y29tbWVudHMnKS5nZXRFbGVtZW50cygnLm1zZy1tZXRhJykubGVuZ3RoLnRvU3Ry +aW5nKCk7DQoJfSwNCgkNCgl1cGRhdGVOZXdDb21tZW50c0NvdW50OiBmdW5jdGlv +bigpIHsNCgkJaWYgKHRoaXMubmV3X3JlcGxpZXMpIHsNCgkJCXZhciBjb3VudCA9 +IHRoaXMubmV3X3JlcGxpZXMubGVuZ3RoOw0KCQkJdGhpcy5maXJlRXZlbnQoJ3Rt +Om5ldy1jb21tZW50cy1jb3VudC1jaGFuZ2VkJywgdGhpcy5uZXdfcmVwbGllcy5s +ZW5ndGgpOw0KCQl9DQoJfSwNCgkNCglnb1RvQ29tbWVudDogZnVuY3Rpb24oY29t +bWVudCkgew0KCQl0aGlzLmZpcmVFdmVudCgidG06Z28tdG8tY29tbWVudCIsIGNv +bW1lbnQucGFyZW50Tm9kZSk7DQoJCXRoaXMuc2Nyb2xsZXIgPSAodGhpcy5zY3Jv +bGxlciB8fCBuZXcgRnguU2Nyb2xsKHdpbmRvdykpOw0KCQl0aGlzLnNjcm9sbGVy +LnRvRWxlbWVudChjb21tZW50KTsNCgkJcmV0dXJuIGZhbHNlOw0KCX0sDQoJDQoJ +cXVpY2tHb1RvQ29tbWVudDogZnVuY3Rpb24oY29tbWVudCkgew0KCQl0aGlzLmZp +cmVFdmVudCgidG06Z28tdG8tY29tbWVudCIsIGNvbW1lbnQucGFyZW50Tm9kZSk7 +DQoJCXdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIiMiICsgY29tbWVudC5wYXJlbnRO +b2RlLmlkOw0KCQlyZXR1cm4gZmFsc2U7DQoJfSwNCg0KCWdvVG9QYXJlbnRDb21t +ZW50OiBmdW5jdGlvbihsaW5rKSB7DQoJCXZhciBpZCA9IGxpbmsuaHJlZi5zdWJz +dHIobGluay5ocmVmLmluZGV4T2YoJyMnKSsxKTsNCgkJdmFyIGVsbSA9ICQoaWQp +Ow0KCQlsaW5rID0gJChsaW5rKTsNCgkJZWxtLmdldEVsZW1lbnQoJy5kb3duLXRv +LWNoaWxkJykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpOw0KCQllbG0uZ2V0RWxlbWVu +dCgnLmRvd24tdG8tY2hpbGQgYScpLmhyZWYgPSAnIycgKyBsaW5rLmdldFBhcmVu +dCgnLmNvbW1lbnRfaG9sZGVyJykuaWQ7DQoNCgkJdGhpcy5zY3JvbGxlciA9ICh0 +aGlzLnNjcm9sbGVyIHx8IG5ldyBGeC5TY3JvbGwod2luZG93KSk7DQoJCXRoaXMu +c2Nyb2xsZXIudG9FbGVtZW50KGVsbSk7DQoNCgkJcmV0dXJuIGZhbHNlOwkJDQoJ +fSwNCgkNCglnb1RvQ2hpbGRDb21tZW50OiBmdW5jdGlvbihsaW5rKSB7DQoJCXZh +ciBpZCA9IGxpbmsuaHJlZi5zdWJzdHIobGluay5ocmVmLmluZGV4T2YoJyMnKSsx +KTsNCgkJdmFyIGVsbSA9ICQoaWQpOw0KCQlsaW5rID0gJChsaW5rKTsNCgkJbGlu +ay5nZXRQYXJlbnQoJy5jb21tZW50X2hvbGRlcicpLmdldEVsZW1lbnQoJy5kb3du +LXRvLWNoaWxkJykuYWRkQ2xhc3MoJ2hpZGRlbicpOw0KDQoJCXRoaXMuc2Nyb2xs +ZXIgPSAodGhpcy5zY3JvbGxlciB8fCBuZXcgRnguU2Nyb2xsKHdpbmRvdykpOw0K +CQl0aGlzLnNjcm9sbGVyLnRvRWxlbWVudChlbG0pOw0KDQoJCXJldHVybiBmYWxz +ZTsJCQ0KCX0sDQoJCQ0KCWdvVG9JZDogZnVuY3Rpb24oaWQpIHsNCgkJdGhpcy5z +Y3JvbGxlciA9ICh0aGlzLnNjcm9sbGVyIHx8IG5ldyBGeC5TY3JvbGwod2luZG93 +KSk7DQoJCXRoaXMuc2Nyb2xsZXIudG9FbGVtZW50KCQoaWQpKTsNCgkJcmV0dXJu +IGZhbHNlOw0KCX0sDQoJDQoJc29ydEFycmF5OiBmdW5jdGlvbihhLCBiKSB7DQoJ +ICBpZiAoYS5vZmZzZXRUb3AgPCBiLm9mZnNldFRvcCkNCgkgICAgcmV0dXJuIC0x +Ow0KCSAgaWYgKGEub2Zmc2V0VG9wID4gYi5vZmZzZXRUb3ApDQoJICAgIHJldHVy +biAxOw0KCSAgcmV0dXJuIDA7CQkNCgl9LA0KCQ0KDQoJc2hvd0Vycm9yOiBmdW5j +dGlvbihlcnJvck1zZyl7DQoJCWlmICghZXJyb3JNc2cpIHsNCgkJCWVycm9yTXNn +ID0gRkFULnZvdGluZ3NfdW5rbm93bl9lcnJvcjsNCgkJfQ0KCQlmdXR1X2FsZXJ0 +KEZBVC52b3RpbmdzX2hlYWRlciwgZXJyb3JNc2csIHRydWUsICdlcnJvcicpOw0K +CX0NCgkNCn0pOw0KDQp2YXIgY29tbWVudEZvcm0gPSBuZXcgY29tbWVudEZvcm1D +bGFzcygpOw0KdG0uaW5pdC5hZGQoZnVuY3Rpb24oKXsNCgl2YXIgY19mb3JtX25v +ZGUgPSAkKCdjb21tZW50X2Zvcm0nKTsNCglpZiAoY19mb3JtX25vZGUpIHsNCgkJ +Y19mb3JtX25vZGUuaW5wdXRfcHJldmlldyA9IGNfZm9ybV9ub2RlLmdldEVsZW1l +bnQoJ2lucHV0LnByZXZpZXcnKTsNCgkJaWYgKGNfZm9ybV9ub2RlLmlucHV0X3By +ZXZpZXcpew0KCQkJDQoJCQljX2Zvcm1fbm9kZS5pbnB1dF9wcmV2aWV3LmFkZEV2 +ZW50KCdjbGljaycsZnVuY3Rpb24oKXsNCgkJCQljb21tZW50Rm9ybS5zZW5kQ29t +bWVudChjX2Zvcm1fbm9kZSwgJ3ByZXZpZXcnLCBjX2Zvcm1fbm9kZS5pbnB1dF9w +cmV2aWV3KQ0KCQkJfSk7DQoJCX0NCgkJDQoJCXZhciBjX2Zvcm1fc3VibWl0ID0g +ZnVuY3Rpb24oKXsNCgkJCWlmIChjX2Zvcm1fbm9kZS5sYXN0X3RleHQgPT0gY19m +b3JtX25vZGVbJ2NvbW1lbnRbbWVzc2FnZV0nXS52YWx1ZSl7DQoJCQkJDQoJCQl9 +IGVsc2Ugew0KCQkJCWNvbW1lbnRGb3JtLnNlbmRDb21tZW50KGNfZm9ybV9ub2Rl +LCBjb21tZW50X3R5cGUsIGNfZm9ybV9ub2RlKTsgDQoJCQkJDQoJCQl9DQoJCX0N +CgkJDQoJCXZhciBjb21tZW50X3R5cGUgPSBjX2Zvcm1fbm9kZS5nZXRFbGVtZW50 +KCcjY29tbWVudF90eXBlJykudGl0bGU7DQoJCWNfZm9ybV9ub2RlLmFkZEV2ZW50 +cyh7DQoJCQknc3VibWl0JzpmdW5jdGlvbigpew0KCQkJCWNfZm9ybV9zdWJtaXQo +KTsNCgkJCQlyZXR1cm4gZmFsc2U7CQ0KCQkJfSwNCgkJCSdrZXl1cCc6ZnVuY3Rp +b24oZSl7DQoJCQkJaWYoZS5jb250cm9sICYmIChlLmtleSA9PSAnZW50ZXInKSkg +ew0KCQkJCQljX2Zvcm1fc3VibWl0KCk7DQoJCQkJfQ0KCQkJfQ0KCQkJDQoJCX0p +DQoJCQ0KCQkNCgkJDQoJfQ0KfSkNCg== + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline; filename=voting.js +Content-Type: application/x-javascript; charset=utf-8; name=voting.js +Content-Location: http://habrahabr.ru/js/1307631427/voting.js +Content-Transfer-Encoding: Base64 + +LyoNCjxkaXYgaWQ9InVzZXJ7eyAkaWQgfX0iIGNsYXNzPSJ2b3RlX2hvbGRlciAo +bG9naW5faG9sZGVyKSI+DQoJCTxkaXYgY2xhc3M9InZvdGluZyAocG9zaXRpdmUg +fHwgbmVnYXRpdmUpIChtaW5lIHx8IHZvdGVkKSAocGx1cyB8fCBtaW51cykiPg0K +CQkJPHNwYW4gY2xhc3M9InZvdGVfdGl0bGUiPtCa0LDRgNC80LAg0L/QvtC70YzQ +t9C+0LLQsNGC0LXQu9GPPC9zcGFuPg0KCQkJPHNwYW4gY2xhc3M9InZvdGVfcG9p +bnRzIj4NCgkJCQk8ZW0+e3sgJHNjb3JlIH19PC9lbT4NCgkJCQk8c3Ryb25nPnt7 +ICRjb3VudCB9fSAgL3N0cm9uZz4NCgkJCTwvc3Bhbj4NCgkJCTxkaXYgY2xhc3M9 +InZvdGVfYnV0dG9ucyI+DQoJCQkJPGEgb25jbGljaz0icmV0dXJuIFZvdGVyLnZv +dGUoZXZlbnQsIHRoaXMsICd1c2VyIHx8IGNvbW1lbnQgfHwgcG9zdCcsICdwbHVz +Jyk7IiBjbGFzcz0idm90ZV9wbHVzIiBocmVmPSIiPjwvYT4NCgkJCQk8YSBvbmNs +aWNrPSJyZXR1cm4gVm90ZXIudm90ZShldmVudCwgdGhpcywgJ3VzZXIgfHwgY29t +bWVudCB8fCBwb3N0JywgJ21pbnVzJyk7IiBjbGFzcz0idm90ZV9taW51cyIgaHJl +Zj0iIj48L2E+DQoJCQk8L2Rpdj4NCgkJPC9kaXY+DQoJPC9kaXY+DQo8L2Rpdj4N +CiovDQoNCg0KDQpWb3RlciA9IHsNCgl2b3RlVHlwZTogew0KCQkJcG9zdDogew0K +CQkJCQl1cmw6ICh3aW5kb3cuYmFzZVVSTCB8fCAnJykgKyAnL2FqYXgvdm90aW5n +LycsDQoJCQkJCWREYXRhOiB7IC8vIGRlZmF1bHQgZGF0YQ0KCQkJCQkJYWN0aW9u +OiAndm90ZScsDQoJCQkJCQltb2RlOiAncG9zdHMnLA0KCQkJCQkJdGFyZ2V0X25h +bWU6ICdwb3N0JywNCgkJCQkJCWRibFZvdGU6IGZhbHNlIC8vIGRvdWJsZSB2b3Rp +bmcgaXMgYWxsb3dkZWQNCgkJCQkJfQ0KCQkJfSwNCg0KCQkJcG9zdF9jb21tZW50 +OiB7DQoJCQkJCXVybDogKHdpbmRvdy5iYXNlVVJMIHx8ICcnKSArICcvYWpheC92 +b3RpbmcvJywNCgkJCQkJZERhdGE6IHsNCgkJCQkJCWFjdGlvbjogJ3ZvdGUnLA0K +CQkJCQkJdGFyZ2V0X25hbWU6ICdwb3N0X2NvbW1lbnQnLA0KCQkJCQkJZGJsVm90 +ZTogZmFsc2UNCgkJCQkJfQ0KCQkJfSwNCg0KCQkJdXNlcjogew0KCQkJCQl1cmw6 +ICh3aW5kb3cuYmFzZVVSTCB8fCAnJykgKyAnL2FqYXgvdm90aW5nLycsDQoJCQkJ +CWREYXRhOiB7DQoJCQkJCQlhY3Rpb246ICd2b3RlJywNCgkJCQkJCW1vZGU6ICd1 +c2VycycsDQoJCQkJCQl0YXJnZXRfbmFtZTogJ3VzZXInLA0KCQkJCQkJZGJsVm90 +ZTogdHJ1ZQ0KCQkJCQl9DQoJCQl9LA0KDQoJCQljb21wYW55OiB7DQoJCQkJCXVy +bDogKHdpbmRvdy5iYXNlVVJMIHx8ICcnKSArICcvYWpheC92b3RpbmcvJywNCgkJ +CQkJZERhdGE6IHsNCgkJCQkJCWFjdGlvbjogJ3ZvdGUnLA0KCQkJCQkJbW9kZTog +J2NvbXBhbnknLA0KCQkJCQkJdGFyZ2V0X25hbWU6ICdjb21wYW55JywNCgkJCQkJ +CWRibFZvdGU6IHRydWUNCgkJCQkJfQ0KCQkJfSwNCg0KCQkJYmxvZzogew0KCQkJ +CQl1cmw6ICh3aW5kb3cuYmFzZVVSTCB8fCAnJykgKyAnL2FqYXgvdm90aW5nLycs +DQoJCQkJCWREYXRhOiB7DQoJCQkJCQlhY3Rpb246ICd2b3RlJywNCgkJCQkJCW1v +ZGU6ICdibG9nJywNCgkJCQkJCXRhcmdldF9uYW1lOiAnYmxvZycsDQoJCQkJCQlk +YmxWb3RlOiB0cnVlDQoJCQkJCX0NCgkJCX0sDQoNCgkJCWNvbXBhbnlfY29tbWVu +dDogew0KCQkJCQl1cmw6ICh3aW5kb3cuYmFzZVVSTCB8fCAnJykgKyAnL2FqYXgv +dm90aW5nLycsDQoJCQkJCWREYXRhOiB7DQoJCQkJCQlhY3Rpb246ICd2b3RlJywN +CgkJCQkJCXRhcmdldF9uYW1lOiAnY29tcGFueV9jb21tZW50JywNCgkJCQkJCWRi +bFZvdGU6IHRydWUNCgkJCQkJfQ0KCQkJfSwNCg0KCQkJcWFfcXVlc3Rpb246IHsN +CgkJCQkJdXJsOiAod2luZG93LmJhc2VVUkwgfHwgJycpICsgJy9hamF4L3ZvdGlu +Zy8nLA0KCQkJCQlkRGF0YTogeyAvLyBkZWZhdWx0IGRhdGENCgkJCQkJCWFjdGlv +bjogJ3ZvdGUnLA0KCQkJCQkJbW9kZTogJ3Bvc3RzJywNCgkJCQkJCXRhcmdldF9u +YW1lOiAncWFfcXVlc3Rpb24nLA0KCQkJCQkJZGJsVm90ZTogZmFsc2UgLy8gZG91 +YmxlIHZvdGluZyBpcyBhbGxvd2RlZA0KCQkJCQl9DQoJCQl9LA0KDQoJCQlxYV9h +bnN3ZXI6IHsNCgkJCQkJdXJsOiAod2luZG93LmJhc2VVUkwgfHwgJycpICsgJy9h +amF4L3ZvdGluZy8nLA0KCQkJCQlkRGF0YTogeyAvLyBkZWZhdWx0IGRhdGENCgkJ +CQkJCWFjdGlvbjogJ3ZvdGUnLA0KCQkJCQkJdGFyZ2V0X25hbWU6ICdxYV9hbnN3 +ZXInLA0KCQkJCQkJZGJsVm90ZTogZmFsc2UgLy8gZG91YmxlIHZvdGluZyBpcyBh +bGxvd2RlZA0KCQkJCQl9DQoJCQl9DQoJfSwNCg0KDQoJdm90ZU1hcms6IHsNCgkJ +CXBsdXM6IHsNCgkJCQkJc3RyaW5nOiAncGx1cycsDQoJCQkJCW51bWJlcjogMQ0K +CQkJfSwNCg0KCQkJbWludXM6IHsNCgkJCQkJc3RyaW5nOiAnbWludXMnLA0KCQkJ +CQludW1iZXI6IC0xDQoJCQl9LA0KDQoJCQlyZXN1bHRzOiB7DQoJCQkJCXN0cmlu +ZzogJ3Jlc3VsdHMnLA0KCQkJCQludW1iZXI6IDANCgkJCX0NCgl9LA0KDQoJaHRt +bE5vZGVOYW1lczogew0KCQkJc2NvcmU6ICdzcGFuJywNCgkJCWNvdW50OiAnZW0n +LA0KCQkJbWFyazogJ3N0cm9uZycNCgl9LA0KDQoJeG1sTm9kZU5hbWVzOiB7DQoJ +CQllcnJvcjogJ2Vycm9yJywNCgkJCXNjb3JlOiAnc2NvcmUnLA0KCQkJY291bnQ6 +ICdjb3VudCcsDQoJCQltYXJrOiAnbWFyaycsDQoJCQljaGFyZ2Vfc3RyaW5nOiAn +Y2hhcmdlX3N0cmluZycNCgl9LA0KDQoJY2xhc3NOYW1lczogew0KCQkJdm90ZUhv +bGRlcjogJ3ZvdGVfaG9sZGVyJywNCgkJCXZvdGluZ0Jsb2NrOiAndm90aW5nJywN +CgkJCXZvdGVQb2ludHM6ICdtYXJrJywNCgkJCXZvdGVDb3VudDogJ3RvdGFsJywN +CgkJCWxvZ2luSG9sZGVyOiAnbG9naW5faG9sZGVyJywNCg0KCQkJaW51c2U6ICdp +bnVzZScsIC8vIGRlcHJpY2F0ZWQgKG5vdCB1c2VkKQ0KCQkJc2hvd0Nob2ljZTog +J3Nob3dfY2hvaWNlJywNCg0KCQkJaXNNaW5lOiAnbWluZScsDQoJCQlpc0V4cGly +ZWQ6ICdleHBpcmVkJywNCgkJCW5vQWNjZXNzOiAnbm9fYXV0aCcsDQoJCQkvL25v +Vm90aW5nOiAnbm9fdm90aW5nJywNCg0KCQkJaXNQb3NpdGl2ZTogJ3Bvc2l0aXZl +JywNCgkJCWlzTmVnYXRpdmU6ICduZWdhdGl2ZScsDQoNCgkJCWlzVm90ZWQ6ICd2 +b3RlZCcsDQoJCQlpc1ZvdGVkUGx1czogJ3ZvdGVkX3BsdXMnLA0KCQkJaXNWb3Rl +ZE1pbnVzOiAndm90ZWRfbWludXMnLA0KDQoJCQlpc0xvYWRpbmc6ICdpc0xvYWRp +bmcnDQoJfSwNCg0KCWNob2ljZTogew0KCQkJc2hvdzogZnVuY3Rpb24obGluayl7 +DQoJCQkJCXZhciBsaW5rR2xvYmFsUGFyZW50ID0gJChsaW5rKS5nZXRQYXJlbnQo +Jy4nICsgVm90ZXIuY2xhc3NOYW1lcy52b3RlSG9sZGVyKTsNCgkJCQkJLy9hbGVy +dChsaW5rR2xvYmFsUGFyZW50KTsgcmV0dXJuOw0KCQkJCQl2YXIgbGlua0xvY2Fs +UGFyZW50ID0gbGluazsNCgkJCQkJaWYgKCEkKGxpbmtMb2NhbFBhcmVudCkuaGFz +Q2xhc3MoVm90ZXIuY2xhc3NOYW1lcy5pc01pbmUpICYmIC8vIGlmIG5vdCBtaW5l +DQoJCQkJCQkhJChsaW5rTG9jYWxQYXJlbnQpLmhhc0NsYXNzKFZvdGVyLmNsYXNz +TmFtZXMuaXNWb3RlZCkgJiYgLy8gaWYgbm90IHZvdGVkDQoJCQkJCQkhJChsaW5r +TG9jYWxQYXJlbnQpLmhhc0NsYXNzKFZvdGVyLmNsYXNzTmFtZXMuaXNFeHBpcmVk +KSkgeyAvLyDQstGA0LXQvNGPINCz0L7Qu9C+0YHQvtCy0LDQvdC40Y8g0L/RgNC+ +0YjQu9C+DQoJCQkJCQkkKGxpbmtHbG9iYWxQYXJlbnQpLmFkZENsYXNzKFZvdGVy +LmNsYXNzTmFtZXMuc2hvd0Nob2ljZSk7DQoJCQkJCX0NCgkJCX0sDQoNCgkJCWhp +ZGU6IGZ1bmN0aW9uKGV2ZW50LCBsaW5rKXsNCgkJCQkJaWYoIWV2ZW50KSBldmVu +dCA9IHdpbmRvdy5ldmVudDsNCgkJCQkJdmFyIGxpbmtDaGlsZHJlbiA9IGxpbmsu +Z2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKTsNCgkJCQkJdmFyIGxpbmtHbG9iYWxQ +YXJlbnQgPSAkKGxpbmspLmdldFBhcmVudCgnLicgKyBWb3Rlci5jbGFzc05hbWVz +LnZvdGVIb2xkZXIpOw0KDQoJCQkJCS8vINC10YHQu9C4INGN0LvQtdC80LXQvdGC +LCDQvdCwINC60L7RgtC+0YDRi9C5INC/0LXRgNC10LTQstC40LPQsNC10Lwg0LzR +i9GI0YwsINC70LXQttC40YIg0LLQvdGD0YLRgNC4INGH0L7QudGBINCx0LvQvtC6 +0LAsINCy0YvRhdC+0LTQuNC8DQoJCQkJCWlmIChldmVudC5yZWxhdGVkVGFyZ2V0 +KSB7DQoJCQkJCQl2YXIgd2hlcmUgPSBldmVudC5yZWxhdGVkVGFyZ2V0Ow0KCQkJ +CQkJaWYgKHdoZXJlID09IGxpbmspIHJldHVybjsNCgkJCQkJCWlmICh3aGVyZS5u +b2RlVHlwZSA9PSAzKSB3aGVyZSA9IHdoZXJlLnBhcmVudE5vZGU7DQoJCQkJCQlm +b3IodmFyIGk9MDsgaTxsaW5rQ2hpbGRyZW4ubGVuZ3RoOyBpKyspew0KCQkJCQkJ +CWlmICh3aGVyZSA9PSBsaW5rQ2hpbGRyZW5baV0pIHsNCgkJCQkJCQkJcmV0dXJu +Ow0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfSBlbHNlIGlmIChldmVudC50b0Vs +ZW1lbnQgJiYgbGluay5jb250YWlucyhldmVudC50b0VsZW1lbnQpKSB7DQoJCQkJ +CQlyZXR1cm47DQoJCQkJCX0NCg0KCQkJCQkkKGxpbmtHbG9iYWxQYXJlbnQpLnJl +bW92ZUNsYXNzKFZvdGVyLmNsYXNzTmFtZXMuc2hvd0Nob2ljZSk7DQoJCQl9DQoJ +fSwNCg0KCXZvdGU6IGZ1bmN0aW9uKGV2ZW50LCBsaW5rLCB2b3RlVHlwZSwgdm90 +ZU1hcmspew0KCQkJaWYoIShsaW5rICYmIHZvdGVUeXBlICYmIFZvdGVyLnZvdGVU +eXBlW3ZvdGVUeXBlXSAmJiB2b3RlTWFyaykpIHJldHVybiBmYWxzZTsgLy8gaWYg +cGFyYW1zIGFyZSBpbmNvbXBsZXRlZA0KDQoNCg0KCQkJdmFyIGxpbmtHbG9iYWxQ +YXJlbnQgPSAkKGxpbmspLmdldFBhcmVudCgnLicgKyBWb3Rlci5jbGFzc05hbWVz +LnZvdGVIb2xkZXIpOw0KCQkJdmFyIGxpbmtMb2NhbFBhcmVudCA9ICQobGluayku +Z2V0UGFyZW50KCcuJyArIFZvdGVyLmNsYXNzTmFtZXMudm90aW5nQmxvY2spOw0K +DQoJCQlpZiAoIWxpbmtHbG9iYWxQYXJlbnQgfHwgIWxpbmtMb2NhbFBhcmVudCB8 +fCAvLyBnbG9iYWwgb3IgbG9jYWwgcGFyZW50IHdhcyBub3QgZm91bmQNCgkJCQkk +KGxpbmtMb2NhbFBhcmVudCkuaGFzQ2xhc3MoVm90ZXIuY2xhc3NOYW1lcy5pc1Zv +dGVkKSAmJiAhVm90ZXIudm90ZVR5cGVbdm90ZVR5cGVdLmREYXRhLmRibFZvdGUg +fHwgLy8gd2FzIHZvdGVkIGFscmVhZHkgYW5kIGRvdWJsZSB2b3RlIGlzIG5vdCBh +bGxvd2RlZA0KCQkJCSQobGlua0xvY2FsUGFyZW50KS5oYXNDbGFzcyhWb3Rlci5j +bGFzc05hbWVzLmlzVm90ZWQpICYmIChWb3Rlci52b3RlVHlwZVt2b3RlVHlwZV0u +ZERhdGEuZGJsVm90ZSAmJiAkKGxpbmtMb2NhbFBhcmVudCkuaGFzQ2xhc3Modm90 +ZU1hcmspKSB8fCAvLyB3YXMgdm90ZWQgYWxyZWFkeSBhbmQgZG91YmxlIHZvdGUg +aXMgYWxsb3dkZWQgYW5kDQoJCQkJJChsaW5rTG9jYWxQYXJlbnQpLmhhc0NsYXNz +KFZvdGVyLmNsYXNzTmFtZXMuaXNMb2FkaW5nKSkgeyAvLyBpcyBsb2FkaW5nDQoJ +CQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0KCQkJaWYgKCQobGlua0xvY2FsUGFyZW50 +KS5oYXNDbGFzcyhWb3Rlci5jbGFzc05hbWVzLmlzTWluZSkpIHsNCgkJCQlmdXR1 +X2FsZXJ0KEZBVC52b3RpbmdzX2hlYWRlciwgRkFULnZvdGluZ3NfZXJyb3Jfc2Vs +ZiwgZmFsc2UsICdlcnJvcicpOw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0NCgkJ +CWlmICgkKGxpbmtMb2NhbFBhcmVudCkuaGFzQ2xhc3MoVm90ZXIuY2xhc3NOYW1l +cy5pc0V4cGlyZWQpKSB7DQoJCQkJZnV0dV9hbGVydChGQVQudm90aW5nc19oZWFk +ZXIsIEZBVC52b3RpbmdzX2Vycm9yX2lzX2V4cGlyZWQsIGZhbHNlLCAnZXJyb3In +KTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoNCg0KDQoJCQlpZiAoJChsaW5r +TG9jYWxQYXJlbnQpLmhhc0NsYXNzKFZvdGVyLmNsYXNzTmFtZXMubm9BY2Nlc3Mp +KSB7DQoJCQkJZnV0dV9hbGVydChGQVQudm90aW5nc19oZWFkZXIsIEZBVC52b3Rp +bmdzX2Vycm9yX25vX2FjY2VzcywgZmFsc2UsICdlcnJvcicpOw0KCQkJCXJldHVy +biBmYWxzZTsNCgkJCX0NCgkJCWlmICgkKGxpbmtMb2NhbFBhcmVudCkuaGFzQ2xh +c3MoVm90ZXIuY2xhc3NOYW1lcy5sb2dpbkhvbGRlcikgJiYgbG9naW5Gb3JtICYm +IGxvZ2luRm9ybS5zaG93KSB7IC8vIHRyeSB0byB2b3RlIGFzIGd1ZXN0DQoJCQkJ +aWYoIWxvZ2luRm9ybS5odG1sLmJsb2NrKXsgLy8gaWYgdGhlcmUgaXMgbm8gYW55 +IGh0bWwgb2YgbG9naW5fZm9ybSBvbiB0aGUgcGFnZSAodXNlciBpcyBub3QgYSBn +dWVzdCkNCgkJCQkJZnV0dV9hbGVydChGQVQudm90aW5nc19oZWFkZXIsIEZBVC52 +b3RpbmdzX2Vycm9yX3Byb2hpYml0ZWQsIHRydWUsICdlcnJvcicpOw0KCQkJCX0g +ZWxzZSB7DQoJCQkJCWxvZ2luRm9ybS5zaG93KGV2ZW50LCBsaW5rKTsNCgkJCQl9 +DQoNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoNCg0KDQoJCQlWb3Rlci5zZXJ2 +ZXIuc2VuZERhdGEobGlua0dsb2JhbFBhcmVudCwgbGlua0xvY2FsUGFyZW50LCB2 +b3RlVHlwZSwgdm90ZU1hcmspOw0KCQkJcmV0dXJuIGZhbHNlOw0KCX0sDQoNCglz +ZXJ2ZXI6IHsNCgkJCXNlbmREYXRhOiBmdW5jdGlvbihsaW5rR2xvYmFsUGFyZW50 +LCBsaW5rTG9jYWxQYXJlbnQsIHZvdGVUeXBlLCB2b3RlTWFyayl7DQoJCQkJCXZh +ciB1cmwgPSAgVm90ZXIudm90ZVR5cGVbdm90ZVR5cGVdLnVybDsNCg0KCQkJCQl2 +YXIgYWN0aW9uID0gVm90ZXIudm90ZVR5cGVbdm90ZVR5cGVdLmREYXRhLmFjdGlv +bjsNCgkJCQkJdmFyIHRhcmdldF9uYW1lID0gVm90ZXIudm90ZVR5cGVbdm90ZVR5 +cGVdLmREYXRhLnRhcmdldF9uYW1lOw0KCQkJCQl2YXIgbWFyayA9IFZvdGVyLnZv +dGVNYXJrW3ZvdGVNYXJrXSA/IFZvdGVyLnZvdGVNYXJrW3ZvdGVNYXJrXS5udW1i +ZXIgOiAnJzsNCgkJCQkJdmFyIHRhcmdldF9pZCA9IGxpbmtHbG9iYWxQYXJlbnQu +Z2V0QXR0cmlidXRlKCdpZCcpID8gbGlua0dsb2JhbFBhcmVudC5nZXRBdHRyaWJ1 +dGUoJ2lkJykubWF0Y2goL1xkKy9nKVswXSA6ICcnOw0KDQoJCQkJCXZhciBkYXRh +ID0gJ2FjdGlvbj0nICsgYWN0aW9uICsgJyZ0YXJnZXRfbmFtZT0nICsgdGFyZ2V0 +X25hbWUgKyAnJnRhcmdldF9pZD0nICsgdGFyZ2V0X2lkICsgJyZtYXJrPScgKyBt +YXJrOw0KCQkJCQl2YXIgcGFyYW1zID0gew0KCQkJCQkJbGlua0dsb2JhbFBhcmVu +dDogbGlua0dsb2JhbFBhcmVudCwNCgkJCQkJCWxpbmtMb2NhbFBhcmVudDogbGlu +a0xvY2FsUGFyZW50LA0KCQkJCQkJbWFyayA6IG1hcmssDQoJCQkJCQl2b3RlVHlw +ZSA6IHZvdGVUeXBlDQoJCQkJCX0NCgkJCQkJJChsaW5rTG9jYWxQYXJlbnQpLmFk +ZENsYXNzKFZvdGVyLmNsYXNzTmFtZXMuaXNMb2FkaW5nKTsNCgkJCQkJYWpheExv +YWRQb3N0KHVybCwgZGF0YSwgVm90ZXIuc2VydmVyLnNlbmREYXRhT25sb2FkLCB3 +aW5kb3csIHBhcmFtcyk7DQoJCQl9LA0KDQoJCQlzZW5kRGF0YU9ubG9hZDogZnVu +Y3Rpb24oYWpheE9iaiwgcGFyYW1zKXsNCgkJCQkJLyoNCgkJCQkJCXBhcmFtcyA9 +IHsNCgkJCQkJCQlsaW5rR2xvYmFsUGFyZW50DQoJCQkJCQkJbGlua0xvY2FsUGFy +ZW50DQoJCQkJCQkJbWFyaw0KCQkJCQkJCXZvdGVUeXBlDQoJCQkJCQl9DQoJCQkJ +CSovDQoJCQkJCWlmKGFqYXhPYmogJiYgYWpheE9iai5yZXNwb25zZVhNTCl7DQoJ +CQkJCQl2YXIgeG1sID0gYWpheE9iai5yZXNwb25zZVhNTDsNCgkJCQkJCXZhciBl +cnJvcnMgPSB4bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoVm90ZXIueG1sTm9kZU5h +bWVzLmVycm9yKTsNCgkJCQkJCWlmKGVycm9ycy5sZW5ndGggJiYgZXJyb3JzWzBd +ICYmIGVycm9yc1swXS5maXJzdENoaWxkLm5vZGVUeXBlID09IDMpIHsNCgkJCQkJ +CQlWb3Rlci5zaG93RXJyb3IoZXJyb3JzWzBdLmZpcnN0Q2hpbGQuZGF0YSk7DQoJ +CQkJCQkJJChwYXJhbXMubGlua0xvY2FsUGFyZW50KS5yZW1vdmVDbGFzcyhWb3Rl +ci5jbGFzc05hbWVzLmlzTG9hZGluZyk7DQoJCQkJCQkJcmV0dXJuOw0KCQkJCQkJ +fSBlbHNlIHsNCgkJCQkJCQl2YXIgc2NvcmVzID0geG1sLmdldEVsZW1lbnRzQnlU +YWdOYW1lKFZvdGVyLnhtbE5vZGVOYW1lcy5zY29yZSk7DQoJCQkJCQkJaWYoc2Nv +cmVzLmxlbmd0aCAmJiBzY29yZXNbMF0gJiYgc2NvcmVzWzBdLmZpcnN0Q2hpbGQu +bm9kZVR5cGUgPT0gMykgew0KCQkJCQkJCQlwYXJhbXMuc2NvcmUgPSBzY29yZXNb +MF0uZmlyc3RDaGlsZC5kYXRhOw0KCQkJCQkJCX0NCg0KCQkJCQkJCXZhciBjb3Vu +dCA9IHhtbC5nZXRFbGVtZW50c0J5VGFnTmFtZShWb3Rlci54bWxOb2RlTmFtZXMu +Y291bnQpOw0KCQkJCQkJCWlmKGNvdW50Lmxlbmd0aCAmJiBjb3VudFswXSAmJiBj +b3VudFswXS5maXJzdENoaWxkLm5vZGVUeXBlID09IDMpIHsNCgkJCQkJCQkJcGFy +YW1zLmNvdW50ID0gY291bnRbMF0uZmlyc3RDaGlsZC5kYXRhOw0KCQkJCQkJCX0N +Cg0KCQkJCQkJCXZhciBtYXJrID0geG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKFZv +dGVyLnhtbE5vZGVOYW1lcy5tYXJrKTsNCgkJCQkJCQlpZihtYXJrLmxlbmd0aCAm +JiBtYXJrWzBdICYmIG1hcmtbMF0uZmlyc3RDaGlsZC5ub2RlVHlwZSA9PSAzKSB7 +DQoJCQkJCQkJCXBhcmFtcy5tYXJrID0gbWFya1swXS5maXJzdENoaWxkLmRhdGE7 +DQoJCQkJCQkJfQ0KDQoJCQkJCQkJdmFyIGNoYXJnZV9zdHJpbmcgPSB4bWwuZ2V0 +RWxlbWVudHNCeVRhZ05hbWUoVm90ZXIueG1sTm9kZU5hbWVzLmNoYXJnZV9zdHJp +bmcpOw0KCQkJCQkJCWlmKGNoYXJnZV9zdHJpbmcubGVuZ3RoICYmIGNoYXJnZV9z +dHJpbmdbMF0pIHsNCgkJCQkJCQkJcGFyYW1zLmNoYXJnZV9zdHJpbmcgPSBjaGFy +Z2Vfc3RyaW5nWzBdLmZpcnN0Q2hpbGQuZGF0YTsNCgkJCQkJCQl9DQoNCgkJCQkJ +CQkkKHBhcmFtcy5saW5rTG9jYWxQYXJlbnQpLnJlbW92ZUNsYXNzKFZvdGVyLmNs +YXNzTmFtZXMuaXNMb2FkaW5nKTsNCgkJCQkJCQlWb3Rlci5zZXRTY29yZShwYXJh +bXMpOw0KCQkJCQkJfQ0KDQoNCgkJCQkJfQ0KDQoJCQl9DQoJfSwNCg0KCXNldFNj +b3JlOiBmdW5jdGlvbihwYXJhbXMpew0KCQkJLyoNCgkJCQlwYXJhbXN7DQoJCQkJ +CWxpbmtHbG9iYWxQYXJlbnQNCgkJCQkJbGlua0xvY2FsUGFyZW50DQoJCQkJCW1h +cmsNCgkJCQkJc2NvcmUNCgkJCQkJY291bnQNCgkJCQl9DQoJCQkqLw0KCQkJDQoJ +CQkkKHBhcmFtcy5saW5rTG9jYWxQYXJlbnQpLmFkZENsYXNzKFZvdGVyLmNsYXNz +TmFtZXMuaXNWb3RlZCk7DQoNCgkJCSQocGFyYW1zLmxpbmtMb2NhbFBhcmVudCku +cmVtb3ZlQ2xhc3MoVm90ZXIuY2xhc3NOYW1lcy5pc1ZvdGVkUGx1cyk7DQoJCQkk +KHBhcmFtcy5saW5rTG9jYWxQYXJlbnQpLnJlbW92ZUNsYXNzKFZvdGVyLmNsYXNz +TmFtZXMuaXNWb3RlZE1pbnVzKTsNCg0KCQkJJChwYXJhbXMubGlua0xvY2FsUGFy +ZW50KS5yZW1vdmVDbGFzcyhWb3Rlci5jbGFzc05hbWVzLmlzUG9zaXRpdmUpOw0K +CQkJJChwYXJhbXMubGlua0xvY2FsUGFyZW50KS5yZW1vdmVDbGFzcyhWb3Rlci5j +bGFzc05hbWVzLmlzTmVnYXRpdmUpOw0KDQoJCQkvL3JlbW92ZUNsYXNzKHBhcmFt +cy5saW5rR2xvYmFsUGFyZW50LCBWb3Rlci5jbGFzc05hbWVzLmludXNlKTsNCg0K +CQkJaWYocGFyYW1zLnNjb3JlICYmIHBhcmFtcy5zY29yZS5jaGFyQXQoMCkgPT0g +J+KAkycpIHsNCgkJCQkkKHBhcmFtcy5saW5rTG9jYWxQYXJlbnQpLmFkZENsYXNz +KFZvdGVyLmNsYXNzTmFtZXMuaXNOZWdhdGl2ZSk7DQoJCQl9IGVsc2UgaWYgKHBh +cmFtcy5zY29yZSAmJiBwYXJhbXMuc2NvcmUuY2hhckF0KDApICE9ICfigJMnKSB7 +DQoJCQkJJChwYXJhbXMubGlua0xvY2FsUGFyZW50KS5hZGRDbGFzcyhWb3Rlci5j +bGFzc05hbWVzLmlzUG9zaXRpdmUpOw0KCQkJfQ0KDQoJCQlpZihwYXJhbXMubWFy +ayAmJiBwYXJhbXMubWFyayA9PSAnKycpew0KCQkJCSQocGFyYW1zLmxpbmtMb2Nh +bFBhcmVudCkuYWRkQ2xhc3MoVm90ZXIuY2xhc3NOYW1lcy5pc1ZvdGVkUGx1cyk7 +DQoJCQl9IGVsc2UgaWYocGFyYW1zLm1hcmsgJiYgcGFyYW1zLm1hcmsgPT0gJ+KA +kycpIHsNCgkJCQkkKHBhcmFtcy5saW5rTG9jYWxQYXJlbnQpLmFkZENsYXNzKFZv +dGVyLmNsYXNzTmFtZXMuaXNWb3RlZE1pbnVzKTsNCgkJCX0NCg0KCQkJdmFyIHVz +ZXJjaGFyZ2UgPSAkKCd1c2VyY2hhcmdlJyk7DQoJCQl1c2VyY2hhcmdlICYmICh1 +c2VyY2hhcmdlLmlubmVySFRNTCA9IHBhcmFtcy5jaGFyZ2Vfc3RyaW5nKTsNCg0K +CQkJdHJ5IHsNCgkJCQl2YXIgdm90ZVBvaW50cyA9ICQocGFyYW1zLmxpbmtMb2Nh +bFBhcmVudCkuZ2V0RWxlbWVudCgnLicgKyBWb3Rlci5jbGFzc05hbWVzLnZvdGVQ +b2ludHMpOw0KDQoJCQkJdmFyIHNjb3JlQm94ID0gdm90ZVBvaW50cy5nZXRFbGVt +ZW50c0J5VGFnTmFtZShWb3Rlci5odG1sTm9kZU5hbWVzLnNjb3JlKVswXTsNCgkJ +CQl2YXIgbWFya0JveCA9IHZvdGVQb2ludHMuZ2V0RWxlbWVudHNCeVRhZ05hbWUo +Vm90ZXIuaHRtbE5vZGVOYW1lcy5tYXJrKVswXTsNCg0KCQkJCXNjb3JlQm94Lmlu +bmVySFRNTCA9IHBhcmFtcy5zY29yZTsNCgkJCQlzY29yZUJveC5zZXRBdHRyaWJ1 +dGUoJ3RpdGxlJywgcGFyYW1zLmNvdW50KTsNCgkJCQltYXJrQm94LmlubmVySFRN +TCA9ICcgKCcgKyBwYXJhbXMubWFyayArICcpJzsNCg0KLyoJCQkJdm90ZUNvdW50 +ID0gJChwYXJhbXMubGlua0xvY2FsUGFyZW50KS5nZXRFbGVtZW50cygnLicgKyBW +b3Rlci5jbGFzc05hbWVzLnZvdGVDb3VudClbMF07DQoJCQkJdmFyIGNvdW50Qm94 +ID0gdm90ZUNvdW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFZvdGVyLmh0bWxOb2Rl +TmFtZXMuY291bnQpWzBdOw0KCQkJCWNvdW50Qm94LmlubmVySFRNTCA9IHBhcmFt +cy5jb3VudDsqLw0KDQoJCQl9IGNhdGNoKGUpew0KCQkJCS8vYWxlcnQoZSk7DQoJ +CQl9DQoJfSwNCg0KCXNob3dFcnJvcjogZnVuY3Rpb24oZXJyb3JNc2cpew0KCQlp +ZiAoIWVycm9yTXNnKSB7DQoJCQllcnJvck1zZyA9IEZBVC52b3RpbmdzX3Vua25v +d25fZXJyb3I7DQoJCX0NCgkJZnV0dV9hbGVydChGQVQudm90aW5nc19oZWFkZXIs +IGVycm9yTXNnLCBmYWxzZSwgJ2Vycm9yJyk7DQoJfQ0KfTsNCnRtLmluaXQuYWRk +KGZ1bmN0aW9uKCl7DQoJdmFyIGNvbW1lbnRzQ29udGFpbmVyID0gJCgiY29tbWVu +dHMiKTsNCglpZiAoY29tbWVudHNDb250YWluZXIpIHsNCgkJdmFyIGluZm9wYW5l +bCA9ICQoY29tbWVudHNDb250YWluZXIucGFyZW50Tm9kZSkuZ2V0RWxlbWVudCgi +LmVudHJ5LWluZm8iKTsNCgkJaWYgKGluZm9wYW5lbCkgew0KCQkJdmFyIHBvc3RJ +ZCA9IHBhcnNlSW50KGluZm9wYW5lbC5pZC5yZXBsYWNlKCJpbmZvcGFuZWwiLCIi +KSksDQoJCQloYXNWb3RlTWFya05vZGUsc2NvcmVOb2RlOw0KDQoNCg0KCQkJdmFy +IHZvdGUgPSBmdW5jdGlvbihvKXsNCgkJCSAgDQoJCQkJCQ0KCQkJCWlmICh0ZW1w +LnVzZXIpIHsNCg0KCQkJCQlpZiAoby5pc19hbnN3ZXIgPT0gdHJ1ZSkNCgkJCQkJ +ew0KDQoJCQkJICAgICAgICAobmV3IFJlcXVlc3Qoew0KCQkJCSAgICAgICAgICAg +ICd1cmwnOiAnL2FqYXgvdm90aW5nLycsDQoJCQkJICAgICAgICAgICAgJ2RhdGEn +OiB7DQoJCQkJICAgICAgICAgICAgICAgICdhY3Rpb24nOiAndm90ZScsDQoJCQkJ +ICAgICAgICAgICAgICAgICdtYXJrJzogby50LA0KCQkJCSAgICAgICAgICAgICAg +ICAndGFyZ2V0X2lkJzogby50aWQsDQoJCQkJCQkJCSd0YXJnZXRfbmFtZScgOiAi +cWFfYW5zd2VyIg0KCQkJCSAgICAgICAgICAgIH0sDQoJCQkJCQkJIm9uUmVxdWVz +dCI6ZnVuY3Rpb24oKXsNCgkJCQkJCQkJZ2V0Tm9kZXNGb3JNYXJraW5nKG8udm90 +ZUJ1dHRvbikNCgkJCQkJCQl9LA0KCQkJCQkJCSJvbkNvbXBsZXRlIjogb25Db21w +bGV0ZQ0KCQkJCSAgICAgICAgfSkpLnNlbmQoKTsNCg0KCQkJCSAgICB9DQoJCQkg +ICAgICAgZWxzZQ0KCQkJICAgICAgIHsNCg0KCQkJICAgICAgIAkgKG5ldyBSZXF1 +ZXN0KHsNCgkJCQkgICAgICAgICAgICAndXJsJzogJy9hamF4L3ZvdGluZy8nLA0K +CQkJCSAgICAgICAgICAgICdkYXRhJzogew0KCQkJCSAgICAgICAgICAgICAgICAn +YWN0aW9uJzogJ3ZvdGUnLA0KCQkJCSAgICAgICAgICAgICAgICAnbWFyayc6IG8u +dCwNCgkJCQkgICAgICAgICAgICAgICAgJ3RhcmdldF9pZCc6IG8udGlkLA0KCQkJ +CQkJCQkndGFyZ2V0X25hbWUnIDogInBvc3RfY29tbWVudCIsDQoJCQkJCQkJCSdz +aWduZWRfaWQnIDogby5wb3N0aWQNCgkJCQkgICAgICAgICAgICB9LA0KCQkJCQkJ +CSJvblJlcXVlc3QiOmZ1bmN0aW9uKCl7DQoJCQkJCQkJCWdldE5vZGVzRm9yTWFy +a2luZyhvLnZvdGVCdXR0b24pDQoJCQkJCQkJfSwNCgkJCQkJCQkib25Db21wbGV0 +ZSI6IG9uQ29tcGxldGUNCgkJCQkgICAgICAgIH0pKS5zZW5kKCk7DQoNCgkJCSAg +ICAgICB9DQoNCgkJCQl9DQoJCQl9DQoJCQl2YXIgZ2V0Tm9kZXNGb3JNYXJraW5n +ID0gZnVuY3Rpb24odm90ZUJ1dHRvbikgew0KCQkJCWhhc1ZvdGVNYXJrTm9kZSA9 +ICQodm90ZUJ1dHRvbikuZ2V0UGFyZW50KCJ1bC52b3RlIik7DQoJCQkJc2NvcmVO +b2RlID0gaGFzVm90ZU1hcmtOb2RlLmdldEVsZW1lbnQoIi5tYXJrIHNwYW4iKTsN +CgkJCX0NCgkJCXZhciBvbkNvbXBsZXRlID0gZnVuY3Rpb24ocmVzcG9uc2VIVE1M +LCByZXNwb25zZVhNTCl7DQoNCgkJCQl2YXIgZXJyb3JzID0gcmVzcG9uc2VYTUwu +Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ2Vycm9yJyk7DQoJCQkJaWYgKGVycm9ycy5s +ZW5ndGgpIHsNCgkJCQkJdmFyIGVycm9ydGV4dCA9ICIiOw0KCQkJCQlmb3IgKHZh +ciBpPTAgLCBsID0gZXJyb3JzLmxlbmd0aDsgaSA8IGw7IGkrKykgew0KCQkJCQkJ +aWYgKGVycm9yc1tpXS50YWdOYW1lID09ICJlcnJvciIpew0KCQkJCQkJCWVycm9y +dGV4dCArPSBlcnJvcnNbaV0uZmlyc3RDaGlsZC5kYXRhICsgIjwvYnI+IjsNCgkJ +CQkJCX0NCgkJCQkJfTsNCgkJCQkJZnV0dV9hbGVydCgi0J/RgNC+0LjRgdGI0LXR +gdGC0LLQuNC1INCy0L4g0LLRgNC10LzRjyDQstGL0LHQvtGA0L7QsiIsIGVycm9y +dGV4dCwgZmFsc2UsICdlcnJvcicpOw0KCQkJCX0gZWxzZXsNCgkJCQkJdmFyIHNj +b3JlID0gcmVzcG9uc2VYTUwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3Njb3JlJylb +MF0uZmlyc3RDaGlsZC5kYXRhLA0KCQkJCQlzY29yZU51bSA9IHBhcnNlSW50KHNj +b3JlLnJlcGxhY2UoIuKAkyIsIi0iKSksDQoJCQkJCXZvdGVUeXBlID0gcmVzcG9u +c2VYTUwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ21hcmsnKVswXS5maXJzdENoaWxk +LmRhdGEgKyAiIjsNCgkJCQkJJCgndXNlcmNoYXJnZScpLmlubmVySFRNTCA9IHJl +c3BvbnNlWE1MLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjaGFyZ2Vfc3RyaW5nJylb +MF0uZmlyc3RDaGlsZC5kYXRhDQoJCQkJCXNjb3JlTm9kZS5zZXQoInRleHQiLHNj +b3JlKTsNCgkJCQkJaGFzVm90ZU1hcmtOb2RlLmFkZENsYXNzKCJ2b3RlZCIpLnJl +bW92ZUNsYXNzKCJ2b3RlZF9taW51cyIpLnJlbW92ZUNsYXNzKCJ2b3RlZF9wbHVz +IikucmVtb3ZlQ2xhc3MoInBvc2l0aXZlIikucmVtb3ZlQ2xhc3MoIm5lZ2F0aXZl +Iik7DQoJCQkJCQ0KCQkJCQlpZiAodm90ZVR5cGUgPT0gIuKAkyIpIHsNCgkJCQkJ +CWhhc1ZvdGVNYXJrTm9kZS5hZGRDbGFzcygidm90ZWRfbWludXMiKTsNCgkJCQkJ +fSBlbHNlIGlmICh2b3RlVHlwZSA9PSAiKyIpew0KCQkJCQkJaGFzVm90ZU1hcmtO +b2RlLmFkZENsYXNzKCJ2b3RlZF9wbHVzIik7DQoJCQkJCX0NCgkJCQkJaWYgKHNj +b3JlTnVtID4gMCkgew0KCQkJCQkJaGFzVm90ZU1hcmtOb2RlLmFkZENsYXNzKCJw +b3NpdGl2ZSIpDQoJCQkJCX0gZWxzZSBpZiAoc2NvcmVOdW0gPCAwKSB7DQoJCQkJ +CQloYXNWb3RlTWFya05vZGUuYWRkQ2xhc3MoIm5lZ2F0aXZlIikNCgkJCQkJfQ0K +DQoJCQkJfQ0KDQoJCQl9DQoJCQljb21tZW50c0NvbnRhaW5lci5hZGRFdmVudCgi +Y2xpY2siLGZ1bmN0aW9uKGUpew0KCQkJCXZhciBub2RlID0gZS50YXJnZXQsDQoJ +CQkJbm9kZUNsYXNzTmFtZSA9IG5vZGUuY2xhc3NOYW1lOw0KCQkJCS8vQ2hhbmdl +ZCBhdCAyMC8wNy8yMDEwDQoJCQkJaWYgKG5vZGVDbGFzc05hbWUuaW5kZXhPZigi +dm90ZS1mb3ItYW5zd2VyIikgIT0gLTEpIHsNCgkJCQkJLy9BbnN3ZXJzIHZvdGlu +Zw0KCQkJCQl2YXIgY29tbWVudElkID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlKCJy +ZXYiKS5yZXBsYWNlKCJ2b3Rlci1mb3ItYW5zd2VyOiIsIiIpLCB2b3RlVHlwZTsN +CgkJCQkJaWYgKG5vZGVDbGFzc05hbWUuaW5kZXhPZigidm90ZV9taW51cyIpICE9 +IC0xKSB7DQoJCQkJCQl2b3RlVHlwZSA9IC0xOw0KCQkJCQl9IGVsc2UgaWYgKG5v +ZGVDbGFzc05hbWUuaW5kZXhPZigidm90ZV9wbHVzIikgIT0gLTEpICB7DQoJCQkJ +CQl2b3RlVHlwZSA9IDE7DQoJCQkJCX0gZWxzZSB7DQoJCQkJCQlyZXR1cm4gZmFs +c2U7DQoJCQkJCX0NCg0KCQkJCQl2b3RlKHsNCgkJCQkJCSJ0aWQiOmNvbW1lbnRJ +ZCwNCgkJCQkJCSJ0Ijp2b3RlVHlwZSwNCgkJCQkJCSJwb3N0aWQiOnBvc3RJZCwN +CgkJCQkJCSJ2b3RlQnV0dG9uIjplLnRhcmdldCwNCgkJCQkJCSJpc19hbnN3ZXIi +OnRydWUNCgkJCQkJfSk7DQoJCQkJCXJldHVybiBmYWxzZQ0KCQkJCX0NCgkJCQlp +ZiAobm9kZUNsYXNzTmFtZS5pbmRleE9mKCJ2b3RlLWZvci1jb21tZW50IikgIT0g +LTEpIHsNCgkJCQkJdmFyIGNvbW1lbnRJZCA9IGUudGFyZ2V0LmdldEF0dHJpYnV0 +ZSgicmV2IikucmVwbGFjZSgidm90ZXItZm9yLWNvbW1lbnQ6IiwiIiksDQoJCQkJ +CXZvdGVUeXBlOw0KCQkJCQlpZiAobm9kZUNsYXNzTmFtZS5pbmRleE9mKCJ2b3Rl +X21pbnVzIikgIT0gLTEpIHsNCgkJCQkJCXZvdGVUeXBlID0gLTE7DQoJCQkJCX0g +ZWxzZSBpZiAobm9kZUNsYXNzTmFtZS5pbmRleE9mKCJ2b3RlX3BsdXMiKSAhPSAt +MSkgIHsNCgkJCQkJCXZvdGVUeXBlID0gMTsNCgkJCQkJfSBlbHNlIHsNCgkJCQkJ +CXJldHVybiBmYWxzZTsNCgkJCQkJfQ0KDQoJCQkJCXZvdGUoew0KCQkJCQkJInRp +ZCI6Y29tbWVudElkLA0KCQkJCQkJInQiOnZvdGVUeXBlLA0KCQkJCQkJInBvc3Rp +ZCI6cG9zdElkLA0KCQkJCQkJInZvdGVCdXR0b24iOmUudGFyZ2V0DQoJCQkJCX0p +Ow0KCQkJCQlyZXR1cm4gZmFsc2UNCgkJCQl9IGVsc2UgaWYgKG5vZGVDbGFzc05h +bWUuaW5kZXhPZignanMtc2luZ2xlLXRyZWUnKSAhPSAtMSkgew0KCQkJCQl2YXIg +bGFzdF9jb21tZW50X2xpID0gbm9kZS5wYXJlbnROb2RlLnBhcmVudE5vZGUucGFy +ZW50Tm9kZS5wYXJlbnROb2RlLA0KCQkJCQkJcGFyZW50X2xpOw0KCQkJCQlsYXN0 +X2NvbW1lbnRfbGkuc2luZ2xlX3RocmVhZF9ub2RlcyA9IFtdOw0KCQkJCQlmb3Ig +KHZhciBsaSA9IGxhc3RfY29tbWVudF9saS5wYXJlbnROb2RlLnBhcmVudE5vZGU7 +IGxpLm5vZGVOYW1lID09ICdMSSc7IGxpID0gbGkucGFyZW50Tm9kZS5wYXJlbnRO +b2RlKSB7DQoJCQkJCQkkKGxpKS5hZGRDbGFzcygnc2luZ2xlLXRyZWUtbm9kZScp +LnJlbW92ZUNsYXNzKCdzaW5nbGUtdHJlZS1ub2RlLWxhc3QnKTsNCgkJCQkJCWxh +c3RfY29tbWVudF9saS5zaW5nbGVfdGhyZWFkX25vZGVzLnB1c2gobGkpDQoJCQkJ +CQlsYXN0X2NvbW1lbnRfbGkuZmlyc3RfY29tbWVudF9saSA9IGxpOw0KCQkJCQl9 +Ow0KCQkJCQlpZiAobGFzdF9jb21tZW50X2xpLmZpcnN0X2NvbW1lbnRfbGkpIHsN +CgkJCQkJCWxhc3RfY29tbWVudF9saS5hZGRDbGFzcygnc2luZ2xlLXRyZWUtbm9k +ZS1sYXN0Jyk7DQoJCQkJCQlzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7DQoJCQkJCQkJ +bGFzdF9jb21tZW50X2xpLmZpcnN0X2NvbW1lbnRfbGkuc2Nyb2xsVG9NZSgpOw0K +CQkJCQkJfSwzMDApDQoJCQkJCQlzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7DQoJCQkJ +CQkJbGFzdF9jb21tZW50X2xpLmZpcnN0X2NvbW1lbnRfbGkucmVtb3ZlQ2xhc3Mo +J3NpbmdsZS10cmVlLW5vZGUnKS5hZGRDbGFzcygnc2luZ2xlLXRocmVhZGluZycp +Ow0KCQkJCQkJfSw3MDApDQoNCg0KDQoJCQkJCX0gZWxzZSB7DQoJCQkJCQlmb3Ig +KHZhciBpPTAsIGwgPSBsYXN0X2NvbW1lbnRfbGkuc2luZ2xlX3RocmVhZF9ub2Rl +cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsNCgkJCQkJCQlsYXN0X2NvbW1lbnRfbGku +c2luZ2xlX3RocmVhZF9ub2Rlc1tpXS5yZW1vdmVDbGFzcygnc2luZ2xlLXRyZWUt +bm9kZScpOw0KCQkJCQkJfTsNCgkJCQkJfTsNCgkJCQkJcmV0dXJuIGZhbHNlOw0K +CQkJCX0gZWxzZSBpZihub2RlQ2xhc3NOYW1lLmluZGV4T2YoJ2pzLW11bHRpcGxh +eS10cmVlJykgIT0gLTEpIHsNCgkJCQkJdmFyIGxhc3RfY29tbWVudF9saSA9IG5v +ZGUucGFyZW50Tm9kZS5wYXJlbnROb2RlLnBhcmVudE5vZGUucGFyZW50Tm9kZTsN +CgkJCQkJaWYgKGxhc3RfY29tbWVudF9saS5maXJzdF9jb21tZW50X2xpKSB7DQoN +CgkJCQkJCWxhc3RfY29tbWVudF9saS5maXJzdF9jb21tZW50X2xpLnJlbW92ZUNs +YXNzKCdzaW5nbGUtdGhyZWFkaW5nJyk7DQoNCgkJCQkJCWZvciAodmFyIGk9MCwg +bCA9IGxhc3RfY29tbWVudF9saS5zaW5nbGVfdGhyZWFkX25vZGVzLmxlbmd0aDsg +aSA8IGw7IGkrKykgew0KCQkJCQkJCWxhc3RfY29tbWVudF9saS5zaW5nbGVfdGhy +ZWFkX25vZGVzW2ldLnJlbW92ZUNsYXNzKCdzaW5nbGUtdHJlZS1ub2RlJyk7DQoJ +CQkJCQl9Ow0KDQoJCQkJCQkkKGxhc3RfY29tbWVudF9saSkuc2Nyb2xsVG9NZSgp +Ow0KCQkJCQkJc2V0VGltZW91dChmdW5jdGlvbigpew0KCQkJCQkJCWxhc3RfY29t +bWVudF9saS5yZW1vdmVDbGFzcygnc2luZ2xlLXRyZWUtbm9kZS1sYXN0Jyk7DQoJ +CQkJCQl9LDgwMCkNCgkJCQkJfQ0KDQoJCQkJfQ0KCQkJfSkNCgkJfQ0KDQoJfQ0K +fSk= + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline; filename=swfobject.js +Content-Type: application/x-javascript; charset=utf-8; name=swfobject.js +Content-Location: http://habrahabr.ru/js/1307631427/swfobject.js +Content-Transfer-Encoding: Base64 + +LyoqCiAqIFNXRk9iamVjdCB2MS40LjQ6IEZsYXNoIFBsYXllciBkZXRlY3Rpb24g +YW5kIGVtYmVkIC0gaHR0cDovL2Jsb2cuZGVjb25jZXB0LmNvbS9zd2ZvYmplY3Qv +CiAqCiAqIFNXRk9iamVjdCBpcyAoYykgMjAwNiBHZW9mZiBTdGVhcm5zIGFuZCBp +cyByZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2U6CiAqIGh0dHA6Ly93d3cu +b3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwCiAqCiAqICoq +U1dGT2JqZWN0IGlzIHRoZSBTV0YgZW1iZWQgc2NyaXB0IGZvcm1lcmx5IGtub3du +IGFzIEZsYXNoT2JqZWN0LiBUaGUgbmFtZSB3YXMgY2hhbmdlZCBmb3IKICogICBs +ZWdhbCByZWFzb25zLgogKi8KaWYodHlwZW9mIGRlY29uY2VwdD09InVuZGVmaW5l +ZCIpe3ZhciBkZWNvbmNlcHQ9bmV3IE9iamVjdCgpO30KaWYodHlwZW9mIGRlY29u +Y2VwdC51dGlsPT0idW5kZWZpbmVkIil7ZGVjb25jZXB0LnV0aWw9bmV3IE9iamVj +dCgpO30KaWYodHlwZW9mIGRlY29uY2VwdC5TV0ZPYmplY3RVdGlsPT0idW5kZWZp +bmVkIil7ZGVjb25jZXB0LlNXRk9iamVjdFV0aWw9bmV3IE9iamVjdCgpO30KZGVj +b25jZXB0LlNXRk9iamVjdD1mdW5jdGlvbihfMSxpZCx3LGgsXzUsYyxfNyxfOCxf +OSxfYSxfYil7aWYoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKXtyZXR1cm47fQp0 +aGlzLkRFVEVDVF9LRVk9X2I/X2I6ImRldGVjdGZsYXNoIjsKdGhpcy5za2lwRGV0 +ZWN0PWRlY29uY2VwdC51dGlsLmdldFJlcXVlc3RQYXJhbWV0ZXIodGhpcy5ERVRF +Q1RfS0VZKTsKdGhpcy5wYXJhbXM9bmV3IE9iamVjdCgpOwp0aGlzLnZhcmlhYmxl +cz1uZXcgT2JqZWN0KCk7CnRoaXMuYXR0cmlidXRlcz1uZXcgQXJyYXkoKTsKaWYo +XzEpe3RoaXMuc2V0QXR0cmlidXRlKCJzd2YiLF8xKTt9CmlmKGlkKXt0aGlzLnNl +dEF0dHJpYnV0ZSgiaWQiLGlkKTt9CmlmKHcpe3RoaXMuc2V0QXR0cmlidXRlKCJ3 +aWR0aCIsdyk7fQppZihoKXt0aGlzLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixoKTt9 +CmlmKF81KXt0aGlzLnNldEF0dHJpYnV0ZSgidmVyc2lvbiIsbmV3IGRlY29uY2Vw +dC5QbGF5ZXJWZXJzaW9uKF81LnRvU3RyaW5nKCkuc3BsaXQoIi4iKSkpO30KdGhp +cy5pbnN0YWxsZWRWZXI9ZGVjb25jZXB0LlNXRk9iamVjdFV0aWwuZ2V0UGxheWVy +VmVyc2lvbigpOwppZihjKXt0aGlzLmFkZFBhcmFtKCJiZ2NvbG9yIixjKTt9CnZh +ciBxPV84P184OiJoaWdoIjsKdGhpcy5hZGRQYXJhbSgicXVhbGl0eSIscSk7CnRo +aXMuc2V0QXR0cmlidXRlKCJ1c2VFeHByZXNzSW5zdGFsbCIsXzcpOwp0aGlzLnNl +dEF0dHJpYnV0ZSgiZG9FeHByZXNzSW5zdGFsbCIsZmFsc2UpOwp2YXIgX2Q9KF85 +KT9fOTp3aW5kb3cubG9jYXRpb247CnRoaXMuc2V0QXR0cmlidXRlKCJ4aVJlZGly +ZWN0VXJsIixfZCk7CnRoaXMuc2V0QXR0cmlidXRlKCJyZWRpcmVjdFVybCIsIiIp +OwppZihfYSl7dGhpcy5zZXRBdHRyaWJ1dGUoInJlZGlyZWN0VXJsIixfYSk7fX07 +CmRlY29uY2VwdC5TV0ZPYmplY3QucHJvdG90eXBlPXtzZXRBdHRyaWJ1dGU6ZnVu +Y3Rpb24oX2UsX2Ypewp0aGlzLmF0dHJpYnV0ZXNbX2VdPV9mOwp9LGdldEF0dHJp +YnV0ZTpmdW5jdGlvbihfMTApewpyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW18xMF07 +Cn0sYWRkUGFyYW06ZnVuY3Rpb24oXzExLF8xMil7CnRoaXMucGFyYW1zW18xMV09 +XzEyOwp9LGdldFBhcmFtczpmdW5jdGlvbigpewpyZXR1cm4gdGhpcy5wYXJhbXM7 +Cn0sYWRkVmFyaWFibGU6ZnVuY3Rpb24oXzEzLF8xNCl7CnRoaXMudmFyaWFibGVz +W18xM109XzE0Owp9LGdldFZhcmlhYmxlOmZ1bmN0aW9uKF8xNSl7CnJldHVybiB0 +aGlzLnZhcmlhYmxlc1tfMTVdOwp9LGdldFZhcmlhYmxlczpmdW5jdGlvbigpewpy +ZXR1cm4gdGhpcy52YXJpYWJsZXM7Cn0sZ2V0VmFyaWFibGVQYWlyczpmdW5jdGlv +bigpewp2YXIgXzE2PW5ldyBBcnJheSgpOwp2YXIga2V5Owp2YXIgXzE4PXRoaXMu +Z2V0VmFyaWFibGVzKCk7CmZvcihrZXkgaW4gXzE4KXtfMTYucHVzaChrZXkrIj0i +K18xOFtrZXldKTt9CnJldHVybiBfMTY7fSxnZXRTV0ZIVE1MOmZ1bmN0aW9uKCl7 +dmFyIF8xOT0iIjsKaWYobmF2aWdhdG9yLnBsdWdpbnMmJm5hdmlnYXRvci5taW1l +VHlwZXMmJm5hdmlnYXRvci5taW1lVHlwZXMubGVuZ3RoKXsKaWYodGhpcy5nZXRB +dHRyaWJ1dGUoImRvRXhwcmVzc0luc3RhbGwiKSl7CnRoaXMuYWRkVmFyaWFibGUo +Ik1NcGxheWVyVHlwZSIsIlBsdWdJbiIpO30KXzE5PSI8ZW1iZWQgdHlwZT1cImFw +cGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoXCIgc3JjPVwiIit0aGlzLmdldEF0 +dHJpYnV0ZSgic3dmIikrIlwiIHdpZHRoPVwiIit0aGlzLmdldEF0dHJpYnV0ZSgi +d2lkdGgiKSsiXCIgaGVpZ2h0PVwiIit0aGlzLmdldEF0dHJpYnV0ZSgiaGVpZ2h0 +IikrIlwiIjsKXzE5Kz0iIGlkPVwiIit0aGlzLmdldEF0dHJpYnV0ZSgiaWQiKSsi +XCIgbmFtZT1cIiIrdGhpcy5nZXRBdHRyaWJ1dGUoImlkIikrIlwiICI7CnZhciBf +MWE9dGhpcy5nZXRQYXJhbXMoKTsKZm9yKHZhciBrZXkgaW4gXzFhKXtfMTkrPVtr +ZXldKyI9XCIiK18xYVtrZXldKyJcIiAiO30KdmFyIF8xYz10aGlzLmdldFZhcmlh +YmxlUGFpcnMoKS5qb2luKCImIik7CmlmKF8xYy5sZW5ndGg+MCl7XzE5Kz0iZmxh +c2h2YXJzPVwiIitfMWMrIlwiIjt9XzE5Kz0iLz4iOwp9ZWxzZXtpZih0aGlzLmdl +dEF0dHJpYnV0ZSgiZG9FeHByZXNzSW5zdGFsbCIpKXt0aGlzLmFkZFZhcmlhYmxl +KCJNTXBsYXllclR5cGUiLCJBY3RpdmVYIik7fQpfMTk9IjxvYmplY3QgaWQ9XCIi +K3RoaXMuZ2V0QXR0cmlidXRlKCJpZCIpKyJcIiBjbGFzc2lkPVwiY2xzaWQ6RDI3 +Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwXCIgd2lkdGg9XCIiK3Ro +aXMuZ2V0QXR0cmlidXRlKCJ3aWR0aCIpKyJcIiBoZWlnaHQ9XCIiK3RoaXMuZ2V0 +QXR0cmlidXRlKCJoZWlnaHQiKSsiXCI+IjsKXzE5Kz0iPHBhcmFtIG5hbWU9XCJt +b3ZpZVwiIHZhbHVlPVwiIit0aGlzLmdldEF0dHJpYnV0ZSgic3dmIikrIlwiIC8+ +IjsKdmFyIF8xZD10aGlzLmdldFBhcmFtcygpOwpmb3IodmFyIGtleSBpbiBfMWQp +e18xOSs9IjxwYXJhbSBuYW1lPVwiIitrZXkrIlwiIHZhbHVlPVwiIitfMWRba2V5 +XSsiXCIgLz4iO30KdmFyIF8xZj10aGlzLmdldFZhcmlhYmxlUGFpcnMoKS5qb2lu +KCImIik7CmlmKF8xZi5sZW5ndGg+MCl7XzE5Kz0iPHBhcmFtIG5hbWU9XCJmbGFz +aHZhcnNcIiB2YWx1ZT1cIiIrXzFmKyJcIiAvPiI7fV8xOSs9Ijwvb2JqZWN0PiI7 +fQpyZXR1cm4gXzE5Owp9LHdyaXRlOmZ1bmN0aW9uKF8yMCl7CmlmKHRoaXMuZ2V0 +QXR0cmlidXRlKCJ1c2VFeHByZXNzSW5zdGFsbCIpKXsKdmFyIF8yMT1uZXcgZGVj +b25jZXB0LlBsYXllclZlcnNpb24oWzYsMCw2NV0pOwppZih0aGlzLmluc3RhbGxl +ZFZlci52ZXJzaW9uSXNWYWxpZChfMjEpJiYhdGhpcy5pbnN0YWxsZWRWZXIudmVy +c2lvbklzVmFsaWQodGhpcy5nZXRBdHRyaWJ1dGUoInZlcnNpb24iKSkpewp0aGlz +LnNldEF0dHJpYnV0ZSgiZG9FeHByZXNzSW5zdGFsbCIsdHJ1ZSk7CnRoaXMuYWRk +VmFyaWFibGUoIk1NcmVkaXJlY3RVUkwiLGVzY2FwZSh0aGlzLmdldEF0dHJpYnV0 +ZSgieGlSZWRpcmVjdFVybCIpKSk7CmRvY3VtZW50LnRpdGxlPWRvY3VtZW50LnRp +dGxlLnNsaWNlKDAsNDcpKyIgLSBGbGFzaCBQbGF5ZXIgSW5zdGFsbGF0aW9uIjsK +dGhpcy5hZGRWYXJpYWJsZSgiTU1kb2N0aXRsZSIsZG9jdW1lbnQudGl0bGUpO319 +CmlmKHRoaXMuc2tpcERldGVjdHx8dGhpcy5nZXRBdHRyaWJ1dGUoImRvRXhwcmVz +c0luc3RhbGwiKXx8dGhpcy5pbnN0YWxsZWRWZXIudmVyc2lvbklzVmFsaWQodGhp +cy5nZXRBdHRyaWJ1dGUoInZlcnNpb24iKSkpewp2YXIgbj0odHlwZW9mIF8yMD09 +InN0cmluZyIpP2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKF8yMCk6XzIwOwpuLmlu +bmVySFRNTD10aGlzLmdldFNXRkhUTUwoKTtyZXR1cm4gdHJ1ZTsKfWVsc2V7aWYo +dGhpcy5nZXRBdHRyaWJ1dGUoInJlZGlyZWN0VXJsIikhPSIiKXtkb2N1bWVudC5s +b2NhdGlvbi5yZXBsYWNlKHRoaXMuZ2V0QXR0cmlidXRlKCJyZWRpcmVjdFVybCIp +KTt9fQpyZXR1cm4gZmFsc2U7fX07CmRlY29uY2VwdC5TV0ZPYmplY3RVdGlsLmdl +dFBsYXllclZlcnNpb249ZnVuY3Rpb24oKXsKdmFyIF8yMz1uZXcgZGVjb25jZXB0 +LlBsYXllclZlcnNpb24oWzAsMCwwXSk7CmlmKG5hdmlnYXRvci5wbHVnaW5zJiZu +YXZpZ2F0b3IubWltZVR5cGVzLmxlbmd0aCl7CnZhciB4PW5hdmlnYXRvci5wbHVn +aW5zWyJTaG9ja3dhdmUgRmxhc2giXTsKaWYoeCYmeC5kZXNjcmlwdGlvbil7XzIz +PW5ldyBkZWNvbmNlcHQuUGxheWVyVmVyc2lvbih4LmRlc2NyaXB0aW9uLnJlcGxh +Y2UoLyhbYS16QS1aXXxccykrLywiIikucmVwbGFjZSgvKFxzK3J8XHMrYlswLTld +KykvLCIuIikuc3BsaXQoIi4iKSk7fQp9ZWxzZXt0cnl7dmFyIGF4bz1uZXcgQWN0 +aXZlWE9iamVjdCgiU2hvY2t3YXZlRmxhc2guU2hvY2t3YXZlRmxhc2guNyIpO30K +Y2F0Y2goZSl7dHJ5e3ZhciBheG89bmV3IEFjdGl2ZVhPYmplY3QoIlNob2Nrd2F2 +ZUZsYXNoLlNob2Nrd2F2ZUZsYXNoLjYiKTsKXzIzPW5ldyBkZWNvbmNlcHQuUGxh +eWVyVmVyc2lvbihbNiwwLDIxXSk7YXhvLkFsbG93U2NyaXB0QWNjZXNzPSJhbHdh +eXMiO30KY2F0Y2goZSl7aWYoXzIzLm1ham9yPT02KXtyZXR1cm4gXzIzO319dHJ5 +e2F4bz1uZXcgQWN0aXZlWE9iamVjdCgiU2hvY2t3YXZlRmxhc2guU2hvY2t3YXZl +Rmxhc2giKTt9CmNhdGNoKGUpe319aWYoYXhvIT1udWxsKXtfMjM9bmV3IGRlY29u +Y2VwdC5QbGF5ZXJWZXJzaW9uKGF4by5HZXRWYXJpYWJsZSgiJHZlcnNpb24iKS5z +cGxpdCgiICIpWzFdLnNwbGl0KCIsIikpO319CnJldHVybiBfMjM7fTsKZGVjb25j +ZXB0LlBsYXllclZlcnNpb249ZnVuY3Rpb24oXzI3KXsKdGhpcy5tYWpvcj1fMjdb +MF0hPW51bGw/cGFyc2VJbnQoXzI3WzBdKTowOwp0aGlzLm1pbm9yPV8yN1sxXSE9 +bnVsbD9wYXJzZUludChfMjdbMV0pOjA7CnRoaXMucmV2PV8yN1syXSE9bnVsbD9w +YXJzZUludChfMjdbMl0pOjA7Cn07CmRlY29uY2VwdC5QbGF5ZXJWZXJzaW9uLnBy +b3RvdHlwZS52ZXJzaW9uSXNWYWxpZD1mdW5jdGlvbihmdil7CmlmKHRoaXMubWFq +b3I8ZnYubWFqb3Ipe3JldHVybiBmYWxzZTt9CmlmKHRoaXMubWFqb3I+ZnYubWFq +b3Ipe3JldHVybiB0cnVlO30KaWYodGhpcy5taW5vcjxmdi5taW5vcil7cmV0dXJu +IGZhbHNlO30KaWYodGhpcy5taW5vcj5mdi5taW5vcil7cmV0dXJuIHRydWU7fQpp +Zih0aGlzLnJldjxmdi5yZXYpewpyZXR1cm4gZmFsc2U7Cn1yZXR1cm4gdHJ1ZTt9 +OwpkZWNvbmNlcHQudXRpbD17Z2V0UmVxdWVzdFBhcmFtZXRlcjpmdW5jdGlvbihf +Mjkpewp2YXIgcT1kb2N1bWVudC5sb2NhdGlvbi5zZWFyY2h8fGRvY3VtZW50Lmxv +Y2F0aW9uLmhhc2g7CmlmKHEpe3ZhciBfMmI9cS5zdWJzdHJpbmcoMSkuc3BsaXQo +IiYiKTsKZm9yKHZhciBpPTA7aTxfMmIubGVuZ3RoO2krKyl7CmlmKF8yYltpXS5z +dWJzdHJpbmcoMCxfMmJbaV0uaW5kZXhPZigiPSIpKT09XzI5KXsKcmV0dXJuIF8y +YltpXS5zdWJzdHJpbmcoKF8yYltpXS5pbmRleE9mKCI9IikrMSkpO319fQpyZXR1 +cm4gIiI7fX07CmRlY29uY2VwdC5TV0ZPYmplY3RVdGlsLmNsZWFudXBTV0ZzPWZ1 +bmN0aW9uKCl7aWYod2luZG93Lm9wZXJhfHwhZG9jdW1lbnQuYWxsKXtyZXR1cm47 +fQp2YXIgXzJkPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJPQkpFQ1Qi +KTsKZm9yKHZhciBpPTA7aTxfMmQubGVuZ3RoO2krKyl7XzJkW2ldLnN0eWxlLmRp +c3BsYXk9Im5vbmUiO2Zvcih2YXIgeCBpbiBfMmRbaV0pewppZih0eXBlb2YgXzJk +W2ldW3hdPT0iZnVuY3Rpb24iKXtfMmRbaV1beF09ZnVuY3Rpb24oKXt9O319fX07 +CmRlY29uY2VwdC5TV0ZPYmplY3RVdGlsLnByZXBVbmxvYWQ9ZnVuY3Rpb24oKXtf +X2ZsYXNoX3VubG9hZEhhbmRsZXI9ZnVuY3Rpb24oKXt9OwpfX2ZsYXNoX3NhdmVk +VW5sb2FkSGFuZGxlcj1mdW5jdGlvbigpe307CmlmKHR5cGVvZiB3aW5kb3cub251 +bmxvYWQ9PSJmdW5jdGlvbiIpewp2YXIgXzMwPXdpbmRvdy5vbnVubG9hZDsKd2lu +ZG93Lm9udW5sb2FkPWZ1bmN0aW9uKCl7CmRlY29uY2VwdC5TV0ZPYmplY3RVdGls +LmNsZWFudXBTV0ZzKCk7XzMwKCk7fTsKfWVsc2V7d2luZG93Lm9udW5sb2FkPWRl +Y29uY2VwdC5TV0ZPYmplY3RVdGlsLmNsZWFudXBTV0ZzO319OwppZih0eXBlb2Yg +d2luZG93Lm9uYmVmb3JldW5sb2FkPT0iZnVuY3Rpb24iKXsKdmFyIG9sZEJlZm9y +ZVVubG9hZD13aW5kb3cub25iZWZvcmV1bmxvYWQ7CndpbmRvdy5vbmJlZm9yZXVu +bG9hZD1mdW5jdGlvbigpewpkZWNvbmNlcHQuU1dGT2JqZWN0VXRpbC5wcmVwVW5s +b2FkKCk7Cm9sZEJlZm9yZVVubG9hZCgpO307Cn1lbHNle3dpbmRvdy5vbmJlZm9y +ZXVubG9hZD1kZWNvbmNlcHQuU1dGT2JqZWN0VXRpbC5wcmVwVW5sb2FkO30KaWYo +QXJyYXkucHJvdG90eXBlLnB1c2g9PW51bGwpewpBcnJheS5wcm90b3R5cGUucHVz +aD1mdW5jdGlvbihfMzEpewp0aGlzW3RoaXMubGVuZ3RoXT1fMzE7CnJldHVybiB0 +aGlzLmxlbmd0aDt9O30KdmFyIGdldFF1ZXJ5UGFyYW1WYWx1ZT1kZWNvbmNlcHQu +dXRpbC5nZXRSZXF1ZXN0UGFyYW1ldGVyOwp2YXIgRmxhc2hPYmplY3Q9ZGVjb25j +ZXB0LlNXRk9iamVjdDsKdmFyIFNXRk9iamVjdD1kZWNvbmNlcHQuU1dGT2JqZWN0 +Owo= + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline; filename=postsHandler.js +Content-Type: application/x-javascript; charset=utf-8; name=postsHandler.js +Content-Location: http://habrahabr.ru/js/1307631427/postsHandler.js +Content-Transfer-Encoding: Base64 + +dmFyIHBvc3RzSGFuZGxlciA9IGZ1bmN0aW9uKCkgew0KCXRoaXMucG9zdHNfaXQg +PSAtMTsNCgl0aGlzLnBvc3RzID0gW107DQoJdGhpcy5jdXJyZW50UGFnZSA9ICcn +Ow0KCXRoaXMuaXNQb3N0QmVpbmdSZWFkID0gZmFsc2U7DQp9DQoJDQpwb3N0c0hh +bmRsZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbigpIHsNCg0KCXZhciBfdGhp +cyA9IHRoaXM7DQoJDQoJdGhpcy5wb3N0cyA9ICQoJ3dyYXBwZXInKS5nZXRFbGVt +ZW50cygnLmhlbnRyeScpOw0KCXRoaXMucG9zdHMuc29ydChwb3N0c0hhbmRsZXIu +c29ydEFycmF5KTsNCgkNCglkb2N1bWVudC5vbmtleXVwID0gZnVuY3Rpb24oZXYp +IHsNCgkJDQoJCXZhciB0YXJnOw0KCQlpZighZXYpCWV2PXdpbmRvdy5ldmVudDsN +CgkJaWYgKCFkb2N1bWVudC5hbGwpIGV2LnByZXZlbnREZWZhdWx0KCk7IGVsc2Ug +ZXYucmV0dXJuVmFsdWUgPSBmYWxzZTsNCgkNCgkJaWYgKGV2LnRhcmdldCkgdGFy +ZyA9IGV2LnRhcmdldDsNCgkJZWxzZSBpZiAoZXYuc3JjRWxlbWVudCkgdGFyZyA9 +IGV2LnNyY0VsZW1lbnQ7DQoJCWlmICh0YXJnLm5vZGVUeXBlID09IDMpIHRhcmcg +PSB0YXJnLnBhcmVudE5vZGU7DQoJCQ0KCQl2YXIga2V5ID0gZ2V0Q2hhckNvZGUo +ZXYpOw0KCQkNCgkJaWYodGFyZy50YWdOYW1lICE9ICdURVhUQVJFQScgJiYgdGFy +Zy50YWdOYW1lICE9ICdJTlBVVCcpIHsNCgkJCWlmKGtleT09NzIpIHsNCgkJCQlf +dGhpcy50b3AoZXYpOw0KCQkJfQ0KCQkJZWxzZSBpZihrZXk9PTc1KSB7DQoJCQkJ +X3RoaXMucHJldihldik7DQoJCQl9DQoJCQllbHNlIGlmKGtleT09NzQpIHsNCgkJ +CQlfdGhpcy5uZXh0KGV2KTsNCgkJCX0NCgkJfQ0KCX0NCn07DQoNCnBvc3RzSGFu +ZGxlci5wcm90b3R5cGUuc29ydEFycmF5ID0gZnVuY3Rpb24oYSwgYikgew0KICBp +ZiAoYS5vZmZzZXRUb3AgPCBiLm9mZnNldFRvcCkNCiAgICByZXR1cm4gLTE7DQog +IGlmIChhLm9mZnNldFRvcCA+IGIub2Zmc2V0VG9wKQ0KICAgIHJldHVybiAxOw0K +ICByZXR1cm4gMDsJCQ0KfTsNCg0KLy/vv73vv73vv73vv73vv73vv73vv73vv73v +v73vv70g77+977+977+977+977+977+977+9IO+/ve+/ve+/ve+/vQ0KcG9zdHNI +YW5kbGVyLnByb3RvdHlwZS5kZXRlY3RDdXJyZW50UG9zdCA9IGZ1bmN0aW9uKCkg +ew0KCXRoaXMuaXNQb3N0QmVpbmdSZWFkID0gZmFsc2U7DQoJdmFyIGJvdW5kcyA9 +IHRoaXMuZ2V0V2luZG93Qm91bmRzKCk7DQoJdmFyIHBvc3QgPSAtMTsNCgl2YXIg +cG9zdHNfbGVuZ3RoID0gdGhpcy5wb3N0cy5sZW5ndGg7DQoJZm9yKHZhciBpPTA7 +IGk8cG9zdHNfbGVuZ3RoOyBpKyspIHsNCgkJaWYodGhpcy5wb3N0c1tpKzFdKSB7 +DQoJCQlpZigkKHRoaXMucG9zdHNbaV0pLmdldFBvc2l0aW9uKCkueTw9Ym91bmRz +LnkgJiYgJCh0aGlzLnBvc3RzW2ldKS5nZXRQb3NpdGlvbigpLnk+PWJvdW5kcy55 +KSB7DQoJCQkJdmFyIHBvc3QgPSBpOw0KCQkJfQ0KCQl9DQoJCWVsc2UgaWYgKCQo +dGhpcy5wb3N0c1tpXSkuZ2V0UG9zaXRpb24oKS55PD1ib3VuZHMueSkgew0KCQkJ +dmFyIHBvc3QgPSBpOw0KCQl9DQoJfQ0KCWlmKHBvc3Q+LTEgJiYgYm91bmRzLnkh +PSQodGhpcy5wb3N0c1twb3N0XSkuZ2V0UG9zaXRpb24oKS55KSB7DQoJCXRoaXMu +aXNQb3N0QmVpbmdSZWFkID0gdHJ1ZTsNCgl9DQoJcmV0dXJuIHBvc3Q7DQp9Ow0K +DQovL++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vSDvv73vv73vv73vv73vv73vv73v +v73vv73vv73vv70g77+977+977+977+977+977+977+9IO+/ve+/ve+/ve+/ve+/ +ve+/ve+/vQ0KcG9zdHNIYW5kbGVyLnByb3RvdHlwZS5nZXRXaW5kb3dCb3VuZHMg +PSBmdW5jdGlvbigpIHsNCiAgICB2YXIgdywgaCwgeCwgeTsNCg0KICAgIGlmICh3 +aW5kb3cuZ2Vja28pIHsNCiAgICAgICAgdmFyIGIgPSBkb2N1bWVudC5ib2R5Ow0K +ICAgICAgICB3ID0gYi5jbGllbnRXaWR0aDsNCiAgICAgICAgaCA9IGIuY2xpZW50 +SGVpZ2h0Ow0KICAgICAgICB4ID0gd2luZG93LnNjcm9sbFg7DQogICAgICAgIHkg +PSB3aW5kb3cuc2Nyb2xsWTsNCiAgICB9DQogICAgZWxzZSBpZiAod2luZG93Lndl +YmtpdCkgew0KICAgICAgICB3ID0gd2luZG93LmlubmVyV2lkdGg7DQogICAgICAg +IGggPSB3aW5kb3cuaW5uZXJIZWlnaHQ7DQogICAgICAgIHggPSB3aW5kb3cuc2Ny +b2xsWDsNCiAgICAgICAgeSA9IHdpbmRvdy5zY3JvbGxZOw0KICAgIH0NCiAgICBl +bHNlIGlmICh3aW5kb3cub3BlcmEpIHsNCiAgICAgICAgdyA9IHdpbmRvdy5pbm5l +cldpZHRoOw0KICAgICAgICBoID0gd2luZG93LmlubmVySGVpZ2h0Ow0KICAgICAg +ICB4ID0gd2luZG93LnBhZ2VYT2Zmc2V0Ow0KICAgICAgICB5ID0gd2luZG93LnBh +Z2VZT2Zmc2V0Ow0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICAgdmFyIGQgPSBk +b2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7DQogICAgICAgIHZhciBiID0gZG9jdW1l +bnQuYm9keTsNCiAgICAgICAgdyA9IGQuY2xpZW50V2lkdGggID8gZC5jbGllbnRX +aWR0aCAgOiBiLmNsaWVudFdpZHRoICA/IGIuY2xpZW50V2lkdGggIDogMDsNCiAg +ICAgICAgaCA9IGQuY2xpZW50SGVpZ2h0ID8gZC5jbGllbnRIZWlnaHQgOiBiLmNs +aWVudEhlaWdodCA/IGIuY2xpZW50SGVpZ2h0IDogMDsNCiAgICAgICAgeCA9IGQu +c2Nyb2xsTGVmdCAgID8gZC5zY3JvbGxMZWZ0ICAgOiBiLnNjcm9sbExlZnQgICA/ +IGIuc2Nyb2xsTGVmdCAgIDogMDsNCiAgICAgICAgeSA9IGQuc2Nyb2xsVG9wICAg +ID8gZC5zY3JvbGxUb3AgICAgOiBiLnNjcm9sbFRvcCAgICA/IGIuc2Nyb2xsVG9w +ICAgIDogMDsNCiAgICB9DQoNCiAgICByZXR1cm4gew0KICAgICAgICAndyc6IHcs +DQogICAgICAgICdoJzogaCwNCiAgICAgICAgJ3gnOiB4LA0KICAgICAgICAneSc6 +IHkNCiAgICB9Ow0KCQ0KfTsNCg0KcG9zdHNIYW5kbGVyLnByb3RvdHlwZS50b3Ag +PSBmdW5jdGlvbihldikgew0KCWlmKCFldikJZXY9d2luZG93LmV2ZW50Ow0KCWlm +ICghZG9jdW1lbnQuYWxsKSBldi5wcmV2ZW50RGVmYXVsdCgpOyBlbHNlIGV2LnJl +dHVyblZhbHVlID0gZmFsc2U7DQoJDQoJd2luZG93LnNjcm9sbFRvKDAsMCk7DQp9 +Ow0KDQpwb3N0c0hhbmRsZXIucHJvdG90eXBlLnByZXYgPSBmdW5jdGlvbihldikg +ew0KCWlmKCFldikJZXY9d2luZG93LmV2ZW50Ow0KCWlmICghZG9jdW1lbnQuYWxs +KSBldi5wcmV2ZW50RGVmYXVsdCgpOyBlbHNlIGV2LnJldHVyblZhbHVlID0gZmFs +c2U7CQ0KCQ0KCXRoaXMucG9zdHNfaXQgPSB0aGlzLmRldGVjdEN1cnJlbnRQb3N0 +KCk7DQoNCglpZih0aGlzLnBvc3RzICYmIHRoaXMucG9zdHMubGVuZ3RoKSB7DQoJ +CWlmKHRoaXMucG9zdHNfaXQ8PXRoaXMucG9zdHMubGVuZ3RoICYmIHRoaXMucG9z +dHNfaXQ+MCkgew0KCQkJaWYoIXRoaXMuaXNQb3N0QmVpbmdSZWFkKSB7DQoJCQkJ +dGhpcy5wb3N0c19pdC0tOw0KCQkJfQ0KCQkJd2luZG93LnNjcm9sbFRvKDAsJCh0 +aGlzLnBvc3RzW3RoaXMucG9zdHNfaXRdKS5nZXRQb3NpdGlvbigpLnkpOw0KCQl9 +DQoJCWVsc2UgaWYgKHRoaXMucG9zdHNfaXQ8PTApew0KCQkJdGhpcy5wcmV2UGFn +ZSgpOw0KCQl9DQoJCWVsc2UgaWYodGhpcy5wb3N0c19pdD50aGlzLnBvc3RzLmxl +bmd0aCkgew0KCQkJdGhpcy5wb3N0c19pdCA9IHRoaXMucG9zdHMubGVuZ3RoLTI7 +DQoJCQl3aW5kb3cuc2Nyb2xsVG8oMCwkKHRoaXMucG9zdHNbdGhpcy5wb3N0c19p +dF0pLmdldFBvc2l0aW9uKCkueSk7DQoJCX0NCgl9DQp9Ow0KDQpwb3N0c0hhbmRs +ZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihldikgew0KCWlmKCFldikgZXY9 +d2luZG93LmV2ZW50Ow0KCWlmICghZG9jdW1lbnQuYWxsKSBldi5wcmV2ZW50RGVm +YXVsdCgpOyBlbHNlIGV2LnJldHVyblZhbHVlID0gZmFsc2U7DQoJDQoJdGhpcy5w +b3N0c19pdCA9IHRoaXMuZGV0ZWN0Q3VycmVudFBvc3QoKTsNCg0KCWlmKHRoaXMu +cG9zdHMgJiYgdGhpcy5wb3N0cy5sZW5ndGgpIHsNCgkJdmFyIGJvdW5kcyA9IHRo +aXMuZ2V0V2luZG93Qm91bmRzKCk7DQoJCXZhciBkb2NIZWlnaHQgPSAkKCdoZWFk +ZXItd3JhcHBlcicpLm9mZnNldEhlaWdodCskKCd3cmFwcGVyJykub2Zmc2V0SGVp +Z2h0KyQoJ2Zvb3RlcicpLm9mZnNldEhlaWdodCs1MDsNCgkJaWYoKGJvdW5kcy55 +ICsgYm91bmRzLmgpID09IGRvY0hlaWdodCB8fCAoYm91bmRzLnkgKyBib3VuZHMu +aCkgPT0gZG9jSGVpZ2h0KzEwKXsNCgkJCXRoaXMubmV4dFBhZ2UoKTsNCgkJfQ0K +CQlpZih0aGlzLnBvc3RzX2l0PHRoaXMucG9zdHMubGVuZ3RoLTEgJiYgdGhpcy5w +b3N0c19pdD49LTEpIHsNCgkJCXRoaXMucG9zdHNfaXQrKzsNCgkJCXdpbmRvdy5z +Y3JvbGxUbygwLCQodGhpcy5wb3N0c1t0aGlzLnBvc3RzX2l0XSkuZ2V0UG9zaXRp +b24oKS55KTsNCgkJfQ0KCX0NCn07DQoNCnBvc3RzSGFuZGxlci5wcm90b3R5cGUu +bmV4dFBhZ2UgPSBmdW5jdGlvbigpIHsNCglpZih3aW5kb3cubG9jYXRpb24uaHJl +Zi5tYXRjaCgvXGQrL2cpKSB7DQoJCXRoaXMuY3VycmVudFBhZ2UgPSB3aW5kb3cu +bG9jYXRpb24uaHJlZi5tYXRjaCgvXGQrL2cpWzBdOw0KCQl0aGlzLmN1cnJlbnRQ +YWdlID0gcGFyc2VJbnQodGhpcy5jdXJyZW50UGFnZSk7DQoJCXRoaXMubmV4dFBh +Z2UgPSB0aGlzLmN1cnJlbnRQYWdlICsgMTsNCgkJd2luZG93LmxvY2F0aW9uLmhy +ZWYgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5yZXBsYWNlKHRoaXMuY3VycmVudFBh +Z2UsIHRoaXMubmV4dFBhZ2UpOw0KCX0NCgllbHNlIHsNCgkJdGhpcy5uZXh0UGFn +ZSA9IDI7DQoJCXdpbmRvdy5sb2NhdGlvbi5ocmVmID0gd2luZG93LmxvY2F0aW9u +LmhyZWYgKyAncGFnZScgKyB0aGlzLm5leHRQYWdlOw0KCX0NCn07DQoNCnBvc3Rz +SGFuZGxlci5wcm90b3R5cGUucHJldlBhZ2UgPSBmdW5jdGlvbigpIHsNCglpZih3 +aW5kb3cubG9jYXRpb24uaHJlZi5tYXRjaCgvXGQrL2cpKSB7DQoJCXRoaXMuY3Vy +cmVudFBhZ2UgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5tYXRjaCgvXGQrL2cpWzBd +Ow0KCQlpZih0aGlzLmN1cnJlbnRQYWdlIT0nMScpIHsNCgkJCXRoaXMuY3VycmVu +dFBhZ2UgPSBwYXJzZUludCh0aGlzLmN1cnJlbnRQYWdlKTsNCgkJCXRoaXMubmV4 +dFBhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlLTE7DQoJCQl3aW5kb3cubG9jYXRpb24u +aHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnJlcGxhY2UodGhpcy5jdXJyZW50 +UGFnZSwgdGhpcy5uZXh0UGFnZSk7DQoJCX0NCgkJZWxzZSB7DQoJCQl3aW5kb3cu +c2Nyb2xsVG8oMCwwKTsNCgkJfQ0KCX0NCgllbHNlIHsNCgkJd2luZG93LnNjcm9s +bFRvKDAsMCk7DQoJfQ0KCQ0KfTsNCg0KdmFyIHBvc3RzSGFuZGxlciA9IG5ldyBw +b3N0c0hhbmRsZXIoKTsNCg0Kd2luZG93LmFkZEV2ZW50KCdkb21yZWFkeScsIGZ1 +bmN0aW9uKCkgew0KCXBvc3RzSGFuZGxlci5pbml0KCk7DQp9KTs= + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline; filename=habraWYG.js +Content-Type: application/x-javascript; charset=utf-8; name=habraWYG.js +Content-Location: http://habrahabr.ru/js/1307631427/habraWYG.js +Content-Transfer-Encoding: Base64 + +LyoKCWhhYnJhV1lHIC0g0L/RgNC+0YHRgtC+0Lkg0LLQuNC30LjQstC40LMKKi8K +CmhhYnJhV1lHID0gewoKCWluc2VydFRhZ1dpdGhUZXh0OiBmdW5jdGlvbiAobGlu +aywgdGFnTmFtZSl7CgkJdmFyIHN0YXJ0VGFnID0gJzwnICsgdGFnTmFtZSArICc+ +JzsKCQl2YXIgZW5kVGFnID0gJzwvJyArIHRhZ05hbWUgKyAnPic7CgkJaGFicmFX +WUcuaW5zZXJ0VGFnKGxpbmssIHN0YXJ0VGFnLCBlbmRUYWcpOwoJCXJldHVybiBm +YWxzZTsKCX0sCgoJaW5zZXJ0SW1hZ2U6IGZ1bmN0aW9uKGxpbmspewoJCXZhciBz +cmMgPSBwcm9tcHQoJ9CS0LLQtdC00LjRgtC1IHNyYyDQutCw0YDRgtC40L3QutC4 +JywgJ2h0dHA6Ly8nKTsKCQlpZihzcmMpewoJCQloYWJyYVdZRy5pbnNlcnRUYWco +bGluaywgJzxpbWcgc3JjPSInICsgc3JjICsgJyIgYWx0PSJpbWFnZSIvPicsICcn +KTsKCQl9CgkJcmV0dXJuIGZhbHNlOwoJfSwKCglpbnNlcnRMaW5rOiBmdW5jdGlv +bihsaW5rKXsKCQl2YXIgaHJlZiA9IHByb21wdCgn0JLQstC10LTQuNGC0LUgVVJM +INGB0YHRi9C70LrQuCcsICdodHRwOi8vJyk7CgkJaWYoaHJlZil7CgkJCWhhYnJh +V1lHLmluc2VydFRhZyhsaW5rLCAnPGEgaHJlZj0iJyArIGhyZWYgKyAnIj4nLCAn +PC9hPicpOwoJCX0KCQlyZXR1cm4gZmFsc2U7Cgl9LAoKCWluc2VydFVzZXI6IGZ1 +bmN0aW9uKGxpbmspewoJCXZhciBsb2dpbiA9IHByb21wdCgn0JLQstC10LTQuNGC +0LUg0L3QuNC60L3QtdC50Lwg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPJywgJycp +OwoJCWlmKGxvZ2luKXsKCQkJaGFicmFXWUcuaW5zZXJ0VGFnKGxpbmssICc8aGgg +dXNlcj0iJyArIGxvZ2luICsgJyIvPicsICcnKTsKCQl9CgkJcmV0dXJuIGZhbHNl +OwoJfSwKCglpbnNlcnRIYWJyYWN1dDogZnVuY3Rpb24obGluayl7CgkJaGFicmFX +WUcuaW5zZXJ0VGFnKGxpbmssICc8aGFicmFjdXQgLz4nLCAnJyk7CgkJcmV0dXJu +IGZhbHNlOwoJfSwKCglpbnNlcnRUYWc6IGZ1bmN0aW9uKGxpbmssIHN0YXJ0VGFn +LCBlbmRUYWcsIHJlcE9iail7CgkJCXZhciB0ZXh0YXJlYVBhcmVudCA9ICQobGlu +aykuZ2V0UGFyZW50KCcuZWRpdG9yJyk7CgkJCXZhciB0ZXh0YXJlYSA9IHRleHRh +cmVhUGFyZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0ZXh0YXJlYScpWzBdOwoJ +CQl0ZXh0YXJlYS5mb2N1cygpOwoKCQkJdmFyIHNjcnRvcCA9IHRleHRhcmVhLnNj +cm9sbFRvcDsKCgkJCXZhciBjdXJzb3JQb3MgPSBoYWJyYVdZRy5nZXRDdXJzb3Io +dGV4dGFyZWEpOwoJCQl2YXIgdHh0X3ByZSA9IHRleHRhcmVhLnZhbHVlLnN1YnN0 +cmluZygwLCBjdXJzb3JQb3Muc3RhcnQpOwoJCQl2YXIgdHh0X3NlbCA9IHRleHRh +cmVhLnZhbHVlLnN1YnN0cmluZyhjdXJzb3JQb3Muc3RhcnQsIGN1cnNvclBvcy5l +bmQpOwoJCQl2YXIgdHh0X2FmdCA9IHRleHRhcmVhLnZhbHVlLnN1YnN0cmluZyhj +dXJzb3JQb3MuZW5kKTsKCgkJCWlmKHJlcE9iail7CgkJCQl0eHRfc2VsID0gdHh0 +X3NlbC5yZXBsYWNlKC9cci9nLCAnJyk7CgkJCQl0eHRfc2VsID0gdHh0X3NlbCAh +PSAnJyA/IHR4dF9zZWwgOiAnICc7CgkJCQl0eHRfc2VsID0gdHh0X3NlbC5yZXBs +YWNlKG5ldyBSZWdFeHAocmVwT2JqLmZpbmRTdHIsICdnbScpLCByZXBPYmoucmVw +U3RyKTsKCQkJfQoKCQkJaWYgKGN1cnNvclBvcy5zdGFydCA9PSBjdXJzb3JQb3Mu +ZW5kKXsKCQkJCXZhciBudUN1cnNvclBvcyA9IGN1cnNvclBvcy5zdGFydCArIHN0 +YXJ0VGFnLmxlbmd0aDsKCQkJfWVsc2V7CgkJCQl2YXIgbnVDdXJzb3JQb3M9U3Ry +aW5nKHR4dF9wcmUgKyBzdGFydFRhZyArIHR4dF9zZWwgKyBlbmRUYWcpLmxlbmd0 +aDsKCQkJfQoKCQkJdGV4dGFyZWEudmFsdWUgPSB0eHRfcHJlICsgc3RhcnRUYWcg +KyB0eHRfc2VsICsgZW5kVGFnICsgdHh0X2FmdDsKCgoJCQkvKgoJCQlpZih0ZXh0 +YXJlYS5zZXRTZWxlY3Rpb25SYW5nZSkgewoJCQkJdGV4dGFyZWEuc2V0U2VsZWN0 +aW9uUmFuZ2UobnVDdXJzb3JQb3MgLSA1LCBudUN1cnNvclBvcyk7CgkJCX0KCQkJ +Ki8KCQkJaGFicmFXWUcuc2V0Q3Vyc29yKHRleHRhcmVhLCBudUN1cnNvclBvcywg +bnVDdXJzb3JQb3MpOwoKCQkJaWYgKHNjcnRvcCkgdGV4dGFyZWEuc2Nyb2xsVG9w +ID0gc2NydG9wOwoKCQkJcmV0dXJuIGZhbHNlOwoJfSwKCglpbnNlcnRUYWdGcm9t +RHJvcEJveDogZnVuY3Rpb24obGluayl7CgkJCWhhYnJhV1lHLmluc2VydFRhZ1dp +dGhUZXh0KGxpbmssIGxpbmsudmFsdWUpOwoJCQlsaW5rLnNlbGVjdGVkSW5kZXgg +PSAwOwoJfSwKCglpbnNlcnRMaXN0OiBmdW5jdGlvbihsaW5rKXsKCgkJCXZhciBz +dGFydFRhZyA9ICc8JyArIGxpbmsudmFsdWUgKyAnPlxuJzsKCQkJdmFyIGVuZFRh +ZyA9ICdcbjwvJyArIGxpbmsudmFsdWUgKyAnPic7CgoJCQl2YXIgcmVwT2JqID0g +ewoJCQkJZmluZFN0cjogJ14oLispJywKCQkJCXJlcFN0cjogJ1x0PGxpPiQxPC9s +aT4nCgkJCX0KCgkJCWhhYnJhV1lHLmluc2VydFRhZyhsaW5rLCBzdGFydFRhZywg +ZW5kVGFnLCByZXBPYmopOwoKCQkJbGluay5zZWxlY3RlZEluZGV4ID0gMDsKCX0s +CgoJaW5zZXJ0VGFiOiBmdW5jdGlvbihlLCB0ZXh0YXJlYSl7CgkJCWlmKCFlKSBl +ID0gd2luZG93LmV2ZW50OwoJCQlpZiAoZS5rZXlDb2RlKSB2YXIga2V5Q29kZSA9 +IGUua2V5Q29kZTsKCQkJZWxzZSBpZiAoZS53aGljaCkgdmFyIGtleUNvZGUgPSBl +LndoaWNoOwoKCQkJLy9hbGVydChrZXlDb2RlKTsKCQkJc3dpdGNoKGUudHlwZSl7 +CgkJCQljYXNlICdrZXlkb3duJzoKCQkJCQlpZihrZXlDb2RlID09IDE2KXsKCQkJ +CQkJaGFicmFXWUcuc2hpZnQgPSB0cnVlOwoJCQkJCQkvL2FsZXJ0KCcxJyk7CgkJ +CQkJfQoJCQkJCWJyZWFrOwoKCQkJCWNhc2UgJ2tleXVwJzoKCQkJCQlpZihrZXlD +b2RlID09IDE2KSB7CgkJCQkJCWhhYnJhV1lHLnNoaWZ0ID0gZmFsc2U7CgkJCQkJ +CS8vYWxlcnQoJzInKTsKCQkJCQl9CgoJCQkJCWJyZWFrOwoJCQl9CgoJCQl0ZXh0 +YXJlYS5mb2N1cygpOwoJCQl2YXIgY3Vyc29yUG9zID0gaGFicmFXWUcuZ2V0Q3Vy +c29yKHRleHRhcmVhKTsKCgkJCWlmIChjdXJzb3JQb3Muc3RhcnQgPT0gY3Vyc29y +UG9zLmVuZCl7CgkJCQlyZXR1cm4gdHJ1ZTsKCgoJCQl9IGVsc2UgaWYoa2V5Q29k +ZSA9PSA5ICYmICFoYWJyYVdZRy5zaGlmdCl7CgkJCQl2YXIgcmVwT2JqID0gewoJ +CQkJCWZpbmRTdHI6ICdeKC4rKScsCgkJCQkJcmVwU3RyOiAnXHQkMScKCQkJCX0K +CQkJCWhhYnJhV1lHLmluc2VydFRhZyh0ZXh0YXJlYSwgJycsICcnLCByZXBPYmop +OwoJCQkJcmV0dXJuIGZhbHNlOwoKCQkJfSBlbHNlIGlmKGtleUNvZGUgPT0gOSAm +JiBoYWJyYVdZRy5zaGlmdCl7CgkJCQl2YXIgcmVwT2JqID0gewoJCQkJCWZpbmRT +dHI6ICdeXHQoLispJywKCQkJCQlyZXBTdHI6ICckMScKCQkJCX0KCQkJCWhhYnJh +V1lHLmluc2VydFRhZyh0ZXh0YXJlYSwgJycsICcnLCByZXBPYmopOwoJCQkJcmV0 +dXJuIGZhbHNlOwoJCQl9Cgl9LAoKCWdldEN1cnNvcjogZnVuY3Rpb24oaW5wdXQp +ewoJCQl2YXIgcmVzdWx0ID0ge3N0YXJ0OiAwLCBlbmQ6IDB9OwoJCQlpZiAoaW5w +dXQuc2V0U2VsZWN0aW9uUmFuZ2UpewoJCQkJcmVzdWx0LnN0YXJ0PSBpbnB1dC5z +ZWxlY3Rpb25TdGFydDsKCQkJCXJlc3VsdC5lbmQgPSBpbnB1dC5zZWxlY3Rpb25F +bmQ7CgkJCX0gZWxzZSBpZiAoIWRvY3VtZW50LnNlbGVjdGlvbikgewoJCQkJcmV0 +dXJuIGZhbHNlOwoJCQl9IGVsc2UgaWYgKGRvY3VtZW50LnNlbGVjdGlvbiAmJiBk +b2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UpIHsKCQkJCXZhciByYW5nZSA9 +IGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpOwoJCQkJdmFyIHN0b3Jl +ZF9yYW5nZSA9IHJhbmdlLmR1cGxpY2F0ZSgpOwoJCQkJc3RvcmVkX3JhbmdlLm1v +dmVUb0VsZW1lbnRUZXh0KGlucHV0KTsKCQkJCXN0b3JlZF9yYW5nZS5zZXRFbmRQ +b2ludCgnRW5kVG9FbmQnLCByYW5nZSk7CgkJCQlyZXN1bHQuc3RhcnQgPSBzdG9y +ZWRfcmFuZ2UudGV4dC5sZW5ndGggLSByYW5nZS50ZXh0Lmxlbmd0aDsKCQkJCXJl +c3VsdC5lbmQgPSByZXN1bHQuc3RhcnQgKyByYW5nZS50ZXh0Lmxlbmd0aDsKCQkJ +fQoJCQlyZXR1cm4gcmVzdWx0OwoJfSwKCglzZXRDdXJzb3I6IGZ1bmN0aW9uKHRl +eHRhcmVhLCBzdGFydCwgZW5kKXsKCQkJaWYodGV4dGFyZWEuY3JlYXRlVGV4dFJh +bmdlKSB7CgkJCQl2YXIgcmFuZ2UgPSB0ZXh0YXJlYS5jcmVhdGVUZXh0UmFuZ2Uo +KTsKCQkJCXJhbmdlLm1vdmUoImNoYXJhY3RlciIsIHN0YXJ0KTsKCQkJCXJhbmdl +LnNlbGVjdCgpOwoJCQl9IGVsc2UgaWYodGV4dGFyZWEuc2VsZWN0aW9uU3RhcnQp +IHsKCQkJCXRleHRhcmVhLnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpOwoJ +CQl9Cgl9Cgp9Cgo= + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline; filename=friending.js +Content-Type: application/x-javascript; charset=utf-8; name=friending.js +Content-Location: http://habrahabr.ru/js/1307631427/friending.js +Content-Transfer-Encoding: Base64 + +ZnJpZW5kaW5nSGFuZGxlciA9IHsNCgl1cmw6ICcvYWpheC91c2Vycy9mcmllbmRz +LycsDQoJeG1sOiB7DQoJCXJlc3BvbnNlTm9kZXM6IHsNCgkJCWVycm9yIDogJ2Vy +cm9yJywNCgkJCXJlc3VsdCA6ICdtZXNzYWdlJywNCgkJCXRleHQgOiAndGV4dCcN +CgkJfSwNCg0KCQlwYXJzZTogZnVuY3Rpb24oeG1sT2JqKXsNCgkJCXZhciB4bWxO +b2RlcyA9IHt9Ow0KCQkJZm9yIChwcm9wIGluIGZyaWVuZGluZ0hhbmRsZXIueG1s +LnJlc3BvbnNlTm9kZXMpIHsNCgkJCQl4bWxOb2Rlc1twcm9wXSA9IHhtbE9iai5n +ZXRFbGVtZW50c0J5VGFnTmFtZShmcmllbmRpbmdIYW5kbGVyLnhtbC5yZXNwb25z +ZU5vZGVzW3Byb3BdKTsNCgkJCX0NCgkJCXJldHVybiB4bWxOb2RlczsNCgkJfQ0K +CX0sDQoJDQoJZnJpZW5kVW5mcmllbmQgOiBmdW5jdGlvbihmcmllbmRJZCwgZnJp +ZW5kKSB7DQoJCXByb2ZpbGVGb3JtLmhpZGVQYW5lbHMoKTsNCgkJaWYgKGZyaWVu +ZCkgew0KCQkJJCgnanMtYWRkRnJpZW5kTWVzc2FnZScpLnJlbW92ZUNsYXNzKCdo +aWRkZW4nKTsNCgkJCSQoJ2pzLWFkZEZyaWVuZFNlbmRCdXR0b24nKS5yZW1vdmVD +bGFzcygnaGlkZGVuJyk7DQoJCX0gZWxzZSB7DQoJCQkkKCdqcy1hZGRGcmllbmRN +ZXNzYWdlJykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpOw0KCQkJJCgnanMtcmVtb3Zl +RnJpZW5kU2VuZEJ1dHRvbicpLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTsNCgkJfQ0K +CX0sDQoJDQoJYWRkRnJpZW5kU2VuZCA6IGZ1bmN0aW9uIChmcmllbmRJZCkgew0K +CQl2YXIgZGF0YSA9ICdhY3Rpb249ZnJpZW5kJmZyaWVuZElkPScgKyBmcmllbmRJ +ZCArICcmbXNnPScgKyAkKCdqcy1GcmllbmRVbmZyaWVuZE1lc3NhZ2UnKS52YWx1 +ZTsNCgkJYWpheExvYWRQb3N0KGZyaWVuZGluZ0hhbmRsZXIudXJsLCBkYXRhLCBm +dW5jdGlvbihhamF4T2JqKSB7DQogICAgICAgICAgICBmcmllbmRpbmdIYW5kbGVy +LmFkZEZyaWVuZE9ubG9hZChhamF4T2JqKQ0KICAgICAgICB9KTsNCgl9LA0KCQ0K +CXJlbW92ZUZyaWVuZFNlbmQgOiBmdW5jdGlvbiAoZnJpZW5kSWQpIHsNCgkJdmFy +IGRhdGEgPSAnYWN0aW9uPXVuZnJpZW5kJmZyaWVuZElkPScgKyBmcmllbmRJZCAr +ICcmbXNnPScgKyAkKCdqcy1GcmllbmRVbmZyaWVuZE1lc3NhZ2UnKS52YWx1ZTsN +CgkJYWpheExvYWRQb3N0KGZyaWVuZGluZ0hhbmRsZXIudXJsLCBkYXRhLCBmcmll +bmRpbmdIYW5kbGVyLnJlbW92ZUZyaWVuZE9ubG9hZCk7DQoJfSwNCgkNCglhZGRG +cmllbmRPbmxvYWQgOiBmdW5jdGlvbihhamF4T2JqKSB7DQoJCWlmKGFqYXhPYmog +JiYgYWpheE9iai5yZXNwb25zZVhNTCl7DQoJCQl2YXIgeG1sT2JqID0gYWpheE9i +ai5yZXNwb25zZVhNTDsNCgkJCXZhciB4bWxOb2RlcyA9IGZyaWVuZGluZ0hhbmRs +ZXIueG1sLnBhcnNlKHhtbE9iaik7DQoJCQlpZih4bWxOb2Rlcy5lcnJvciAmJiB4 +bWxOb2Rlcy5lcnJvci5sZW5ndGgpew0KCQkJCXZhciBlcnJvcnNfbGVuZ3RoID0g +eG1sTm9kZXMuZXJyb3IubGVuZ3RoOw0KCQkJCWZvciAodmFyIGkgPSAwOyBpIDwg +ZXJyb3JzX2xlbmd0aDsgaSsrKSB7DQoJCQkJCWZ1dHVfYWxlcnQoRkFULmZyaWVu +ZGxpZXJfaGVhZGVyLCB4bWxOb2Rlcy5lcnJvcltpXS5maXJzdENoaWxkLmRhdGEs +IHRydWUsICdlcnJvcicpOw0KCQkJCX0NCgkJCX0NCgkJCWlmKHhtbE5vZGVzLnJl +c3VsdCAmJiB4bWxOb2Rlcy5yZXN1bHQubGVuZ3RoKSB7DQoJCQkJaWYoeG1sTm9k +ZXMudGV4dCAmJiB4bWxOb2Rlcy50ZXh0Lmxlbmd0aCkgew0KCQkJCQlmdXR1X2Fs +ZXJ0KEZBVC5mcmllbmRsaWVyX2hlYWRlciwgeG1sTm9kZXMudGV4dFswXS5maXJz +dENoaWxkLmRhdGEsIGZhbHNlLCAnbWVzc2FnZScpOw0KCQkJCX0NCgkJCQkkKCdq +cy1GcmllbmRVbmZyaWVuZE1lc3NhZ2UnKS52YWx1ZSA9ICcnOw0KCQkJCSQoJ2pz +LWFkZEZyaWVuZE1lc3NhZ2UnKS5hZGRDbGFzcygnaGlkZGVuJyk7DQoJCQkJJCgn +anMtYWRkRnJpZW5kU2VuZEJ1dHRvbicpLmFkZENsYXNzKCdoaWRkZW4nKTsNCg0K +CQkJCS8vJCgnanMtYWRkRnJpZW5kQnV0dG9uJykuYWRkQ2xhc3MoJ2hpZGRlbicp +Ow0KCQkJCS8vJCgnanMtZGVsZXRlRnJpZW5kQnV0dG9uJykucmVtb3ZlQ2xhc3Mo +J2hpZGRlbicpOw0KICAgICAgICAgICAgICAgIA0KCSAgICAgICAgICAgICQkKCJw +cm9maWxlLWFjdGlvbnMtZnJpZW5kLWFkZCIpLnNldFN0eWxlKCdkaXNwbGF5Jywg +J25vbmUnKQ0KCSAgICAgICAgICAgICQkKCJwcm9maWxlLWFjdGlvbnMtZnJpZW5k +LWRlbCIpLnNldFN0eWxlKCdkaXNwbGF5JywgJ2lubGluZScpDQoJCQl9DQoJCX0N +Cgl9LA0KCQ0KCXJlbW92ZUZyaWVuZE9ubG9hZCA6IGZ1bmN0aW9uKGFqYXhPYmop +IHsNCgkJaWYoYWpheE9iaiAmJiBhamF4T2JqLnJlc3BvbnNlWE1MKXsNCgkJCXZh +ciB4bWxPYmogPSBhamF4T2JqLnJlc3BvbnNlWE1MOw0KCQkJdmFyIHhtbE5vZGVz +ID0gZnJpZW5kaW5nSGFuZGxlci54bWwucGFyc2UoeG1sT2JqKTsNCgkJCWlmKHht +bE5vZGVzLmVycm9yICYmIHhtbE5vZGVzLmVycm9yLmxlbmd0aCl7DQoJCQkJdmFy +IGVycm9yc19sZW5ndGggPSB4bWxOb2Rlcy5lcnJvci5sZW5ndGg7DQoJCQkJZm9y +ICh2YXIgaSA9IDA7IGkgPCBlcnJvcnNfbGVuZ3RoOyBpKyspIHsNCgkJCQkJZnV0 +dV9hbGVydChGQVQuZnJpZW5kbGllcl9oZWFkZXIsIHhtbE5vZGVzLmVycm9yW2ld +LmZpcnN0Q2hpbGQuZGF0YSwgdHJ1ZSwgJ2Vycm9yJyk7DQoJCQkJfQ0KCQkJfQ0K +CQkJaWYoeG1sTm9kZXMucmVzdWx0ICYmIHhtbE5vZGVzLnJlc3VsdC5sZW5ndGgp +IHsNCgkJCQlmdXR1X2FsZXJ0KEZBVC5mcmllbmRsaWVyX2hlYWRlciwgJ9CS0Ysg +0YPQtNCw0LvQuNC70Lgg0LTRgNGD0LPQsCA6KCcsIGZhbHNlLCAnbWVzc2FnZScp +Ow0KCQkJCSQoJ2pzLUZyaWVuZFVuZnJpZW5kTWVzc2FnZScpLnZhbHVlID0gJyc7 +DQoJCQkJJCgnanMtYWRkRnJpZW5kTWVzc2FnZScpLmFkZENsYXNzKCdoaWRkZW4n +KTsNCgkJCQkkKCdqcy1yZW1vdmVGcmllbmRTZW5kQnV0dG9uJykuYWRkQ2xhc3Mo +J2hpZGRlbicpOw0KDQoJCQkJLy8kKCdqcy1hZGRGcmllbmRCdXR0b24nKS5yZW1v +dmVDbGFzcygnaGlkZGVuJyk7DQoJCQkJLy8kKCdqcy1kZWxldGVGcmllbmRCdXR0 +b24nKS5hZGRDbGFzcygnaGlkZGVuJyk7DQoJCQl9DQoJCX0NCgl9LA0KCQ0KCWFu +c3dlciA6IGZ1bmN0aW9uKGFuc3dlciwgbWVzc2FnZV9pZCwgdXNlcl9pZCwgZnJp +ZW5kX2lkKSB7DQoJCXZhciBkYXRhID0gJ2FjdGlvbj1yZXBseSZhbnN3ZXI9JyAr +IGFuc3dlciArICcmbWVzc2FnZV9pZD0nICsgbWVzc2FnZV9pZCArICcmdXNlcl9p +ZD0nICsgdXNlcl9pZCArICcmZnJpZW5kX2lkPScgKyBmcmllbmRfaWQ7DQoJCWFq +YXhMb2FkUG9zdChmcmllbmRpbmdIYW5kbGVyLnVybCwgZGF0YSwgZnJpZW5kaW5n +SGFuZGxlci5hbnN3ZXJPbmxvYWQpOw0KCX0sDQoJYW5zd2VyT25sb2FkIDogZnVu +Y3Rpb24oYWpheE9iaikgew0KCQlpZihhamF4T2JqICYmIGFqYXhPYmoucmVzcG9u +c2VYTUwpew0KCQkJdmFyIHhtbE9iaiA9IGFqYXhPYmoucmVzcG9uc2VYTUw7DQoJ +CQl2YXIgeG1sTm9kZXMgPSBmcmllbmRpbmdIYW5kbGVyLnhtbC5wYXJzZSh4bWxP +YmopOw0KCQkJaWYoeG1sTm9kZXMuZXJyb3IgJiYgeG1sTm9kZXMuZXJyb3IubGVu +Z3RoKXsNCgkJCQl2YXIgZXJyb3JzX2xlbmd0aCA9IHhtbE5vZGVzLmVycm9yLmxl +bmd0aDsNCgkJCQlmb3IgKHZhciBpID0gMDsgaSA8IGVycm9yc19sZW5ndGg7IGkr +Kykgew0KCQkJCQlmdXR1X2FsZXJ0KEZBVC5mcmllbmRsaWVyX2hlYWRlciwgeG1s +Tm9kZXMuZXJyb3JbaV0uZmlyc3RDaGlsZC5kYXRhLCB0cnVlLCAnZXJyb3InKTsN +CgkJCQl9DQoJCQl9DQoJCQlpZih4bWxOb2Rlcy50ZXh0ICYmIHhtbE5vZGVzLnRl +eHQubGVuZ3RoKSB7DQoJCQkJJCgnZnJpZW5kLW1haWwtYWN0aW9uJykuaW5uZXJI +VE1MID0geG1sTm9kZXMudGV4dFswXS5maXJzdENoaWxkLmRhdGE7DQoJCQl9DQoJ +CX0JDQoJfQ0KfTsNCg0KY29tcGFuaWVzSGFuZGxlciA9IHsNCgl3b3JrZXJTZW5k +IDogZnVuY3Rpb24gKGNvbXBhbnlfaWQsIGFkZCwgZmF2KSB7DQoJCXZhciBwZW9w +bGVMaXN0LHBlb3BsZUNvdW50ZXIscGVvcGxlTWVudTsNCgkJKG5ldyBSZXF1ZXN0 +KHsNCiAgICAgICAgICAgICd1cmwnOiB0ZW1wLmJhc2UgKyAnYWpheC9jb21wYW55 +L3NldC8nLA0KICAgICAgICAgICAgJ2RhdGEnOiB7DQogICAgICAgICAgICAgICAg +J2FjdGlvbic6IGFkZCA/ICggZmF2ID8gJ2Zhbl9hZGQnIDogJ3dvcmtlcl9hZGQn +KSA6ICggZmF2ID8gJ2Zhbl9kZWwnIDogJ3dvcmtlcl9kZWwnKSwNCgkJCQknY29t +cGFueV9pZCcgOiBjb21wYW55X2lkDQogICAgICAgICAgICB9LA0KCQkJIm9uUmVx +dWVzdCI6ZnVuY3Rpb24oKXsNCgkJCQlwZW9wbGVMaXN0ID0gZmF2ID8gJCgnanMt +Y29tcGFueUZhbnNMaXN0JykgOiAkKCdqcy1jb21wYW55V29ya2Vyc0xpc3QnKTsN +CgkJCQlwZW9wbGVDb3VudGVyID0gZmF2ID8gJCgnanMtY29tcGFueUZhbnNDb3Vu +dCcpIDogJCgnanMtY29tcGFueVdvcmtlcnNDb3VudCcpOw0KCQkJCXBlb3BsZU1l +bnUgPSAkKGRvY3VtZW50KS5nZXRFbGVtZW50KCIucHJvZmlsZS1hY3Rpb25zLW1l +bnUgLmpzLXlvdXItd29yay1zdGF0ZSIpOw0KCQkJfSwNCgkJCSJvblN1Y2Nlc3Mi +OiBmdW5jdGlvbihyLHJ4bWwpew0KCQkJCXZhciBlcnJvcnMgPSByeG1sLmdldEVs +ZW1lbnRzQnlUYWdOYW1lKCJlcnJvciIpOw0KCQkJCWlmIChlcnJvcnMgJiYgZXJy +b3JzLmxlbmd0aCkgew0KCQkJCQl2YXIgZXJyb3JzdGV4dCA9ICIiOw0KCQkJCQlm +b3IgKHZhciBpPTAsbD1lcnJvcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7DQoJCQkJ +CQllcnJvcnN0ZXh0ICs9IGVycm9yc1tpXS5maXJzdENoaWxkLmRhdGEgKyAiPC9i +cj4iOw0KCQkJCQl9Ow0KCQkJCQlmdXR1X2FsZXJ0KCLQntC5LdC+0Lkt0L7QuSDR +gSDQutC+0LvQsdCw0YHQvtC5ISIsIGVycm9yc3RleHQsIGZhbHNlLCAnZXJyb3In +KTsNCgkJCQl9DQoJCQkJdmFyIG1lc3NhZ2UgPSByeG1sLmdldEVsZW1lbnRzQnlU +YWdOYW1lKCJtZXNzYWdlIilbMF07DQoJCQkJdmFyIGNvbXBhbnkgPSByeG1sLmdl +dEVsZW1lbnRzQnlUYWdOYW1lKCJjb21wYW55IilbMF07CQkJCQ0KCQkJCQ0KCQkJ +CWlmIChtZXNzYWdlKSB7DQoJCQkJCXZhciB1c2VyTm9kZSA9IHJ4bWwuZ2V0RWxl +bWVudHNCeVRhZ05hbWUoJ3VzZXInKVswXSwNCgkJCQkJCXVzZXJOYW1lID0gdXNl +ck5vZGUuZmlyc3RDaGlsZC5kYXRhLA0KCQkJCQkJdXNlclVybCAgPSB1c2VyTm9k +ZS5nZXRBdHRyaWJ1dGUoJ3VybCcpOw0KCQkJCQlpZiAoYWRkKSB7CQkJCQkJDQoJ +CQkJCQlwZW9wbGVNZW51ICYmIHBlb3BsZU1lbnUuYWRkQ2xhc3MoIGZhdiA/ICJq +cy15b3UtbG92ZS10aGlzLWNvcnAiIDogImpzLXlvdS13b3JrLWhlcmUiKTsNCgkJ +CQkJCXBlb3BsZUxpc3QgJiYgKCgobmV3IEVsZW1lbnQoJ2xpJykpLmFkb3B0KChu +ZXcgRWxlbWVudCgiYSIsIHsndGV4dCc6IHVzZXJOYW1lICwgJ2hyZWYnOiAiaHR0 +cDovLyIgKyB1c2VyVXJsICsnLyd9KSkpKS5pbmplY3QocGVvcGxlTGlzdCkpOw0K +CQkJCQkJcGVvcGxlQ291bnRlciAmJiAoKHBlb3BsZUNvdW50ZXIuaW5uZXJIVE1M +ID0gTnVtYmVyKHBlb3BsZUNvdW50ZXIuaW5uZXJIVE1MKSArIDEpKTsNCgkJCQkJ +fSBlbHNlIHsNCgkJCQkJCXBlb3BsZU1lbnUgJiYgcGVvcGxlTWVudS5yZW1vdmVD +bGFzcyggZmF2ID8gImpzLXlvdS1sb3ZlLXRoaXMtY29ycCIgOiAianMteW91LXdv +cmstaGVyZSIpOw0KCQkJCQkJcGVvcGxlQ291bnRlciAmJiAocGVvcGxlQ291bnRl +ci5pbm5lckhUTUwgPSBOdW1iZXIocGVvcGxlQ291bnRlci5pbm5lckhUTUwpIC0g +MSk7DQoJCQkJCQl2YXIgdXNlclF1ZXJ5ID0gJ2FbaHJlZj1odHRwOi8vJyt1c2Vy +VXJsKycvXSc7DQoJCQkJCQlwZW9wbGVMaXN0ICYmIHBlb3BsZUxpc3QuZ2V0RWxl +bWVudCh1c2VyUXVlcnkpLmdldFBhcmVudCgpLmRpc3Bvc2UoKTsNCgkJCQkJfQ0K +CQkJCQkkKCdmYW5zX2NvdW50Jykuc2V0KCdodG1sJyxjb21wYW55LmdldEF0dHJp +YnV0ZSgnZmFuc19jb3VudF9zdHInKSk7DQoJCQkJfQ0KCQkJCQ0KCQkJfQ0KICAg +ICAgICB9KSkuc2VuZCgpOw0KCX0sDQoJZmFuU2VuZCA6IGZ1bmN0aW9uIChjb21w +YW55X2lkLCBhZGRGYW4pIHsNCgkJdGhpcy53b3JrZXJTZW5kKGNvbXBhbnlfaWQs +IGFkZEZhbiwgdHJ1ZSk7DQoJfQ0KfTsNCg== + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline; filename=29436_24x24.webp +Content-Type: image/webp; name=29436_24x24.webp +Content-Location: http://habrahabr.ru/media/thumb/12/2b/bf/29436/29436_24x24.jpg +Content-Transfer-Encoding: Base64 + +UklGRt4BAABXRUJQVlA4INIBAABwCACdASoYABgAAIcIhYWIhYSICQICdbok0z7p +bjUgeaJ/W7WGvQc6WFv4Joelp46/pLft9OT/J6tjcqiQkcByFsTVXevNvOl59mIq +wPa6S8OlwLBLvAhUOVoliHLfxAW+P3tgriu+hTu6CzNW58DPzfGuylgDUYm002w3 +Eyg6DuqK1NowOYdyozw/Z0XRqT5oNaEHc/6+0UT/Z/6zlX7m/5qoQi0ueKOfhTrF +9no8Yi9eH+kcsHkg9SHrYrZN+n9lmY389Frk+f+dy4VD5UVnMYad/+aLs4zeItME +4bgcxVz66dRIJk5fiiV41b9/lzuMCVm4ds+OpzjZuetT271SbhIn/inV1HzgLGAt +2H/hudBmTv+qrpW5NqrUgE1P5wL6+Y/emifoPR7pW8j9xJwk8MAhsPNU6WNJgbeA +u8w80jRTojWvTgizj+tOXBRq8bqN0xK3Dz9mgO+WTDf0ANNkt/sh7PVyDUyXiKJK +sEBSY4K0hLB7LQWoydu2ImOgaI6kbuCn37Xk0jr0bn8f9ftlzK7OYkf/+PFTtlBB +MTmuKj7MJ6dHTvVVjCVCyE67v9I+jxig5WEWwuG3F9Pv0lTB2vkDpWdWoEHz95xe +BnW63kAA + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline; filename=stub-user-small.gif +Content-Type: image/gif; name=stub-user-small.gif +Content-Location: http://habrahabr.ru/i/avatars/stub-user-small.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhFwAXAOYAAKSYmJGEhJ2VlaCUlJKFhZyRkZ+SkpOIiLGnp6menqKWlrqy +srOpqb21tZCDg8bExMrIyMzKytHOzsjGxuzn597Z2u7o6JWKiuvl5e/q6fHs6+7o +6d7Z2evl5tbS0peKipeNjdvX1+nj45WJiezo55mNjZqOjtvY1+7p6M/Ly/Dq65OG +hpmQkOfi4pSIiJaLi9TR0JKGhtnW1efj4ufi46abm/Dr697a2dTQ0ZiMjNbS07Sr +q+nj5JSHh+nk45uSktnV1ZiLi5SJic/LzNTQ0NnV1pOHh5aMjJeMjOzn6Letrevm +5ZaJicS8vMfAwNbT0pmMjKyiopuQkN7a2qugoMrDw7ivr5yPj52SksW+vs/MzL+3 +t5aKisK6uvDr6ryzs/Hs7MC4uJuPj66jo5WLi83GxpGFhZmOjpeLi9vY2K+lpaOY +mO7p6eXh4Onk5J6RkaecnKWZmdvX2Ozo6MvFxe/q6u/p6pWIiJ+YmOXg4PHr7O/p +6ePe3vDq6uDc3PHr6yH5BAAAAAAALAAAAAAXABcAAAf/gH8af4R6hIUag3+Gi3qG +GmCMgoqMkYeNhSp9m16bfSqaNpyifaSfdRl7qnape6mtrqqyGRkWFhsbFii6G2VV +Tk0bKChswra5JBTJFBRJFHROWV1bX83Jc8okSRgdHRjcHb9NYQ0LSjtL398dSx08 +Pjw8Im4i0tRWSgwIPiJwcWsi+M2g0YIGjYHkzO1AMIZKixlxFAxo8TCPxYt5vlhZ +qCZKghpt8gwwgOUin5MoTy5smCAOSiwFpKD0Q7NmTY81ANgUY8JEzRscKgCtIDRo +haAcplQwcaYEiApTOJxIcyJE1RByco6MGaJEDiRgT1SVUUSGDCBlIw4ocMUElBxo +m17IBUIWiIcnOjzoeLJmZFsoQT5w4XKBzBG9HjzgIAKjMREDBUyUCMxkhOULL47A +wLFYgmfPb8RM/mDZhWkhF4589qwlheshXj/ccdHDiJEDB4SQATFkSOsUEYIH/8Ck +x4rjMW6jBsFCeHAI0KEbJ0A9RvLlLH5Ehz6he3cCAQKYGR/jwAXmPwR47/6gfXsH +8MWXP59dAB737QMBADs= + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline; filename=19431_24x24.webp +Content-Type: image/webp; name=19431_24x24.webp +Content-Location: http://habrahabr.ru/media/thumb/90/08/8e/19431/19431_24x24.png +Content-Transfer-Encoding: Base64 + +UklGRqoBAABXRUJQVlA4IJ4BAACQCgCdASoYABgAAUcIhYWIhYSICQICdbokwb5B ++QHIM6ggoHuB/sGIB/Vv9OfYl/VXWAfQB8Gb4Jf2+/aD2gKMCfgTnZ+c9Ql/YD2x +09zM3je9/K9LCDG1MXoDzmqA/p6ZoeCelgYtQ40w6fLrmNXLW/XjpK4O+f6bfsca +Yd2amDwXeZ5zE5/MOf57gfnoiFd5aScuCp/WL9Z1dsmcPZdii4GjREgqGNjhc/qQ +P/578oistrf8mzrc6hwYOaLC8pW//60/Ptx09ktEkSG33nxwGfvR6WH0JZfg7Zym +ajOzUW4IfiwFt/OqPiXSBWOjKsDQ7xzW/8Nkd1vT8t8/uSa6v6mzydBvwKsgNxT9 +DN13oOQQ1GMgrlHuwSJ9LX8a3tz5b/YXkY/LIJB9+qqvPN/wKe35WgVotsr7RILU +fehXCMfjm2bwj68yK93zmLtGtQ6/nnx/s+7+sf8TI1GazP11XwaS7gSGZyZ79Gjg +3vtvRYeoq6yeZ8UY2fqnGHdA8m/zNt/VopgH5a3lii3T+n3Sag1PwkSgfVDb0e12 +CQA= + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline; filename=29612_24x24.webp +Content-Type: image/webp; name=29612_24x24.webp +Content-Location: http://habrahabr.ru/media/thumb/47/77/79/29612/29612_24x24.jpg +Content-Transfer-Encoding: Base64 + +UklGRjgBAABXRUJQVlA4ICwBAAAQBQCdASoYABgAAUcIhYWIhYSICQICdQp+Fpg+ +M3XkxzwlM4HY/pfKPAqqDbxIE8qgAP7+9xGUC7ycxrnyP+e5yUYi6pWziJY13ON+ +4ibYXKcniATboKDtTLQva6TX4ThkPKg0H+YDFOgniCHcoqPeZmo4VDhdkDaYu+J5 +YyhyezLAnoZ3V/Zvj00BUh2Te0b+F5owr14SiukhM+70NfkA5w9USzilXLSbABtF +ZhvwOYsK/gnzHNFJrPD3wfQz6BsmCOTX3wIvHx2o+avWWrQ7YX3/bq5wa48Rn+JZ +TOOtl9n61sib47t6rhH3w0ref/KqFY6NrWTW7MIKAChfbaduNbQTFw3ycDuyh1zY +o9M4qmbxZt5fZUk6SySScscxCAz0TmW46BIzj/QKAAA= + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline; filename=17483_24x24.webp +Content-Type: image/webp; name=17483_24x24.webp +Content-Location: http://habrahabr.ru/media/thumb/b0/0b/b1/17483/17483_24x24.jpg +Content-Transfer-Encoding: Base64 + +UklGRqIBAABXRUJQVlA4IJYBAAAQBwCdASoYABgAAQcIhYWIhYSICQICdbuN8f9D +J8D6iWdTUB5oDryMU+sKhE2iV8q6uVH9wbh7tdbVgI3lW493aoD++uXfvtj8zi8Z +/q6rqk29B8wyLPi+6U3YSKf6SEiU7Admpy08Ij7hiZGqQRHyp0LYJ/B1mGDFOG/g +20jfVxvFiXaZwBWDP2hKM5qt5kp+tW2Q893vVAfnztsTl/vUv1SIkYpYd0OHkJq3 +t9BotYlDZWY4dYLBTmDHfpn9OiZBSDNfvTKFTbA9nA9HxGWZMGjonxjEv3TV9541 +VFUCOsSqZnAo0LxqmYlnqToccsWE6v7175AczCFC+X9qRNvA7+LQ/mT01FZFCdwA +eLTVw9paJCF34ap1PDwSZgqkuW2C+nbh/i8jSo8LuXgtRmaVoCUf+GmrXwxQG9vG +T3T57rccEeGkkN/f6WvhWioIMwYCixUxE5XDSmjG2S/BYfn1+xNm7NX9wmaw0TQs +S4/+Tb2iZoqgJNNQl55RrWjZNmcZozvtk58i3SPK+Dml8atPjh0KFIsg + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline; filename=big.png +Content-Type: image/png; name=big.png +Content-Location: http://habrahabr.ru/i/special/bookmate/big.png +Content-Transfer-Encoding: Base64 + +iVBORw0KGgoAAAANSUhEUgAAABQAAAAcCAYAAABh2p9gAAAAGXRFWHRTb2Z0d2Fy +ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHxJREFUeNpi/PDhOQMxIDw84T8++ZUr +FzCCaCYGKgNGmAthLoDZhMtFMHlcLqe6C1nQbUa3kZCL0QHVXTj4DWQhVQOh2Kd9 +OiQE6J8OCeWQAU+HLOhhMvwT9sCnQ/qX2O7u7ljTIbmxT/vSBpfLiHX5aDokvhyk +mwsBAgwA8KdP9B+WVFkAAAAASUVORK5CYII= + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline; filename=bg_cicle_help.png +Content-Type: image/png; name=bg_cicle_help.png +Content-Location: http://habrahabr.ru/i/bg_cicle_help.png +Content-Transfer-Encoding: Base64 + +iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2Fy +ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXRJREFUeNqkUz1rg1AUvUpCgsQQkqFT +oFPAyVl/QLPkJxQczZCtc6f+hULI3ilzFjNkjKtOmYT+AR1CQUGQ3iPvhaeRLDlw +UN+95355n5YkCbXwxlwyXaYlzi7MMzNgHlVnTQnwytww/dlsNhoOh9Tv92tDWZZU +FAWlafrHnzvmN/MXtp4i/ppOp+/j8Zh0XW+UNBgMapqmObperx9Zlr3w8SeCSM8N +xJPJ5E6sAjb4wFdUW1eAnn1klgjDkPb7PeV5DmdyXZdWq9XNDl+uwsc8EGCJntuZ +IZjP5xRFER0OB7Jtu/6WlUDDM1kigIuBqXAc5/a+WCzodDpRHMe3AIDQuEhryWl3 +Aa0AqECF0Fg9eoDtdltn9jyvkb0xWCwJ/nMXIF6v142WJITmggBnLEkX0D8Pq9Mm +NGcECLBhVVU1HPisDmAYxp0YvmIrA13s9o437C4Afh+ebQhfrPRR3oWHq6xmhpiX +6Eeu8tOXSXv2Ov8LMADqM6TU3F3u5gAAAABJRU5ErkJggg== + +------------mfBaGQEBbcbD9fsootn3NY +Content-Disposition: inline; filename=favicon_1202.ico +Content-Type: image/x-icon; name=favicon_1202.ico +Content-Location: http://habrahabr.ru/media/company/favicon/12/favicon_1202.ico +Content-Transfer-Encoding: Base64 + +AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAABML +AAATCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAamRaGGZgVm1jXFO0YltT0WNd +VNJmYFe5amRadmpjWiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZmBWcGJc +Uu92b2f/in+B/5CAjv+IeYX/fHJy/3FrY/9vaWD2cmxignlyaAUAAAAAAAAAAAAA +AAAAAAAAYlxTm3VsaP+vnbP/yq/f/7GEzP+bX7n/klG3/41Jvv+NYKz/h3mB/3x2 +bv99d2yyf3lvCQAAAAAAAAAAYlxTf35xdv+pf87/om24/4VCfP94LWb/cyhf/3An +YP9xJ2v/eiWQ/4U1p/+Qeo3/h4J6/4aAdpgAAAAAZ2FYKnRrafSXZMH/j0um/34w +av9+MGj/fzJq/3wxZf95LmP/dClg/2wkWf9zJXP/gjOR/5aHjv+Qi4P/joh+P2tl +XIeKa5v/hC6z/4Ezgf+CM4T/gzWF/4M2gf+BNHj/gDNs/3swZf92K2P/bSVc/3Yk +dP+OXo3/n5qT/5qTiqF8dG3Hh0mq/4Amn/+EN5b/hTKf/4Ipm/+EM5b/hDaM/4I0 +gP+AM2//ezBl/3QqYf9wJWP/gTp8/6qfn/+kn5fchHd644tWnf+cipn/qJ+g/7Ch +sP+lhbj/jk6w/4Iqn/+ENI//gzZ//4Azbf95LmP/cSZi/340bv+xo6f/sKym6oqB +feSVjYz/opWh/6yas//Bub3/zMrJ/9bQ1/+rhsL/hDGf/4AsiP+BNHb/ezBl/3Ml +Xv+FR3P/xsC+/7y4suqNiILJk3mM/4g7p/+gZtH/roLS/8Oq1P/j3+P/5+bl/8y6 +0v+UW6D/gC57/3stYP97NGf/vKW0/9XU0v/Gwrzcko6IiY1mgv9/K4D/sYTU/97K +7//Eot//s4zS/+Td5f/u7ez/6+nr/8u3yf+6nbH/1crQ/+fm5f/e3Nn/zsrFo52Y +kSuZiY32dytj/4xKiv/NseL/yqrm/6l20/+jc8v/6+br//b08v/08/P/8O/v/+3s +6//p6Of/4uDe/9fUz0IAAAAAqaahg5N1jP92KWL/hUB5/7mTwv+dZb7/gyi0/6uC +vP/6+fb/+Pby//Lw7f/u7On/6ejm/+Tj4pwAAAAAAAAAALKspQK6uLWho4ik/5hp +nf+cbJr/dyhs/3cncv+EQ37/8Ovs//b18v/y8Oz/7evo/+nn5bbl5OMLAAAAAAAA +AAAAAAAAu7avAcnHxXbOx87ytZjB/6F3tf+cbLH/wKbL//Lx7//x7+v/7+3q9+vp +6Ifo5+UHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1dPPHOHf3nPo5+a06+rp0uzr +69Tt6+i57evpfOzq6CQAAAAAAAAAAAAAAAAAAAAA//8AAPgfAADwBwAA4AMAAMAD +AADAAQAAgAEAAIABAACAAQAAgAEAAMABAADAAwAA4AcAAPAPAAD4HwAA//8AAA== + +------------mfBaGQEBbcbD9fsootn3NY-- diff --git a/4-JffArticles/0-BlocksIosBelow4/BlocksIosBelow4.habr b/4-JffArticles/0-BlocksIosBelow4/BlocksIosBelow4.habr new file mode 100644 index 0000000..e69de29 diff --git a/4-JffArticles/0-BlocksIosBelow4/BlocksIosBelow4.txt b/4-JffArticles/0-BlocksIosBelow4/BlocksIosBelow4.txt new file mode 100644 index 0000000..6a4446e --- /dev/null +++ b/4-JffArticles/0-BlocksIosBelow4/BlocksIosBelow4.txt @@ -0,0 +1,11 @@ +Используем блоки в IOS < 4.0 + + Для тех кто знаком с блоками в Objective-C, но не может пока их использовать в силу необходимости поддержки приложений для ios младше 4.0 версии, либо сторонится патченого компилера PLBlocks, предлагаю рантайм блоков в виде статической либы libESBlocksRuntime.a + + Сам рантайм был выдернут с исходников проекта compiler-rt, и завернут в блоковые классы ESBlock. Добавлены недостающие методы -[ NSArray enumerateObjectsUsingBlock: ] и т.д. также UIView блоковые екстеншены. + + Для подключения в проект достаточно скачать исходники проекта, и добавить его в dependencies например так. + + Вопросы и предложения пишите в личку — с радостью отвечу каждому заинтересовавшемуся. + +Здесь можно почитать о терии блоков на хабре. \ No newline at end of file diff --git a/4-JffArticles/1-BlocksFaq/BlocksFaq.habr b/4-JffArticles/1-BlocksFaq/BlocksFaq.habr new file mode 100644 index 0000000..e69de29 diff --git a/4-JffArticles/1-BlocksFaq/BlocksFaq.mht b/4-JffArticles/1-BlocksFaq/BlocksFaq.mht new file mode 100644 index 0000000..674cbb8 --- /dev/null +++ b/4-JffArticles/1-BlocksFaq/BlocksFaq.mht @@ -0,0 +1,16244 @@ +Content-Type: multipart/related; start=; boundary=----------PzsECPV81mhEFq3fWaXOFZ +Content-Location: http://habrahabr.ru/blogs/macosxdev/119877/ +Subject: =?utf-8?Q?=D0=9E=20=D0=B1=D0=BB=D0=BE=D0=BA=D0=B0=D1=85=20=D0=B8=20=D0=B8=D1=85=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B8=20=D0=B2=20Objective-C=20=D1=87=D0=B0=D1=81=D1=82=D1=8C=201-=D0=B0=D1=8F=20/=20=D0=A0=D0=B0=D0=B7=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B0=20=D0=BF=D0=BE=D0=B4=20Apple=20iOS=20/=20=D0=A5=D0=B0=D0=B1=D1=80=D0=B0=D1=85=D0=B0=D0=B1=D1=80?= +MIME-Version: 1.0 + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline; filename=default.htm +Content-Type: text/html; charset=utf-8; name=default.htm +Content-ID: +Content-Location: http://habrahabr.ru/blogs/macosxdev/119877/ +Content-Transfer-Encoding: 8bit + + + + + + + + О блоках и их использовании в Objective-C часть 1-ая / Разработка под Apple iOS / Хабрахабр + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
войти зарегистрироваться
+
+ + +
+ + +
+ + + +
    + + + + +
  • Посты
  • + + + + + + + + +
  • Q&A
  • + + + + + +
  • Блоги
  • + + + + + +
  • Люди
  • + + + + + +
  • Компании
  • + + + + + + +
  • + + + + +
  • +
  • + + + +
  • + + + +
+ +
+ + +
+
+ + +
+ + + +
+
+

+ Разработка под Apple iOS + + +

+
+
индекс
+
154,10
+
+
+
+ + + + + + + + + + + + + + + +
+ +

+ + + + + + + + + + + О блоках и их использовании в Objective-C часть 1-ая + + + + + + + +

+ + + +
+ В OS X 10.6 и iOS 4.0 компания Apple анонсировала поддержку блоков, по сути являющиx собою замыкания. Дальше о блоках в контексте разработки под IOS, Objective-C (тоесть работа без gc).
+Для использования блоков IOS ver. < 4.0 можно применить ESBlockRuntime и PLBlocks.
+
+

Кратко о теории


+Экземпляр блока, тип блока и сам блоковый литерал обозначаются с помощью оператора ^, пример:
+
+
typedef int (^MyBlock)(int);
+
+int multiplier = 7;
+MyBlock myBlock = ^(int num) {
return num * multiplier;
+};

+
+* This source code was highlighted with Source Code Highlighter.

+или
+
+
int multiplier = 7;
+int (^myBlock)(int) = ^(int num) {
+  return num * multiplier;
+};

+
+* This source code was highlighted with Source Code Highlighter.

+Вызов блока аналогичен вызову обычной сишной функции. Например, так:
+
+
myBlock( 3 )
+
+* This source code was highlighted with Source Code Highlighter.

+Главной особенностью блоков является их умение хранить контекст в котором они создавались. В примере выше «myBlock» всегда будет умножать число на 7. Как же это все работает?
+
+
Виды переменных контекста блока

+1. Примитивные типы С и структуры, блоки хранят как константы. Пример:
+
+
+
int multiplier = 7;
+int (^myBlock)(int) = ^(int num) {
+  return num * multiplier;
+};
+multiplier = 8;
+NSLog( @"%d", myBlock( 3 ) );

+
+* This source code was highlighted with Source Code Highlighter.

+Печатает — 21, а не 24.
+
+2. Переменные заданные с ключевым словом __block являются изменяемыми. Работает это за счет копирования значения такой переменной в кучу и каждый блок хранит ссылку на эту переменную. Пример:
+
+
__block int multiplier = 7;
+int (^myBlock)(int) = ^(int num) {
return num * multiplier;
+};
+multiplier = 8;
+NSLog( @"%d", myBlock( 3 ) );

+
+* This source code was highlighted with Source Code Highlighter.

+Печатает — 24, а не 21.
+
+3. Переменные — указатели на обьекты с подсчетом ссылок (id, NSObject). Для них вызывается retain при копировании блока в кучу. Пример:
+
+
NSDate* date = [ [ NSDate alloc ] init ];
+
+void (^printDate)() = ^() {
+ NSLog( @"date: %@", date );
+};
+
+//копируем блок в кучу
+printDate = [ [ printDate copy ] autorelease ];
+
+[ date release ];
+
+printDate();

+
+* This source code was highlighted with Source Code Highlighter.

+Здесь хочется обратить ваше внимание на то, что retain объекта date происходит именно во время копирования блока в кучу, а не во время его создания. К примеру, этот код упадет с “EXC_BAD_ACCESS”
+
+
NSDate* date = [ [ NSDate alloc ] init ];
+
+void (^printDate)() = ^() {
+ NSLog( @"date: %@", date );
+};
+
+[ date release ];
+
+//копируем блок в кучу и падаем
+printDate = [ [ printDate copy ] autorelease ];
+
+printDate();

+
+* This source code was highlighted with Source Code Highlighter.

+4. Переменные — указатели на обьекты с подсчетом ссылок (id, NSObject) объявленые с ключевым словом __block. Для них НЕ вызывается retain при копировании блока в кучу. Пример:
+
__block NSDate* date = [ [ NSDate alloc ] init ];
+
+void (^printDate)() = ^() {
//здесь падаем при обращении к date
+  NSLog( @"date: %@", date );
+};
+
+//копируем блок в кучу, для объекта date retain не вызывается
+printDate = [ [ printDate copy ] autorelease ];
+
+[ date release ];
+
+printDate();

+
+* This source code was highlighted with Source Code Highlighter.

+Обычно это используется для избегания циклических ссылок. Пример:
+
@interface SomeClass : NSObject
+
+//копируем блок проперти
+@property ( nonatomic, copy ) SimpleBlock block;
+
+@end
+
+@implementation SomeClass
+
+@synthesize block = _block;
+
+-(void)dealloc
+{
+  [ _block release ];
+
+  [ super dealloc ];
+}
+
+-(void)methodB
+{
+}
+
+-(void)methodA
+{
+  __block SomeClass* self_ = self;
//потенциально циклическая ссылка( утечка ) - класс хранит блок, а блок ссылается на класс
+  self.block = ^()
+  {
+   //здесь retain для self_ не вызывается
+   [ self_ methodB ];
+  };
+}
+
+@end

+
+* This source code was highlighted with Source Code Highlighter.

+Блоки являются экземплярами класса NSObject (конкретные классы этих обьектов не определенны), поэтому мы можем и вынуждены пользоватся методами класса NSObject — copy, retain, release и autorelease для блоков. Но зачем нам это нужно?
+
+
Блоки и управление памятью

+По умолчанию экземпляры блоков создаются не в куче, как можно было бы предположить, а в стеке. Поэтому при необходимости сделать отложеный вызов блока сначала его нужно скопировать в кучу.
+
+Допустим, существует расширение класса NSObject c методом «performAfterDelay:», который выполняет заданный блок с задержкой.
+
+
@implementation NSObject (BlocksExtensions)
+
+-(void)callSelfBlock
+{
void* self_ = self;
+  ESSimpleBlock block_ = (ESSimpleBlock)self_;
+  block_();
+}
+
+-(void)performAfterDelay:( NSTimeInterval )delay_
+{
+  [ self performSelector: @selector( callSelfBlock ) withObject: nil afterDelay: delay_ ];
+}
+
+@end

+
+* This source code was highlighted with Source Code Highlighter.

+И, собственно, вызов:
+
  NSDate* date = [ NSDate date ];
+
void (^printDate)() = ^() {
+   NSLog( @"date: %@", date );
+  };
+
+  [ printDate performAfterDelay: 0.3 ];

+
+* This source code was highlighted with Source Code Highlighter.

+Такой код «свалит» наше приложение, потому как стековый блок будет к моменту вызова разрушен, и мы обратимся в месте вызова блока к случайной памяти. Хотя при этом такой код:
+
  void (^printDate)() = ^() {
+   NSLog( @"date: %@", [ NSDate date ] );
+  };
+
+  [ printDate performAfterDelay: 0.3 ];

+
+* This source code was highlighted with Source Code Highlighter.

+будет прекрасно работать. В чем же причина? Обратите внимание — последний блок не ссылается на внешние переменные следовательно нет и необходимости создавать его копию. В этом случае компилятор создает так называемый Global блок. В программе существует всего один экземпляр такого блока, время жизни которого ограничено временем жизни приложения. Таким образом, GlobalBlock можно рассматривать как singletone-объект.
+
+
Виды блоковых переменных

+И так, подведем итоги. Существует три вида блоков: глобальные( без состояния ), локальные или они же стековые, и блоки в куче (MallocBlock). Следовательно методы copy, retain, release и autorelease глобального блока ничего не делают. Метод retain так же ничего не делает для стекового блока. Для Malloc блока метод copy в свою очередь работает как retain для NSObject.
+
+И конечно же исправленная версия предыдущего примера с добавлением метода copy:
+
@implementation NSObject (BlocksExtensions)
+
+-(void)callSelfBlock
+{
void* self_ = self;
+ ESSimpleBlock block_ = (ESSimpleBlock)self_;
+ block_();
+}
+
+-(void)performAfterDelay:( NSTimeInterval )delay_
+{
//копируем блок в кучу, так как отложеный вызов - afterDelay:
+  self = [ [ self copy ] autorelease ];
+  [ self performSelector: @selector( callSelfBlock ) withObject: nil afterDelay: delay_ ];
+}
+
+@end

+
+* This source code was highlighted with Source Code Highlighter.

+О блоках и их использовании в Objective-C часть 2-ая + + + + + + +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+

комментарии (12)

+ +
    + +
  • + +
    +
    + + +
    + +
    +
    + … и вот мы видим, во что выливаются замыкания в языках с ручным управлением памятью. Еще 10 метров веревки чтобы уж наверняка ноги-то себе поотстреливать. +
    + +
    + +
    + + +
    + + + + + + + +
      + +
    • + +
      +
      + + +
      + +
      +
      + благо они есть :) +
      + +
      + +
      + + +
      + + + + + + + + +
    • + +
    • + +
      +
      + + +
      + +
      +
      + Не в языках с ручным управлением памятью, а в Obj-C. C++0x лямбды имеют достаточно прозрачную семантику и способ захвата указывается в самом замыкании, а не в объявлении переменной. Сами лямбды тоже можно передавать как по значению так и по ссылке/указателю.
      +
      +Причем как для самих лямбд так и для захваченных свободных переменных применяются те же правила, основанные на здравом смысле, что и для всех остальных объектов: делать объект, живущий меньше, чем ссылки/указатели на него — ОЧЕНЬ плохая идея. +
      + +
      + +
      + + +
      + + + + + + + + +
    • + +
    • + +
      +
      + + +
      + +
      +
      + Уже не актуально, Apple представила (точнее представит, пока это под NDA для разработчиков) на днях ARC (Automatic Reference Counting) — теперь ручным управлением памяти занимается компилятор, не нужно больше самому следить за тем, где и когда вставлять захват и освобождение объектов. До кучи еще был и есть сборщик мусора же.
      +
      +Ну и по правде говоря сложного в этом ничего нет же, разве что у новичков которые с наскока пытаются перейти с какой-нибудь системы где подобного нет, а так не бывает. +
      + +
      + +
      + + +
      + + + + + + + +
        + +
      • + +
        +
        + + +
        + +
        +
        + Не могу найти нормальной информации о ARC, что именно это будет из себя представлять? GC может? +
        + +
        + +
        + + +
        + + + + + + + +
          + +
        • + +
          +
          + + +
          + +
          +
          + А вы зарегистрированы в Mac Dev Program? Описание представлено в разде pre-release и не доступно вне программы.
          +
          +Вообше суть такая — в процессе компиляции компилятор сам проставит где нужно retain/release/autorelese. Для свойств добавлены новые спецификаторы, собственно как и при объявлении каких-то обычных локальных переменных. NSAutoreleasePool теперь тоже вне игры (хотя на самом деле просто сделали очередной syntactic sugar в виде @autoreleasepool). В общем, никакого GC (я кстати с момента его появления так и не успел его попробовать). +
          + +
          + +
          + + +
          + + + + + + + +
            + +
          • + +
            +
            + + +
            + +
            +
            + Ну Слава Богу что без GC :), у меня много где логика программы завязана на удаления обьекта и метод dealloc. +
            + +
            + +
            + + +
            + + + + + + + +
              + +
            • + +
              +
              + + +
              + +
              +
              + Переход будет совершенно безболезненный и незаметный, в меню рефакторинга будет пункт который перелопатит весь проект и все обновит. +
              + +
              + +
              + + +
              + + + + + + + +
                + +
              • + +
                +
                + + +
                + +
                +
                + Поигрался, впечатлило, что-то подобное давно ждал от Apple, отсутствие dealloc в большинстве случаев — так точно. +
                + +
                + +
                + + +
                + + + + + + + + +
              • + +
              + + + +
            • + +
            + + + +
          • + +
          + + + +
        • + +
        + + + +
      • + +
      • + +
        +
        + + +
        + +
        +
        + Жаль нет поддержки weak для IOS 4.0, очень надеюсь на то что это дело поправят, если это возможно. +
        + +
        + +
        + + +
        + + + + + + + + +
      • + +
      + + + +
    • + +
    + + + +
  • + +
  • + +
    +
    + + +
    + +
    +
    + Думаю стоит более добавить еще ряд моментов об которым можно и не задуматься сразу:
    +
    +1. Переменные из контекста создания блока действительно делаются в виде констант, но для указателей используются не оба модификатора, поэтому значения куда они указывают можно менять, хотя сам адрес нет.
    +
    +Отсюда вытекает что
    +2. Глобальные и статические переменные доступны полностью.
    +
    int globalInt = 0;
    +
    +int main () {
    +	static int staticInt = 0;
    +
    +	^ {
    +		globalInt++;
    +		staticInt++;
    +	}();
    +	
    +	printf("globalInt: %d\n", globalInt); // print "globalInt: 1"
    +	printf("staticInt: %d\n", staticInt); // print "staticInt: 1"
    +}
    +

    + +
    + +
    + +
    + + +
    + + + + + + + +
      + +
    • + +
      +
      + + +
      + +
      +
      + Да, спасибо за дельное замечание, я поправлю. +
      + +
      + +
      + + +
      + + + + + + + + +
    • + +
    + + + +
  • + +
+ + + + + + + +
Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.
+ +
+ + + + + + + + + + + + + +
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + + + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-page-nav-left.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhCgAKALMAAPf49/P08/j4+PDy8Ovt6+3v7f7+/vHz8fj5+Ozu7P///+rs +6gAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAKAAoAAAQeUElpwEhrKoCXn4EnZko4 +fsgpKp0qqOIBe8W8EHYEADs= + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-page-nav-current-left.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhCgAKAMQAAOPt9tbk8dbk8e3z+O3z+P7+/uHr9P3+/t/q9Njk8v7+/u70 ++tjm8u/0+tXk8f///9Pi8IqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqK +ioqKioqKioqKioqKiiwAAAAACgAKAAAFI+AjiseABND4EALkpo8CvK840+7T4G+R +8K4F0GUYQhhGhzEEADs= + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-page-nav-right.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhCgAKAKIAAPLz8vDy8P7+/vf39+zu7P///+rs6gAAACH5BAAAAAAALAAA +AAAKAAoAAAMaaBQj9c9INWCZE0CcI5fVJxGCCJpGgBKokQAAOw== + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-page-nav-current-right.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhCgAKAPcAAOPt9tbk8dbk8e3z+O3z+P7+/uHr9P3+/t/q9Njk8v7+/u70 ++tjm8u/0+tXk8f///9Pi8IqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqK +ioqKioqKioqKioqKigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAKAAoAAAgyAB0wMLBAwYODByEohJCg +AcIHCxcCMAgxokIACS0qJFBRo4ADGhcSCKkQAUkIAk5CCAgAOw== + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-page-subnav-corner-bottom-left.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhCgAKAPcAAOPt9tbk8dbk8e3z+O3z+P7+/uHr9P3+/t/q9Njk8v7+/u70 ++tjm8u/0+tXk8f///9Pi8IqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqK +ioqKioqKioqKioqKigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAKAAoAAAgtACEIHEhQAMGDCA4SJKBw +4AGDDR8wjPgAAEUFFg8+2PigQQKCHDcqWGCAgYOAADs= + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-page-subnav-corner-bottom-right.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhCgAKAPcAAOPt9tbk8dbk8e3z+O3z+P7+/uHr9P3+/t/q9Njk8v7+/u70 ++tjm8u/0+tXk8f///9Pi8IqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqK +ioqKioqKioqKioqKigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAKAAoAAAgwACEIHDjQAcGDDA4SNKBw +4IKGEBIogNjgQUMADyweBKAgI0EBBDJ6FICAwAGRGQMCADs= + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/png +Content-Location: http://habrahabr.ru/i/icon_asterisk_24.png +Content-Transfer-Encoding: Base64 + +iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2Fy +ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAA +AAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5U +Y3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6 +eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8w +Mi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRw +Oi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpE +ZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRv +YmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv +bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20v +eGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRv +YmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9Inht +cC5paWQ6OUJFNDFFODU1M0NCMTFFMDg4MzdEMjY1MEM4OTlCREEiIHhtcE1NOkRv +Y3VtZW50SUQ9InhtcC5kaWQ6OUJFNDFFODY1M0NCMTFFMDg4MzdEMjY1MEM4OTlC +REEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlp +ZDo5QkU0MUU4MzUzQ0IxMUUwODgzN0QyNjUwQzg5OUJEQSIgc3RSZWY6ZG9jdW1l +bnRJRD0ieG1wLmRpZDo5QkU0MUU4NDUzQ0IxMUUwODgzN0QyNjUwQzg5OUJEQSIv +PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94 +cGFja2V0IGVuZD0iciI/PrQg4+wAAAJaSURBVHjabFNNbxJRFL3zwZuBUEQSgRrQ +0DRCu6D1NxCMstAdG5u0OxduXGjSxJgYjYkL0/gLDKzVjSYijvwGTcF+bAopRiAV +BjIDMwzM1LlTp+GJL7nJeeece++8O+8x8M/6IklPzKl5mxDPdiaTqSBXqVQyhjF5 +yfHchxvZ7PNZP+MCNOljo+D1+mI+rxd6cu8gd+vmCmqfSp/3QxdDqZGmgaaNfooC +2XKL826BydTcCAQCsVQyCZZlgqIqKUn6ev+sDZNKJK4Cy3JwcHgYGw6HG9gTJdYt +4OG5HVnugyzLMB6PIR6Lgd3xGQZi5FBDD3rdvPMC9idVeZ4t1BsN0HUdRFEEv98f +wkCMHGroQe9cAVyiIGyriqp3uz07QYPLi1EnECOHGnqoIb59916zrFNxlhQEAlfi +cfD5vM5+NNLguNm0j2FQf4xlGZ23SfH6eho4jqNEVVVBUZS/M2QglbxG6aZpwrfv +uyJvGGfDmUymlIFh6PuhKCq193h4wFzevjT6brUm0iKxzx6hEn61OnYT+giCIOhU +H0mSont7+/XEUkKcGAb0+wOHDwYvgIcQqB/V9dXVlUQ2m23/9y+0251XhBDx1LKc +83e7XScQI4caeqhBuqBcLqcbjcbdcPiSk3Ry8humU3OAgRg51NBTKpXW5wrYhoeE +CM6wBoOBc+OWl5eeYiBGDjX0tFrtR3MFgsFg0b4w7WqtBq12BxYW/Ef5fP41BmLk +UENPNBp54+adP6ZcLoePY7FQLL5oHjfvrK2lH7iaje/Vaj92wpHwx63NzcezM/gj +wAAc5D2eLLpI7AAAAABJRU5ErkJggg== + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-user2.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhDAAMAOYAANPe5Pz//4KkutDb4szY3/b+/5u5z/3//3KWrfn//8rk8naa +sYGkuszY4Mbg8qG+0dzv9tXg5sTg8t/o7vP8/4iqv9ft9NPe5qfD1Mfc56O/0YKl +u+Lr8M3Z4JCwxuj2/Of0+eDz9+rw9Z68z8/n8sHe8sbT3Ju6zuDv96nE1Onw9Nbh +6cvX39Hq89Hq8u77/srW3tbh54Kku8ba56TD1u37/vL8/vL8/9ft9ebu8+Ps8bzM +1Ymsw7XR4Nnj6Yanvsnj8qrI2Or2/NTf5tvl68vY3+r3/HqdtNji6OXt8eDz+dLc +477c7bDO3t7n7d7v9s3Z4dbs9N/y98Pd6PX+/8/b4f7//+Hp7tDo8vv//+fu84Gj +unKWro6uxHqctOfu9P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAMAAwAAAeEgCJfg4RfWlo5KlpgjI2O +OklWBwcBAVmXCQlXHAUFVBkGBjMUNzZOEy81IF2sXUZCH0QrDyhPGzICAkohUj4X +HhoQKQsLGDgWUTFIJxUjUy0uWNIkQxE9W9gMDD9BCgpLAEBNXl5H5F40DlUDEkxc +71wICDwlDQBQHQ0EBEUsJjswBgQCADs= + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/png +Content-Location: http://habrahabr.ru/i/icon_asterisk_16.png +Content-Transfer-Encoding: Base64 + +iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAGXRFWHRTb2Z0d2Fy +ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAA +AAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5U +Y3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6 +eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8w +Mi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRw +Oi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpE +ZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRv +YmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv +bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20v +eGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRv +YmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9Inht +cC5paWQ6OUJFNDFFODE1M0NCMTFFMDg4MzdEMjY1MEM4OTlCREEiIHhtcE1NOkRv +Y3VtZW50SUQ9InhtcC5kaWQ6OUJFNDFFODI1M0NCMTFFMDg4MzdEMjY1MEM4OTlC +REEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlp +ZDo5QkU0MUU3RjUzQ0IxMUUwODgzN0QyNjUwQzg5OUJEQSIgc3RSZWY6ZG9jdW1l +bnRJRD0ieG1wLmRpZDo5QkU0MUU4MDUzQ0IxMUUwODgzN0QyNjUwQzg5OUJEQSIv +PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94 +cGFja2V0IGVuZD0iciI/Pgl861QAAAHoSURBVHjaLJFBb9MwGIY/x3bStIEmXUFs +tOk4sAOCA2ckfgASEkiIG2f+AkxwA1TxDzhxg8uk9oDEgf0CLggh7TA0RjcgJcua +hCRtVccxnwOWLNmf38fv+9lk98Mu4OBlJa8RII8IIUvcP4R/45VSqqFADZlBv+Be +MBRAKeV1xs1R/2JvI0liiOP4nVZ7nvfAdT04/vnjhhTiLqP0I1uuVsAYywlA0mza +G7ZtwSyOhxpYX78AhBigz3CR19qiKIBzcw+Ntg++Hbz2+763tta5pIGylHB0fBhn +WbatFOwJgQDWn+V5YXNOnTBcKYTh/Llu3UAwnUIYnqiqqm4JIW9aFl+Q0Wi82twc +cCkVAMGJVxmGUQMoxBoGUgQoJfD9cCLYfD6HKIqgFBJ0WMY5cEZrQGCkUggEdJ3C +fDEHlqTpy5Mosp0zjiNLec/z3A797yDRYRYnM86MnSwrcsuyFqzVaj3RAs75HSHE +fQMjTCZHNeD7fWjZtmFy/p5RNpYVxnXbZwGf80qa/nmBidwgmIKUcqJnEAS6BTdO +0iFeeLVp24B/QbFP5WA+FP8CdIGtrcuPtcP+/tc3p6czaLfbbrfbaeF/AdMvgtAn +0+S3semnvV5v2Wg0xhoYDPy3we/Q5iZ/juLPGvgrwAAFU9Nnla+h0wAAAABJRU5E +rkJggg== + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/png +Content-Location: http://habrahabr.ru/i/bg-folding-dot-light.png +Content-Transfer-Encoding: Base64 + +iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAIAAADKYVtkAAAAGXRFWHRTb2Z0d2Fy +ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFFJREFUeNpi/P//PwMDw88/f9lZmBlI +BCxAvPfa46tPX2tLizpryZKkmQlo59UnrwW5OYDk15+/SdMMdK22rOj7Lz+AJDc7 +K0maGSnxM0CAAQBHCiEG+qfxeAAAAABJRU5ErkJggg== + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/comments/bar/refresh.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhHAA6AOYAAN7yzV+1GajqcajfemC1GkF8E37GRHrDP0t8JG6JWpGWjT17 +DJHZVnaMZYSSeo7XUnS8OoPORen522GvIur63OT21sTfsIuUhTl1CXTEMo+VikmC +HJrgYZjeXpbdXJ3iZEZ6HmO1IeL30Wm8JVSqDpXcW0WFE2qHUpPbWZaYk+f42YnT +TJSXkYKQdnKKX6TnbKDlaarKj1itFFqBO1eMLW7ALEaAGZiZl5/kZ1qxE1+DQzt3 +DDx2DoCPc4TQRmS4H0R5GZzhY32PcGWFTKPnbHrIOn7MP4OtYUuZDLfdmXyObj6B +CE6SF3G3OE+GJJDOXYW+V2iuMN/1zlCcE0B3FT53ETh3B1umIIvOVa/QlGe6JGuz +L4/FYtDnvZXUYHjHN2uIVLDTk7fUn7PaklR/MsrpsUyKG+P11Njtxsfgs+X318/p +u4fBV4rBW2iZQY3LWqDDhHekU12RNFqPMFihHX7LPmSWPIXOSW+7Mm2gRYHIR7nW +orzYpr7aqDd0B5mZmSH5BAAAAAAALAAAAAAcADoAAAf/gH+Cg4SFhoeIiYqLjI2O +j5CRghoOF40JIH6am5o6Ghs0TiAgJwqICjZpFWoqKhIUsH5/Fxt5YXtHBSeICQsG +JR0fMC8CFLKzvRN4XHNDiC4LeigdQThEEseCLnIQORM2LYcNJncP09XYhTxjATlT +M4cIED4rDwweHCp+NzeDIH0jAsigYqiFmSJGItRjUEKNHwwYeggCYuHADwLZBs24 +kqFInQhRIDCo4KdAjB1CGtAAYGBECB6GgISokeFLG4hNzpSUAmUHBjFlMtSYgMAQ +hh8jamCx00AIhpMFpDBgAweAlyIZ6OgolMIKgR9akmDo1wNiARElGAwYEMFIERMO +/wxVkRFASxeYgm6kWCCCgwcGD1b42ELm0AwkOX6gKcCCkB81OIJ0QPEgQgElhxws +IJFjjZsEjiUQiTzZwAIXiIYsITGGTwEwpv74oSDgBYwPHUq8sQH60AkrTLJYiFPA +1GwBtW9zKPFkgwZELBIgAALKhgIdnDiB6L2IUmxJ4MOLH0++vPnz6NOrP0/JEiNM +2Td52jDHCRBS3wsp2NAFln//slzgRBxppJHLLockUMAASSRRxoNlUICBIBcoyAWD +djhzCDQMCpCEABFOOIgLdozxgRdOhGNIA2aACKKDxqhTxlpQwGMIAl4IMIaLSRjD +jz9pDPDBE1UURMMAO35YRtwxGPgk0R9AoDHGWhkJMgMUa+34hBchFpAFSipJsJYX +eBEChBcDIBcDDzw8YUwBFMDhUx8ijFlUIRisxWAeDSjxEw9wThkDBUmsFcdWhKSw +wwtrobFACn+UhQGcSYzxoI4C0KAiIVV4wSgAZeq1AKEfNiiAF4UZMkMcaErAGCEY +0HbpGGNsgFlBZnjxwRmfwUrBpWUUugRqhwyRaxdp2FCKILMt6ayOGyTQjyEn8OCG +BV3EYd0fsULo7JTOQScddXNYpwMGS6Sb7gILIMCdIt79MW0hP65n7734RhIIADs= + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-tags2.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhDAAPAOYAAP3///j//83r9czp9c7s9Yuqv9Tx9b7b4b/X5vH//+H4+tr0 +9t72+Ov8/bjY4cvo9fX//9Lv9fT///n//8fm9eH1/+L1/7PT4dPx9cbl9cXk9ef6 +/LnY4cnm9b/d4ej7/N/2+Zi2yoyrwI+tw7/X57rZ4bjR4e36/bLR4Zq3yr3b4ZWy +x+T2/9Dt9ejw9ZGwxNTy9eXx+YurwNHt9ej7/5e0x6/J29v1+LfP4Ov8/6rF2Njz +9eL2/9Hu9abD1bXN3snc6vv8/cDe4tfz9bPS4cTi9e37/Yqqv9n09py5zaS/07LM +3KjD1qvG2LXU4eDu9qXA08LY6OX5/87h7cXa58DY55Wzx5+90MTb6ebu9LLS4crf +65OwxLfX4eL5+snn9fv//77W5fH8//L//6C7z/f6/NPv9djl7525zcrn9dbj7dvx +9ez9/+f6/+v7/e///5Gwxdby9dLu9aO/0uD0/42swf///wAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAMAA8AAAetgHZ2QVhVJAgIUWWCgkAx +jHZPVIxnU3YAmBMBW2p2LmEQAWIFKWAJbiZZOCdjCUZQPwEfG2tLNhMNsxIQDQog +DDpNEl6+DDcLSDtDPkxvC0IeHgcHKgYYc0pscTDWZhFyPTNkVzkRJRwcDg5dBAJo +STQtBO0CAwMPDyEhbQNOFxdEtKDoQGGFFSlpvhDMkEGDhiIv4LDgYcFChQp0MtKp +U2PEiDogRYiQUeAIl0AAOw== + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/icos/entry-info-t-l.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhBQAFALMAAPv7+/X19fz8/Ozs7Pn5+enp6fr6+vT09P7+/vDw8Orq6v// +/wAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAFAAUAAAQQcC0UxhIqEVSMPIm0KIAY +AQA7 + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/icos/entry-info-t-r.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhBQAFALMAAPv7+/X19fz8/Ozs7Pn5+enp6fr6+vT09P7+/vDw8Orq6v// +/wAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAFAAUAAAQPcAS0FklK1GUKrcmxAUoE +ADs= + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/icos/entry-info-b-l.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhBQAFALMAAPHx8fv7++zs7Pn5+fPz8/Dw8Orq6vT09P7+/vz8/Onp6f// +/wAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAFAAUAAAQP0KRFCaALqYCTKgOFHEIE +ADs= + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/icos/entry-info-b-r.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhBQAFALMAAPHx8fv7++zs7Pn5+fPz8/Dw8Orq6vT09P7+/vz8/Onp6f// +/wAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAFAAUAAAQQcMlk5AJEBoVGUckiHIgU +AQA7 + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/icos/icons_vote_posts.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhIQAeAOZ/AOjo6PHx8cjIyPT09O3t7fr6+sXFxeXl5fj4+N7e3urq6vLy +8sPDw/b29s3NzdjY2NXV1dDQ0O7u7s7Ozs3o8fb+/9Lr8ev6+4fKVdnyxrzS4Zi0 +xq3G1pKvw/2JWLy8vJ65zOTt89H+fdvb2+fn5/v//9Hc5aO9z8nm8ajB0t7x9rTL +25Syxd3u+P1iMf+dfMb5bfS5s2atOdfw8/yEaO9lTs3Z4v+yf3udsr71YuxaReH2 +9+by+Of3+lukLv99Rfd7Wdzp8XK5QuHw+4fSF5fdI5LSYNLS0qDcbuRJNJjVaavp +QMHW5P+kcPGxrP+Tc4Kitoyrv/++kP/Kn/ZTKP+WY3zBTP+kg8Xi8ZveMLfxUaPk +M/39/fD7/Mb4d8v8cvxtPb/d8ez3+6zmdOhEJ+lVPv/Yr5u3yf9xOrPuRO+uqev3 +4vP+//RiOdf/i5Csv9n/lPhfM/JuVN06KYakurjnkaXjbd9cVcbZ58fa6M7f6/D1 ++MP2X9Tg5////////yH5BAEAAH8ALAAAAAAhAB4AAAf/gH+Cfxl1GYOIVy+LV4iD +BCMSBY6EY3Bjh45XZlNTT5QSIwiRjhlIcG5udpmDL2ZSUp+IoQgFCAkBg2tIIr0i +Xkqsfy9TNzc0iAMjAwXNCA8Kf7teX18w1zlGrE9STU3IggMPAQPl5QEQBEpevjnu +1kaDNDdVVUCDEAvNBQEB+gMRlGDAYASGFi0DCcq74cGDHHwRIkBAQICAg4sRBmHg +s2QJBkpAmvz4UYNShAYAADighEHLli1W5NWY+QMNGh04Hwo6mdIAJStpihQRMqhG +lR8ukiYF40HHoAkDFCjw6QioUKKCYpTxAIaK1zgeysR4GnUqJSFLiBCRgShGEg9t +/8iATTJ2kIABBw4wOLtFLdu2SYC0AULGiSMDC/J+oCQji2MflJzMkTPH8OEFmBc7 +kuGj819Hau6oofTng2nTpEPoCeGHEhMNsDVQSkCbNqUQeUrgCeHaj+8Vs337eeAo +hIYKfkow4Y1IQ/ISwB0l8MOFC/FBezSIqcC9y4ogzUtUYMOB0gguzSBgX8Hjgnv3 +KjiAF7SigvsUlB4UaNDgyCAOPHBXwQ479MAGD/gJwkEXBJ5ACQQFYOafgiecsOAM +M4CgoYMKXoAhCA82UNFKjqRwgQUWnEFJCj2guAElRzQglQCUnCAGBRSwMEgKG7Cw +wQwostBBByAcIcCRBMxogJQBJP4BQg84djBIB0GogOOVFqiwgQEEBJDSlwoEQKMg +Z/SAAgpRDNJHB1meiQIFWpoAAJdefikmCYNswAMWWNCBiAlRBNECFhS0wIIJgpDA +QJckAHAnIh0MEUYYUDhiAgstZNoBooOQIEA/ARiAJyJvDGEqDpTY8IYFUdhAiV4E +MHAAJVDgYGulqW7gKmkHCDDrIIEAADs= + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/gif +Content-Location: data:image/gif;base64,R0lGODlhDwAaAOZ/APr7/LnO3bXL2uK7Vvz58NLu9friZ/z69arD0tXl7eHr8uL1+tLv89v09921Uf3phfzjcMra5dvl68nX4ef1+fz589rt9e79/+v7/Ka+zs7h6tny9d3EmqjAz+rQc+ft8d/1+PTjttSycvb///f6+/vx0rzR3vL2+P/////4rub5+/3qjf/zlu/0+fH5/MmdQtLh7PfYWP3oe83a4u/jzdi9ke3Ma8aaSbvN2r/T4PXdfunXs+LGivHWh/jbWuT4+a7K2dy2X8qbO8PW4sTc6fjaX/bUU/fUXOr6+9+5Y9bx89u1V//ukOLz9v/2usfV3uTAZ/z369GmQv/yr9yyRNDr9c3r87+RPP/4pPjgbPHWfOfCW8ygQ/zsl+jMc+jKeN719vLZgPjdXPP//7nL19yzUP/wjdCtbvzmcuXIb///x9Ho8vjkou/WgJy3x/HUafznd/nlh9WmPLXQ3fv48t67XdDj7P3pgPnx4Mrd6fjcWtewW/fw3/z46+LCcwAAACH5BAEAAH8ALAAAAAAPABoAAAf/gH+Cgy0KLYOIiTAuMImOJBEoESSOiAoJIwkKjkMmAZ8UF00CpAI5gjkuIxhIKio/CyAYFAGCJwEJYz9gDRsNFxoCJ4MAESYgSgwMGwETAIkACAwFDQVWGc+JEnMFC3YLVUASjjhrFgg4CBZEZI4dGh0ffx8ZeW6OMzPZfwATT5WCSrApARBRDyc9CgrqY0ONjSgKQ4RJoSVEIgJfBmgcsIJFHAcgy/ghQADKlBRMVjy4IwMOBDNdghD4gydJGywyIBjYycLDHj6DDvCog0aMHh9ZlvCokKiClBg+IMQwIoSOox1Uijzw8OCInB2ORLzRwUXECx1bzghCMeiFlxs0EP7QuJHmiiMOHA4ErVFjUCAAOw== +Content-Transfer-Encoding: Base64 + +R0lGODlhDwAaAOZ/APr7/LnO3bXL2uK7Vvz58NLu9friZ/z69arD0tXl7eHr8uL1 ++tLv89v09921Uf3phfzjcMra5dvl68nX4ef1+fz589rt9e79/+v7/Ka+zs7h6tny +9d3EmqjAz+rQc+ft8d/1+PTjttSycvb///f6+/vx0rzR3vL2+P/////4rub5+/3q +jf/zlu/0+fH5/MmdQtLh7PfYWP3oe83a4u/jzdi9ke3Ma8aaSbvN2r/T4PXdfunX +s+LGivHWh/jbWuT4+a7K2dy2X8qbO8PW4sTc6fjaX/bUU/fUXOr6+9+5Y9bx89u1 +V//ukOLz9v/2usfV3uTAZ/z369GmQv/yr9yyRNDr9c3r87+RPP/4pPjgbPHWfOfC +W8ygQ/zsl+jMc+jKeN719vLZgPjdXPP//7nL19yzUP/wjdCtbvzmcuXIb///x9Ho +8vjkou/WgJy3x/HUafznd/nlh9WmPLXQ3fv48t67XdDj7P3pgPnx4Mrd6fjcWtew +W/fw3/z46+LCcwAAACH5BAEAAH8ALAAAAAAPABoAAAf/gH+Cgy0KLYOIiTAuMImO +JBEoESSOiAoJIwkKjkMmAZ8UF00CpAI5gjkuIxhIKio/CyAYFAGCJwEJYz9gDRsN +FxoCJ4MAESYgSgwMGwETAIkACAwFDQVWGc+JEnMFC3YLVUASjjhrFgg4CBZEZI4d +Gh0ffx8ZeW6OMzPZfwATT5WCSrApARBRDyc9CgrqY0ONjSgKQ4RJoSVEIgJfBmgc +sIJFHAcgy/ghQADKlBRMVjy4IwMOBDNdghD4gydJGywyIBjYycLDHj6DDvCog0aM +Hh9ZlvCokKiClBg+IMQwIoSOox1Uijzw8OCInB2ORLzRwUXECx1bzghCMeiFlxs0 +EP7QuJHmiiMOHA4ErVFjUCAAOw== + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-comments2.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhDAAOAOYAANDf6tbt9oWludPi7NHg6sPh8Mvb59Li7IiovLnM2bjM2NHh +6+Pq74SjuNLh64GhtcDV47fL17LG0+jv9cfY47/V46m+zMLT37vO2+rx9oCgtuju +8fz//83d56zBzvv//+ju8uPz+rjM2b/c8M/e6rzP2+/z9dvv+ouou8LV4OPz+4uo +vNXr+srb5sbX4sPY5LXI1sjZ5Njt+omovIinu+Hp7r/R3YmpvNTv8szn8Oz6++r3 +/sHU2q7L0qbE0cjk8N/09tDr8Pf//////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAMAA4AAAdwgBkDAwcOCwQEAAAkEwAc +Q5CRkB8GHUKXmJkxLTo6PJ+gnS4UQKWmpxcpODg9ra6rNiVBs7S1GCI5OT67vLkK +CQE/wsPCATARKjvKJwUFyiESDDczCDQvMiMCAg01kiArECwakpIbKBUP5JImHhaR +gQA7 + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-author-link.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhBQAHAIABAJ2dnf///yH5BAEAAAEALAAAAAAFAAcAAAIKDA5ht8ioTFRJ +FQA7 + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-icon-twitter.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhDgAQAOZGAP///3PU/HLU/HHU/HDU/NfX12/T/Nvb2+jo6Nzc3NbW1t7e +3t3d3d/f39LS0u/v79ra2oHZ/O7u7tPT04jb/fz+/+bm5uPj4/r6+n3X/PT09PHx +8dXV1efn5/z8/Pj4+Pf39+3t7djY2Ljp/enp6eLi4v3+/+Xl5cDs/u35/5zh/f39 +/dHx/uTk5Ob3/vb29qbk/evr65Pe/W7T/Pn5+cnu/tfz/qvm/ZHd/f7+/tnZ2XjW +/OX3/nXV/OHh4Ynb/Ozs7PX19eT3/o/d/fX8/43c/f///wAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAACH5BAEAAEYALAAAAAAOABAAQAeigEYIDRAJIUaIiYgFAAIC +MgCRkR8nB0aMBgYUkpEYHRCCFigBpKWkMA8XCzQRMyobJYqJjAO1trY3QC0iHhmk +NRWSQRcMiBoKJB4pwZErMRwYCB1EQhsLh7JGCgCZFCA6B+EMCIsABOfo5xE2DQ+M +jvDwPy4Q7jk9AUMvnAkWiAwgipgqhYNHAgnaTIzwZWoHCx8IjWhowEHEBAcYJyz4 +YCQQADs= + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/png +Content-Location: http://habrahabr.ru/i/bg-icon-facebook.png +Content-Transfer-Encoding: Base64 + +iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAA +AJ9JREFUOMtjYKAQMDIwMDAkVq75f+vBG5I0qimIMMxvD2FkYmBgYCBVM7IeFmIU +q8oLM3SXeTKICHIzMDAwMNhEzYTLMRFjALJmdECUC7DZTJIL8AG8LjiyLB0rH9kl +eA148/4rihdgfKJdEJC9BMVmGJ+qYUCdQOTiZGPQUBIjqNhIWwbOvnHvFRVdICPO +x3Du6hOcirAlIDUFEQaqAAAnVClioBN0DAAAAABJRU5ErkJggg== + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/link_icon2.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhFAAUAOYAAIGiu+ft8o2xy8nm9YmtxcLe7KnL3u3///r+/5G0zYisyYWp +xnyivc7i79Lu+53B2NLm9Nvt9tHs87nW6pa60mSKpJ3B1pS20PT2+OX8/3ufu+D5 +/+j+/9jy/nCVr7nZ6dXx/s/r+Zi40d74//P+/4+uw8Lh8Zq81Lza7Z2/1rXR5r/b +667N4KLF2uf7/qPB17ra7fX4+pi808nd64ClwL7e7u/z9q7D0YKow8Hg767O5bHT +7dr0/4mqwPb//8Xi8cbg7qnG256909/1/8Ph9LTU5bLT5a/Q4naeuf3///T5/tzl +6qTG28Da8LDR4snW37XW5snl74eow6TD2b7S4L/X5qa8yrfY57/g8rnY55WuwZ67 +0OD4+W2TrOX6+7fZ68vo+sXk8931+Iimu+r8/XmZsMTX5rnO3bHN5JKtv8Th9Mfl ++Mfl9NTx9IOoxXabtczn9qnL5Njz9a/L4LfR6LXW74uyx6PA2L/d66PH3bPH1rTJ +17DM3pSzx7rX4v///yH5BAAAAAAALAAAAAAUABQAAAf/gH+CgkoQTTuIO00QSoOO +ghB1YBsHlQdDazsQj38ITUQcBxwZG6WlQzATCI4TaqOlIzw8HR0gDh0TKoMNKC4j +YEREWFg1MDBfWHAhOjN/MXFDPCA6jZx5Jjk/DxgzKB0OITUtDQgISYMPKB8fLGZz +cHADbGE5Dw1/PuZ/FFBFRkUvZIT4kSNHjSJV8B0gkU+AkyMsjAigAAQFjA9X+Pxx +wcULmYUEDIhkQeACnn5GWkTw0UaOGD8HyOBg0qKFARwCsjxkkeBPBAkS7CChcoDB +gxQpDNDYwkLkzSRRoljAkQJJAAYyKFBI0eeMCJotaJAoAIQGBRkJNGi4kOAEAT02 +b2gEOUojwooVDC6wVaBAgAAhb2z82UPgDgUFQYBMWOBXAF8FIhjcGFSixwkBDJqo +uLCgsxvIGsY4itEDgIgFGuigSUBjQQIhHgDE4HSjCwApAATcmSKkRwUrjjBgCBBg +yRMtZSoor1AmzZMlxIUHAgA7 + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/double-lock.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhIgAUAOZ/AN/t9s7o9tnv+qnI3L7Z6ZG1ztru9s7m8L/h8+36//r//7TG +0rrS4pq60cre7IGlv8rp+M7h7bzY6LnO3LrZ6eP0+6C+04qrwqjI2pa81KHA1bPP +35WzyXieuPX8/7PP4ef2/Of1+6vH267C0cji7rXQ4KfG2/f///X+/5Kzy93x+93w ++Mfn97fT5J6/1M3q+nGXsWSKpGqQqqbF28Tc7V6Fn4mtx1qBmuXu9dLp9LrW5+n3 +/LDN3eDz+oWmvcTZ6KXF2qfF2Orw9bDL3Mvn9dbk7uT0/czq+LjU5rvV5qHB2KPE +2aTC2bTI16bG3XSYsnCVrvD6/vH9/77W5L/U4bTJ2M/n86zL263L3KfC1fj6/P7/ +/4+uxniaspy808Dh8a7N4Nvw+t/x/ODz/Nrm7qXE2Ze3zaXG2uP1/KbG2Zi3zbXS +4bTS467M3LjS4X+kvsLb6L7S4Oj0+pGwxu3z+N/x+4KkvLLJ2rfQ4dXg6NXt+LHO +3Zq+2FZ8lv///////yH5BAEAAH8ALAAAAAAiABQAAAf/gH+CgnQOhg4Ag4qLhYeJ +i4IAAwAKfpYALRGQkZOVl5mLRQ6WCh4eJ1t+AAyQoqSmqKqsgloiKFFUHBcXc3dy +Hj9CirW3ubu9v8GCZBE7WU2KeVwhAHGKzM7Qg9LU1n8TBiF2in5/PiEGHIrg4uTm +6OrfBxVPkCMrB2/r8/WL9/mCqhCoAMUeCAIdFAkkaBChoAk0EnSBtMAIjXGDIEqk +aHEcDj58nIAcSRIkDkEfQ5ZciaMAAhYQIBx5QfPFEQgsWCAoIMglTJk1beLUWcDG +lwB6BKioM0aMijACchD5YkOQUaRKmTqFKpXqgwxnsGwo4aYsng08BizJ8EDQ17Bj +w8u6OZt27YMOFKysAJFAyokTKBKAWGGFQsI/ePXy9QtYMGHDMApowNBm7JoSG/Zc +SeOiAAxBkSdXLnE58+bOMGQMIEAih4EVFdD0MJCDhIQBMgSpZu0atmzatnHH8DLg +Q4skEpLrQMIGjIkGMQQNL348uYTlzZ/HqJGigQYmQGaYMDGjjBIXDVLUEMTdO3jx +5M2jV3/jghkLQYa4mQInyQYRGqhxwQ2C1Hdffvv191+AAy7Qx4MQRhjhAoI4KOGF +Dy4QCAA7 + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/gif +Content-Location: data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIFjA8QqVwAOw== +Content-Transfer-Encoding: Base64 + +R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIFjA8QqVwAOw== + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/gif +Content-Location: data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIGjANgqRwFADs= +Content-Transfer-Encoding: Base64 + +R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIGjANgqRwFADs= + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/gif +Content-Location: data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIGhGOAGt0FADs= +Content-Transfer-Encoding: Base64 + +R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIGhGOAGt0FADs= + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/gif +Content-Location: data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIFDG6YwVEAOw== +Content-Transfer-Encoding: Base64 + +R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIFDG6YwVEAOw== + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/add_comment.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhEgAMAIAAAK+lav///yH5BAAAAAAALAAAAAASAAwAAAIgDI4Jwb0NXXwR +Unarmdryjn1gllUl4iTjU3bHBk4vWAAAOw== + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/comments.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhEgAMAIAAAK+lav///yH5BAAAAAAALAAAAAASAAwAAAIiDI4Jwb0NXXzq +sCfj3KZermVZRYGhoSFOcnZfC1kYfFltAQA7 + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg_avatar_mask_mini.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhGAAYAIABAPn5+QAAACH5BAEAAAEALAAAAAAYABgAQAIdBIKpu8YPo5y0 +2ouz3rx7dHSO+JXmiabqmo6aUQAAOw== + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/webp +Content-Location: http://habrahabr.ru/i/icos/icons_vote_comments_4modes.png +Content-Transfer-Encoding: Base64 + +UklGRmABAABXRUJQVlA4IFQBAABwBwCdASoaADQABIcIhYWIhYSIIwIDOwf/qY5V +PFJY+iVbJQjoL9N5LWGQGu2o69DHOGL3nNhrVemaC1cUevUUUvr5oAD+1w8lDT+P +grWvNh8Gclmyl+s2tpErshZgn5aWfMxrEhI3mUdlVspCJYMLphiyU/Q8lmKv3/UA +ydEe+OST/eOicZLohC9cT+zq5TgKlE4rPwrtuCca3b3V6Y8aephX290owirC5+n8 +t5DmPDR1PdnnBCwGT6eNF9nOAUcVTRgfa8E7Ya0CJNM58ye1wySJzBSb0R5a3Uxe +iJH3vJ/OoxDK1D6NeONm7d2Ri052MZ3ogzhS5gilXPUzbRm4ZKM+rBG8LQFTvOSE +j8/7xPtvsrUFuCWmzB9pREhGUU4Vl1oPpiUUtJJslfIFzPdGGLnpEtcufHT3QJgP +twwvkg2lECyn3Vj+ThKvMMqCTTjwoAAA + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/png +Content-Location: http://habrahabr.ru/i/bg-button-enter.png +Content-Transfer-Encoding: Base64 + +iVBORw0KGgoAAAANSUhEUgAAACAAAACDCAMAAADbLOmGAAAAGXRFWHRTb2Z0d2Fy +ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGBQTFRF8vLy5+fns7Oz////ysrKz8/P +0dHRzs7O09PTx8fHycnJ0NDQyMjI0tLS3NzczMzMzc3N4uLi2dnZy8vL3t7e4ODg +39/f4+Pj5OTk1dXV5ubm+vr6+/v7/v7+/f39////yswFHgAAACB0Uk5T//////// +/////////////////////////////////wBcXBvtAAABWElEQVR42uzW23KDMAwE +UNlgnBYINOn9xv//ZQkhgGQhFwf8xL5yJpNMFs1C8/6R3WLaWHt4aiaBt5fvBOfr +dSrg8As0nwaBxAHqfmAFoJeDMgTUU2AYkAYD7QGaBTYZn18igO4TQALgBcCB6scF +xRQcnxXN8TQFzTHt8tjm4ZoT6mTjCfyj1c53IK1Wzq8Asz2wAtDLQRkCcKsZkAYD +7QGaBVY5rZ4DQ6tnAXgBcKBiAGm183xv9d7qvdVLWp33Mdd0BWcWCB4j3AJBY4Tb +D2hr3A3sCqAMA7c/XtUxQCaDKgbIZXDeAmgCyJbrX9ABpM7Y0+NLzoLxFZ8DQIGV +CxMFMGMP7T5u7KHdhw5Im6LPcEtWOSDSd7gcECX9CjDbA7sCKMPAUKs6BshkUMUA +uQzOWwBNABkY5IBA6iwQfEBcQA4IA4ACKxcmCqhkUHALBI0R7wH5E2AAR7t7jEpR +hqMAAAAASUVORK5CYII= + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg_avatar_mask.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhMAAwAIABAP///////yH5BAEAAAEALAAAAAAwADAAQAJDhBGpy+2/DoK0 +2ouz3rz7D4biSJbmiabdpFpGe7HwTNf2jef6zvfKu5PwDj6Z74hMKpfMpvMJjUqn +1KrVZsxJsjBJAQA7 + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/png +Content-Location: http://habrahabr.ru/i/tags/habred.png +Content-Transfer-Encoding: Base64 + +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 +4OCheEP7PydxA3UapgnrAAAAAElFTkSuQmCC + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/form/loader_button.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhDAAMAIABAJqamv///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAAABACwA +AAAADAAMAAACGQweeaDY3JJxUy4LZ74aQ96FIgWSpoeOSAEAIfkECQAAAQAsAAAA +AAwADAAAAhpMgHa5oOjaY2vGauC0XGamfVHoYSVFoipQAAAh+QQJAAABACwAAAAA +DAAMAAACGYyBFgiX3taTkSnr7txcRwp54YiB2SiJTgEAIfkECQAAAQAsAAAAAAwA +DAAAAhoEgna5oejaY2vGauC0XGamfVHoYSVFompQAAAh+QQJAAABACwAAAAADAAM +AAACGYSDBhiX3taTkSnr7txcRwp54YiB2SiJTgEAIfkEBQAAAQAsAAAAAAwADAAA +AhkMHnmg2NyScVMuC2e+GkPehSIFkqaHjkgBADs= + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/form/loader_field.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhDAAMAIABAO3t7f///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAAABACwA +AAAADAAMAAACGQweeaDY3JJxUy4LZ74aQ96FIgWSpoeOSAEAIfkECQAAAQAsAAAA +AAwADAAAAhpMgHa5oOjaY2vGauC0XGamfVHoYSVFoipQAAAh+QQJAAABACwAAAAA +DAAMAAACGYyBFgiX3taTkSnr7txcRwp54YiB2SiJTgEAIfkECQAAAQAsAAAAAAwA +DAAAAhlEDnmh2NyScVMuC2e+GkPehSIFkqaHjkgBACH5BAkAAAEALAAAAAAMAAwA +AAIaBIJ2uaHo2mNrxmrgtFxmpn1R6GElRaJqUAAAIfkEBQAAAQAsAAAAAAwADAAA +AhmEgwYYl97Wk5Ep6+7cXEcKeeGIgdkoiU4BADs= + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-corner-top-left.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIFjA8QqVwAOw== + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/tm_logo_sharp.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhHwA8ANU6AKqqqsUrhaKiot2IuqOjo////+4vmtLT08zMzJ2dnctDk+Lk +5P79/P3s9bGxsfHx8u3s6/Xb6+u61p+envX49Pj5+Z+gn/34+sHBwd3d3Jycm+es +zvvk57i4uNRmpsrKyu3D24+Pj/70+uOdxZiYmZqbm8fHx5eWl/jJ3f/5/dxcpsTE +xJGRkf6m1P7//b6+vvz9/v3+/pWWlZWUlPv8+6CgoKKhor0idqWlpcAjfP///wAA +AAAAAAAAAAAAAAAAACH5BAEAADoALAAAAAAfADwAQAb/wITNJiAah0XkcMlU2jQ1 +nHQqFVgFhCxWmqVSa1Gv1NIpHBKTBQRToWAYCI0YLK7bpywZAgHR3XKAgYKDhIU5 +N3+FAYuMOYuAj4WIhjcKBQOIEhwKMA2WmISThqOCiIgGLTo6NnetrTZhYiUOBQgn +GhkMFQ4vDLUJc7F1AlNdXcQEUgAOAAITCUlKSUXR1Es4CKrafqTdlImhCi6YN5oR +HgMcF6CDot7fpwYGAcKu9lJ09/o4sGIJbwwo6MpwgMICCzggVPgwQUy/OmTMJEiw +4MGCAxkWVEAAzMtDhw42JrCQAQIAiwAoMHTIal8dEiFCYDhAs55LKTZmmHiwrafP +/59At4F7984dUW9GAykAESEGBwkDNhRosIhGCnalhpYSR05ChBFMB4jAGijpoACB +Ft14hFaS1qOATN2QZwDFW7inUGyz6SqZnWQW+N70km/wnY+G6xSmAqDxMhyOAShr +rNhmjQ5qClg0kaEABRwOfMUJZueymRIWKj7A8OEBnI5fWs4pc0BDGggHIOAWSbqO +DVoHSqR5QIsCLQQNCQuerKw5ZMnF8C2/R+AEiRofEGAAMP1eDRYhVhxA8KD7vRAA +cquK4veO3/ZcSKygELS+/Z5y8+vfz98sXLf/IXVXgFnBY8ohZQ1o1g0eXHBBAyKk +MMIIDUjwRwQNkBWXggqsg1DIBgx4ooIvGh7C4SWZRABCVBKM9ZZ/h3ySYoMNNFgi +jJVk+GEEAXAAQgA6hjKgkHEhKAhaBxKY4Fx0DUmUKfKk4mRRc22gTX9YypWDCj4F +AQA7 + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/webp +Content-Location: http://habrahabr.ru/i/bg-multilogo.png +Content-Transfer-Encoding: Base64 + +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 +JXgWgAAA + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/topic_edit.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhEAAQAOZTAM3p+OLp7nmar4eovMLY56jC0+H4/N3l6s7m8ezx9fT2+Ojt +8Xear8La5+T7/9Tv+sLi8+nv87zQ3fX//5q3ycLZ6Ovw89Dc5J67za/H2Ji5zXmc +suvy97PM3ompvvn//+j//4urv9ri6d3z/bfa7uX1+7zT4brZ7d72/fH//+f6/42s +v46sv9ft+IKit+f2+6/T6568zYepvsno9fP3+qzJ2dLr+d/1/YqrwrPG06vQ6dvy +/N/v9o6rvs3r9KvG2Nzl7PH9/+n4/Mrn9czc5pWyxbPO3rXX6MDR3M7o89ry/Iqq +vszr9rDL2+f5/8nX4L7h8t7o8Nrz+////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAACH5BAEAAFMALAAAAAAQABAAAAeRgFOCg4I0BA0mRISLUxwV +BhM8EoyEBAYpQgUJlIMdIEGaUxcePZQ/Dj4YEUg4LSuMUUYoM0cyGidKA4tRTVJM +UCQwOjYIAoS8vlBDNzsjCAwBg8i/AE4UIQMC0YLTUNVLT7C91E7g4snf4YwZUg8Q +6Zw1SRsq5eqUMSUfL+acU0AsirjIIeLAgQALFlhQoEBQIAA7 + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline; filename=all.css +Content-Type: text/css; name=all.css +Content-Location: http://habrahabr.ru/css/1307631427/all.css +Content-Transfer-Encoding: 8bit + + + +/* layout */ +#header-wrapper { + position:relative; + /*overflow:hidden;*/ + min-width:760px; + } + +#wrapper { + width: 95%; + min-width: 725px; + clear: both; + margin:0 auto; +/* overflow: hidden;*/ +} +#inner { + margin:0 auto; + max-width: 1200px; +} + + #main-content { + float: left; + width: 66%; + clear: left; + margin-right: 2%; +/* overflow: hidden;*/ + } + #sidebar { + float: left; + width: 31%; + } + + + + + +/* main */ +body, html { + height: 100%; +} +body { + font: .75em Verdana, sans-serif; /*12px is font-size for main content. Base font size*/ + color:#000; + background:#fff; +} +a{color: #6da3bd;} +a.serv{ + text-decoration:none; + border-bottom:1px solid #6DA3BD; + } +.input-row{ + margin-bottom:9px; +} +a.js-serv{ + border-bottom: 1px dashed #6DA3BD; + text-decoration:none; + cursor:pointer; + } +a.silentlink{ + text-decoration:none; + color:#343434; + } + a.silentlink:hover{ + color:#343434; + } +a:hover{ color:#4D7285;} +.hentry .content a:visited,.entry-content a:visited{ + color:#990099; +} + .hentry .content a:visited:hover,.entry-content a:visited:hover{ + color:#C266C2; + } + .hentry .content .habracut a:visited{ + color:#6DA3BD; + } + .hentry .content .habracut a:visited:hover{ + color:#939393; + } + + .entry-title a.topic:visited{ + color:#B0B0B0; + } + .entry-title a.topic:visited:hover{ + color:#939393; + } +a img { + border:none; +} + +address { + font-style:normal; +} + +fieldset {border:0 solid transparent;} +input, select, textarea { + font-size: 100%; + font-family: verdana, sans-serif; +} + +ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,body,html,blockquote,fieldset,dl,dt,dd,caption {margin:0; padding:0;} +ul,ol {list-style: none;} +pre,code {font-size: 1em;} + +ol{list-style-type: decimal; + list-style-position: inside; + } +.published, +time{ + text-transform: lowercase; +} +h1, h2, h3, h4, h5, h6 { + color:#999999; + font-family:Verdana,sans-serif; + font-weight:normal; + margin:0 0 0 0; + padding:0; +} + +h1 { + font-size:162.5%; + letter-spacing:-1px; + margin-bottom:0.7em; +} + +h2 { + font-size:150%; +} + +h3 { + font-size: 137.5%; +} + +h4 { + font-size: 120%; +} + +h5 { + font-size: 110%; +} + +h6 { + font-size: 100%; +} + +table {border-collapse: collapse;} + +blockquote { + border-left:2px solid #bbb; + margin: .83em 0; + padding-left:15px; + clear: both; +} + +img[align="center"] { + display: block; + margin: 0 auto !important; +} + +.hidden { display: none !important;} +.error{color:red;} + + +/*Header*/ + +/* Sligtly modified code first coded by Aleksey Rybakov (http://flack.ru/temp/habr/head.html) */ + +#header-inner { + margin-right:255px; + } +#nav-adv { + margin-left:240px; + } +#logo { + width:240px; + float:left; + } +#info-search { + width:255px; + float:right; + } + + #logo img { + width:240px; + height:130px; + } + + #main-nav { + padding-top:14px; + text-transform:lowercase; + font:1.75em 'Lucida Grande',Verdana,sans-serif; /*21px*/ + } + #main-nav li { + display:inline; + margin-right:1px; + } + #main-nav li a { + position:relative; + padding:0 3px; + border-bottom:1px solid #b2b2b2; + text-decoration:none; + color:#b2b2b2; + } + #main-nav li.current a { + color: #000; + font-weight: normal; + border-bottom:none; + } + #main-nav li.current a span { + color: #F60; + font-weight: normal; + border-bottom:1px solid #000; + } + #main-nav li .top-Link { + vertical-align: top; + color: #ff9600; + letter-spacing: -1px; + } + #main-nav li .top-link span { + color: #8d8b8b; + } + + /* Subnavigation (nearest menu level) */ + + #sub-nav { + clear: both; + margin-bottom: 20px; + + } + #sub-nav li { + display: inline; + margin-right: 3px; + } + #sub-nav .create-blog, #sub-nav #recommend { + margin-left: 15px; + } + #sub-nav li a { + font-family: Arial, sans-serif; + font-size:1.083em; /*13px*/ + text-decoration: none; + color:#093; + padding: 0 2px; + } + #sub-nav .current a { + color:#fff; + background-color: #ff9525; + padding: 0 5px;} + + /* // Subnavigation (nearest menu level) */ + + + + /*Text advert*/ + + + #head-text-adv { + margin: 2.5em 0 1.5em 0; +/* float: left;*/ + width: 98%; + } + .profile #head-text-adv { + margin: 5em 0 0 0; +/* float: left;*/ + width: 98%; + } + #main-page #head-text-adv { + margin-top: 1.2em; + } + #head-text-adv iframe { + margin: 0; + width: 100%; + } + + /* // Text advert*/ + + + + #info-search { + text-align:right; + width: 255px; + font:.917em Tahoma,Verdana,Helvetica,sans-serif; /*11px*/ + } + #info-search .avatar { + float:right; + width:48px; + height:48px; + margin:7px 19px 0 0; + border:1px solid #DDD; + } + #info-search dl { + float:right; + padding:11px 13px 0 0; + text-transform:lowercase; + width: 170px; + } + #info-search dl a { + color:#999; + } + #info-search dd { + margin-top:1px; + } + #info-search dt { + width: 170px; + } + #info-search dd ul { + color:#000; + } + #info-search dd ul li { + display:inline; + padding:0 5px; + background: url(/i/bg-info-search.gif) no-repeat 100% 100%; + } + #info-search dd ul li.last { + padding:0; + background:none; + } + #info-search dd ul li a { + color:#000; + } + #info-search .habrauser { + text-transform:none; + font-weight:bold; + color:#666; + } + #info-search #last-shot {margin-bottom: -1px;} + #info-search form { + float:left; + margin-top:11px; + margin-right:6px; + } + #info-search fieldset div { + float:left; + width:176px; + padding:3px; + background:#C9D6DE; + } + #info-search fieldset div input { + width:170px; + padding:1px 0 1px 3px; + } + #info-search fieldset .submit { + float:left; + width:49px; + margin:2px 0 0 5px; + } + + .new-mail-indicator {margin-bottom: -1px; margin-left: 2px;} + + /* Menu for unlogined visitors */ + + #info-search ul.guest_panel { + margin: 2em 4.2em 1em 1em; + } + #info-search ul.guest_panel li { + display: inline; + } + +/* // Header */ + +.company_admin #sidebar{ + padding-top:46px; + } +.help .company-help{ + margin:0 20px 20px 20px; +} + +/* Main content */ + +/* Горизонтальное меню над постами */ + + +.page-navigation { + overflow:hidden; + width:100%; + clear:both; + margin-bottom: 20px; + } + + +ul.page-menu{ + overflow:hidden; + } + .page-menu li { + width:20%; + float:left; + } + .page-menu li { + padding: 0; + text-align: center; + background: #eaecea url(/i/bg-page-nav-left.gif) no-repeat 0 0; + vertical-align: top; + } + .page-menu li.current { + background-color: #d3e2f0; + background-image: url(/i/bg-page-nav-current-left.gif); + } + .page-menu li b{ + display:block; + font-weight:400; + height: 28px; + position:relative; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + padding-top: 7px; + background: url(/i/bg-page-nav-right.gif) no-repeat 100% 0; + } + + .page-menu li.current b { + background-image: url(/i/bg-page-nav-current-right.gif); + } +.unlogged-menu{ + padding-left:35px; + } +.blog-menu{ + } + .blog-menu + .page-menu td, + .blog-menu + .page-menu td.current{ + border-bottom-width:0; + } +.top-page-menu{ + padding-left:35px; +} +.page-menu { + width: 100%; + clear: both; + font-size: 1.33em; + border-collapse: collapse; +} + .page-menu td { + padding: 0; + height: 2.19em;/*35px*/ + text-align: center; + background: #eaecea url(/i/bg-page-nav-left.gif) no-repeat 0 0; + vertical-align: top; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + } + .page-menu td.last { + border-right: none; + } + .page-menu td.current { + background-color: #d3e2f0; + background-image: url(/i/bg-page-nav-current-left.gif); + border-bottom: 1px solid #d3e2f0; + } + + .page-menu td div { + padding-top: .5em; + background: url(/i/bg-page-nav-right.gif) no-repeat top right; + } + .page-menu a,.page-menu label { + color: #666; + cursor:pointer; + text-decoration:underline; + } + + + .page-menu a:hover,.page-menu label:hover{ + color:#A3A3A3; + } + .page-menu .current a,.page-menu .current label { + text-decoration: none; + color:#000; + } + #company-index .page-menu td { + background: none; + } + #company-index .page-menu td div { + background: url(/i/bg-page-nav-right-company.gif) no-repeat top right; + background: none; + } + #company-index .page-menu td div a { + color: #b2b2b2; + } + #company-index .page-menu .current div a { + color: #696969; + } + #company-index .page-menu td div .add { + margin-left: .5em; + } + + .profile .page-menu .current, .profile .page-menu .own { + width: 50%; + } + body#top .page-menu .current { + border-bottom-color: #fff; + } + #company-index .page-menu td.current { + background: #f0f0e7 url(/i/corner_3.gif) no-repeat 0 0; + /* border-bottom: 1px solid #f0f0e7; */ + } + .page-menu td.current div { + background: url(/i/bg-page-nav-current-right.gif) no-repeat top right; + } + #company-index .page-menu td.current div { + background: url(/i/corner_1.gif) no-repeat top right; + } + + + .page-menu .top img { + margin-top: .1em; + } + + .page-menu #write { + height: 35px; + width: 34px; + margin: 0; + background: #fff; + } + .page-menu #write img { + margin: 0; + outline: none; + } + + .page-menu sup {font-size:70%; color:#999; vertical-align:baseline; position: relative; top: -8px;line-height:0;} + + /*Tabled page-menu*/ + + .page-menu td { + text-align: center; + } + + + /*2 линия*/ + + .page-submenu { + font-size: 1em; /*12px*/ + float: left; + clear: both; + background: #D3E2F0 url(/i/bg-page-subnav-corner-bottom-left.gif) no-repeat bottom left; + border-right: 1px solid #fff; + } + + .logged { + border-left: 35px solid #fff; + } + + .right { + float: right; + } + + .page-submenu ul { + padding: .5em 20px .5em 0; + background: url(/i/bg-page-subnav-corner-bottom-right.gif) no-repeat bottom right; + } + .page-submenu li { + display: inline; + margin: 0 0 0 10px; + } + .page-submenu li.create-new-blog { + padding-left: 25px; + background: none; + } + + .page-submenu li.current a {text-decoration: none;color:#000 !important;} + + .page-menu td .new, + .page-submenu li .new { + color: #390; + } + .page-submenu li a { + color: #666; + } + .page-submenu li a:hover { + color:#A3A3A3; + } + .page-submenu li .rss img { + margin-bottom: -2px; + } + + +/*Простые табы (без круглых уголков и т.п., см. страницу приглашения в блог)*/ + +.two-simple-tabs { + width: 100%; + float: left; + clear: both; + margin: 20px 0 10px 0; + font-size: 1.58em; /*19/12*/ + white-space: nowrap; +} + .two-simple-tabs li { + float: left; + width: 49%; + text-align: center; + } + .two-simple-tabs li.last { + float: right; + } + .two-simple-tabs div { + padding: .5em .5em; width: 95%; margin: 0 auto; + } + .two-simple-tabs .current div { + background: #faeee2; + } + .two-simple-tabs div, .two-simple-tabs div a { + color: #999; + } + .two-simple-tabs div .new { + font: normal .89em/100% Verdana, sans-serif; /*17/19*/ + color: #390; + } + .two-simple-tabs div a:hover{ + color:#333; + } + + + + + +/* Archive section */ + +.archive-navbar { + margin: 30px auto -10px auto; + text-align: center; +} + .archive-navbar a { + display: inline; + font: 2.17em/100% Verdana, sans-serif; + color: #996; + } + .archive-navbar h1 { + display: inline; + font: normal 2.17em/100% Verdana, sans-serif; + letter-spacing: -1px; + margin: 0 .8em; + color: #69c; + } + + + +/* Информация о блоге */ + + + /* Новые стили 24 апреля 2008 */ + + .blog-descr {clear:both; font-size:14px;} + .blog-text-descr {margin: 10px 0 0;} + .blog-descr .bg-top-r h3 { + clear: both; + margin-bottom: 10px; + font-size: 1.63em; /*26/16*/ + font-weight: normal; + letter-spacing: -1px; + color: #999; + } + .blog-descr .bg-top-r div, .blog-descr .bg-top-r p {font-size: 14px;} + + /* Админы, соавторы и читатели блога */ + + .blog-descr #admins ul, .blog-descr #coauthors ul { + float: left; + width: 100%; + margin: .83em 0; + text-align: center; + } + .blog-descr #admins li, .blog-descr #coauthors li { + float: left; + clear: right; + list-style: none; + margin: 0 5px; + } + .blog-descr #admins dl dt a img, .blog-descr #coauthors dl dt a img { + display: block; + margin: 0 auto; + border: 1px solid #ddd; + } + .blog-descr #admins a, .blog-descr #coauthors a { + font-size: 12px; + } + + .people { + margin: 10px 0; + } + .people ul { + margin-top: 10px; + font-size: 12px; + } + .people ul li { + display: block; + float: left; + margin-right: 5px; + font-size:1em; + font-family:arial; + line-height: 130%; + } + .people ul li, .people ul li a { + color:#999; + } + .people ul li a { + padding: 0 0 0 15px; + background: url(/i/small_default_userpic.gif) 0 50% no-repeat; + } + + + /* // Новые стили 24 апреля 2008 */ + + + +#viva-la-w3c { + width:149%; + } + .blog-title { + overflow:hidden; + padding-top:10px; + margin-top:-20px; + min-height: 48px; + padding-bottom:8px; + padding-left:35px; + } + #viva-la-w3c .blog-title .avatar {border: 1px solid #ddd;float:left;} + +.blog-info { + clear: both; + padding:35px 0 20px 0; +} + .blog-info .title a { + color: #008cd2; + } + .blog-info .title img { + border: 1px solid #ddd; + } + .blog-info .title .avatar { + margin: 0 .83em -.45em 0; + } + .blog-info #buttons { + margin-left: 10px; + white-space: nowrap; + } + .blog-info #buttons img { + margin: 0 .83em -.2em 0; + border: 1px solid #ddd; + } + + .blog-info .more-info { + margin-left: 45px; + } + + .blog-info .more-info .subscribers { + font-size: 1em;/*12/16*/ + position: relative; + top: -.5em; + } + + .blog-info .more-info .rating, + .blog-info .more-info .subscribers { + margin: .2em .1em 0 .1em; + } + .blog-panel #sidebar{ + margin-top:46px; + } + .blogs #viva-la-w3c h2.blog-header { + + margin-top: 0; + float:left; + margin-right:30px; + font: normal 300%/120% Verdana, sans-serif; + letter-spacing: -1px; + color:#333; + + } + .blogs #viva-la-w3c h2.blog-header .silentlink{ + position:relative; + display:block; + float:left; + margin-right:5px; + } + .blogs #viva-la-w3c h2.blog-header .profiled_blog{ + cursor: help;width:16px;height:16px;float:left;margin-left:2px;margin-top:10px;background: transparent url(/i/icon_asterisk_24.png) left top no-repeat; + } + .blogs #viva-la-w3c h2.blog-header .edit{ + display:block;float:left;margin-left:10px;margin-top:18px; + } + .blogs h2.blog-header .blog-whois{ + position:absolute; + font-size:33%; + line-height:1em; + top:-5px; + right:-20px; + color:#66ccff; + + } + .blogs h2.blog-header .blog-whois:hover{ + color:#4890b4; + } + dl.blog-index { + float:left; + margin-right:19px; + position:relative; + } + dl.blog-index dt{ + position:absolute; + width:100%; + text-align:center; + top:-6px; + font-size:83%; + color:#ccc; + } + dl.blog-index dd{ + color:#CC66CC; + font-size:300%; + } + .blog-info .more-info .rating { + font-family:Arial; + font-weight: bold; + padding: 0 .2em; + color:#fff; + background-color: #d479b3; + } + .blog-about-text{ + position:absolute; + padding:27px 27px 30px; + width:550px; + top:200px; + left:47%; + z-index:99; + background:#fff; + border: 1px solid #999; + + } + #js-blog_info.tipBox-too-mach-right{ + margin-left:-575px; + } + .blog-about-text + .close-blog-info{ + position:absolute; + top:10px; + left:10px; + text-decoration:none; + color:#999; + } + .blog-about-text + .close-blog-info:hover{ + color:#ccc; + } + #js-blog_info.tipBox-too-mach-right + .close-blog-info{ + right:10px; + left:auto; + } + .blog-about-text h2{ + color:#333; + font-size:216%; + margin:0 0 13px; + } + .blog-about-text + .blog-about-text-content{ + max-height:440px; + overflow-y:auto; + } + .blog-about-text #js-admins_moderators_holder #admins img, + .blog-about-text #js-admins_moderators_holder #coauthors img, + .blog-about-text #js-admins_moderators_holder span{ + display:none !important; + } + .blog-about-text #js-admins_moderators_holder h3{ + clear:left; + font-size:100%; + float:left; + color:#000; + text-transform:lowercase; + margin-bottom:5px; + margin-right:5px; + } + .blog-about-text #js-admins_moderators_holder #admins, + .blog-about-text #js-admins_moderators_holder #coauthors, + .blog-about-text #js-admins_moderators_holder p{ + float:left; + } + .blog-about-text #js-admins_moderators_holder p{ + margin:0; + color:#ccc; + } + #js-admins_moderators_holder #admins *, #js-admins_moderators_holder #coauthors *{ + display:inline; + padding:0; + margin:0; + } + .blog-about-text .blog-text-descr{ + clear:left; + padding-top:6px; + } + #cool-numbers { + margin: -3.6em 0 2.5em 13.33em; + } + + .blog-counts{ + clear:left; + font-size:133%; + color:#999 ; + margin-bottom:10px; + } + .blog-info #description { + font-size: 1.33em; /*16/12*/ + float: left; + width: 95%; + padding: 0 10px; + background: #dfe9e8 url(/i/bg-description-top-left.gif) no-repeat 0 0; + } + + .blog-info #description #inner { + padding: 20px 10px; + } + .blog-info #description p { + width: 100%; + clear: both; + margin: 0 0 .83em 0; + padding: 0; + } +/* Найти в поисковых системах: Яндекс, Google, bing. */ +.alter_search{padding-left:35px;} + + /* List of blog admins and readers */ +.blogs-search{ + padding-left:35px; +} +.blogs-search +.popular-blogs{ + + margin-left:-2%; +} +.bloglist-suggest-form { font-size: 22px; padding:0; } + #bloglist_suggest_form_input { height: 28px; float: left; width: 99%; } +.blogs-search-side +.side-rubrikator{ + padding:62px 0 17px 37px; + } +.side-rubrikator { margin: 0; line-height:200%;font-size:133%; font-family:Arial,sans-serif;} + .side-rubrikator li { margin: 0; padding: 1px 0; margin:0 6px 0 0;white-space: nowrap;color:#ccc; } + .side-rubrikator li.active{ } + .side-rubrikator li a{padding:0 4px;margin-left:-4px;} + .side-rubrikator li .side-rubrikator-counter{color:#999;} + .side-rubrikator li.active a { color: #333; text-decoration: none; background: #C5DAE5; } + + /* Приглашение в блог */ + + /*(Таблица юзеров, их предпочтений, плюс кнопки Пригласить как читателя, как писателя etc.)*/ + + /*Визуал: хабраникнейм и буллет юзера слева от неё.*/ +.corplist-suggest-form { font-size: 22px; padding:20px 0 0 35px;} + .corplist-suggest-form #corplist_suggest_form_input{height: 28px; float: left; width: 99%;} +.invitation .intro { + clear: both; + margin-top: 20px; +} +.h-user { + padding: 0 0 0 15px; + background: url(/i/bg-user2.gif) 0 90% no-repeat; + color:#999; +} + +.td-h-user { + width: 70%; + font-family: Verdana, Arial, Helvetica, sans-serif; + vertical-align: top; + padding: 10px 0; +} + .td-h-user .avatar { + margin-left: 10px; + margin-right: 10px; + border: 1px solid #ddd; + float: left; + } +.live .td-h-user dl { + margin: 0 0 0 58px; + padding-right: 10px; +} + .td-h-user dl a { + color: #666; + } + .td-h-user dl dd { + font: .83em Verdana, sans-serif; + color: #666; + } + + .td-interests { + display: inline; + } + .td-interests li { + display: inline; + font-weight: normal; + } + .candidates .controls { + padding-right: 10px; + vertical-align: middle; + text-align: center; + } + .candidates .controls li { + margin: 12px 0; + } + .candidates .controls a { + padding: 10px 0 10px 25px; + background: url(/i/corporate_icon.gif) 0 65% no-repeat; + } +.dailybest h3 sup { + font-size: 65%; +} + + + + + + /* Top section, filtrator */ + + #filtrator { + margin: 3.33em 0; + padding-left:35px; + } + #filtrator select { + font-size: 1.67em; /*20/12*/ + color: #333; + width: 100%; + } + + /* // Top section, filtrator */ + + /* Поиск по тегам */ + + .tag-search { + margin: 0 0 14px; + padding-left:35px; + width: 100%; + font: 26px/36px Verdana, sans-serif; + color: #996; + } + /* + .tag-search a {height: 36px; float:left; width: 20px;} + .tag-search a img {margin: 11px 0 0 0;} + */ + .tag-search .bullet {margin: 11px 0 0 0; float:left;} + .tag-search div.rarr {height: 36px; padding-left: 10px; float:left;} + .tag-search .inpt-text { + margin: 0 10px; + padding-left:6px; + float: left; + color: #996; + border: 1px solid #996; + } + .tag-search input.inpt-text {width: 50%;} + + + + /* Поиск habr.ru/search/ */ +.people-section .corps-list{ + padding-top:0; +} +.bloglist .searched-item, +.corps-list .searched-item{ + background:#F0E9AA; +} +.bloglist a .searched-item, +.corps-list a .searched-item{ + text-decoration:inherit; +} +.search-header { + margin: 35px 0 20px 0; +} + .search-header h1 { + margin: 0; + font: 2em/100% Verdana, sans-serif; + color: #69c; + } + .search-header form { + margin: 6px 0 0 20px; + float: left; + } + .search-header p { + float: left; + clear: both; + width: 100%; + margin: 20px 0 0 0; + } + + .searched-item { + background: #fffacd;/* Выделение поискового запроса в тексте выдачи*/ + } + + .search-results { + margin-top:30px; + overflow: hidden; + } + .search-results + .search-content-pad{ + padding-left:35px; + } + .search-results + .items{ + padding-left:35px; + } + /*Меню фильтрации результатов поиска*/ + .search-results-bar {font-size: 1em; margin-bottom: 30px;} + .search-results-bar h2, .search-results-bar #sub-nav { + display: inline; + float: none; + } + .search-results-bar h2 {margin-right: 10px;} + + /*Выдача найденных комментариев*/ + .search .items { + margin: 30px 0 0 0; + } + + /* Выдача найденных компаний */ + + .searched-companies {margin-top: 40px; clear: both;} + .searched-companies .item {margin-bottom: 20px;} + .searched-companies .summary { + margin: -20px 0 0 40px; + } + .searched-companies .summary .name a { + font: 2em/110% Verdana, sans-serif;/*24/12*/ + letter-spacing: -1px; + color: #aeaeae; + } + .searched-companies .summary .ceo, + .searched-companies .summary .url { + margin: 5px 0; + } + + + .search .tag-search { + margin: 60px 0; + } + .search .tag-search .inpt-text { + width: 100%; margin: auto 0; + } + .search .tag-search .inpt-btn { + margin: 20px 0; + background: #996; + color: #fff; + } + +.live-block-page, +.mail-page-content{ + padding-left:35px; +} +.user_profile_edit_holder{ + padding-left:35px; +} +.profile #main-content .userinfo, +.company #main-content .userinfo { + width:auto; + padding-left:35px; +} +.profile #main-content .user-recommend-user{padding-left:35px;} +.profile #main-content .items, +.profile #main-content .live{ + margin-left:35px !important; + width:auto; +} +.site-settings{ + padding-left:35px; +} +#main-content +.hentry +.summary{ + + margin-left:35px !important; +} +.profile #main-content .items +.entry-title , +.profile #main-content .items +.content, +.profile #main-content .items +.entry-info{ + + padding-left:0; + margin-left:0; +} +.profile #main-content .items +.tags{ + margin-left:0; +} +.i-am-your-father-luke{ + padding-left:35px !important; +} +#js-topic-form-title{ + padding-left:35px; +} +#js-topic-form-swither{ + padding-left:35px; +} +#js-topic-form-holder,.add-new-blog #main-content{ + padding-left:35px; +} +.job-content, +.fans-content, +.d-block{ + padding-left:35px; +} +#comments{ + padding-left:35px; +} +/* Пост в блоге */ + +div.hentry { + width: 100%; + float:left; + clear:both; + margin: 0 0 40px; +} + div.hentry + .page-menu, + .message-page-menu{ + margin-bottom:30px; + } +.message-page-menu{ + padding-left:35px; + width:auto; + margin-bottom:0; +} +.message-page-menu li{ + width:50%; +} +h2.single-entry-title{ + padding-left:35px; +} +h2.inbox-message-header{ + color:#000 !important; + margin-top:27px; + margin-bottom:7px !important; +} +h2.entry-title { + font: 2.167em/118% normal Verdana, Tahoma, sans-serif; /*26px*/ + margin-bottom: 20px; + color: #767676; + padding-left:35px; + padding-right:30px; +} + h2.entry-title span{ + color:#333; + } + +.post h2.entry-title { + clear: both; + font: 2.833em/110% Verdana, sans-serif; /*34/26*/ /*Размер заголовка в посте раздела Персональные*/ +} +.post .personal h2.entry-title, +.post .podcast h2.entry-title { + color: #c99; /*Цвет заголовка в посте раздела Персональные*/ +} +.post .translation h2.entry-title { + color: #c99; /*Ц. з. в переводном посте раздела Персональные*/ +} +.post .corporative h2.entry-title { + color: #8277a3; /*Ц. з. в посте раздела Корпоративные*/ +} + +.post .link h2.entry-title { + color: #749f79; /*Ц. з. в переводном посте раздела Персональные*/ + padding-left: 28px; +} + + + + + .entry-title a { + color: #666; + } + .entry-title a:hover{ + color:#A3A3A3; + } + .entry-title a.blog { + color: #6da3bd; + } + .entry-title a.blog:hover{ + color:#4D7285; + } + .entry-title .profiled_blog{cursor: help;padding:0 8px;height:16px;margin-left:5px;font-size:19px;background: transparent url(/i/icon_asterisk_16.png) left top no-repeat;} + + .corporative .entry-title a.blog { + color: #8277a3; + } + .corporative .entry-title a.blog:hover{ + color:#ABA4C2; + } + + .entry-title .remove { + margin: 0 0 0 10px; /*Удаление из избранного*/ + } + + + /* Стили для топика-события */ + + .vevent .entry-title {margin-bottom: 10px;} + /* + .vevent .entry-title a {color:#666; text-decoration:none;} + .entry-title a.event-name {padding: 0 .3em .1em .3em; color:#f0f0e7 !important; background: #8bb0ad; } + */ + .vevent .summary { + margin-bottom: 20px; + padding: .1em 10px; + font: 14px/140% Arial,sans-serif; + color:#666; + background:#f0f0e7; + } + + + + + /* Стили для основного контента внтури любой записи блога */ + .comments { + position:relative; + } + .hentry .content { + font: 1.083em/1.54em Verdana, sans-serif;/*13px*/ + margin-left: 35px; + margin-bottom:0.83em; + overflow:hidden; + } + + .hentry .content, + .tags, + .entry-info { + margin-left: 35px; + } + .comment_holder { + float:left; + width:100%; + } + + .hentry .hentry { + margin-left:20px; + } + + .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry { + margin-left:0; + } + .hentry .reply_form .js-field-holder, + .hentry .reply_form .help_holder, + .hentry .reply_form .comment-help{ + padding-left: 20px; + } + + .msg-meta { + position:relative; + } +li:hover > .msg-meta > .folding-dot-holder{ + display:block; +} + .msg-meta + .folding-dot-holder{ + display:none; + position:absolute; + top:0; + left:0; + width:1px; + height:1px; + } + + .msg-meta + .folding-dot{ + width:500px; + height:5px; + background:red; + right:0px; + top:11px; + position:absolute; + background: url(/i/bg-folding-dot-light.png) repeat-x 100% 0; + } + + .new-reply { + background: #E8E8FF; + } + .new-reply-old { + background: #F3F3FF; + } + .my-reply { + background: #FDF5E6; + } + + .hentry .content p, + .profile .summary p, .profile .summary img, + .user-flow .summary p, .user-flow .summary img + { + margin: 0 0 .83em 0; + } + .hentry .content img[align=left] { + margin-right: 30px; + margin-top: 5px; + margin-bottom: 5px; + } + .hentry .content img[align=right] { + margin-left: 30px; + margin-top: 5px; + margin-bottom: 5px; + } + .hentry .content img { + max-width: 100%; + vertical-align:bottom; + } + .hentry .content pre { + white-space: pre-wrap; + white-space: -o-pre-wrap; + + } + .hentry .content table { + clear: both; + width: 100%; + margin: 1.5em 0; + border: 1px solid #ccc; + } + .hentry .content table caption { + text-align: left; + text-indent: 1em; + } + .hentry .content table td, .hentry .content table th { + padding: .3em; + border: 1px solid #ccc; + } + .hentry .content ol, .hentry .content ul, + .profile .summary ul, .profile .summary ol, + .user-flow .summary ul, .user-flow .summary ol, + .info-page ul { + margin: 1.5em 1em 1.5em 3em; + padding: 0; + } + .hentry .content ol, + .profile .summary ol, + .user-flow .summary ol { + list-style: decimal; + } + .hentry .content ul, + .profile .summary ul, + .user-flow .summary ul, + .info-page ul { + margin-left: 2.65em; + list-style: disc; + } + + .habraplayer { + margin-bottom: 10px; + } + +.info-page { padding-left: 35px; } + + +ul#xsidebar { + width:32px; + float:right; + position:fixed; + top:43%; + right:0; + background:#999999; +} +ul#xsidebar.left { + left:0; +} +ul#xsidebar .mover { + padding: 0px; + text-align: center; +} +ul#xsidebar .mover a { + color: #dddddd; + text-decoration: none; +} + +ul#xsidebar li { + padding-top: 2px; + padding-bottom: 2px; + padding-left: 2px; +} + +/* Refresh comments button */ +ul#xsidebar #refresh-comments-button .new-messages { + text-align: center; +} +ul#xsidebar #refresh-comments-button a.button { + display: block; + height: 29px; + width: 28px; + background:url(/i/comments/bar/refresh.gif) no-repeat left top; +} +ul#xsidebar #refresh-comments-button a.button:hover { + background:url(/i/comments/bar/refresh.gif) no-repeat left bottom; +} +ul#xsidebar #refresh-comments-button a.button.loading { + background:url(/i/comments/bar/refresh-loading.gif) no-repeat left top; +} +ul#xsidebar #refresh-comments-button a.button.loading:hover { + background:url(/i/comments/bar/refresh-loading.gif) no-repeat left top; +} +ul#xsidebar #refresh-comments-button .divider { + border-top: solid 1px #5c5c5c; + border-bottom: solid 1px #dddddd; + width: 28px; + height: 0px; + margin-top: 1px; +} +ul#xsidebar #refresh-comments-button .new-messages { + text-align: center; +} +ul#xsidebar #refresh-comments-button .new-messages a.count { + color: white; + text-decoration: none; + font-weight: normal; + display: block; + padding: 4px 0px; +} +ul#xsidebar #refresh-comments-button .new-messages a.count:hover { + color: #ffff55; +} + +.tags { + padding: .2em 0 .1em 18px; + clear:both; + list-style: none; + background: #fff url(/i/bg-tags2.gif) no-repeat 0 50%; +} + .tags li { + display: inline; + } + .tags li a { + font-size: .83em; /*10px*/ + } + .tags li a{ + color: #666; + } + .tags li a:hover { + color:#A3A3A3; + } + +.entry-info { + font: .75em/2em Arial, sans-serif; /*9px/16px*/ + margin-top: 2.22em; /*20*/ + float:left; + clear: both; + padding: 0 0 5px; + border: 1px solid #e5e5e5; + z-index:20; + position:relative; +} + + /* Rounded corners */ + + /*.corners { + clear:both; + height:5px; + }*/ + + .corner { + width:5px; + height:5px; + overflow:hidden; + position:absolute; + font-size:0; + } + + .tl { + float:left; + left:-1px; + top:-1px; + background:url(/i/icos/entry-info-t-l.gif) no-repeat 0 0; + } + .tr { + float:left; + right:-1px; + top:-1px; + background:url(/i/icos/entry-info-t-r.gif) no-repeat 0 0; + } + .bl { + float:left; + left:-1px; + bottom:-1px; + background:url(/i/icos/entry-info-b-l.gif) no-repeat 0 0; + } + .br { + float:left; + right:-1px; + bottom:-1px; + background:url(/i/icos/entry-info-b-r.gif) no-repeat 0 0; + } + + .entry-info-wrap {clear:both;padding-left:0.56em;} + .entry-info-wrap .novote {margin-left:5px;} + + + + .entry-info .entry-info-wrap div { + padding: 5px .56em 0; + margin-right: 12px; + float: left; + } + .entry-info div.voting { + padding:0 0 0 3px; + margin-left:-0.56em; + } + .entry-info div.voting div {margin-right: 0;} + .entry-info div.voting .mark { + padding:5px .1em 0; + font-size: 1.3333em; /*12/9*/ + font-weight: bold; + color: #a9a9a9; + } + .entry-info div.voting .mark a{ + color:#6DA3BD; + } + .entry-info div.voting .mark a:hover{ + color:#4D7285; + } + + body.guest .entry-info div.voting .mark a{ + color:#999; + cursor:default; + } + .entry-info div.positive .mark { + color: #390; + } + .entry-info div.negative .mark { + color: #c00; + } + .entry-info div.voting a.vote_plus, .entry-info div.voting span.vote_plus, + .entry-info div.voting a.vote_minus, .entry-info div.voting span.vote_minus { + margin:1px 3px 0; + float:left; + width:11px; + height:15px; + font-size:0; + } + .entry-info div.voting div { + height: 12px; + border: none; + } + .entry-info div.voting .vote_plus { + background:url(/i/icos/icons_vote_posts.gif) no-repeat left bottom; + } + .entry-info div.voting .vote_minus { + background:url(/i/icos/icons_vote_posts.gif) no-repeat -11px bottom; + padding-right: 0 !important; + } + body.guest .entry-info div.voting .vote_plus, + .entry-info div.voting.expired .vote_plus, + .entry-info div.voting.mine .vote_plus{ + background:url(/i/icos/icons_vote_posts.gif) no-repeat -22px top; + cursor:default; + } + body.guest .entry-info div.voting .vote_minus, + .entry-info div.voting.expired .vote_minus, + .entry-info div.voting.mine .vote_minus { + background:url(/i/icos/icons_vote_posts.gif) no-repeat -22px bottom; + cursor:default; + } + .entry-info div.voting.mine a, + .entry-info div.voting.no_auth a, + .entry-info div.voting.voted a { + cursor: default; + } + .cannot-vote { + display: none; + } + .entry-info div.voting.mine .cannot-vote, + .entry-info div.voting.no_auth .cannot-vote, + .entry-info div.voting.voted .cannot-vote, + .entry-info div.voting.expired .cannot-vote { + display: block; + } + .entry-info div.voting.mine .can-vote, + .entry-info div.voting.no_auth .can-vote, + .entry-info div.voting.voted .can-vote, + .entry-info div.voting.expired .can-vote { + display: none; + } + .entry-info div.voting.voted_plus a.vote_plus, .entry-info div.voting.voted_plus span.vote_plus { + background:url(/i/icos/icons_vote_posts.gif) no-repeat left top !important; + } + .entry-info div.voting.voted_minus a.vote_minus, .entry-info div.voting.voted_minus span.vote_minus { + background:url(/i/icos/icons_vote_posts.gif) no-repeat -11px top !important; + } + .entry-info div a { + text-decoration: none; + font-weight: 700; + } + + /* Fav star */ + ul.hentry .fav_added a, + ul.hentry .to-favs a, + .entry-info .to-favs a, + .entry-info .fav_added a { + background: url(data:image/gif;base64,R0lGODlhDwAaAOZ/APr7/LnO3bXL2uK7Vvz58NLu9friZ/z69arD0tXl7eHr8uL1+tLv89v09921Uf3phfzjcMra5dvl68nX4ef1+fz589rt9e79/+v7/Ka+zs7h6tny9d3EmqjAz+rQc+ft8d/1+PTjttSycvb///f6+/vx0rzR3vL2+P/////4rub5+/3qjf/zlu/0+fH5/MmdQtLh7PfYWP3oe83a4u/jzdi9ke3Ma8aaSbvN2r/T4PXdfunXs+LGivHWh/jbWuT4+a7K2dy2X8qbO8PW4sTc6fjaX/bUU/fUXOr6+9+5Y9bx89u1V//ukOLz9v/2usfV3uTAZ/z369GmQv/yr9yyRNDr9c3r87+RPP/4pPjgbPHWfOfCW8ygQ/zsl+jMc+jKeN719vLZgPjdXPP//7nL19yzUP/wjdCtbvzmcuXIb///x9Ho8vjkou/WgJy3x/HUafznd/nlh9WmPLXQ3fv48t67XdDj7P3pgPnx4Mrd6fjcWtewW/fw3/z46+LCcwAAACH5BAEAAH8ALAAAAAAPABoAAAf/gH+Cgy0KLYOIiTAuMImOJBEoESSOiAoJIwkKjkMmAZ8UF00CpAI5gjkuIxhIKio/CyAYFAGCJwEJYz9gDRsNFxoCJ4MAESYgSgwMGwETAIkACAwFDQVWGc+JEnMFC3YLVUASjjhrFgg4CBZEZI4dGh0ffx8ZeW6OMzPZfwATT5WCSrApARBRDyc9CgrqY0ONjSgKQ4RJoSVEIgJfBmgcsIJFHAcgy/ghQADKlBRMVjy4IwMOBDNdghD4gydJGywyIBjYycLDHj6DDvCog0aMHh9ZlvCokKiClBg+IMQwIoSOox1Uijzw8OCInB2ORLzRwUXECx1bzghCMeiFlxs0EP7QuJHmiiMOHA4ErVFjUCAAOw==) no-repeat; + } + + .entry-info .to-favs, + .entry-info .fav_added { padding-top: 3px; margin-right: 0 !important; padding-right: 0 !important; } + .entry-info .to-favs a, + .entry-info .fav_added a { + display: block; + margin-top:2px; + width:15px; + height:13px; + font-size:0; + background-position: left top; + } + + .entry-info .to-favs a:hover, + .entry-info .fav_added a { + background-position: left bottom; + } + .entry-info .published{ + margin-left:-2px; + } + .entry-info .published a, .entry-info .mark-as-spam a {color:#369;} + .entry-info .published a { + display: block; + padding-left: 17px; + background: url(/i/bg-published2.gif) no-repeat 0 50%; + } + .entry-info .published a:hover { + background-image: url(/i/bg-published2.gif); + } + + + .entry-info .vcard a { + color:#CF0000; + padding:2px 0 3px; + background:transparent; + } + .entry-info .vcard.full a{ + padding-left:17px; + background: url(/i/bg-user2.gif) no-repeat 0 50%; + } + + .entry-info div.author { + } + .entry-info div.vote-for-user{ + padding: 8px 0px 3px; + } + .entry-info div.vote-for-user a, + .entry-info div.vote-for-user span{ + background:#74C262; + color:#fff; + display:block; + line-height:1em; + font-size:1em; + } + .entry-info div.vote-for-user a{ + width:11px; + height:12px; + background:#74C262 url(/i/bg-user-vote-up.gif) no-repeat 50% 2px; + } + .entry-info div.vote-for-user a:hover{ + background-color:#96D189; + background-position:50% -8px; + } + .entry-info div.vote-for-user span{ + padding:1px + } + .entry-info div.comments {margin-right: 5px;} + .entry-info a { + color:#CF0000; + } + .entry-info a:hover { + color: #F17D7D; + } + .entry-info1 .vcard a:visited{ + color:#F17D7D; + } + .entry-info1 .vcard a:visited:hover{ + color:#CF0000; + } + .entry-info .comments a { + display: block; + margin-top:-1px; + padding: 1px 0 0px 17px; + background: url(/i/bg-comments2.gif) 0 70% no-repeat; + } + .entry-info .comments a .new { + color: #390; + } + + .entry-info .comments a:hover .new { + color: #85C266; + } + .entry-info original-author{ + max-width:100px; + } + .entry-info .original-author a, + .entry-info .downloaded a, + .entry-info .link a + { + padding-left: 8px; + background: url(/i/bg-author-link.gif) no-repeat 0 .08em; + } + + .entry-info .twitter { margin-right: -2px !important; } + .entry-info .twitter a { display: -moz-inline-stack; display: inline-block; background: url(/i/bg-icon-twitter.gif) 0 0 no-repeat; width: 14px; height: 16px; position: relative; top: 1px; } + .entry-info .facebook { opacity: 0.5; } + .entry-info .facebook:hover { opacity: 1; } + .entry-info .facebook a { display: -moz-inline-stack; display: inline-block; background: url(/i/bg-icon-facebook.png) 0 0 no-repeat; width: 14px; height: 16px; position: relative; top: 1px; } + + /** icons for topics **/ + .translation .topic,.podcast .topic,.link .topic { + padding-left:29px; + background: no-repeat 0 6px; + } + .translation .topic{ + background-image: url(/i/translation_icon2.gif); + } + .podcast .topic{ + background-image: url(/i/podcast_icon2.gif); + } + .link .topic{ + background-image: url(/i/link_icon2.gif); + } + + .corporative .blog { + background: #fff no-repeat 0 60% ; + } + + .podcast .topic, + .post .podcast h2.entry-title { +/* background: #fff url(/i/podcast_icon2.gif) 0 60% no-repeat;*/ + } + + .podcast .topic{ + background-image: url(/i/podcast_icon2.gif); + } + .podcast .details { + font: .5em/1.92em Arial,sans-serif; + color:#767676; + white-space:nowrap; + letter-spacing:-1px; + } + /* .personal .topic { + color: #c99; + } */ + + .link .topic, + .post .link h2.entry-title { + color: #749f79; + /*background: #fff url(/i/link_icon2.gif) 0 60% no-repeat;*/ + } + .link .topic:hover, + .post .link h2.entry-title:hover{ + color:#84B18A !important; + } + .link .topic:visited, + .post .link h2.entry-title:visited{ + color:#A3C0A7 !important; + } + .link .topic:visited:hover, + .post .link h2.entry-title:visited:hover{ + color:#84B18A !important; + } + +/*Опросы*/ +.poll {margin-top:2em;} +.poll:first-child {margin-top:0em;} +.poll dl { + float: left; + clear: both; + width: 100%; + border: .5em solid #fff;/*<- just a little trick*/ +} + + .poll dl dt { + float: left; + width: 12%; + font-size: 97.6%; + text-align: right; + margin-left: -20px; + color: #ccc; + } + .poll dl dt strong { + color:#404040; + text-align: right; + } + .poll dl dd { + width: 87%; + float: left; + margin-left: 20px; + } + +.poll .total { + font-size: 97.6%; + clear: both; + margin-top: 1em; + color: #999; +} + +.poll fieldset { + +} + .poll table.answer-container { + margin: 0; + margin-bottom: 10px; + border: none; + } + .poll .answer-container td.input, .poll .answer-container td.label { + border: none; + padding: 5px 0; + } + .poll .answer-container td.input { + width: 25px; + } + .poll .answer-container input { + padding: 5px 0; + } + + /*обёртка для блока с вариантами ответа*/ + .poll-item { + float: left; + clear:both; + width: 100%; + margin-bottom: 20px; + } + + + .poll-item h3 { + margin-bottom: 5px; + color: #666; + } + + .poll-item dl { + margin: 0; + padding:0; + } + .poll-item dd div { + height: 5px; + background: #dadacd; + } + .poll-item dd div.winner { + background: #7fa0b0; + } + +.sphinx-baner{ + line-height:2em; + margin-bottom:33px; +} +/* Внутренний голос */ + +.i-am-your-father-luke { + display: block; + clear:both; + padding:.6em 0; + border: none; + font: normal 40px/110% Arial,sans-serif; + color: #cc9; + letter-spacing: -2px; + } + +/* НЛО прилетело и написало */ + +.ufo-was-here { + margin-left:35px; + margin-bottom: 20px; + font: normal 16px/110% Verdana,sans-serif; + color:#666; + } + + +/*Класс для подзамочных записей*/ + +.locked { + padding-left: 28px; + background: #fff url(/i/lock.gif) no-repeat 5px 65%; +} + +.double_locked { + padding-left: 43px; + background: #fff url(/i/double-lock.gif) no-repeat 5px 60%; +} + + .hentry .edit img, .user-vacancies .edit img, .profile-title .edit img, + .blog-title .edit img { + border: 1px solid #ccc; + margin-bottom: -2px; + } + .profile-title .edit img {margin-bottom: 0; } + + +/*Листалка по страницам*/ + + /* Вперёд-назад */ + +.page-nav { + overflow:hidden; + clear: both; + margin: 1.88em 0 .63em 0; +} + +.company .live .page-nav { + margin: 0; + padding: .83em 1.67em; + width: 80%; +} + +.next-prev { + font:2em/100% Tahoma, sans-serif; + color:#000; +} + .next-prev li { + display: inline; + padding-right: .3em; + } + + + /* Список предыдущих страниц */ + +#nav-pages { + font: 1.2em/100% arial; + padding: 0 1em 2em 0; + margin: 1em 0; + list-style: none; + clear: both; + } + + #nav-pages li { + float: left; + } + + #nav-pages a, #nav-pages em { + margin:0 0.2em 0 0.1em; + padding: .3em .4em; + display: block; + } + #nav-pages a:hover{ + background:#c5dae5; + } + + #nav-pages em { + background:#7A9BAC; + font-weight: 400; + font-style: normal; + color: #fff; + } +.blogs +#main-content +.page-nav, +.company +#main-content +.page-nav, +.profile +#main-content +.page-nav, +.users-list-container{ + padding-left:35px; +} + /*Страница со всеми тегами*/ + +.all-tags-page #main-content { + width: 100%; + margin-bottom:120px; +} + .all-tags-page #main-content h2 { + font: 26px/110% Verdana, sans-serif; + color: #999; + margin-bottom: 10px; + } + #cloud-for-blogs, #cloud-for-comps {width: 49%;} + #cloud-for-blogs { + float: left; + } + #cloud-for-comps { + float: right; + } + + + + /*Страница со всеми тегами*/ + + +/*// Main content*/ + + + + + + + + + +/* Sidebar. Right column */ + + .banner { + margin: 0 auto 20px auto; + width: 240px; + height: 400px; + clear:both; + } + + .context-note {line-height:150%;} + + + + + /* Live section */ + + + +.live { + font-size:1em; /*12px*/ + font-family:tahoma,arial; + float: left; + width: 100%; + margin: 0 0 20px; + background: #f0f0e7 url(data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIFjA8QqVwAOw==) no-repeat 0 0; +} + .live p { + margin-left: 20px; + margin-right: 20px; + } + .live dl { + margin: 0 1.67em .42em 1.67em; + } + + /* Похожие публикации. Переписать эту лажу. Наложение со стилями из forms.css */ + .live .similar-posts div {margin: 0 0 20px 0;} + .profile .live .similar-posts div {margin: 0 20px 20px 20px;} + .profile .live .similar-posts div dl {margin: 0 0 .42em 0;} + .profile .live .similar-posts div dl dt a {padding:0; background-image:none;} + + + .live h3, + #top-flooders h3 { + font-size: 2em; /*28px*/ + font-weight: normal; + line-height: 1.1em; + letter-spacing: -1px; + text-decoration: none; + margin:0 0 .71em .71em; + padding-top: .54em; + color: #999; + background: url(data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIGjANgqRwFADs=) no-repeat top right; + } + + .live dt, + .live dd, + .live dd dl, + .live dl dd dl dt { + margin: 0; + display: inline; + color:#999; + } + .live dl.air-comment{ + padding:2px 0; + margin:0 1.67em 0.42em !important; + } + + .live span.who a, .live .where, .live .topic { + margin-bottom: 1ex; + line-height: 1.35em; + } + .live .who { + padding-left: 17px; + background: url(/i/bg-user2.gif) 1px 50% no-repeat; + display: inline; + } + .live .who a, .live .where { + color:#999; + } + .live .topic { + color:#666; + } + + /* Live' links behaviour */ + + + + .live .total { + color: #C00; + } + .live .all { + position: relative; + top: 0; + right: 0; + margin: 0 .83em .83em 0; + text-align: right; + color:#999; + } + /*Rounded corners*/ + + .live .bg-top-r { + background: url(data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIGjANgqRwFADs=) no-repeat top right; + float: left; + width: 100%; + } + .live .bg-bott-l { + background: url(data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIGhGOAGt0FADs=) no-repeat bottom right; + float: left; + width: 100%; + } + .live .bg-bott-r { + float: left; + width: 100%; + background: url(data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIFDG6YwVEAOw==) no-repeat bottom left; + } + .live .bg-top-r,.profile .live div.bg-top-r{ + margin-left:0 !important; + background: url(data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIGjANgqRwFADs=) no-repeat top right; + } + div.live .bg-top-r, div.live .bg-top-r div{ + margin-bottom:0 !important; + } + /* // Live section */ + + + /* Best Writers */ + .best_writers{} + .best_writers ul{margin: 0 1.67em 1.67em} + .best_writers ul li{overflow:hidden;margin-bottom:10px;} + .best_writers ul li:last-child{margin-bottom:0px;} + .best_writers ul li .avatar{float:left;margin-right:10px;display:block;border:1px solid #999;} + .best_writers ul li .login{float:left;display:block;margin-right:10px;margin-top:3px;} + .best_writers ul li .name{float:left;display:block;font-size:91%;color:#666666;margin-top:5px;} + + + /* Tag cloud */ + +.tag-cloud { + float: left; + width: 90%; + padding: 0px; + margin-top: 10px; + margin-bottom: 10px; + margin-left: 5%; + margin-right: 5%; + text-align: center; +} + +.profile .tag-cloud { + width: 98%; + float:none; + margin:0 auto; + } + + .tag-cloud ul { + white-space: normal; + } + .tag-cloud ul, + .tag-cloud ul li { + display: inline; + } + .tag-cloud a { + font-size: .83em; + color: #369; + text-decoration: none; + line-height:1.4em; + } + .tag-cloud a:hover { + color: #85A3C2; + } + +/* .tag-cloud a {white-space:nowrap;}*/ + .tag-cloud a.w1 { font-size: 80%; } + .tag-cloud a.w2 { font-size: 100%; } + .tag-cloud a.w3 { font-size: 120%; } + .tag-cloud a.w4 { font-size: 140%; } + .tag-cloud a.w5 { font-size: 160%; } + .tag-cloud a.w6 { font-size: 180%; } + .tag-cloud a.w7 { font-size: 200%; } + .tag-cloud a.w8 { font-size: 220%; } + .tag-cloud a.w9 { font-size: 240%; } + .tag-cloud a.w10 { font-size: 260%; } + + + + + /* // Tag cloud */ + + /* Ratings (companies, blogs) */ + + +.rating table { + font-size: 1.33em; /*16px*/ + width: 90%; + clear: both; + margin:0 0 0.71em 1.2em; + border:none; + border-collapse: collapse; +} + .rating table td { + font-family: Arial, sans-serif; + vertical-align: middle; + padding: .3em 0; + } +.rating table th { + font-size: .75em; /*12px*/ + font-weight: normal; + padding-bottom: .5em; + letter-spacing: -1px; + color: #999; +} +.rating table td { + /*padding-left: 5px;*/ +} + .rating .title a { + font: bold .94em/1.13em 'Lucida Grande', Verdana, Sans-Serif; + color:#666; + } + .rating .title a:hover{ + color:#A3A3A3; + } + .rating .karma-value { + font-size:.94em; + font-family:arial; + text-align: center; + color:#6c6; + font-weight:bold; + } + .rating .value { + text-align: center; + } + .rating .value span { + font: normal normal bold .88em Arial, sans-serif; + padding: .1em .5em; + color: #CC66CC; + } + div.companies .value span{ + color:#CC66CC; + } + + .company .rating .title a { + font-size: 1.25em; /*20/16*/ + font-weight: normal; + } + .company .rating .title a.new-feedback { + font-size: 11px; + } + .company .first { + margin-top: 0; + background-image: none; + } + + + + + /* // Ratings (companies, blogs) */ + + + /* Jobs */ + +.jobs { + width: 100%; +} + .jobs dl dt a { + font: 1.17em Arial, sans-serif; /*12/14*/ + color: #663; + + } + .jobs dl dt a:hover{ + color:#A3A350; + } + .jobs dl dt a:visited{ + color:#BEBE84; + } + .jobs dl dt a:visited:hover{ + color:#A3A350; + } + .jobs dl dd { + font: bold 1.33em/1.4em Arial, sans-serif; /*12/16*/ + padding: 0 .2em; + display:inline; + white-space: nowrap; + color: #fff; + background: #99cccc; + } + .live .job_item dt, + .live .job_item dd { + display: inline; + } + + /*// Jobs*/ + + /*Top flooders*/ + + #top-flooders { + font-size: .83em; /*10/16*/ + clear: both; + width: 100%; + margin: 10px 10px 10px 20px; + } + + #top-flooders h3 { + font-size: 280%; + margin-left: 0; + } + + #top-flooders dl, #top-flooders dl dt, #top-flooders dl dd { + margin: 0; + padding: 0; + } + + #top-flooders dl { + margin-bottom: 15px; + } + + #top-flooders dl .flooder { + margin: -2.5em 10px 1em 3em; + } + #top-flooders dl dd dl dt a { + color:#999; + } + #top-flooders dl dd dl dt a:hover{ + color:#333; + } + .flooder dd a { + line-height: 140%; + color:#f60; + } + + /* // Top flooders */ + + + /* Calendar */ + + .calendar-table table { + font-size: .92em; /*11/12*/ + font-family: Arial, Helvetica, sans-serif; + margin: 5px 0; + text-align: center; + } + .calendar-table th { + font-weight: normal; + } + .calendar-table .date { + font-size: 160%; + /*font-weight: bold;*/ + color: #999; + } + .calendar-table .nav th, .calendar-table .nav td { + padding-bottom: 5px; + } + .calendar-table .nav a { + color: #909090; + font-weight: bold + } + /* // Calendar */ + + +/* // Sidebar. Right column*/ + + + + + + + /* Карма. Общие стили для таблиц */ + +.starr { + padding-right: 15px; + background: url(/i/starr.gif) right 70% no-repeat; +} +.rating-dyn { + font-size:.75em; + font-family:arial; + line-height: 110%; + text-align: center; +} +.up { + color:#33cc00; +} +.down { + color:#ff0033; +} + + +/*Прилепляем футер книзу, введя див-обёртку, охватывающую всё кроме подвала*/ + +#nonFooter {position: relative;min-height: 100%;} +* html #nonFooter {height: 100%;} /*для IE*/ +.footerest #wrapper {padding-bottom: 10em;} +.footerest #footer {position: relative;margin-top: -9em;} + + + + + + + + + + + + + +/* Comments */ + + + +/* Форма отправки коммента (или отзыва о компании) */ + +.add-comment { + float: none; + clear: both; + width: 100%; + margin-top: 10px; + padding-bottom:5px; +} + .add-comment h3 { + padding: 0 0 0 20px; + /*margin: 0 0 10px;*/ + margin: 0; + font: 1.67em Verdana, sans-serif; /*20/12*/ + letter-spacing: -1px; + color: #afa56a; + background: url(/i/add_comment.gif) 0 .5em no-repeat; + } + .add-comment > div, + .comment_holder .reply_form + { + position: relative; + } + .add-comment h3 a {color: #afa56a;text-decoration:none; border-bottom: 1px dashed #afa56a;} + .add-comment dl, + dl.comment-help { + float: left; + width: 100%; + font: .92em/100% Arial, sans-serif; /*11/12*/ + /*padding: 10px 0;*/ + } + dl.comment-help{ + padding-top:0; + } + .add-comment dt, + .add-comment dd, + dl.comment-help dt, + dl.comment-help dd { + float: left; + } + .add-comment dt img, + dl.comment-help img { + border: 1px solid #ddd; + } + .add-comment dd, + dl.comment-help dd { + margin: 5px 0 0 10px; + color: #999; + } + .add-comment dd .name, + dl.comment-help dd .name { + font: 1em Tahoma, sans-serif; + font-weight: 700; + color:#666; + } + .add-comment dd span , + dl.comment-help dd span{ + margin-left: 5px; + } + dl.comment-help dd span{ + position: absolute; + right: 0px; + top: -8px; + z-index: 3000; + } + .add-comment form { + clear: both; + width: 100%; + } + .reply_form form { + clear: both; + width: 99%; + margin-bottom: 10px; + } + + .add-comment input, + .reply_form input { + margin: 10px 0; + } + + .add-comment textarea, + .reply_form textarea { + border: 1px solid #c8d2df; + width: 99%; + resize: none; + outline:none; + } + .editor .add-comment textarea, + .editor .reply_form textarea{ + border: 0px solid #c8d2df; + } + .add-comment .post, + .reply_form .post { + margin-left: 7px; + } + .add-comment .js-field-error-msg { color:#ff0000; } + +/* // Форма отправки коммента (или отзыва о компании) */ + + +#comments { + clear: both; + overflow:hidden; +} + .comments-header-mail{ + display:none; + } + .comments-header-visible{ + display:block; + } + #comments h2.comments-header { + margin: 0px 0 20px; + padding-left: 23px; + font: normal 1.67em/105% Verdana, sans-serif; /*20/12*/ + letter-spacing: -1px; + color: #afa56a; + background: #fff url(/i/comments.gif) 0 90% no-repeat; + } + + ul.hentry {clear: both;width: auto;} + ul.hentry ul.author{ + overflow: hidden; + } + ul.hentry ul.author + li{ + vertical-align:baseline !important; + } + ul.hentry ul li{ + line-height:18px; + } + ul.hentry .avatar { + float: left; + width:24px; + height:24px; + list-style: none; + position:relative; + margin-right:10px; + } + + ul.hentry .avatar b{ + position:absolute; + top:0; + left:0; + height:24px; + width:24px; + background:url(/i/bg_avatar_mask_mini.gif) no-repeat 0 0; + } + ul.hentry .avatar img { + display:block; + height:24px; + width:24px; + } + + ul.hentry .fn, + ul.hentry .date, + ul.hentry .bookmark, + ul.hentry .to-favs, + ul.hentry .fav_added, + ul.hentry .up-to-parent, + ul.hentry .down-to-child, + ul.hentry .vote-for-user, + ul.hentry .single-tree{ + font-family:tahoma; + float: left; + color: #666; + padding-top: 5px; + margin-right: 10px; + } + ul.hentry .vote-for-user{ + padding-top: 8px; + margin-right:12px; + margin-left: -7px; + } + ul.hentry .vote-for-user a, + ul.hentry .vote-for-user span{ + background:#74C262; + color:#fff; + + text-decoration:none; + display:block; + line-height:1em; + font-size:1em; + } + ul.hentry .vote-for-user a{ + width:11px; + height:12px; + background:#74C262 url(/i/bg-user-vote-up.gif) no-repeat 50% 2px; + } + ul.hentry .vote-for-user a:hover{ + background-color:#96D189; + background-position:50% -8px; + } + ul.hentry .vote-for-user span{ + padding:1px; + font-size:0.83em; + } + + ul.hentry .up-to-parent a, + ul.hentry .down-to-child a + { + display:block; + float:left; + height:15px; + line-height:15px; + text-decoration: none; + border-bottom: dotted 1px #79B1D4; + } + + ul.hentry .to-favs a, + ul.hentry .fav_added a { + display:block; + margin-top:3px; + width:15px; + height:13px; + font-size:0; + background-position: left top; + } + + ul.hentry .to-favs a:hover, + ul.hentry .fav_added a { + background-position: left bottom; + } + + + ul.hentry .fn a { + font-size: .92em; /*11px/12*/ + font-weight: bold; + color: #666; + } + ul.hentry .fn a:hover{ + color:#333; + } + ul.hentry .fn a:visited{ + + } + ul.hentry .fn a:visited:hover{ + + } + ul.hentry .date, + ul.hentry .bookmark { + + } + ul.hentry .bookmark a, + ul.hentry .date abbr { + border: none; + font-size: .83em; /*10/16*/ + } + ul.hentry .vote { + float: right; + margin-top: .4em; + } + ul.hentry .vote li { + float: left; + font: bold 1.08em/100% Arial, Helvetica, sans-serif; + color: #a9a9a9; + background: none; + } + ul.hentry .vote.positive li { + color: #390; + } + ul.hentry .vote.negative li { + color: #c00; + } + + ul.hentry .vote .buttons, + ul.hentry .vote .buttons .vote-for { + margin-left: 5px; + padding-right: 5px; + } + ul.hentry .vote .buttons a { + margin-top:-11px; + float:left; + width:13px; + height:13px; + font-size:0; + cursor:pointer; + } + ul.hentry .vote .buttons a{ + background:url(/i/icos/icons_vote_comments_4modes.png) no-repeat + } + ul.hentry .vote .buttons a.vote_plus { + margin-left:5px; + background-position: -13px 0; + } + ul.hentry .vote .buttons a.vote_plus:hover{ + background-position:-13px -13px ; + } + ul.hentry .vote .buttons a.vote_minus { + background-position:0 0; + } + ul.hentry .vote .buttons a.vote_minus:hover { + background-position:0 -13px; + } + ul.hentry .vote.expired a.vote_plus, + ul.hentry .vote.mine a.vote_plus, + ul.hentry .vote.no_auth a.vote_plus, + ul.hentry .vote.voted a.vote_plus { + background-position:-13px -39px !important; + cursor:default; + } + ul.hentry .vote.expired a.vote_minus, + ul.hentry .vote.mine a.vote_minus, + ul.hentry .vote.no_auth a.vote_minus, + ul.hentry .vote.voted a.vote_minus { + background-position:0 -39px !important; + cursor:default; + } + ul.hentry .vote.voted_plus a.vote_plus { + background-position:-13px -26px !important; + } + ul.hentry .vote.voted_minus a.vote_minus { + background-position:0 -26px !important; + } + + + ul.hentry .entry-content, + .comment-preview { + font: 1.08em Arial, sans-serif;/*13/12*/ + margin: 0; + padding: 10px 0 10px 0; + clear: both; + + margin-bottom:10px; + } + ul.hentry .entry-content img, + .comment-preview img{ + display: block; + max-width: 100%; + } + + ul.hentry .entry-content .entry-content-only{ + overflow-x:auto; + padding-right:5px; + } + ul.hentry .entry-content .entry-content-only ul, + .comment-preview ul{ + margin: 1px 0 10px 20px; + list-style: inside disc; + } + ul.hentry .entry-content .entry-content-only ol, + .comment-preview ol{ + margin: 1px 0 10px 20px; + list-style: inside decimal; + } + + ul.hentry .bad5 { opacity: 0.2 } + ul.hentry .bad4 { opacity: 0.35 } + ul.hentry .bad3 { opacity: 0.5 } + ul.hentry .bad2 { opacity: 0.65 } + ul.hentry .bad1 { opacity: 0.8 } + + ul.hentry .entry-content-only { + transition: opacity 700ms linear; + -webkit-transition: opacity 700ms linear; + } + ul.hentry .entry-content-only:hover { + opacity: 1; + } + + /* http://bolknote.ru/2008/07/18/~1787 */ + @-moz-document url-prefix(){ + ul.hentry .entry-content .entry-content-only { + line-height:15.1px; + padding:2px 1px; + margin:-2px 0; + } + } + + + + ul.hentry .entry-content .entry-content-only img{ + max-width:100%; + display:block; + } + ul.hentry .entry-content p, .comment-preview p { + margin: 0 0 10px 0; + padding: 0; + } + ul.hentry p.reply, .comment-preview p.reply { + margin: 5px 0 0; + font: .85em Tahoma,Arial, sans-serif;/*11/13*/ + } + ul.hentry .entry-content .bad a { /*Ссылка Показать плохой комментарий*/ + color: #ccc; + } + + /*JS-based show-hide comments*/ + + .show-hide-comments { + font-size: 90%; /*14/12*/ + color: #999; + margin-bottom: 10px; + padding: .1em 0 .2em 10px; + background: #FAEBD7; + } + .show-hide-comments a { + padding: 0 5px 0 0; + background: #FAEBD7; + /*text-decoration: none;*/ + } + .show-hide-comments a:hover { + color: #666; + } + + + /*for JavaScript comments extender*/ + + .extended { + float: left; + padding: 10px 10px 0 10px; + background: #FFFAF0; + } + +/* // Comments */ + + + + + + + + + + + + + + + + + + +/* Популярные комментарии и Прямой эфир + some code from Live section. */ + +/*.live-section #comments { + margin-top: 40px; +} + .live-section #comments h1 { + font: normal 2em/110% Verdana, sans-serif; + letter-spacing: -1px; + color: #69c; + } + .live-section #comments h1 .rss { + margin-left: 5px; + } + .live-section .stat { + margin: 10px 0 30px 0; + } */ + +.popular-comment { + width: 100%; + clear: both; + overflow: hidden; +} + .comment-body { + float:left; + width:80%; + } + .comment-descr { + font: .83em/130% Tahoma, sans-serif; /*10/12*/ + vertical-align: top; + width:15%; + margin-right: 5%; + float:left; + } + .comment-descr dt, + .comment-descr dd { + display: inline; + } + .comment-descr dd { + color:#f00; + } + + + .live .who a, .live .where, + .comment-descr .where { + color:#999; + } + + .live .who a:hover, .live a.where:hover, + .comment-descr .where:hover { + color:#333; + } + + + .live .topic, + .comment-descr .topic, + .side-side a { + color:#666; + } + .live a.topic:hover, + .comment-descr .topic:hover, + .side-side a:hover{ + color:#A3A3A3; + } + .live a.topic:visited, + .comment-descr .topic:visited, + .side-side a:visited { + color:#B5B5B5; + } + .live a.topic:visited:hover, + .comment-descr .topic:visited:hover, + .side-side a:visited:hover { + color:#A3A3A3; + } + .live .total { + color: #C00; + } + .live .all { + position: relative; + top: 0; + right: 0; + margin:20px 25px 10px 0px; + text-align: right; + color:#999; + } + + +/*Блок с мозаикой из юзерпиков с подписями. Офигенная штука. Любите её*/ + +.people-mosaic {margin-top: 10px;} +.people-mosaic ul {float: none;} + .people-mosaic ul li { + float: left; + margin: 10px 10px 0 0; + } + .people-mosaic dl { + display: block; + text-align: center; + } + .people-mosaic dl dd a { + font: 1em Arial, sans-serif; + color: #008cd2; + } + .people-mosaic dl dt a img { + padding: 1px; + background: #ddd; + } + +.img-border { + border: 1px solid #ddd; +} + + + + + + + +.declaration { + font-size:2em; + font-family:arial; + line-height:140%; + color:#404040; +} +.declaration p { + margin-bottom:1em; +} + + +.alert { + color:#f00; +} + +/*Вывод юзеров по странам и городам в разделе "Люди". Код используется также для вывода компаний и блогов в + +результатах поиска.*/ + +.user-flow { + clear:both; + float:left; + margin:30px 0; +} + + +.user-flow-item { + margin: 0 0 40px 0; +} + .user-flow-item dt img { + border: 1px solid #ccc; + } + .user-flow-item .summary { + margin: -50px 0 0 60px; + font-size: 1.08em; /*13/12*/ + } + .search .user-flow-item .summary { + margin-top: -45px; + } + +.who-n-when { + margin: 0 0 10px 0; + color: #aeaeae; +} + .who-n-when a { + letter-spacing: -1px; + color: #aeaeae; + } + .who-n-when .blog-name { + color: #79b1d4; + } + .who-n-when dt { + font: 2em/110% Verdana, sans-serif;/*24/12*/ + } + .who-n-when dd { + margin-top: 5px; + font: .83em/100% Verdana, sans-serif;/*10/12*/ + } + + +/*Выделение особого сообщения (системного, например. Цвет фона как у слова в поиске)*/ + +.special-msg { + background: #fffacd; +} + +/* Сообщение о том, что по тегу ничего не найдено */ + +.no-found {margin-top: 20px; font-size: 150%;padding-left:35px;} +.main-search{ + width:auto !important; + padding-left:35px; + } + .main-search form{ + position:relative; + margin-bottom:30px; + } + + .main-search form .page-menu { + margin-top:35px; + } + .main-search form .page-menu li label{ + + + } + .main-search form .page-menu li input{ + height:0;width:0;border:none;padding:0;position: absolute;background:transparent; + overflow:hidden; + } + .main-search fieldset{ + overflow:hidden; + } + .main-search .inpt-text { + margin: 0 10px 0 0; + padding:0 0 0 6px; + font-size:22px; + float: left; + height:30px; + color: #996; + line-height:30px; + border: 1px solid #996; + } + .main-search input.inpt-text { + width: 78%; + } + .main-search .inpt-btn{ + float:left; + height:32px; + width:32px; + padding:0; + margin:0; + overflow:hidden; + border:none; + background:transparent url(/i/bg-button-enter.png) no-repeat scroll 0 -66px; + } + .main-search .inpt-btn:active{ + background-position:0 -99px; + } + + .main-search { + position:relative; + } + + +#fbPanel { + position: absolute; + background-color: #F0F0E7; + width: 400px; + border: 1px silver solid; + padding: 10px 10px 10px 10px; + z-index: 30; +} +#fbPanel textarea { + width: 100%; + margin-bottom: 20px; +} + +.info-text { + font-size: 16px; + padding-top: 20px; + float: left; +} + +#html_tags_help { + margin-top: 20px; + width:96%; + background-color:#F0F0F0; + color: black; + font-size:0.9em; + padding:15px 20px 20px 10px; + z-index:9999; + position: relative; + float: left; +} +#html_tags_help h4 { + cursor:default; + color: black; + font-size: 18px; + margin-bottom: 10px; + font-weight: bold; +} +#html_tags_help h5 { + cursor:default; + color: black; + font-size: 16px; + font-weight: bold; +} +#html_tags_help dt { + color:#000; + font-weight: bold; +} +#html_tags_help dd { + color:#000; + margin-bottom: 10px; +} +#html_tags_help #html_tags_help_content { + width:290px; + height:465px; + overflow:auto; + background-color:#fff4cd; + padding:10px; +} +#html_tags_help_close { + top:1em; + right:10px; + position: absolute; +} +a#html_tags_help_close, a#html_tags_help_close:hover, a#html_tags_help_close:visited { + color: gray; + font-size: 0.8em; + border-bottom: 1px dashed gray; +} +div#godmode { + left: 0px; + top: 0px; + width: 100%; + height: 100%; + position: fixed; + text-align: center; + vertical-align: middle; + background-image: url(/i/halfvisible.gif); + z-index: 10000; +} +div#godmode span { + color: white; + font-size: 72px; + font-weight: bold; + display: block; + margin-top: 30%; +} + +/* */ + + +/* Advert */ + +.advert-page .fright_holder{ + width:188px; + float:left; + margin: 0px 15px 15px 0px; +} +.advert-page .fright_holder .fright_bg_top{ + background:url(/i/adv/fright_bg_top.gif) no-repeat top; + width:188px; + height:22px; +} +.advert-page .fright_holder .fright_bg_bottom{ + background:url(/i/adv/fright_bg_bottom.gif) no-repeat top; + width:188px; + height:22px; +} +.advert-page .fright_holder .fright_bg_center{ + background:#e5e5e5; +} +.advert-page .fright_holder .fright_bg_center p{ + padding: 0px 20px; + margin: 0px; + color: #9e9e9e; + font-size: 11px!important; +} + +.advert-page .rightcolumn2, .rightcolumn3{ + float: right; + width: 478px; + padding-left: 30px; + padding-bottom: 20px; +} +.advert-page .rightcolumn2 img#screen { + margin-top: 1em; + border: solid #CCC 1px; + margin-left: 2px; +} + + + /* Оформление текста в рекламном разделе */ + +.advert-page h1 { + font: 2.5em/100% Verdana,sans-serif; /*30px/12px*/ + } +.advert-page h2 { + clear:left; + color:#FF6000; + font-family:Arial,sans-serif; + font-size:23px; + font-weight:normal; + padding-top:0.5em; +} + +.advert-page p { + line-height: 1.54em; +} + +#buy_package_form { + opacity: 0.97; + display:none; + left: 50%; + margin-left: -212px; + position:absolute; + z-index: 50; + } + #buy_package_form #form-arrow-down{ + display: none; + border-top:7px solid #EFEFEF; + border-left:7px solid transparent; + border-right:7px solid transparent; + width:1px; + margin:0 0 0 20px; + + } + #buy_package_form.package-form-too-much-right .ex_middle{ + margin-left: -355px; + } + #buy_package_form.package-form-too-much-right #form-arrow-down{ + margin-left: 379px; + } +#buy_package_form .habrablock{ + + margin-bottom: 0; + } +#buy_package_form .ex_middle{ + width: 425px; + } +#buy_package_form .js-close-buy-package{ + position: absolute; + cursor: pointer; + top: 10px; + right: 14px; + font-size: 1.5em; + } + + +.advert-page .habrablock { + background:#EFEFEF none repeat scroll 0 50%; + font-size:13px; + margin-bottom:20px; + vertical-align: middle; +} +.advert-page ul.nice { + list-style-image:none; + list-style-position:outside; + list-style-type:none; + margin:0 0 0 4ex; + padding:0; +} +.advert-page ul.nice li { + margin-bottom:1ex; + padding-left:3ex; + background:transparent url(/i/adv/list-style.gif) no-repeat scroll 0 5px; + font-size:12px; + line-height: 1.54em; +} +.price-table input{ + background:#8BBF76; + color:#FFFFFF; + font-size:1.15em; +} +.advert-logos{ + text-align:center; + overflow:hidden; + margin:0 auto; + width:610px; +} +.advert-logos +.adv-logo{ + float:left; + overflow: hidden; + margin-right: 16px; +} +.advert-text{ + font-size:1.2em; + margin:2em 0; + } + .advert-corps{ + text-align:center; + } +.features-trial{ + text-align:center; + padding:7px 18px; + font-size:25px; + } + .features-trial span{ + color:#5A5A5A; + background:#E7FAEC; + padding:7px 18px; + } +.advert-page p.intro { + font-size:17px; +} +.advert-page .info_line { + padding:10px 20px; +} +.advert-page .info_line .captcha-holder{overflow:hidden;} +.advert-page .info_line .captcha-holder img{float:left;margin-right:10px;} +.advert-page .info_line .captcha-holder a{float:left;margin-top:25px;} +.advert-page .info_line .captcha-input{padding-left:120px;padding-top:5px;} + +.advert-page .first_line { + padding-top:28px; +} +.advert-page .label { + float:left; + width:120px; +} +.advert-page .type_ch { + height:50px; +} +.advert-page .button_holder { + padding:10px 22px; +} +.advert-page img.stat { + float: left; + margin-right: 20px; +} +.ponchiki #main-content { + width: 95%; +} +.ponchiki .checkbox, .ponchiki .radio { + border:0 none !important; + bottom:-2px; + padding-right:12px; + position:relative; + width:15px !important; +} +.advert-page .input input, .advert-page .input textarea { + border:1px solid #DDDDDD; + padding:2px 4px; + width:250px; +} +.advert-page .tm-form dl { + margin-bottom: 0px !important; +} +#advert-form { + vertical-align: middle; +} + #advert-form fieldset {margin:0;padding:0;} + + +.advert-page .result { + display: block; + font-size: 17px; + margin-left: 30px; + margin-right: 30px; + /* margin-top: 40%; */ + text-align: center; +} + + +.price-table { + width:100%; +} + .price-table tr.even {background: #eaf1f5;} + .price-table th { + padding-bottom: .5em; + font: normal 150%/110% Arial,sans-serif; + text-align:left; + border-bottom: 1px solid #000; + } + .price-table td { + font: 120%/150% Arial,sans-serif; + vertical-align: middle; + padding: .6em 4px; + } + + .price-table td em { + margin-left: -.05em; + font-size:300%; + color:#69c; + } + .price-table td span { + color:#999; + } + + + +/* Stat */ + +#flashcontent1, #flashcontent2, #flashcontent3, #flashcontent4, #flashcontent5, #flashcontent6 { + float: left; +} + +#help-shortcuts { + margin-left: 20px; +} +#help-shortcuts dt { + font-weight: bold; +} +#help-shortcuts dd { + margin-left: 20px; + margin-bottom: 10px; +} + + +/* Help */ + + /* Оформление текста в разделе "Помощь" */ + +.help h1, .company h1, .live-block-page h1 { + font: 2.5em/100% Verdana,sans-serif; /*30px/12px*/ + } +.help h2 { + clear:left; + color:#FF6000; + font-family:Arial,sans-serif; + font-size:23px; + font-weight:normal; + padding-top:0.5em; +} + +.help p { + line-height: 1.54em; +} +.help ol{margin-top:1em;} +.help li { + line-height: 1.54em; + margin-bottom:0.5em; +} + +.help #main-content ul { + line-height: 1.54em; +} + + + + + + + + + + + + + + + + + + + + + + + +/* Habralenta */ + +.habralenta-settings .my-blogs { + margin: auto 20px 1em 20px; +} +.habralenta-settings .btn-holder { + padding: 20px; +} +.habralenta-settings .btn {margin: auto 20px 10px 20px;} + +#invite-page { + margin: 40px; +} +#invite-count-label { + margin-bottom: 20px; + display: block; +} +#add-invite { + float: left; + width: 300px; +} +#add-invite .field { + width: 270px; +} +#add-invite dl.required dt { + font-weight: bold; +} +#add-invite .btn-bar { + text-align: right; + padding-right: 30px; +} +#invite-list { + float: left; + width: 320px; +} +#invite-list li { + margin-bottom: 10px; +} +input.money { + background:#E3A2A0 none repeat scroll 0 0; + color:#FFFFFF; + font-size:32px; + letter-spacing:-2px; + width: 130px; +} +span.money { + color:#E3A2A0; + font-size:32px; + letter-spacing:-2px; +} +.event-subscribe-form .unsubscribe { + text-decoration: none; + border-bottom: dashed 1px #79B1D4; +} +.event-subscribe-form .unsubscribe.disabled { + text-decoration: none; + border-bottom: dashed 1px silver; + color: silver; +} +.event-subscribe-form fieldset { + height: 30px; +} + + +.event { + margin-left: 35px; +} + .event .nonfriends { + margin-top: 20px; + } + .event h3.participants { + margin: 0; + font: 1.67em Verdana, sans-serif; /*20/12*/ + letter-spacing: -1px; + color: #afa56a; + } + +.salary-type label { + display: inline; +} +.privacy-persnal-info{ + display:none; + color:red; +} +.privacy-persnal +.privacy-persnal-info{ + display:block; + } +.privacy-persnal +span{ + display:none; +} + +.privacy-offtop { + color: gray; +} +.field-privacy .info { + display: none; +} +.privacy-offtop .info { + display: block !important; + color: red; +} +.privacy-offtop #js-field_privacy_text, .privacy-offtop input { + display: none; +} + +@media print { + + body { + background: white; + color:#000; + font-size: 12pt; + } + ul.hentry .entry-content{ + padding-bottom:30px; + } + .blog-title,.yandex-direct,.yandex{ + display:none; + } + a:link, a:visited { + color: #000; + background: transparent; + font-weight: bold; + text-decoration: underline; + } + .hentry .content a:link:after, .hentry .content a:visited:after { + content: " (" attr(href) ") "; + font-size: 90%; + } + + + #header-wrapper,.header, #sidebar, #footer, + .page-navigation, .sub-nav, .page-nav, + .buttons, p.reply, .add-comment, + li.bookmark, li.to-favs, li.down-to-child,.up-to-parent + {display:none;} + + + #wrapper, #main-content { + width: auto; + border: 0; + margin: 0 2%; + padding: 0; + float: none !important; + } + + + div.hentry { + clear:both; + float:none; + margin:0 0 40px; + width:auto; + } +} +.habrauserava{ + height:48px; + width:48px; + position:relative; + } + .habrauserava img{ + width:48px; + height:48px; + } + .habrauserava + b{ + position:absolute; + top:0; + left:0; + height:48px; + width:48px; + background:url(/i/bg_avatar_mask.gif) no-repeat 0 0; + } +.yandex-direct{ + margin:10px 0;clear:left;margin-left:35px +} +.oauth{ + padding-left:35px; + margin:0 0 100px; +} +.oauth-app-block{ + margin:30px 0; +} + +.oauth-app-block dl{ + overflow:hidden; + margin:0 0 3px; +} +.oauth-app-block dl dt{ + font-weight:700; + float:left; + width:164px; +} +.oauth-simple-auth{ + padding-top:50px; + float:left; + width:600px; + } + .oauth-simple-auth h1{ + font-size:2.17em; + } + .oauth-simple-auth form, + .oauth-simple-auth .result{ + padding-top:10px; + } + .oauth-simple-auth form .error{ + color:red; + } + .oauth-simple-auth form p {overflow:hidden;padding:2px 0;} + .oauth-simple-auth form p label{ + float:left; + width:160px; + font-weight:700; + } + .oauth-simple-auth .oauth-finish{ + margin-top:1.5em; + font-size:1.5em; + } +#comments > ul > li > .msg-meta .single-tree {display:none;} +ul li:nth-child(1) > .msg-meta .single-tree{display:none;} +.single-threading .comment_holder{display:none;} + +li.single-tree-node-last > .msg-meta{background:#eef3f3;} + +.comment_holder li.single-tree-node, +.comment_holder li.single-tree-node-last{display:block;} + li.single-tree-node-last li {display:block;} +.single-threading > .msg-meta .js-single-tree, +.single-threading li.single-tree-node > .msg-meta .js-single-tree, +.single-threading li.single-tree-node-last > .msg-meta .js-single-tree {display:none;} + +li > .msg-meta .js-multiplay-tree {display:none;} + +.single-threading li.single-tree-node-last > .msg-meta .js-multiplay-tree{display:block;} + +@media only screen and (max-device-width: 480px) and (-webkit-min-device-pixel-ratio:0) { + #comments .hentry li .msg-meta .folding-dot-holder{ + display:none !important; + } +} +img.help-tip{ + position:relative; + top:3px; +} +#help-tip-text.help-tips-too-much-left{ + margin-left:-15px; + } + #help-tip-text.help-tips-too-much-left + #help-tip-text-arrow{ + margin-left:15px; + } +#help-tip-text{ + position:absolute; + width:375px; + margin-left:-187px; + margin-top:-8px; + display:none; + color:#fff; + z-index:500; + opacity:0.95; + } + #help-tip-text-content{ + position:absolute; + bottom:7px; + padding:15px; + background:#46688b; + -moz-border-radius-topleft:4px; + -webkit-border-top-left-radius:4px; + -moz-border-radius-topright:4px; + -webkit-border-top-right-radius:4px; + -moz-border-radius-bottomleft:4px; + -webkit-border-bottom-left-radius:4px; + -moz-border-radius-bottomright:4px; + -webkit-border-bottom-right-radius:4px; + border-radius:4px; + } + #help-tip-text-arrow{ + border-top:7px solid #46688b; + border-left:7px solid transparent; + border-right:7px solid transparent; + width:1px; + margin:0 auto; + } +.search-ads{ + margin-top:50px +} +.search-ads #yandex_direct{padding:10px;} +.company_admin #sidebar form .wide-wide-inputs{ + border-bottom:1px solid #aaa; + padding-bottom:9px; + margin:8px 0 12px; +} +.company_admin #sidebar form p{ + margin-top:1em; + margin-bottom:1em; +} +.company #sidebar{ + margin-top:46px; +} +.side-side { + padding: 0 20px 20px; + } +.side-side h3{ + margin:0 -20px 0.71em 0; + } + .side-side li{ + + margin:9px 0; + } + .side-side li small{ + color:#999; + font-size:0.9em; + } +.wide-wide-inputs dl,.company_admin #sidebar form .wide-wide-inputs dl{ + margin:0; +} + + .wide-wide-inputs dt,.company_admin #sidebar form .wide-wide-inputs dt{ + font-size:0.9em; + margin:0; + } + .wide-wide-inputs dd{ + padding-right:5px; + } + .wide-wide-inputs dd input{ + width:100%; + } +.js-do-more-inputs{ + font-size:0.9em; +} +#js-field-holder-with-help{ + overflow:hidden; +} +.ponchiki #wrapper{ + overflow: hidden; + } +#john_black{ + display: none; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: #000; + opacity: 0.5; + z-index: 40; + } + /* Сайдбар с кармаграфом и т.п. */ + + +.karma-n-statistic p { + margin: 15px 0; + font-size:100%; + color:#666; + } +.karma-n-statistic h3 { + margin: 15px 0; + font: normal 1.5em/120% Verdana, sans-serif;/*18/12*/ + letter-spacing: -1px; + color: #999; + } +.karma-n-statistic h2{ + color: #999; + font-size:233% ; + margin:0 0 20px; + } +.karma-n-statistic .stats { + margin: 10px 0 35px; + color:#666; + overflow:hidden; + font-size:116%; + + } +.karma-n-statistic +.karma-stat{ + margin-bottom:50px; + } +.karma-n-statistic .stats dt{ + float:left; + clear:left; + margin-right:4px; + } +.karma-n-statistic .stats dd{ + float:left; + } +.karma-n-statistic .stats dd.global{ + margin-bottom:30px; +} +.karma-n-statistic { + font-family: Verdana, sans-serif; + + overflow: hidden; +} +.karma-n-statistic +.tag-cloud{ + text-align:left; + margin-left:0; + float:none; + } +.search-results-title{ + padding-left: 35px; + margin-bottom:16px; + + } + + +#people-tags{ + float: left; + margin-top: 38px; + width: 140px; + } + #people-tags li{ + padding-bottom: 17px; + transition: opacity 200ms linear; + -webkit-transition: opacity 200ms linear; + } + #people-tags a{ + display: block; + height: 46px; + width: 116px; + font: 13px/13px Helvetica, Arial, sans-serif; + text-decoration: none; + position: relative; + overflow: hidden; + background: no-repeat 0 50%; + } + #people-tags a span{ + visibility: hidden; + } +#people-tags:hover li{ + opacity: 0.6; +} +#people-tags:hover li.active, #people-tags:hover li:hover{ + opacity: 1; +} +#table-people-rating #people-tags li { + width: 140px; + } + #table-people-rating #people-tags li a{ + height: 46px; + width: 140px; + background-position: 50% 50%; + background-color: #ebf0f5; + border-top-left-radius: 23px; + border-bottom-left-radius: 23px; + -webkit-border-top-left-radius: 23px; + -webkit-border-bottom-left-radius: 23px; + -moz-border-radius-topleft: 23px; + -moz-border-radius-bottomleft: 23px; + } + #table-people-rating #people-tags li.active a{ + background-color: #92b3d2; + } + #table-people-rating #people-tags a.podcaster { + background-position: 34px 50%; + } + #table-people-rating #people-tags li a.se_gamer { + margin-top: 20px; + } +#people-tags a.author { background-image: url(/i/tags/author.png); } +#people-tags a.star { background-image: url(/i/tags/star.png); } +#people-tags a.legend { background-image: url(/i/tags/legend.png); } +#people-tags a.oldresident{ background-image: url(/i/tags/oldresident.png); } +#people-tags a.commentator{ background-image: url(/i/tags/commentator.png); } +#people-tags a.podcaster { background-image: url(/i/tags/podcaster.png); } +#people-tags a.translator { background-image: url(/i/tags/translator.png); } +#people-tags a.statistic { background-image: url(/i/tags/statistic.png); } +#people-tags a.humorist { background-image: url(/i/tags/humorist.png); } +#people-tags a.habred { background-image: url(/i/tags/habred.png); } +#people-tags a.unhabred { background-image: url(/i/tags/unhabred.png); } +#people-tags a.troll { background-image: url(/i/tags/troll.png); } +#people-tags a.evangelist { background-image: url(/i/tags/evangelist.png); } +#people-tags a.reader { background-image: url(/i/tags/reader.png); } + +#people-tags a.se_gamer, #people-tags a.se_supergamer, #people-tags a.se_turbogamer { + background-position: 52% 5px !important; + position: relative; +} +#people-tags a.se_gamer { + background-position: 56% 5px !important; + position: relative; +} +#people-tags a.se_gamer span, #people-tags a.se_supergamer span, #people-tags a.se_turbogamer span { + visibility: visible; + position: absolute; + display: block; + text-align: center; + width: 100%; + bottom: 5px; + color: #284fa2; +} +#people-tags a.se_gamer { background-image: url(/i/special/se/tags/gamer.png); } +#people-tags a.se_supergamer { background-image: url(/i/special/se/tags/supergamer.png); } +#people-tags a.se_turbogamer { background-image: url(/i/special/se/tags/turbogamer.png); } + +.userinfo #people-tags{ + overflow: hidden; + float: none; + width: auto; + margin-top: 0; + padding-top: 6px; + } + .userinfo #people-tags li{ + float: left; + margin-bottom: 10px; + } + .userinfo #people-tags li a{ + background-position: 50% 100%; + } +.habr-button{ + font: 19px Arial, sans-serif; + color: #fff; + text-decoration:none; + border:2px outset #F0F0F0; + background: #cc9; + padding:0 6px; + display:inline-block; +} +.habr-button:active{ + padding-left:8px; + padding-right:4px; + border-style:inset; +} +a.habr-button:hover{ + background-color:#6DA3BD; + color:#fff; +} +.side-button{ + margin-bottom: 20px; +} +.big-nice-text{ + + color:#E3A2A0; + font-size:32px; + letter-spacing:-2px; + } + .nice-time{ + text-transform: lowercase; + } + .big-nice-text + input{ + position: relative; + top: -6px; + } + +#karma-reset-games{ + padding-left: 35px; + +} +.karma-reseting .karma-reset-form-reseting { + display: block; +} +.karma-noreseting .karma-reset-form-noreseting{ + display: block; +} +.karma-reset-game{ + display: none; +} +.karma-reset-form{ + + } +.karma-reset-button{ + margin-top: 28px; + text-align: center; + font-size:32px; +} +.karma-reset-button input{ + + font-size: 32px; +} + +input.disabled{ + background-color: #ddd; + color: #eee; + border-style: solid ; +} +.tab-sun{ + margin-top:-3px; +} +.sandbox .page-nav{ + + padding-left: 35px; +} +#js-topic-version-prototype{ + display: none; +} +.topic-preview-content{ + margin-left: -35px; +} +.topic-preview-content .hentry{ + margin-bottom: 0; +} +.topic-preview{ +margin-top: 5px; + padding: 15px; + border: 5px solid #D6D6D6; +} +.post-title{ + font: 2.17em/100% Verdana, sans-serif; + letter-spacing: -1px; + padding:11px 0 22px; + margin: -11px 0 0; + width: 100%; + position: relative; + z-index: 15; + height: 26px; + + } + .post-title .post-title-header{ + color: #7fb084; + float: left; + font-size: 100%; + + margin: 0 ; + } + .post-title .post-title-list{ + position: relative; + float: left; + } + + .post-title .post-title-list ul{ + border: 1px solid #fff; + position: absolute; + top: -11px; + left: 0; + background: #fff; + list-style: none; + margin-left:4px; + padding: 10px 10px 10px 8px; + } + .post-title .post-title-list li{ + display: none; + margin-bottom: 12px; + } + .post-title .post-title-list ul li.current{ + display: block; + /*float: left;*/ + } + .post-title .post-title-list ul a{ + text-decoration: none; + font-size: 100%; + } + .post-title .can-select ul{ + border-color: #ddd; + + + } + .post-title .can-select ul li{ + display: block; + } +#js-topic-form-holder{ + overflow: hidden; +} + + + + +/*Плашка с кнопками визуального редактирования текста*/ +.editor {} + .editor .panel { + background: #eaecea; + float: left; + width: 100%; + padding: 2px 0; + } + .editor .panel a { + display: block; + width: 20px; + height: 20px; + overflow:hidden; + float: left; + margin-left:2px; + text-decoration:none; + } + .editor .panel a:hover { + background: #fff; + } + .editor .panel a.txt { + width:auto; + padding:0 2px; + } + .editor .panel a span { + color:#4d4d4d; + position:relative; + top:3px; + font-size:12px; + font-weight:bold; + letter-spacing:-1px; + } + .editor .panel select { + float: left; + margin-left:2px; + } + + .editor .text-holder { + clear:both; + border-color:#d4d0c8; + border-style:inset; + border-width:2px 1px 1px 2px; + padding:2px 2px 2px 3px; + } + .editor .text-holder textarea { + overflow:auto; + border:none; + } + +.emply_lenta{margin-left:35px;} + + + + + +/* Nokia special */ +#special_nokia{margin-left:35px;margin-bottom:20px;clear:both;background: #f0f0e7;padding:20px;position:relative;-webkit-border-radius: 10px;-moz-border-radius: 10px;border-radius: 10px;} +#special_nokia .logo{display:block;width:105px;height:66px;position:absolute;left:20px;top:20px;background: url(/i/special/nokia/after_post_html_block/logo.png) no-repeat; } +#special_nokia .ovi{display:block;width:68px;height:67px;position:absolute;right:20px;top:20px;background: url(/i/special/nokia/after_post_html_block/ovi.png) no-repeat; } +#special_nokia .text{margin-left:150px;margin-right:100px;font-size:10px;font-fimily:Arial;color:#555555;} +#special_nokia .text span{font-size:18px;} +#special_nokia .text .links{overflow:hidden;margin-top:15px;font-size:10px;} + + + + + +/* common */ +.hidden { display:none !important; } +del.robots-noindex{display:none;} + +.has-two-inputs{ + width:103%; +} +dd.has-two-inputs{ + width:102%; +} +#comment_form input.loading { + background: url(/i/form/loader_button.gif) repeat; +} +#comment_form.loading input.post { + background: url(/i/form/loader_button.gif) repeat; +} + +span.two-inputs{ + float:left; + margin-right:3%; +} +/* Forms */ +input.wide, select.wide, textarea.wide { + width:99%; +} +.input-row{ + overflow:hidden; +} +.two-inputs{width:47%;margin-right:1%;} +.wide-me{ + overflow:hidden; + } + .wide-me input.two-inputs{ + width:98%; + } +.right-stick{ + float:right; + margin-left:10px; + } +input.wide-half, select.wide-half, textarea.wide-half { + width:50%; +} + +input.checkbox {vertical-align:middle;} +input.textfield {} + +input.large { + font-size:3em; +} + + + +textarea.large { + height:40em; +} +textarea.medium { + height:7em; +} +textarea.small { + height:3em; +} + +select.with-title option { + background:#eaecea; +} +select.with-title option.title { + background:#fff; +} + +input.btn-big { + font-size:2em; +} + +.achtung-minen { + color: #f00; + display:none; +} +.js-marked-error .achtung-minen { + display:block; +} + + + +form input.btn { + background:#d4d0c8 url(/i/form/loader_field.gif) no-repeat -1000px 0; + outline:none; +} +form.save-loading input.btn-save, +form.blogSave-loading input.btn-save { + background:#d4d0c8 url(/i/form/loader_field.gif) repeat 0 0; +} +form.preview-loading input.btn-preview { + background:#d4d0c8 url(/i/form/loader_field.gif) repeat 0 0; +} +form.draft-loading input.btn-draft { + background:#d4d0c8 url(/i/form/loader_field.gif) repeat 0 0; +} + +form .loading input.textfield { + background:url(/i/form/loader_field.gif) repeat 0 0; +} + + +.topic-autosave { + padding:5px; +} +form.autosave-loading .topic-autosave { + background:url(/i/form/loader_field.gif) repeat 0 0; +} + +.clear { + clear:both; +} + +.sublabel { + margin: 2px 0 3px; + font-size: 11px; + color: #999; + overflow:hidden; +} + +.block { + margin-bottom:2em; +} +.block-semi { + margin-bottom:1em; +} +.block-super { + margin-bottom:4em; +} + + +.block-tr td { + padding-bottom:2em; +} +.block-semi-tr td { + padding-bottom:1em; +} +.block-super-tr td { + padding-bottom:4em; +} + + + + +.system { + text-decoration:none; +} +.system em { + font-style:normal; + line-height:140%; + border-bottom:1px dashed #79B1D4; +} +h2.forms .system { + font-size:0.6em; +} + +fieldset legend { + padding:5px 5px 1.5em 5px; + margin-left:-5px; +} + + +.topic-preview { + display:none; +} + +.topic-preview .habracut { + padding-bottom:0.8em; + margin-bottom:0.8em; + border-bottom:1px dotted #999; + position:relative; +} +.topic-preview .habracut .scissors { + position:absolute; + left:30px; + bottom:-0.8em; + padding:0 3px; + color:#999; + background:#fff; + font-weight:bold; + letter-spacing:-1px; +} + + + + +/* Rounded corners blocks */ + +.round-corner-box { + margin-bottom: 20px; + font-size:1em; /*12px*/ + font-family:tahoma,arial; + background: #f0f0e7 url(/i/bg-corner-top-left.gif) no-repeat 0 0; +} + .round-corner-box .bg-bott-r { + width: 100%; + background: url(/i/bg-corner-bottom-left.gif) no-repeat bottom left; + } + .round-corner-box .bg-bott-l { + background: url(/i/bg-corner-bottom-right.gif) no-repeat bottom right; + width: 100%; + } + .round-corner-box .bg-top-r { + background: url(/i/bg-corner-top-right.gif) no-repeat top right; + padding: 10px 20px; + } + + /* Header inside */ + + .round-corner-box .bg-top-r h3 { + display: block; + margin:0 0 20px 0; + font-size: 2.33em; /*28px*/ + font-weight: normal; + line-height: 1.1em; + letter-spacing: -1px; + text-decoration: none; + color: #999; + } + + .round-corner-box .all { + text-align: right; + color:#999; + } + + + /* Blocks inside rounded corners */ + + + /* Live comments */ + + .live-wrapper {margin-bottom: 10px;} + + .live-comment {margin: 0 0 5px 0;} + .live-comment dt, + .live-comment dd, + .live-comment dd dl, + .live-comment dl dd dl dt { + margin: 0; + display: inline; + color:#999; + } + + .live-comment span.who a, .live-comment .where, .live-comment .topic { + margin-bottom: 1ex; + line-height: 1.35em; + } + .live-comment .who { + padding-left: 16px; + background: url(/i/bg-user.gif) 0 50% no-repeat; + display: inline; + } + .live-comment .who a {color:#999;} + + + + + .live-comment .where{color:#666 ;} + + .live-comment .topic {color:#666;} + + /* Live' links behaviour */ + + .live-comment .who a:hover, .live-comment a.where:hover { + text-decoration: none; + background: #f66; + color:white; + } + .live-comment a.topic:hover { + text-decoration: none; + background: #6c6; + color:#fff; + } + + .live-comment .total {color: #C00;} + + + /* Live popular companies */ + + .rating .title .new-feedback { + padding: 0 0 0 2px; + font: 11px/100% normal Arial,sans-serif; + color: #fff; + background: #6cf; + text-decoration: none; + } + + + + + + + + + + + + + /* Recommendations (habraprofile) */ + + .round-corner-box .recommendation { + margin: auto 0; + padding: 10px 20px; + font: 1em/150% Arial, sans-serif; /*12/12*/ + } + .round-corner-box .recommendationl dt a { + padding-left: 16px; + color: #666; + background: url(/i/bg-blogs.gif) 0 80% no-repeat; + } + .round-corner-box .recommendation dd { + color: #000; + } + + /* // Recommendations (habraprofile) */ + + + + + /* Blocks inside rounded corners */ + + + + + + + + + + + + +/* // Rounded corners */ + + +/* Company card */ + form#company-card { + margin-left: 20px; + } + + form#company-card h1 { + margin-bottom:1em; + width:100%; + clear:both; + font-size:2.167em; + color: #767676; + font-weight: normal; + margin-left: -20px; + } + form#company-card dl { + margin-bottom:1em; + width:100%; + clear:both; + } + form#company-card dl input, + form#company-card dl select, + form#company-card dl label { + width:100%; + display:block; + } + form#company-card dl label { margin-bottom:0.3em; } + + form#company-card dl#tariff-holder { + margin:0 5% 2em 0; + width:50%; + float:left; + clear:none; + } + form#company-card dl#actuality-holder { + width:15.7em; + float:right; + clear:none; + line-height:1.5em; + } + form#company-card dl#actuality-holder dt { float:left; } + + form#company-card dl#actuality-holder dd { float:right; } + + form#company-card dl#actuality-holder * { vertical-align:middle; } + + form#company-card dl#actuality-holder label { display:inline; } + + form#company-card dl#actuality-holder input { + width:6.5em; + display:inline; + } + + form#company-card dl#rss-holder { margin-top:3em; } + + form#company-card dl dd.error { color:#cc0000; } + + form#company-card input.submit { float:right; margin-right: -6px; } + +.zebra {text-decoration:none; border-bottom: 1px dashed #79B1D4;} /* Подчёркивание JavaScript-ссылок */ + +#getInviteYounger_text { color: #519500; } + + +.sort-order a { + margin-left:3px; + text-decoration:none;border-bottom:#77a3bb 1px dashed; + } + a.sort-order_lnk_Sel { + text-decoration:none; padding:0px 4px 2px 4px; + background:#e8e9eb; border-color:#e8e9eb; color:#000; + } +.sort-order_Srch { + margin:0 35px; + } +.answer-sort { + margin-top:50px; + } + .answer-sort .comments-header { + display:inline; + } + .answer-sort .sort-order { + padding-left:5px; + } + + + +/* futu_alert */ + +/* +.futu_alerts_holder { + position:fixed; + _position:absolute; + + top:0; + _top: expression( + eval(document.documentElement.scrollTop) + "px" + ); + left:50%; + width:450px; + z-index:9999; + margin-left:-225px; +} +*/ +.futu_alert_outer { + position: fixed; + top: 0; left: 0; + width: 100%; + + z-index:9999; +} +.futu_alert_outer .frame { + position:relative; + z-index:9999; +} +.futu_alerts_holder { + position:absolute; + left:69%; top:0; + width:30%; + z-index:9999; +} + +.futu_alerts_holder .futu_alert { + position:absolute; + top:-1000px; + background-color:#FFEBA0; + font:1em Tahoma, sans-serif; + border:1px solid #FFFFFF; + margin-left:60px; +} +.futu_alerts_holder .futu_alert .futu_alert_header { + font-size:1em; + margin:10px 20px 0; +} +.futu_alerts_holder .futu_alert .futu_alert_text { + font-size:0.8em; + margin:10px 20px; +} +.futu_alerts_holder .futu_alert .futu_alert_close_button { + position:absolute; + padding:10px; + top:0; + right:0; + outline:none; +} +.futu_alerts_holder .message { + color:#FFF; + background-color:#6690C9; +} +.futu_alerts_holder .error { + color:#FFF; + background-color:#ed6060; +} +.futu_alerts_holder .save { + color:#FFF; + background-color:#73a168; +} + + + + + + +/* form */ +form.tm-form dl { + margin-bottom: 20px; +} + +form.tm-form dl dd.desc { + color: gray; +} + +form.tm-form dl.required dt label { + font-weight: bold; +} + +form.tm-form dl dd.error { + color: red; + display: none; +} + +form.tm-form dl.invalid dd.error { + display: block; +} + +form.tm-form .unknown-error { + margin-top: 20px; + margin-bottom: 20px; + color: red; +} + +form.tm-form .error-list { + display: none; +} + +form.tm-form input.loading, +input.loading, +button.loading { + background: url(/i/form/loader_button.gif) repeat; +} + +form.tm-form label { + display: inline; +} +form.tm-form dl dd.categories{ + overflow:hidden; + margin:7px 0; +} +form.tm-form dl dd.categories label{ + float:left; + width:49%; +} + + + +/* xl */ +.xl-little div.hentry { margin-bottom: 10px; } + +.xl-panel { padding: 3px 7px; background: #f7f7f2; margin-bottom: 2em; clear: both; overflow: hidden; margin-left:35px;} + .xl-panel ul { list-style: none; float: left; width: 72px; height: 20px; padding: 0; margin: 0; background: transparent url(/i/xl.gif) -112px 0 no-repeat; cursor: pointer; } + .xl-panel ul li { margin: 0; padding: 0; width: 24px; height: 20px; float: left; } + .xl-panel li.little:hover { background: transparent url(/i/xl.gif) -184px 0 no-repeat; } + .xl-panel li.xl_view_radio_little_active { background: transparent url(/i/xl.gif) -256px 0 no-repeat !important; } + .xl-panel li.medium:hover { background: transparent url(/i/xl.gif) -208px 0 no-repeat; } + .xl-panel li.xl_view_radio_medium_active { background: transparent url(/i/xl.gif) -280px 0 no-repeat !important; } + .xl-panel li.full:hover { background: transparent url(/i/xl.gif) -232px 0 no-repeat; } + .xl-panel li.xl_view_radio_full_active { background: transparent url(/i/xl.gif) -304px 0 no-repeat !important; } + .xl-panel .help { float: left; color: #999; padding-left: 10px; } + .xl-panel .rss { float: right; display: block; width: 16px; height: 1.7em; overflow: hidden; text-indent: -1000px; background: transparent url(/i/feed_icon_16x16.gif) 0 50% no-repeat; } + +.xl_updown, .xl_hide { cursor: pointer; display: -moz-inline-stack; display: inline-block; width: 21px; height: 20px; background: transparent url(/i/xl.gif) 0 50% no-repeat; } +.xl_updown:hover { background-position: -21px 50%; } +.xl_downarrow { background-position: -42px 50%; } +.xl_downarrow:hover { background-position: -63px 50%; } +.xl_hide { width: 14px; background-position: -84px 50%; } +.xl_hide:hover { background-position: -98px 50%; } + + + +/* footer */ +#footer a { color: #6da3bd; } +#footer a:hover{color:#4D7285;} +#about { float: left; } +a.footer_logo { + margin: 0 1.1em 0 2%; + float:left; + display:block; + width:31px; + height:29px; + background:url(/i/tm_logo_sharp.gif) no-repeat 0 0; + outline:none; + text-indent:-9999px; +} +a.footer_logo:hover { + background-position:0 -31px; +} + + #copyright-and-footer-nav { + float: right; + margin-right: 20px; + } + #copyright-and-footer-nav li { + display: inline; + } + +#footer { + width: 95%; + min-width: 725px; + max-width: 1200px; + clear: both; + margin: 10px auto 0; + + + font:.917em/120% Tahoma, Arial; /*11px/12px*/ + color:#949494; + position: relative; + top: 20px; + overflow: hidden; +} + +#footer .footer-conttent{ + + border-top: 1px solid #ccc; + padding: 30px 0; + overflow: hidden; + margin-left:35px; +} +.bottom_menu { width: 80%; position: relative; overflow: hidden; float: left; } +.bottom_menu dl { float: left; width: 16.5%; font-size: 1em;} + .bottom_menu dl.user { width: 18%; } + .bottom_menu dl.sections { width: 15%; } + .bottom_menu dl dt { margin-bottom: .6em; font-size: 1.2em; } + .bottom_menu dl dt a { font-weight: bold; } + .bottom_menu dl.user dt a { border: 0; font-weight: bold; } + .bottom_menu dl dd { margin-bottom: .4em; line-height: 1.6em; } + + + +/* favourites_add */ +#favourites_add_hidden { display: none; } + #favourites_add { position: relative; height: 0; clear: left; z-index: 10; margin-left: 35px; } + #favourites_add .favourites_add_inner { background: #f0f0e7; padding: 1em; position: absolute; top: 1em; left: 0; width: 95%; z-index: 10; } + #favourites_add label { font-size: 1.1em; padding-bottom: .1em; } + #favourites_add #favourites_add_tags { width: 99%; } + #favourites_add dd.desc { font-size: .9em; color: #666; } + #favourites_add .favourites_add_footer { margin-top: 1em; color: #666; } + #favourites_add #favourites_add_cancel { color: #000; text-decoration: none; border-bottom: 1px dashed; } + + + +/* misc */ +.top-tags { list-style: none; margin-bottom: 15px; } + .top-tags strong { font-weight: normal; } + .top-tags em { font-style: normal; float: right; text-align: right; color: #999; text-decoration: none; } + .top-tags a { display: block; padding: 4px 20px; overflow: hidden; text-decoration: none; } + .top-tags a strong { text-decoration: underline; } + .top-tags a:hover, .top-tags a.current { background: #d2d2c9; color: #fff; } + .top-tags a:hover strong, .top-tags a.current strong { text-decoration: none; } + .top-tags a:hover em, .top-tags a.current em { color: #fff; } + +ul.tags li.fav a { color:#339900;} + ul.tags li.fav a:hover{ + color:#85C266; + } +.tags li.favourites_edit_tags { margin-left: 10px; } + .tags li.favourites_edit_tags a, .tags li.favourites_edit_tags a:link, .tags li.favourites_edit_tags a:visited { color: #ccc; background: none; } + .tags li.favourites_edit_tags a:hover { color: #666; } + +.sub-nav { clear: both; margin-bottom: 20px; } + .sub-nav li { display: inline; margin-right: 3px; } + .sub-nav li a { color: #093; font-size: 1.083em; padding: 0 2px; text-decoration: none; } + .sub-nav li.current a { color: #fff; background: #ff9525; } + +/* re:store banner margins fix for opera */ +@media all and (min-width: 0px) { + #iStoreMenuBanner { margin-top: -2px; margin-bottom: 0; } +} + + + +/* header */ +/** There is new habraheader bellow; Gleb Arestov, july 09**/ +.header{ + padding:10px 0 0; + overflow:hidden; + width: 95%; + margin:0 auto; + min-width: 725px; + max-width: 1200px; + } + .header + .panel-personal{ + float:left; + } + .header + .panel-tools{ + float:right; + } + .header + .logo{ + text-align: center; + width:110px; + height:110px; + display:block; + margin:10px auto; + background:url(/i/bg-multilogo.png) no-repeat 50% -144px; + } + .header + .logo:hover{ + background-position:50% -274px; + } + .header + a.root{ + margin:0 auto; + width:240px; + height:130px; + background-position:0 0 !important; + } +.panel-personal, .panel-tools { + font-family: Arial, Helvetica, sans-serif; + } +.panel-personal{ + padding-left:35px; + width:250px; + color:#999; + line-height:1.33em; + } + .panel-personal dt a{ + margin-right:10px; + } + .panel-personal + .habrauser-charge{ + margin-top:0.4em; + font-size: 91%; + line-height:1.2em; + } + .panel-personal + a{ + color:#999; + } + .panel-personal + a:hover{ + color:#333; + } + .panel-personal + dd + a{ + margin-right:10px; + } + .panel-personal + a.habrauser{ + color:#343434; + font-weight: 700; + } + .panel-personal + a.habrauser:hover{ + color:#858585; + } + .panel-personal + .habrauser-newmail{ + background:url(/i/icos/new-message.gif) no-repeat 0 2px; + padding-left:21px; + margin-left:-21px; + } +.panel-tools{ + padding-right:1%; + width:271px; + + } + .panel-tools + .panel-settings{ + padding-right:28px; + margin-bottom:0.66em; + } + .panel-settings{ + text-align: right; + } + .panel-settings + a{ + color:#999; + } + .panel-settings + a:hover{ + color:#333; + } + .panel-settings + small{ + color:#ccc; + font-size:1em; + } + .panel-tools + .panel-search{ + float:right; + width:auto; + } + .panel-search{ + text-align: right; + margin-top:-2px; + padding:2px 0 2px 2px; + } + .panel-search + .panel-search-label{ + position:relative; + float:left; + } + .panel-search + .panel-search-label + span{ + position:absolute; + left:5px; + top:3px; + color:#ccc; + display:none; + cursor:pointer; + } + .panel-search + label.input-placeholding + span{ + display:block; + } + .panel-search + .in-text{ + border:1px solid #D1D1D1; + padding:2px; + float:left; + width:230px; + margin-right:5px; + height:15px; + padding:2px; + } + .panel-search + .in-text:focus{ + outline:1px solid #6DA3BD; + } + .panel-search + .in-submit{ + float:left; + padding:0; + margin:0; + border:none; + height:21px; + width:21px; + overflow:hidden; + background:transparent url(/i/bg-button-enter.png) no-repeat scroll 0 0; + } + .panel-search.enter-button-hightlight + input.in-submit, + .panel-search + input.in-submit:active{ + outline:none; + background-position: 0px -22px; + } + .panel-search + p{ + margin: 0; + } + .panel-search + .input-placeholding{ + color:#ccc; + } +.panel-nav-top{ + padding:30px 0 25px 35px; + overflow:hidden; + margin-top:-15px; + min-width:1000px; + text-transform: lowercase; + } + .panel-nav-top + li{ + height:36px; + line-height:1.2em; + float:left; + font-size:250%; + margin-right:26px; + color:#343434; + } + .panel-nav-top + li + a{ + color:#6da3bd; + } + .panel-nav-top + li + a:hover{ + color:#4D7285; + } + .panel-nav-top + li.current + a{ + color:#343434; + } + + .panel-nav-top + li.current-full + a{ + color:#000; + text-decoration: none; + cursor: default; + } + .panel-nav-top + li.current + a.disabled{ + text-decoration:none; + } + .panel-nav-top + li.current + a:hover{ + color:#000000; + } + .panel-nav-top + li span a{ + float:left; + font-size:0.5em; + line-height:1.2em; + max-width:140px; + } + +.panel-personal { width: 350px; } +.panel-personal iframe { display: -moz-inline-stack; display: inline-block; *display: inline; *zoom: 1; margin-left: 10px; position: relative; top: 3px; } + + + + +/* user_profile */ +.profile-header{ + float:left; + width:149%; + padding-left:35px; + margin:-8px 0 6px; + height:48px; + } + .profile-header h1{ + float:left; + margin-right:5px; + } + .profile-header h1 .favicon{ + margin-top:14px; + } + + .profile-header .profile-actions{ + float:left; + margin-right:10px; + position:relative; + } + .profile-header .profile-actions dt{ + float:left; + overflow: hidden; + color:#333333; + padding:0; + line-height:1em; + height:42px; + font-size:300%; + + } + .profile-header .profile-actions dt .habrauser{ + line-height:1em; + padding:2px 6px 9px ; + float:left; + } + + .profile-header + .profile-actions + dd.menu-arr{ + position:relative; + z-index:2; + float:left; + display:none; + cursor:pointer; + font-size:175%; + font-weight:400; + line-height:46px; + width:15px; + padding:0 11px 0 7px; + margin-left:-6px; + text-align:center; + vertical-align:middle; + height:40px; + color:#ccc; + } + + .profile-header + .profile-actions + dd.menu-arr + .press-done{ + display:none; + } + + .profile-header + .profile-actions + dd.menu-arr:hover{ + color:#333; + } + .profile-header + .profile-actions + .profile-actions-menu-container{ + display:none; + + position:absolute; + + width:200px; + right:0; + top:5px; + } + .company-header + .profile-actions-menu-too-left + .profile-actions-menu-container{ + right:0; + left:-21px; + } + .profile-header + .profile-actions + .profile-actions-menu{ + float:right; + padding:0; + background:#fff; + border:1px solid #333; + background:#fff; + margin-top:3px; + + } + .profile-header + .profile-actions + .profile-actions-menu + .cor-1px{ + padding:1px 0; + border:2px solid #333; + border-width:0 2px; + background:#fff; + margin:0 -2px; + } + .profile-header + .profile-actions + .profile-actions-menu + ul{ + background:#fff; + margin:0 -1px; + padding:7px 40px 7px 14px; + } + .profile-header + .profile-actions + .profile-actions-menu + li{ + padding:5px 0; + line-height:1.2em; + overflow:hidden; + font-size:108%; + } + .profile-header + .profile-actions + .profile-actions-menu + li + a{ + + } + .profile-actions-menu + li + a.js-cancel{ + float:right; + font-size:0.8em; + line-height:1.2em; + padding-top:2px; + } + .js-you-love-this-corp .js-prof-company-addfan, + .js-you-work-here .js-prof-company-worker, + .js-prof-company-notworker, + .js-prof-company-removefan{ + display:none; + } + .js-you-love-this-corp .js-prof-company-removefan, + .js-you-work-here .js-prof-company-notworker{ + display:block; + } + .company-header + .profile-actions + .profile-actions-menu + ul{ + padding:22px 14px 7px 14px; + } + + .company-header + .profile-actions + .profile-actions-menu-container{ + width:258px; + } + .company-header + .profile-actions + .profile-actions-menu{ + float:none; + } + + .profile-header + .profile-actions.profile-actions-usable + dd.menu-arr{ + display:block; + } + .profile-header + .profile-actions.profile-actions-usable + dt:hover{ + border-color:#B7D0E5; + } + .profile-header + .profile-actions.active + dt{ + border-color:transparent !important; + } + .profile-header + .profile-actions.active + dd.menu-arr{ + color:#333; + } + .profile-header + .profile-actions.active + dd.menu-arr + .press-can{ + display:none; + } + .profile-header + .profile-actions.active + dd.menu-arr + .press-done{ + display:inline; + } + .profile-actions.active + .profile-actions-menu-container{ + display:block; + } + + .profile-header + .profile-karma-holder{ + float:left; + margin-top:-9px; + margin-left: 10px; + } + .profile-header + .profile-karma-holder + dl{ + text-align:center; + } + .profile-header + .karma{ + padding:0; + margin-right:15px; + } + .profile-header + .habraforce{ + margin:0; + padding:0; + } + .profile-header + .profile-adm{ + padding: 0 0 0; + float:left; + margin-left:20px; + } + .profile-header + .profile-adm + a{ + display:block; + float:left; + margin:0 5px; + width:24px; + height:24px; + line-height:24px; + vertical-align:bottom; + text-align:center; + padding:6px; + } + .profile-header + .profile-adm + a.invitogiver{ + background: url(/i/img-icon-invite.png) no-repeat 50% 50%; + } + .profile-header + .profile-adm + a.profedit{ + background: url(/i/topic_edit.gif) no-repeat 50% 50%; + } + + .profile-header + .profile-adm + a:hover{ + background-color:#eee; + } +.profile-header +.karma, +.profile-header +.habraforce{ + font-family: Verdana, sans-serif; + } +.profile-header .karma a{ + margin-top:9px; + width:15px; + height:26px; + } +.profile-header .karma .vote_plus { + background:url(/i/icos/icons_vote_karma_big.gif) no-repeat 0 0 !important; + } +.profile-header .karma .vote_minus { + background:url(/i/icos/icons_vote_karma_big.gif) no-repeat -16px 0 !important; + } + +.profile-header .karma.voted_plus .vote_plus { + background:url(/i/icos/icons_vote_karma_big.gif) no-repeat 0 -27px !important; + } + +.profile-header .karma.voted_minus .vote_minus { + background:url(/i/icos/icons_vote_karma_big.gif) no-repeat -16px -27px !important; + } + + + +.profile-header .karma dd.vote{ + display:block; + } +.profile-header +.karma .mark, +.profile-header +.habraforce .number, +.profile-header +.habraindex .number{ + background:transparent; + font-size:300%; + } + .profile-header + .karma .mark{ + color:#6c6; + padding:0; + } + .profile-header + .habraforce .number{ + color:#CC66CC; + } +.profile-header .karma dt, +.profile-header .karma .total, +.profile-header .habraforce dt, +.profile-header .habraindex dt{ + color:#ccc; + } +.profile-header dt{ + margin-bottom:-6px; + } +.profile-header .karma .total{ + margin-top:-4px; + } + +.company .page-navigation{ + float:none; + width:auto; + padding-left:35px; + } +.profile-header .habraindex .number{ + color:#CC66CC; + } +.profile .profile-header{} + +.profile #sidebar{ + margin-top:46px; +} + + + + +/* autosuggest */ +/* autosuggest */ +.js-autosuggest-holder { + width:100%; + position:relative; + z-index:10; +} +.js-autosuggest-holder .js-autosuggest-output { + width:100%; + overflow:hidden; + position:absolute; + z-index:10; + cursor:pointer; + padding-bottom:1px; + +} +.js-autosuggest-holder .js-autosuggest-output iframe { + display:none; + display/**/:block; + position:absolute; + top:0; + left:0; + z-index:-1; + width:3000px; + height:3000px; +} +.js-autosuggest-output-container { + position: relative; height: 0; + } + .js-autosuggest-output div { + text-align:left; + position:relative; + padding: 3px 0 3px 3px; + font-size:0.9em; + border:1px solid #dadada; + line-height:1.4em; + margin-bottom:-1px; + background-color: #fff; + cursor: pointer; + } + .js-autosuggest-output div em { + font-style:normal; + font-weight:bold; + } + .js-autosuggest-output div.active { + background-color:#fdf5e6; + z-index:5; + border-color:#eee; + } +.js-autosuggest-holder .js-autosuggest-output .js-autosuggest-item { + padding:3px; + + border-bottom:1px solid #7992b2; +} +.js-autosuggest-holder .js-autosuggest-output .current { + background-color:#7992b2; +} +.js-autosuggest-holder .js-autosuggest-output .js-autosuggest-item em { + font-weight:bold; + font-style:normal; +} + + + + + + + + .panel-search + .js-autosuggest-holder{ + width:100%; + } + .panel-search .js-autosuggest-output-container{ + clear:both; + width:236px; + z-index:1; + } + .panel-search p{ position:relative;z-index:3;} + /* Autosuggest в форме поиска */ + #info-search .js-autosuggest-holder { + position:relative; + } + #info-search .js-autosuggest-output { + width:100.3%; + left:0; + top: 22px; + margin-left: -3px; + text-align:left; + } + + + + /* Autosuggest в форме поиска по тегам*/ + .tag-search { + position:relative; + } + .tag-search .js-autosuggest-output { + width:51%; + left:97px; + top: 37px; + z-index:30; + } + .tag-search .js-autosuggest-output div { + padding:0 6px; + } + + .main-search .js-autosuggest-output { + width: 78%; + padding-right:8px; + } + .main-search .js-autosuggest-output div{ + margin-right:-8px; + } + + + + /* Autosuggest в форме поиска по тегам*/ + #favourites_add .js-autosuggest-holder div{ + z-index:3; + position:relative; + } + #favourites_add .js-autosuggest-holder .js-autosuggest-output-container{ + z-index:1; + } + #favourites_add .js-autosuggest-output { + left:0; + top: 000; + z-index:30; + } + + + + + /* autosuggest */ + #js-topic-form-holder .js-autosuggest-holder { + position:relative; + } + #js-topic-form-holder .js-autosuggest-output { + width:100.3%; + left:0; + } + + + + /* //autosuggest */ + + + + + + #write-post .js-autosuggest-holder { + position:relative; + } + #write-post .js-autosuggest-output { + padding:0; + width:101%; + margin-top: -10px; + } + + +/* //autosuggest */ + + + +/* top_companies */ +.corps-list-top{ + +} + .corps-list-top + .page-nav, + .corps-list-top + .corps-list-top-menu{ + padding-left:35px; + } +.corps-list{ + padding-top:17px; + color:#7d7c7c; + font-family:Tahoma, sans-serif; + } + .corps-list + .corps-listhead{ + margin:0 0 7px; + line-height:1.2em; + } + .corps-list + .corps-listhead + dt.corp-name{ + height:1px; + } + .corps-list + .corps-listhead + dd.copr-habraindex{ + font-family:Arial,sans-serif; + font-size:100%; + color:inherit; + + padding-left:4px; + margin-right:-4px; + } + .corps-list li{ + overflow:hidden; + padding-left:35px; + margin:0 0 20px; + line-height:31px; + } + .corps-list li dt, + .corps-list li dd{ + float:left; + } + + + .corps-list li dt.corp-name{ + font-size:208%; + width:63%; + } + .corps-list li dt.corp-name + img{ + line-height:1em; + height:16px; + width:16px; + float:left; + margin:9px 12px 0 -28px; + font-size:33%; + } + .corps-list li dd.corp-descripton{ + padding-top:1px; + float:none; + clear:left; + width:47%; + line-height:1.2em; + font-size:108%; + } + .corps-list li dd.corp-descripton + p{ + margin:0; + } + .corps-list li dd.corp-descripton + p + a{ + color:#666; + font-size:107%; + } + .corps-list li dd.corp-descripton + p + a:hover{ + color:#A3A3A3; + } + .corps-list li dd.copr-habraindex{ + width:21%; + color:#CC66CC; + float:right; + } + .corps-list li dd.copr-habraindex, + .corps-list li dd.copr-habraindex-change{ + font-family:Verdana, sans-serif; + font-size:158%; + } + .corps-list li dd.habraindex-up{ + color:#74c262; + } + .corps-list li dd.habraindex-down{ + color:#ff0033; + } +.corps-list-page-description{ + color:#999; + } + .corps-list-page-description + p{ + font-size:133%; + margin:0 0 1em; + } + +.corps-list-side +.side-rubrikator{ + margin-top:35px ; + } +.corps-list-side +a.add{ + color:#999; + font-size:133%; + } + .corps-list-side + a.add:hover{ + color:#333; + } +.corps-list-side +.alfikator { + margin:30px 0; + } + .alfikator + ul{ + font-size:166%; + overflow:hidden; + color:#ccc; + padding:1px 1px; + padding-left:4px; + margin-left:4px; + margin:0 0 30px; + } + .alfikator + ul + li{ + float:left; + width:10%; + margin-right:8px; + } + .alfikator + ul + li + a{ + color:#666; + text-decoration:none; + } + .alfikator + ul + li + a:hover{ + color:#A3A3A3; + } + .alfikator + ul + li.active + a{ + padding:2px 4px; + margin-left:-4px; + color:#333; + background:#C5DAE5; + } + + + +/* users-lists */ +h1.users-list-geo{ + color:#999 ; + margin:-10px 0 3px !important; +} +h1.users-list-geo a{color:#999;} +h1.users-list-geo a:hover{color:#333;} + +.lion-king{ + background:url(/i/bg_lion_king.png) no-repeat 0px 0px; + width:23px; + height:20px; + position:absolute; + top:-21px;left:12px; +} +#people-list{ + margin-left:-18px; +} +#people-wrapper .corplist-suggest-form{margin-bottom:10px;padding-top:0;padding-left:0;} +table.users-list{ + width:100%; + } + + table.users-list th { + font: normal 1em/180% Arial,sans-serif; + color:#999; + overflow:hidden; + padding:0 !important; + margin:0; + text-align:left; + } + + table.users-list td { + vertical-align: top; + padding:0 0 26px; + } + table.users-list .rating-dyn { + vertical-align: top; + font-size: 1em; + width:18px; + text-align:left; + } + table.users-list .rating-dyn .rating-dyn-con{ + position:relative; + width:18px; + margin-top:30px; + z-index:5; + } + table.users-list .rating-dyn .rating-dyn-con .rating-dyn-text{ + position:absolute; + z-index:12; + top:-7px; + background:#fff; + padding-right:2px; + padding-top:1px; + right:5px; + text-align:right; + white-space:nowrap; + } + table.users-list .userava{ + width:48px; + vertical-align: top; + } + table.users-list .userava .habrauserava{margin-top:5px;position:relative;} + table.users-list .user { + text-align: left; + padding-left: 14px; + line-height:1.2em; + color:#999; + } + table.users-list .user dl{ + padding-right:3px; + } + table.users-list .user .lifetime{ + font-size: 100% ; + color:#999; + } + table.users-list .user .last_post{ + font-size: 100% ; + color:#999; + padding-right:20px; + } + table.users-list .user .last_post a{ + color: #666666; + font-size: 100% ; + } + table.users-list .user .last_post a:hover{ + color: #333; + } + + table.users-list .user a { + + } + table.users-list .user dt{ + margin-bottom:5px; + font-size:200%; + line-height: 1em; + } + table.users-list .userkarma{ + color:#74c262; + width:15%; + font-size:150%; + } + table.users-list .userrating{ + color:#CC66CC; + font-size:150%; + width:10%; + } + + + +/* yandex_direct */ +#yandex_direct{padding:1.67em;} +.y5_vertical { padding: 1em 1.4em; margin-bottom: 0; } + .y5_vertical .y5_all a, + .y5_vertical .y5_how a, + #y5_direct2 .y5_all a, + #y5_direct2 .y5_how a { color: #F0F0E7 !important; } + + + + + +/* highlight */ +pre code { + font-size: 12px; + padding: 0.5em; + background: #f8f8f8; + display: block; + } + pre .subst, + pre .title { + font-weight: normal; + color: #000; + } + + pre .comment, + pre .template_comment, + pre .javadoc, + pre .diff .header { + color: #808080; + } + + pre .annotation, + pre .decorator, + pre .preprocessor, + pre .doctype, + pre .pi, + pre .chunk, + pre .shebang, + pre .apache .cbracket { + color: #808000; + } + + pre .tag, + pre .tag .title, + pre .pi + pre .id, + pre .attr_selector, + pre .pseudo, + pre .literal, + pre .keyword, + pre .hexcolor, + pre .css .function, + pre .ini .title, + pre .css .class, + pre .list .title, + pre .tex .command { + color: #4d7386; + } + + pre .attribute, + pre .rules .keyword, + pre .number, + pre .date, + pre .regexp, + pre .tex .special { + color: #2f98ff; + } + + pre .number, + pre .regexp { + font-weight: normal; + } + + pre .string, + pre .value, + pre .filter .argument, + pre .css .function .params, + pre .apache .tag { + color: #339900; + } + + pre .symbol, + pre .ruby .symbol .string, + pre .ruby .symbol .keyword, + pre .ruby .symbol .keymethods, + pre .char, + pre .tex .formula { + color: #968e5b; + } + + pre .phpdoc, + pre .yardoctag, + pre .javadoctag { + text-decoration: underline; + } + + pre .variable, + pre .envvar, + pre .apache .sqbracket, + pre .nginx .built_in { + color: #968e5b; + } + + pre .addition { + background: #baeeba; + } + + pre .deletion { + background: #ffc8bd; + } + + pre .diff .change { + background: #bccff9; + } + + + + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline; filename=favicon.ico +Content-Type: image/x-icon; name=favicon.ico +Content-Location: http://habrahabr.ru/i/favicon.ico +Content-Transfer-Encoding: Base64 + +AAABAAIAICAAAAEAIACoEAAAJgAAABAQAAABACAAaAQAAM4QAAAoAAAAIAAAAEAA +AAABACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAsKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/r556/7Cgfv+woH7/sqKA/7OkgP+zpIH/sqSB/7KjgP+woHz/sKB+/7Cg +fv+woH7/sqOA/7Kkgf+zpIH/s6SA/7Cgfv+woH7/sKB+/7Cgfv+woH7/rp53/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+unXj/sKB+/7Cg +fv///////////////////////////7Cgfv+woH7/sKB+/7Cgfv////////////// +/////////////7Cgfv+woH7/sKB+/7Cgfv+vn3v/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+//////////////////// +////////sKB+/7Cgfv+woH7/sKB+//n69///////////////////////sKB+/7Cg +fv+woH7/sKB+/6+fe/+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7///////////////////////////+woH7/sKB+/7Cg +fv+woH7/+vr3//////////////////////+woH7/sKB+/7Cgfv+woH7/r597/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv///////////////////////////7Cgfv+woH7/sKB+/7Cgfv/29O////////// +/////////////7Cgfv+woH7/sKB+/7Cgfv+vn3v/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+//////////////////// +////////sKB+/7Cgfv+woH7/sKB+//b18P//////////////////////sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7///////////////////////////+woH7/sKB+/7Cg +fv+woH7/9fTv//////////////////////+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv///////////////////////////7Cgfv+woH7/sKB+/7Cgfv////////////// +/////////////7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+//////////////////// +////////////////////////////////////////////////////////sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/////////////////////////////////+vn2//// +///8+/r//v7+//////////////////////+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv////////////////////////////////////////////////////////////// +/////////////7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+//////////////////// +////////////////////////////////////////////////////////sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7///////////////////////////////////////// +//////////////////////////////////+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv///////////////////////////7Cgfv+woH7/sKB+/7Cgfv////////////// +/////////////7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+//////////////////// +////////sKB+/7Cgfv+woH7/sKB+////////////////////////////sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7///////////////////////////+woH7/sKB+/7Cg +fv+woH7///////////////////////////+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv///////////////////////////7Cgfv+woH7/sKB+/7Cgfv////////////// +/////////////7Cgfv+woH7/sKB+/7Cgfv+vn3r/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+//////////////////// +////////sKB+/7Cgfv+woH7/sKB+////////////////////////////sKB+/7Cg +fv+woH7/sKB+/6+fev+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7///////////////////////////+woH7/sKB+/7Cg +fv+woH7///////////////////////////+woH7/sKB+/7Cgfv+woH7/r596/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv///////////////////////////7Cgfv+woH7/sKB+/7Cgfv////////////// +/////////////7Cgfv+woH7/sKB+/7Cgfv+woHv/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/wAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAABAAAAAgAAAAAQAgAAAA +AABABAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwoH//sKB//7Cgf/+woH//sKB//7Cg +f/+woH//sKB//7Cgf/+woH//sKB//7Cgf/+woH//sKB//wAAAAAAAAAAsKB//7Cg +f/+woH//sKB//7Cgf/+woH//sKB//7Cgf/+woH//sKB//7Cgf/+woH//sKB//7Cg +f/8AAAAAAAAAALCgf/+woH//sKB//////////////////7Cgf/+woH////////// +////////sKB//7Cgf/+woH//AAAAAAAAAACwoH//sKB//7Cgf/////////////// +//+woH//sKB//////////////////7Cgf/+woH//sKB//wAAAAAAAAAAsKB//7Cg +f/+woH//////////////////sKB//7Cgf/////////////////+woH//sKB//7Cg +f/8AAAAAAAAAALCgf/+woH//sKB//////////////////7Cgf/+woH////////// +////////sKB//7Cgf/+woH//AAAAAAAAAACwoH//sKB//7Cgf/////////////// +/////////////////////////////7Cgf/+woH//sKB//wAAAAAAAAAAsKB//7Cg +f/+woH////////////////////////////////////////////+woH//sKB//7Cg +f/8AAAAAAAAAALCgf/+woH//sKB///////////////////////////////////// +////////sKB//7Cgf/+woH//AAAAAAAAAACwoH//sKB//7Cgf/////////////// +//+woH//sKB//////////////////7Cgf/+woH//sKB//wAAAAAAAAAAsKB//7Cg +f/+woH//////////////////sKB//7Cgf/////////////////+woH//sKB//7Cg +f/8AAAAAAAAAALCgf/+woH//sKB//////////////////7Cgf/+woH////////// +////////sKB//7Cgf/+woH//AAAAAAAAAACwoH//sKB//7Cgf/+woH//sKB//7Cg +f/+woH//sKB//7Cgf/+woH//sKB//7Cgf/+woH//sKB//wAAAAAAAAAAsKB//7Cg +f/+woH//sKB//7Cgf/+woH//sKB//7Cgf/+woH//sKB//7Cgf/+woH//sKB//7Cg +f/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAAgAEAAIAB +AACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAP// +AAD//wAA + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline; filename=karma.css +Content-Type: text/css; charset=utf-8; name=karma.css +Content-Location: http://habrahabr.ru/css/1307631427/karma.css +Content-Transfer-Encoding: 8bit + +.karma-holder { + position: relative; + clear: both; + width: 100%; + height: 4em; + float: left; + border-bottom: 20px solid #fff; /*trick for IE 6*/ + white-space: nowrap; + background: url(/i/bg-profile-center-line.gif) left center repeat-x; +} + + .blogs h1 a { + position: relative; + font: 2.83em/2.17em Verdana, sans-serif; /*34/12*/ + text-decoration: none; + } + + body.blogs #main-content h1 a img { + float: left; + margin: 15px 10px 0 0; + border: 1px solid #ddd; + } + + +.karma, +.habraforce, +.blog-rating, +.habramoney { + font-family: Arial, Helvetica, sans-serif; + text-align: center; + float: left; + /*border: 1px solid red;*/ + background: #fff; +} + +.karma { + padding: 0 .83em 0 55px; +} + +.karma-holder .infinity .vote { + display: none; +} + +.karma-holder .infinity-sign { + display: none; + font-size: 1.83em; + font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; + margin-top: -5px; + color: gray; +} + +.karma-holder .infinity .infinity-sign { + display: block; +} + +.habraforce, +.blog-rating, +.habramoney { + padding: 0 1em; +} + +.habraforce, +.blog-rating { + margin: 0 20px 0 20px; + padding-bottom: 1.1em; +} + +.karma dl {float:left;} + .karma dd.vote { + margin:0 auto; + width:auto; + overflow:hidden; + display:inline; + } + .karma dt, .karma .total { + font-size: .83em; + } + .karma .total { + clear:left; + } + .karma a { + margin:3px 3px 0; + float:left; + width:9px; + height:20px; + } + .karma .mark { + float:left; + } + .karma strong { + font-weight:normal; + } + .karma .vote_plus { + background:url(/i/icos/icons_vote_karma.gif) no-repeat left top; + } + .karma .vote_minus { + background:url(/i/icos/icons_vote_karma.gif) no-repeat right top; + } + .karma.no_voting .vote_plus, + .karma.no_auth .vote_plus, + .karma.mine .vote_plus, + .karma.voted_minus .vote_plus { + background:url(/i/icos/icons_vote_karma.gif) no-repeat left bottom; + } + .karma.no_voting .vote_minus, + .karma.no_auth .vote_minus, + .karma.mine .vote_minus, + .karma.voted_plus .vote_minus { + background:url(/i/icos/icons_vote_karma.gif) no-repeat right bottom; + } + .habraforce dt, + .blog-rating dt, + .habramoney dt, .habramoney .pay { + font-size: .83em; + float: none; + } + .karma .total em { + font-style:normal; + } + .karma .mark, + .habraforce .number, + .blog-rating .number, + .habramoney .number { + font-size: 1.83em; /*22/12*/ + padding: 0 .15em; + color: #fff; + } + .karma .mark { + background-color:#74c262; + } + .habraforce .number { + background: #25a8ff; + } + .blog-rating .number { + background: #d479b3; + } + .habramoney .number { + background: #ef7f35; + } + + .buttons { + padding: .83em 0 0 .83em; + white-space: nowrap; + float: right; + background: #fff; + } + .blogs .buttons { + padding-left: 0; + } + .karma-holder .buttons a {margin-right:8px;} + + .blogs .buttons img { + border: 1px solid #ddd; + } + .blogs .karma-holder .buttons a {margin-right:0px;margin-top:4px !important;} + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/png +Content-Location: http://habrahabr.ru/i/icos/blog-small-open.png +Content-Transfer-Encoding: Base64 + +iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAMAAAAolt3jAAAABGdBTUEAAK/INwWK +6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFQUExURfT9 +/8/o/N3w+LTP4J+/17PO4PP2+LjR47nZ8/j6+3OXrpu1yXGWrrDQ63KXrn2Zq16E +nnybr6DD2Iyswb/d84qsw+v2/bbQ4Mba6vb///X+/3aXr2uPqN/v9t7r8q66wYam +vZ290Z680KPA1oGkvdzw/KPA0uX1/KvG2XyetI6xyJmvvsHQ2H6gtNjt/GKDmcnf +7MLLz+Dz+qXA0TdDTZ67zzE3PLHO3tDf6ODz/Oz7/vz//7bR44uwyd/w+K3O39To +86fE2K3P453A1qWoq3uEjmWKo93k6dfn78PJzszW3c3m88HV5J23yqPB2Ze70ez6 +/lZqeo6rwY2xy5+90NLn8q7K3Ji1yuXm59Do9HKWrZKxxtLr/LXQ4Oz6/abI36XB +1m+Uq5m80oKhuPT+/7PO33mRpavG18bj87rQ283c5NHq8+j4/f7//////////0ah +peUAAABwdFJOU/////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////// +/////////////////////////////////wC3YWLSAAAAsUlEQVR42mKQYGe3EY9l +ZmZN9cnPz2dgzYMBDRA3LC8XChJAXEdrhiwQYGAI4eTMZ1BLyYECblElLwZTK6ZM +EGAylFeOF2QIV88GA0VfuYg0fYZoS+90INDyNzDScfVkEFbNAIIkIYeA0CCXfAYF +PREWFlsnO0nZYH62fIbkGA4OXmOpXDFnATagvZqMjIx+FnGR9jyJIGfocvFFBXqY +q7jJSIO4QJxvZqLtng8GAAEGAFBLNxR9F8JmAAAAAElFTkSuQmCC + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline +Content-Type: image/jpeg +Content-Location: http://habrahabr.ru/i/join_button_bg.png +Content-Transfer-Encoding: Base64 + +/9j/2wBDABELDA8MChEPDg8TEhEUGSobGRcXGTMkJh4qPDU/Pjs1OjlDS2BRQ0da +SDk6U3FUWmNma2xrQFB2fnRofWBpa2f/2wBDARITExkWGTEbGzFnRTpFZ2dnZ2dn +Z2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2f/wAAR +CAAaAAEDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAIBBv/EABUQAQEA +AAAAAAAAAAAAAAAAAAAR/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/EABQRAQAAAAAA +AAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/AOzomgJowB//2Q== + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline; filename=profile.css +Content-Type: text/css; name=profile.css +Content-Location: http://habrahabr.ru/css/1307631427/profile.css +Content-Transfer-Encoding: 8bit + +/* Profile header */ + +.profile-header { + float: left; + font-size: 12px; +} + .nick-holder { + float: left; + width: 100%; + clear: both; + } + .profile-header h1 { + color: #666; + padding: 0; + font-size: 1em; + } + .profile-header h1 a { + font: 2.83em/135% Verdana, sans-serif; /*34px/12px*/ + text-decoration: none; + color: #666; + } + + .nick-holder .avatar-link { + float: left; + padding-right: 15px; + } + .nick-holder .avatar-link img, .nick-holder .edit img, .hresume .edit img { + border: 1px solid #DCDCDC; + } + + .hresume .edit img {margin-left:10px;} + + .nick-holder div { + float: left; + } + .nick-holder .twitter { + font: .9em/100% Arial, sans-serif; + font-weight: 400; + color: #999; + margin-bottom: 10px; + margin-top: -10px; + display: block; + float: left; + } + + +/* Userinfo+microformats */ + +.userinfo { + width: 100%; +} + +.company .userinfo { + float: left; + clear:both; + margin-top: 20px; +} + +.userinfo dl { + margin: 0 0 10px 0; + padding:0; + clear:left; + font-size: 1.33em; /*16/12*/ + } +.userinfo dl.fn { + float: left; + clear: both; +} + .userinfo dl dt { + margin: 0; + padding: 0 .5em 0 0; + float: left; + width: 11em; + color:#666; + font-size: 83%; + font-weight:bold; + text-align: right; + } + + .userinfo dl dd { + margin: 0 0 0 11em; + padding: 0 0 7px 12px; + text-align: left; + font-size: 83%; + } + + /* Так выводится в профайле заголовок имя юзера */ + + .userinfo dl.user-name { + float: none; + clear: both; + margin: 0 0 1em 9.85em; + padding-top: 1em; + } + .userinfo + .leader-position{ + font-size:0.8em; + color:#999; + } + .userinfo dl.user-name dt, .userinfo dl.user-name dd { + display: block; + float: none; + width: auto; + margin: 0; + padding: 0; + text-align: left; + color: rgb(119, 119, 119); + } + .userinfo dl.user-name dt { + font-size: 156%; + font-weight: normal; + } + .userinfo dl.fn dd a { + color: rgb(119, 119, 119); + } + .userinfo dl.user-name dd.twitter{ + font-family: Arial, sans-serif; + font-size:68%; + margin:1.5em 0 1.5em -22px; + padding-left:22px; + color:#999; + + background:url(/i/bg-icon-twitter.gif) no-repeat; + } + .userinfo dl.user-name dd.twitter #js-twitter-status-live{ + padding-top:3px; + } + + /* // Так выводится в профайле заголовок имя юзера */ + + /** + * Секретные заметки о пользователе + */ + .userinfo .note{} + .userinfo .note .add_note{cursor:pointer;color: green;border-bottom:1px dashed green;} + .userinfo .note .add_note.hide{display:none;} + .userinfo .note .current_note.hide{display:none;} + .userinfo .note .edit_note{display:none;} + .userinfo .note .edit_note.show{display:block;} + .userinfo .note .edit_note .description{color: #999999;font-size: 11px;margin: 2px 0 3px;overflow: hidden;} + .userinfo .note .edit_note input.text{width: 32em;} + .userinfo .note .edit_note input.btn{margin-right:0.2em;margin-top:0.5em;} + .userinfo .note .edit_note .cancel_note{cursor:pointer;color:#6DA3BD;border-bottom:1px dashed #6DA3BD;margin-left:0.2em;} + + +.dl_logic_wrap { + margin: 0 0 20px 0; + float: left; + width: 100%; +} + +.friends_list, .blogs_list, +#favorite_companies_list, #working_in, #staff, .interests { + width: 100%; + } + + + .friends_list ul li, .blogs_list ul li, + #favorite_companies_list ul li, #working_in ul li, #staff ul li { + + display: inline-block; + padding-left: 18px; + } + .interests ul li { + display: inline; + } + .friends_list ul li a, .blogs_list ul li a, + #favorite_companies_list ul li a, #working_in ul li a, #staff ul li a, + .interests ul li a { + margin-right: 11px; + color:#666; + font: normal 92.4%/1.5em arial; + } + .friends_list ul li a:hover, .blogs_list ul li a:hover, + #favorite_companies_list ul li a:hover, #working_in ul li a:hover, #staff ul li a:hover, + .interests ul li a:hover{ + color:#A3A3A3 + + } + .interests ul li a { + margin: 0; + } + .friends_list ul li, #staff ul li { + background: url(/i/bg-user2.gif) 0 50% no-repeat; + } + .blogs_list ul li { + background: url(/i/icos/blog-small-open.png) 0 60% no-repeat; + line-height: 150%; + } + #favorite_companies_list ul li, #working_in ul li { + padding-left: 20px; + background: url(/i/icos/company-small.png) 0 60% no-repeat; + line-height: 150%; + } + .ICQ a, .Skype a { + text-decoration: none; + } + .ICQ a img { + margin: -.1em 3px 0 0; + } + .ICQ a > img { + margin-top: -.5em; + } + .Skype a img { + margin-right: 3px; + } + .Skype a > img { + margin-top: -.5em; + } + + /* Marking links to user's mutual friends and groups */ + + .friends_list ul li a.cross, .blogs_list ul li a.cross, + #favorite_companies_list ul li a.cross, #working_in ul li a.cross, + #staff ul li a.cross, + .interests ul li a.cross { + font-weight: bold; + } + + +.profile .banner { + margin-top: 2em; +} +.profile . +.company .userinfo { + margin: 20px 0 20px 0; +} + + + +/* Recommendations (user to user) */ + + +.user-recommend-user {clear:both;} + + +/* // Recommendations (user to user) */ + + + + + + + + + + +/* Companies section */ + +.profile .live, .company .tag-cloud { + background: #f0f0e7 url(/i/bg-corner-top-left.gif) no-repeat 0 0; + padding: 0; +} + .company .tag-cloud ul { + float: left; + margin: 0 20px 20px; + } + + +.company .live ol { + margin: 0 1.67em; +} + .company .live ol li { + line-height: 130%; + margin-bottom: .42em; /*5px*/ + color: #999; + } + .company .live ol li a:hover { + text-decoration: none; + color: #fff; + background: #6c6; + } + .company .new-feedbacks div div { + padding-bottom: .84em; /*10px*/ + } + +#stats h2 { + font: normal 2.17em/110% Verdana, sans-serif; /*26/12*/ + color: #999; + padding-bottom: .38em; +} + +#stats dl { + margin: .83em 0; +} + #stats dl dt, #stats dd, #stats dl ul, #stats dl ul li { + display: inline; + } + #stats dl dt { + font: normal 1.5em/110% Verdana, sans-serif; + margin-right: .3em; + letter-spacing: -1px; + color: #ccc; + } + #stats dd { + line-height: 190%; + color: #666; + } + #stats dd li { + margin-right: .3em; + } + #stats dd a { + color: #999; + } +.friends_list ul .empty_spaces, #staff ul .empty_spaces { + margin-left:-0.7em; + background:none; + padding-left:0; + font-size:92.4%; + line-height:1.5em; +} + + /* Шапка профайла компании */ + .profile-title {margin: 0 0 20px 0;} + .profile-title .favicon {float: left; clear:both; margin: .75em 23px 0 23px;} + .profile-title h1 { + font: 2.5em/100% Verdana,sans-serif; /*30px/12px*/ + } + .profile-title h1 a {color: #666; text-decoration: none;} + .profile-title h1 a.admin-link {color: #ccc; font-size: 70%;text-decoration: none;} + .profile-title h1 a.admin-link:hover {color: green;} + +/* Отзывы пользователей о компании */ +.company-comments {float:left; clear:both; width:100%;} + + +/* Resume */ + + .hresume h2 { + font: 1.67em Arial, sans-serif; /*20/12*/ + margin-top: 30px; + margin-left: 7.75em; + margin-bottom: 20px; + letter-spacing: -1px; + color: #333; + float: none; + clear: both; + } + .hresume dl dd { + line-height: 100%; + } + +#habrastat { + margin-top: 40px; +} + .hresume .price_block { + padding-top:1em; + } + .hresume .price_block span { + color:#666633; + font-size:2.8em; + letter-spacing:-1px; + line-height: 120%; + } + .hresume .price_block span.price { + color:#fff; + background-color:#9CC; + font-size:1.1em; + } + + .hresume .user-name { + padding-top:0; + } + + .hresume .hire_block span { + color:#E3A2A0; + font-family:arial,sans-serif; + font-size:2.6em; + letter-spacing:-1px; + line-height:40px; + } + .hresume .hire_block input.hire_button { + background-color:#E3A2A0; + color:#FFF; + font-size:1.1em; + } + + +.resume .vevent {margin-bottom:30px;} + + +/* Форма выборки постов в разделе "Моё" профайла */ + +.filter-form ul { + margin: 0 0 0 15px; + padding-bottom: 10px; +} + .filter-form li {float: left; clear: both; margin-bottom: 5px;} + .filter-form input, .filter-form label {float: left;} +input.show { + float: right; + clear: both; + margin: -10px 10px 10px 0; +} + +/*Вакансии пользователя*/ + +.user-vacancies ol { + list-style: decimal; + margin: 0 10px 20px 40px; + color: #999; +} + .user-vacancies {line-height: 170%;} + +/* Блок с выводом Избранного, постов и комментов юзера. Отступы для топиков и комментов */ + + +.comments .items { + float: left; + clear: both; + width: 100%; + margin-top: 30px; +} + + +/* Юзернеймы и компании внутри хабратопиков и комментариев */ + +a.user_link { + padding-left:14px; + color:#666; + font: normal 92.4%/1.5em arial; + background: url(/i/bg-user2.gif) 0 60% no-repeat; +} + +.company_link { + padding-left:14px; + color:#666; + font: normal 92.4%/1.5em arial; + background: url(/i/bg-company.gif) 0 60% no-repeat; +} + +.company-header .js-addFan, +.company-header .js-removeFan, +#js-addWorker, +#js-removeWorker, +span#js-companyWorkerInactive, +span#js-companyFanInactive { + margin-top: 15px; + display: block; + width: 30px; + float: left; + background-repeat: no-repeat; +} + +.company-header .js-addFan.hidden, +.company-header .js-removeFan.hidden, +#js-addWorker.hidden, +#js-removeWorker.hidden { + display: none; +} +.company-header a.js-addFan { + background-image: url('/i/company-fav.gif'); + height: 19px; + margin-left: 27px; +} +.company-header a.js-removeFan { + background-image: url('/i/company-fav.gif'); + background-position: left -19px; + height: 19px; + margin-left: 27px; +} +span#js-companyFanInactive { + background-image: url('/i/company-fav.gif'); + background-position: left -57px; + height: 19px; + width: 24px; +} + +a#js-addWorker { + background-image: url('/i/company-work.gif'); + height: 20px; +} +a#js-removeWorker { + background-image: url('/i/company-work.gif'); + background-position: left -20px; + height: 20px; +} +span#js-companyWorkerInactive { + background-image: url('/i/company-work.gif'); + background-position: left -60px; + height: 20px; + width: 28px; +} + +a#js-blogInfoSwitcher, +a.js-addBlogMember, +a.js-removeBlogMember { + height: 20px; + display: block; + float: left; + background-repeat: no-repeat; + background-color: white; +} +a.js-addBlogMember, +a.js-removeBlogMember { + padding: 5px; + height:16px; + display: block; + background: #dbdbdb url(/i/join_button_bg.png) repeat-x left top; + text-shadow: 0 1px #ededed; + color: #6b6b6b; + text-decoration:none; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + border-style: solid; + border-width: 1px; + font-weight:bold; + border-color: #afafaf #a9a9a9 #a3a3a3; +} +a:hover.js-addBlogMember, +a:hover.js-removeBlogMember{color:#5b5b5b} + + +a.js-addBlogMember.hidden, +a.js-removeBlogMember.hidden { + display: none; +} +a#js-blogInfoSwitcher { + width: 22px; + background-image: url(/i/icos/blog-info.gif); +} +a#js-blogInfoSwitcher.regular { + background-position: left top; +} +a#js-blogInfoSwitcher.regular:hover { + background-position: left bottom; +} +a#js-blogInfoSwitcher.active { + background-position: left bottom; +} +#js-invitationList { + height: 300px; + margin-left: 10px; + margin-right: 10px; + overflow: auto; + overflow-x: hidden; +} + + +.bloginfo{} +.bloginfo .blog-about-text-content{margin:0 1.67em 1.67em !important;overflow:hidden;} +.bloginfo .blog-about-text-content .join{float:left;overflow:hidden;margin-top:6px;} +.bloginfo .blog-about-text-content .stats{float:left;overflow:hidden;color:#999999;font-size:133%;margin-right:20px;} +.bloginfo .blog-about-text-content .is_banned{float:left;overflow:hidden;width: 180px;color:#999999;font-size:133%;} +.bloginfo .blog-about-text-content .is_banned img{float:left;margin-right:10px;} +.bloginfo .blog-about-text-content .is_banned span{float:left;margin-top:2px;} + + + +#user-contacts .label { + display: block; + width: 270px; + float: left; +} +#user-contacts .end { + display: block; +} +#user-contacts .achtung-minen { + clear: both; +} +#user-contacts .js-field-holder input { + display: block; + float: left; +} +#user-contacts .label .name { + display: block; + width: 100px; + font-weight: bold; + float: left; +} +#user-contacts .label .begin { + display: block; + width: 170px; + float: right; + text-align: right; +} +#user-contacts .end, #user-contacts .begin { + font-size: 10px; + vertical-align: middle; + padding-top: 3px; + color: gray; +} + +#invite-list {margin-top: 15px;} + #invite-list ul li {clear: both; padding-bottom: 10px;} + #invite-list ul li img {float:left; width: 24px; margin-right: 5px;} + #invite-list ul li a {line-height: 24px;} + #invite-list ul li a.idontlikeyouanymore { color: #c00; text-decoration: none;} + #invite-list .delete {color: #ddd; text-decoration: none;} + #invite-list .delete:hover {color: red;} + +.friends_list ul li.banned a {text-decoration: line-through;} + +.profile-buttons { + margin: 8px 0 0 20px; + } + .profile-buttons a { + margin-left: 10px; + } + + +.notes{margin-left:35px;} +.notes table{} +.notes table tr{} +.notes table tr th{text-align:left;padding:5px;border-bottom:2px solid #aaa;} +.notes table tr td{text-align:left;padding:5px;border-bottom:1px solid #eee;} +.notes table tr td.date{color:#666666;font-size:11px;} +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline; filename=category_blogs.css +Content-Type: text/css; name=category_blogs.css +Content-Location: http://habrahabr.ru/css/1307631427/sidebar/category_blogs.css +Content-Transfer-Encoding: 8bit + +/** + * Блок - Другие блоги из выбранной категории. + */ +.category_blogs{} +.category_blogs h3{} +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline; filename=best_company.css +Content-Type: text/css; name=best_company.css +Content-Location: http://habrahabr.ru/css/1307631427/sidebar/best_company.css +Content-Transfer-Encoding: 8bit + +/** + * Блок - компания недели + */ +.best_company{} +.best_company h3{} +.best_company h3 .help-tip{margin-bottom:2px;cursor:pointer;} +.best_company .company_info{margin-bottom:20px;} +.best_company .company_info .name{overflow:hidden;margin-left: 20px;margin-right: 20px;} +.best_company .company_info .name img{float:left;font-size:33%;height:16px;margin:8px 10px 0px 0px;line-height: 1em;width: 16px;} +.best_company .company_info .name a{float:left;font-size: 208%;} +.best_company .company_info p{} +.best_company .company_info p a{color:#666666} +.best_company .company_info p a:hover{color:#a3a3a3} +.best_company .company_info .like{overflow:hidden;margin-left:20px;} + +.best_company .company_info #fans_count{float:left;margin-right:10px;color: #999999;font-size: 133%;margin-top:3px;} + + + + +a.js-addFan-Company, +a.js-removeFan-Company { + height: 20px; + display: block; + float: left; + background-repeat: no-repeat; + background-color: white; + padding: 5px; + height:16px; + display: block; + background: #dbdbdb url(/i/join_button_bg.png) repeat-x left top; + text-shadow: 0 1px #ededed; + color: #6b6b6b; + text-decoration:none; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + border-style: solid; + border-width: 1px; + font-weight:bold; + border-color: #afafaf #a9a9a9 #a3a3a3; +} +a:hover.js-addFan-Company, +a:hover.js-removeFan-Company{color:#5b5b5b} +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline; filename=mootools-1.2-core-yc.js +Content-Type: application/x-javascript; charset=utf-8; name=mootools-1.2-core-yc.js +Content-Location: http://habrahabr.ru/js/1307631427/mootools-1.2-core-yc.js +Content-Transfer-Encoding: Base64 + +Ly9Nb29Ub29scywgPGh0dHA6Ly9tb290b29scy5uZXQ+LCBNeSBPYmplY3QgT3Jp +ZW50ZWQgKEphdmFTY3JpcHQpIFRvb2xzLiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAw +OCBWYWxlcmlvIFByb2lldHRpLCA8aHR0cDovL21hZDRtaWxrLm5ldD4sIE1JVCBT +dHlsZSBMaWNlbnNlLgoKdmFyIE1vb1Rvb2xzPXt2ZXJzaW9uOiIxLjIuMCIsYnVp +bGQ6IiJ9O3ZhciBOYXRpdmU9ZnVuY3Rpb24oSil7Sj1KfHx7fTt2YXIgRj1KLmFm +dGVySW1wbGVtZW50fHxmdW5jdGlvbigpe307dmFyIEc9Si5nZW5lcmljcztHPShH +IT09ZmFsc2UpO3ZhciBIPUoubGVnYWN5Owp2YXIgRT1KLmluaXRpYWxpemU7dmFy +IEI9Si5wcm90ZWN0O3ZhciBBPUoubmFtZTt2YXIgQz1FfHxIO0MuY29uc3RydWN0 +b3I9TmF0aXZlO0MuJGZhbWlseT17bmFtZToibmF0aXZlIn07aWYoSCYmRSl7Qy5w +cm90b3R5cGU9SC5wcm90b3R5cGU7fUMucHJvdG90eXBlLmNvbnN0cnVjdG9yPUM7 +CmlmKEEpe3ZhciBEPUEudG9Mb3dlckNhc2UoKTtDLnByb3RvdHlwZS4kZmFtaWx5 +PXtuYW1lOkR9O05hdGl2ZS50eXBpemUoQyxEKTt9dmFyIEk9ZnVuY3Rpb24oTSxL +LE4sTCl7aWYoIUJ8fEx8fCFNLnByb3RvdHlwZVtLXSl7TS5wcm90b3R5cGVbS109 +Tjt9aWYoRyl7TmF0aXZlLmdlbmVyaWNpemUoTSxLLEIpOwp9Ri5jYWxsKE0sSyxO +KTtyZXR1cm4gTTt9O0MuaW1wbGVtZW50PWZ1bmN0aW9uKEwsSyxOKXtpZih0eXBl +b2YgTD09InN0cmluZyIpe3JldHVybiBJKHRoaXMsTCxLLE4pO31mb3IodmFyIE0g +aW4gTCl7SSh0aGlzLE0sTFtNXSxLKTt9cmV0dXJuIHRoaXM7fTtDLmFsaWFzPWZ1 +bmN0aW9uKE0sSyxOKXtpZih0eXBlb2YgTT09InN0cmluZyIpe009dGhpcy5wcm90 +b3R5cGVbTV07CmlmKE0pe0kodGhpcyxLLE0sTik7fX1lbHNle2Zvcih2YXIgTCBp +biBNKXt0aGlzLmFsaWFzKEwsTVtMXSxLKTt9fXJldHVybiB0aGlzO307cmV0dXJu +IEM7fTtOYXRpdmUuaW1wbGVtZW50PWZ1bmN0aW9uKEQsQyl7Zm9yKHZhciBCPTAs +QT1ELmxlbmd0aDtCPEE7QisrKXtEW0JdLmltcGxlbWVudChDKTsKfX07TmF0aXZl +LmdlbmVyaWNpemU9ZnVuY3Rpb24oQixDLEEpe2lmKCghQXx8IUJbQ10pJiZ0eXBl +b2YgQi5wcm90b3R5cGVbQ109PSJmdW5jdGlvbiIpe0JbQ109ZnVuY3Rpb24oKXt2 +YXIgRD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVy +biBCLnByb3RvdHlwZVtDXS5hcHBseShELnNoaWZ0KCksRCk7Cn07fX07TmF0aXZl +LnR5cGl6ZT1mdW5jdGlvbihBLEIpe2lmKCFBLnR5cGUpe0EudHlwZT1mdW5jdGlv +bihDKXtyZXR1cm4oJHR5cGUoQyk9PT1CKTt9O319O05hdGl2ZS5hbGlhcz1mdW5j +dGlvbihFLEIsQSxGKXtmb3IodmFyIEQ9MCxDPUUubGVuZ3RoO0Q8QztEKyspe0Vb +RF0uYWxpYXMoQixBLEYpOwp9fTsoZnVuY3Rpb24oQil7Zm9yKHZhciBBIGluIEIp +e05hdGl2ZS50eXBpemUoQltBXSxBKTt9fSkoeyJib29sZWFuIjpCb29sZWFuLCJu +YXRpdmUiOk5hdGl2ZSxvYmplY3Q6T2JqZWN0fSk7KGZ1bmN0aW9uKEIpe2Zvcih2 +YXIgQSBpbiBCKXtuZXcgTmF0aXZlKHtuYW1lOkEsaW5pdGlhbGl6ZTpCW0FdLHBy +b3RlY3Q6dHJ1ZX0pOwp9fSkoe1N0cmluZzpTdHJpbmcsRnVuY3Rpb246RnVuY3Rp +b24sTnVtYmVyOk51bWJlcixBcnJheTpBcnJheSxSZWdFeHA6UmVnRXhwLERhdGU6 +RGF0ZX0pOyhmdW5jdGlvbihCLEEpe2Zvcih2YXIgQz1BLmxlbmd0aDtDLS07Qyl7 +TmF0aXZlLmdlbmVyaWNpemUoQixBW0NdLHRydWUpOwp9cmV0dXJuIGFyZ3VtZW50 +cy5jYWxsZWU7fSkoQXJyYXksWyJwb3AiLCJwdXNoIiwicmV2ZXJzZSIsInNoaWZ0 +Iiwic29ydCIsInNwbGljZSIsInVuc2hpZnQiLCJjb25jYXQiLCJqb2luIiwic2xp +Y2UiLCJ0b1N0cmluZyIsInZhbHVlT2YiLCJpbmRleE9mIiwibGFzdEluZGV4T2Yi +XSkoU3RyaW5nLFsiY2hhckF0IiwiY2hhckNvZGVBdCIsImNvbmNhdCIsImluZGV4 +T2YiLCJsYXN0SW5kZXhPZiIsIm1hdGNoIiwicmVwbGFjZSIsInNlYXJjaCIsInNs +aWNlIiwic3BsaXQiLCJzdWJzdHIiLCJzdWJzdHJpbmciLCJ0b0xvd2VyQ2FzZSIs +InRvVXBwZXJDYXNlIiwidmFsdWVPZiJdKTsKZnVuY3Rpb24gJGNoayhBKXtyZXR1 +cm4gISEoQXx8QT09PTApO31mdW5jdGlvbiAkY2xlYXIoQSl7Y2xlYXJUaW1lb3V0 +KEEpO2NsZWFySW50ZXJ2YWwoQSk7cmV0dXJuIG51bGw7fWZ1bmN0aW9uICRkZWZp +bmVkKEEpe3JldHVybihBIT11bmRlZmluZWQpO31mdW5jdGlvbiAkZW1wdHkoKXt9 +ZnVuY3Rpb24gJGFyZ3VtZW50cyhBKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4g +YXJndW1lbnRzW0FdOwp9O31mdW5jdGlvbiAkbGFtYmRhKEEpe3JldHVybih0eXBl +b2YgQT09ImZ1bmN0aW9uIik/QTpmdW5jdGlvbigpe3JldHVybiBBO307fWZ1bmN0 +aW9uICRleHRlbmQoQyxBKXtmb3IodmFyIEIgaW4gKEF8fHt9KSl7Q1tCXT1BW0Jd +O31yZXR1cm4gQzt9ZnVuY3Rpb24gJHVubGluayhDKXt2YXIgQjsKc3dpdGNoKCR0 +eXBlKEMpKXtjYXNlIm9iamVjdCI6Qj17fTtmb3IodmFyIEUgaW4gQyl7QltFXT0k +dW5saW5rKENbRV0pO31icmVhaztjYXNlImhhc2giOkI9JHVubGluayhDLmdldENs +ZWFuKCkpO2JyZWFrO2Nhc2UiYXJyYXkiOkI9W107Zm9yKHZhciBEPTAsQT1DLmxl +bmd0aDsKRDxBO0QrKyl7QltEXT0kdW5saW5rKENbRF0pO31icmVhaztkZWZhdWx0 +OnJldHVybiBDO31yZXR1cm4gQjt9ZnVuY3Rpb24gJG1lcmdlKCl7dmFyIEU9e307 +Zm9yKHZhciBEPTAsQT1hcmd1bWVudHMubGVuZ3RoO0Q8QTtEKyspe3ZhciBCPWFy +Z3VtZW50c1tEXTtpZigkdHlwZShCKSE9Im9iamVjdCIpe2NvbnRpbnVlOwp9Zm9y +KHZhciBDIGluIEIpe3ZhciBHPUJbQ10sRj1FW0NdO0VbQ109KEYmJiR0eXBlKEcp +PT0ib2JqZWN0IiYmJHR5cGUoRik9PSJvYmplY3QiKT8kbWVyZ2UoRixHKTokdW5s +aW5rKEcpO319cmV0dXJuIEU7fWZ1bmN0aW9uICRwaWNrKCl7Zm9yKHZhciBCPTAs +QT1hcmd1bWVudHMubGVuZ3RoOwpCPEE7QisrKXtpZihhcmd1bWVudHNbQl0hPXVu +ZGVmaW5lZCl7cmV0dXJuIGFyZ3VtZW50c1tCXTt9fXJldHVybiBudWxsO31mdW5j +dGlvbiAkcmFuZG9tKEIsQSl7cmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20o +KSooQS1CKzEpK0IpO31mdW5jdGlvbiAkc3BsYXQoQil7dmFyIEE9JHR5cGUoQik7 +CnJldHVybihBKT8oKEEhPSJhcnJheSImJkEhPSJhcmd1bWVudHMiKT9bQl06Qik6 +W107fXZhciAkdGltZT1EYXRlLm5vd3x8ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERh +dGUoKS5nZXRUaW1lKCk7fTtmdW5jdGlvbiAkdHJ5KCl7Zm9yKHZhciBCPTAsQT1h +cmd1bWVudHMubGVuZ3RoOwpCPEE7QisrKXt0cnl7cmV0dXJuIGFyZ3VtZW50c1tC +XSgpO31jYXRjaChDKXt9fXJldHVybiBudWxsO31mdW5jdGlvbiAkdHlwZShBKXtp +ZihBPT11bmRlZmluZWQpe3JldHVybiBmYWxzZTt9aWYoQS4kZmFtaWx5KXtyZXR1 +cm4oQS4kZmFtaWx5Lm5hbWU9PSJudW1iZXIiJiYhaXNGaW5pdGUoQSkpP2ZhbHNl +OkEuJGZhbWlseS5uYW1lOwp9aWYoQS5ub2RlTmFtZSl7c3dpdGNoKEEubm9kZVR5 +cGUpe2Nhc2UgMTpyZXR1cm4iZWxlbWVudCI7Y2FzZSAzOnJldHVybigvXFMvKS50 +ZXN0KEEubm9kZVZhbHVlKT8idGV4dG5vZGUiOiJ3aGl0ZXNwYWNlIjt9fWVsc2V7 +aWYodHlwZW9mIEEubGVuZ3RoPT0ibnVtYmVyIil7aWYoQS5jYWxsZWUpe3JldHVy +biJhcmd1bWVudHMiOwp9ZWxzZXtpZihBLml0ZW0pe3JldHVybiJjb2xsZWN0aW9u +Ijt9fX19cmV0dXJuIHR5cGVvZiBBO312YXIgSGFzaD1uZXcgTmF0aXZlKHtuYW1l +OiJIYXNoIixpbml0aWFsaXplOmZ1bmN0aW9uKEEpe2lmKCR0eXBlKEEpPT0iaGFz +aCIpe0E9JHVubGluayhBLmdldENsZWFuKCkpOwp9Zm9yKHZhciBCIGluIEEpe3Ro +aXNbQl09QVtCXTt9cmV0dXJuIHRoaXM7fX0pO0hhc2guaW1wbGVtZW50KHtnZXRM +ZW5ndGg6ZnVuY3Rpb24oKXt2YXIgQj0wO2Zvcih2YXIgQSBpbiB0aGlzKXtpZih0 +aGlzLmhhc093blByb3BlcnR5KEEpKXtCKys7fX1yZXR1cm4gQjsKfSxmb3JFYWNo +OmZ1bmN0aW9uKEIsQyl7Zm9yKHZhciBBIGluIHRoaXMpe2lmKHRoaXMuaGFzT3du +UHJvcGVydHkoQSkpe0IuY2FsbChDLHRoaXNbQV0sQSx0aGlzKTt9fX0sZ2V0Q2xl +YW46ZnVuY3Rpb24oKXt2YXIgQj17fTtmb3IodmFyIEEgaW4gdGhpcyl7aWYodGhp +cy5oYXNPd25Qcm9wZXJ0eShBKSl7QltBXT10aGlzW0FdOwp9fXJldHVybiBCO319 +KTtIYXNoLmFsaWFzKCJmb3JFYWNoIiwiZWFjaCIpO2Z1bmN0aW9uICRIKEEpe3Jl +dHVybiBuZXcgSGFzaChBKTt9QXJyYXkuaW1wbGVtZW50KHtmb3JFYWNoOmZ1bmN0 +aW9uKEMsRCl7Zm9yKHZhciBCPTAsQT10aGlzLmxlbmd0aDtCPEE7QisrKXtDLmNh +bGwoRCx0aGlzW0JdLEIsdGhpcyk7Cn19fSk7QXJyYXkuYWxpYXMoImZvckVhY2gi +LCJlYWNoIik7ZnVuY3Rpb24gJEEoQyl7aWYoQy5pdGVtKXt2YXIgRD1bXTtmb3Io +dmFyIEI9MCxBPUMubGVuZ3RoO0I8QTtCKyspe0RbQl09Q1tCXTt9cmV0dXJuIEQ7 +fXJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChDKTsKfWZ1bmN0aW9u +ICRlYWNoKEMsQixEKXt2YXIgQT0kdHlwZShDKTsoKEE9PSJhcmd1bWVudHMifHxB +PT0iY29sbGVjdGlvbiJ8fEE9PSJhcnJheSIpP0FycmF5Okhhc2gpLmVhY2goQyxC +LEQpO312YXIgQnJvd3Nlcj1uZXcgSGFzaCh7RW5naW5lOntuYW1lOiJ1bmtub3du +Iix2ZXJzaW9uOiIifSxQbGF0Zm9ybTp7bmFtZToobmF2aWdhdG9yLnBsYXRmb3Jt +Lm1hdGNoKC9tYWN8d2lufGxpbnV4L2kpfHxbIm90aGVyIl0pWzBdLnRvTG93ZXJD +YXNlKCl9LEZlYXR1cmVzOnt4cGF0aDohIShkb2N1bWVudC5ldmFsdWF0ZSksYWly +OiEhKHdpbmRvdy5ydW50aW1lKX0sUGx1Z2luczp7fX0pOwppZih3aW5kb3cub3Bl +cmEpe0Jyb3dzZXIuRW5naW5lPXtuYW1lOiJwcmVzdG8iLHZlcnNpb246KGRvY3Vt +ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUpPzk1MDo5MjV9O31lbHNle2lmKHdp +bmRvdy5BY3RpdmVYT2JqZWN0KXtCcm93c2VyLkVuZ2luZT17bmFtZToidHJpZGVu +dCIsdmVyc2lvbjood2luZG93LlhNTEh0dHBSZXF1ZXN0KT81OjR9Owp9ZWxzZXtp +ZighbmF2aWdhdG9yLnRhaW50RW5hYmxlZCl7QnJvd3Nlci5FbmdpbmU9e25hbWU6 +IndlYmtpdCIsdmVyc2lvbjooQnJvd3Nlci5GZWF0dXJlcy54cGF0aCk/NDIwOjQx +OX07fWVsc2V7aWYoZG9jdW1lbnQuZ2V0Qm94T2JqZWN0Rm9yIT1udWxsKXtCcm93 +c2VyLkVuZ2luZT17bmFtZToiZ2Vja28iLHZlcnNpb246KGRvY3VtZW50LmdldEVs +ZW1lbnRzQnlDbGFzc05hbWUpPzE5OjE4fTsKfX19fUJyb3dzZXIuRW5naW5lW0Jy +b3dzZXIuRW5naW5lLm5hbWVdPUJyb3dzZXIuRW5naW5lW0Jyb3dzZXIuRW5naW5l +Lm5hbWUrQnJvd3Nlci5FbmdpbmUudmVyc2lvbl09dHJ1ZTtpZih3aW5kb3cub3Jp +ZW50YXRpb24hPXVuZGVmaW5lZCl7QnJvd3Nlci5QbGF0Zm9ybS5uYW1lPSJpcG9k +IjsKfUJyb3dzZXIuUGxhdGZvcm1bQnJvd3Nlci5QbGF0Zm9ybS5uYW1lXT10cnVl +O0Jyb3dzZXIuUmVxdWVzdD1mdW5jdGlvbigpe3JldHVybiAkdHJ5KGZ1bmN0aW9u +KCl7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdCgpO30sZnVuY3Rpb24oKXtyZXR1 +cm4gbmV3IEFjdGl2ZVhPYmplY3QoIk1TWE1MMi5YTUxIVFRQIik7Cn0pO307QnJv +d3Nlci5GZWF0dXJlcy54aHI9ISEoQnJvd3Nlci5SZXF1ZXN0KCkpO0Jyb3dzZXIu +UGx1Z2lucy5GbGFzaD0oZnVuY3Rpb24oKXt2YXIgQT0oJHRyeShmdW5jdGlvbigp +e3JldHVybiBuYXZpZ2F0b3IucGx1Z2luc1siU2hvY2t3YXZlIEZsYXNoIl0uZGVz +Y3JpcHRpb247Cn0sZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3Qo +IlNob2Nrd2F2ZUZsYXNoLlNob2Nrd2F2ZUZsYXNoIikuR2V0VmFyaWFibGUoIiR2 +ZXJzaW9uIik7fSl8fCIwIHIwIikubWF0Y2goL1xkKy9nKTtyZXR1cm57dmVyc2lv +bjpwYXJzZUludChBWzBdfHwwKyIuIitBWzFdfHwwKSxidWlsZDpwYXJzZUludChB +WzJdfHwwKX07Cn0pKCk7ZnVuY3Rpb24gJGV4ZWMoQil7aWYoIUIpe3JldHVybiBC +O31pZih3aW5kb3cuZXhlY1NjcmlwdCl7d2luZG93LmV4ZWNTY3JpcHQoQik7fWVs +c2V7dmFyIEE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7QS5zZXRB +dHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2phdmFzY3JpcHQiKTsKQS50ZXh0PUI7ZG9j +dW1lbnQuaGVhZC5hcHBlbmRDaGlsZChBKTtkb2N1bWVudC5oZWFkLnJlbW92ZUNo +aWxkKEEpO31yZXR1cm4gQjt9TmF0aXZlLlVJRD0xO3ZhciAkdWlkPShCcm93c2Vy +LkVuZ2luZS50cmlkZW50KT9mdW5jdGlvbihBKXtyZXR1cm4oQS51aWR8fChBLnVp +ZD1bTmF0aXZlLlVJRCsrXSkpWzBdOwp9OmZ1bmN0aW9uKEEpe3JldHVybiBBLnVp +ZHx8KEEudWlkPU5hdGl2ZS5VSUQrKyk7fTt2YXIgV2luZG93PW5ldyBOYXRpdmUo +e25hbWU6IldpbmRvdyIsbGVnYWN5OihCcm93c2VyLkVuZ2luZS50cmlkZW50KT9u +dWxsOndpbmRvdy5XaW5kb3csaW5pdGlhbGl6ZTpmdW5jdGlvbihBKXskdWlkKEEp +OwppZighQS5FbGVtZW50KXtBLkVsZW1lbnQ9JGVtcHR5O2lmKEJyb3dzZXIuRW5n +aW5lLndlYmtpdCl7QS5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTt9 +QS5FbGVtZW50LnByb3RvdHlwZT0oQnJvd3Nlci5FbmdpbmUud2Via2l0KT93aW5k +b3dbIltbRE9NRWxlbWVudC5wcm90b3R5cGVdXSJdOnt9Owp9cmV0dXJuICRleHRl +bmQoQSxXaW5kb3cuUHJvdG90eXBlKTt9LGFmdGVySW1wbGVtZW50OmZ1bmN0aW9u +KEIsQSl7d2luZG93W0JdPVdpbmRvdy5Qcm90b3R5cGVbQl09QTt9fSk7V2luZG93 +LlByb3RvdHlwZT17JGZhbWlseTp7bmFtZToid2luZG93In19O25ldyBXaW5kb3co +d2luZG93KTsKdmFyIERvY3VtZW50PW5ldyBOYXRpdmUoe25hbWU6IkRvY3VtZW50 +IixsZWdhY3k6KEJyb3dzZXIuRW5naW5lLnRyaWRlbnQpP251bGw6d2luZG93LkRv +Y3VtZW50LGluaXRpYWxpemU6ZnVuY3Rpb24oQSl7JHVpZChBKTtBLmhlYWQ9QS5n +ZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdOwpBLmh0bWw9QS5nZXRFbGVt +ZW50c0J5VGFnTmFtZSgiaHRtbCIpWzBdO0Eud2luZG93PUEuZGVmYXVsdFZpZXd8 +fEEucGFyZW50V2luZG93O2lmKEJyb3dzZXIuRW5naW5lLnRyaWRlbnQ0KXskdHJ5 +KGZ1bmN0aW9uKCl7QS5leGVjQ29tbWFuZCgiQmFja2dyb3VuZEltYWdlQ2FjaGUi +LGZhbHNlLHRydWUpOwp9KTt9cmV0dXJuICRleHRlbmQoQSxEb2N1bWVudC5Qcm90 +b3R5cGUpO30sYWZ0ZXJJbXBsZW1lbnQ6ZnVuY3Rpb24oQixBKXtkb2N1bWVudFtC +XT1Eb2N1bWVudC5Qcm90b3R5cGVbQl09QTt9fSk7RG9jdW1lbnQuUHJvdG90eXBl +PXskZmFtaWx5OntuYW1lOiJkb2N1bWVudCJ9fTsKbmV3IERvY3VtZW50KGRvY3Vt +ZW50KTtBcnJheS5pbXBsZW1lbnQoe2V2ZXJ5OmZ1bmN0aW9uKEMsRCl7Zm9yKHZh +ciBCPTAsQT10aGlzLmxlbmd0aDtCPEE7QisrKXtpZighQy5jYWxsKEQsdGhpc1tC +XSxCLHRoaXMpKXtyZXR1cm4gZmFsc2U7fX1yZXR1cm4gdHJ1ZTsKfSxmaWx0ZXI6 +ZnVuY3Rpb24oRCxFKXt2YXIgQz1bXTtmb3IodmFyIEI9MCxBPXRoaXMubGVuZ3Ro +O0I8QTtCKyspe2lmKEQuY2FsbChFLHRoaXNbQl0sQix0aGlzKSl7Qy5wdXNoKHRo +aXNbQl0pO319cmV0dXJuIEM7fSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiB0aGlz +LmZpbHRlcigkZGVmaW5lZCk7Cn0saW5kZXhPZjpmdW5jdGlvbihDLEQpe3ZhciBB +PXRoaXMubGVuZ3RoO2Zvcih2YXIgQj0oRDwwKT9NYXRoLm1heCgwLEErRCk6RHx8 +MDtCPEE7QisrKXtpZih0aGlzW0JdPT09Qyl7cmV0dXJuIEI7fX1yZXR1cm4gLTE7 +fSxtYXA6ZnVuY3Rpb24oRCxFKXt2YXIgQz1bXTsKZm9yKHZhciBCPTAsQT10aGlz +Lmxlbmd0aDtCPEE7QisrKXtDW0JdPUQuY2FsbChFLHRoaXNbQl0sQix0aGlzKTt9 +cmV0dXJuIEM7fSxzb21lOmZ1bmN0aW9uKEMsRCl7Zm9yKHZhciBCPTAsQT10aGlz +Lmxlbmd0aDtCPEE7QisrKXtpZihDLmNhbGwoRCx0aGlzW0JdLEIsdGhpcykpe3Jl +dHVybiB0cnVlOwp9fXJldHVybiBmYWxzZTt9LGFzc29jaWF0ZTpmdW5jdGlvbihD +KXt2YXIgRD17fSxCPU1hdGgubWluKHRoaXMubGVuZ3RoLEMubGVuZ3RoKTtmb3Io +dmFyIEE9MDtBPEI7QSsrKXtEW0NbQV1dPXRoaXNbQV07fXJldHVybiBEO30sbGlu +azpmdW5jdGlvbihDKXt2YXIgQT17fTsKZm9yKHZhciBFPTAsQj10aGlzLmxlbmd0 +aDtFPEI7RSsrKXtmb3IodmFyIEQgaW4gQyl7aWYoQ1tEXSh0aGlzW0VdKSl7QVtE +XT10aGlzW0VdO2RlbGV0ZSBDW0RdO2JyZWFrO319fXJldHVybiBBO30sY29udGFp +bnM6ZnVuY3Rpb24oQSxCKXtyZXR1cm4gdGhpcy5pbmRleE9mKEEsQikhPS0xOwp9 +LGV4dGVuZDpmdW5jdGlvbihDKXtmb3IodmFyIEI9MCxBPUMubGVuZ3RoO0I8QTtC +Kyspe3RoaXMucHVzaChDW0JdKTt9cmV0dXJuIHRoaXM7fSxnZXRMYXN0OmZ1bmN0 +aW9uKCl7cmV0dXJuKHRoaXMubGVuZ3RoKT90aGlzW3RoaXMubGVuZ3RoLTFdOm51 +bGw7fSxnZXRSYW5kb206ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5sZW5ndGgpP3Ro +aXNbJHJhbmRvbSgwLHRoaXMubGVuZ3RoLTEpXTpudWxsOwp9LGluY2x1ZGU6ZnVu +Y3Rpb24oQSl7aWYoIXRoaXMuY29udGFpbnMoQSkpe3RoaXMucHVzaChBKTt9cmV0 +dXJuIHRoaXM7fSxjb21iaW5lOmZ1bmN0aW9uKEMpe2Zvcih2YXIgQj0wLEE9Qy5s +ZW5ndGg7QjxBO0IrKyl7dGhpcy5pbmNsdWRlKENbQl0pO31yZXR1cm4gdGhpczsK +fSxlcmFzZTpmdW5jdGlvbihCKXtmb3IodmFyIEE9dGhpcy5sZW5ndGg7QS0tO0Ep +e2lmKHRoaXNbQV09PT1CKXt0aGlzLnNwbGljZShBLDEpO319cmV0dXJuIHRoaXM7 +fSxlbXB0eTpmdW5jdGlvbigpe3RoaXMubGVuZ3RoPTA7cmV0dXJuIHRoaXM7fSxm +bGF0dGVuOmZ1bmN0aW9uKCl7dmFyIEQ9W107CmZvcih2YXIgQj0wLEE9dGhpcy5s +ZW5ndGg7QjxBO0IrKyl7dmFyIEM9JHR5cGUodGhpc1tCXSk7aWYoIUMpe2NvbnRp +bnVlO31EPUQuY29uY2F0KChDPT0iYXJyYXkifHxDPT0iY29sbGVjdGlvbiJ8fEM9 +PSJhcmd1bWVudHMiKT9BcnJheS5mbGF0dGVuKHRoaXNbQl0pOnRoaXNbQl0pOwp9 +cmV0dXJuIEQ7fSxoZXhUb1JnYjpmdW5jdGlvbihCKXtpZih0aGlzLmxlbmd0aCE9 +Myl7cmV0dXJuIG51bGw7fXZhciBBPXRoaXMubWFwKGZ1bmN0aW9uKEMpe2lmKEMu +bGVuZ3RoPT0xKXtDKz1DO31yZXR1cm4gQy50b0ludCgxNik7fSk7cmV0dXJuKEIp +P0E6InJnYigiK0ErIikiOwp9LHJnYlRvSGV4OmZ1bmN0aW9uKEQpe2lmKHRoaXMu +bGVuZ3RoPDMpe3JldHVybiBudWxsO31pZih0aGlzLmxlbmd0aD09NCYmdGhpc1sz +XT09MCYmIUQpe3JldHVybiJ0cmFuc3BhcmVudCI7fXZhciBCPVtdO2Zvcih2YXIg +QT0wO0E8MztBKyspe3ZhciBDPSh0aGlzW0FdLTApLnRvU3RyaW5nKDE2KTsKQi5w +dXNoKChDLmxlbmd0aD09MSk/IjAiK0M6Qyk7fXJldHVybihEKT9COiIjIitCLmpv +aW4oIiIpO319KTtGdW5jdGlvbi5pbXBsZW1lbnQoe2V4dGVuZDpmdW5jdGlvbihB +KXtmb3IodmFyIEIgaW4gQSl7dGhpc1tCXT1BW0JdO31yZXR1cm4gdGhpczt9LGNy +ZWF0ZTpmdW5jdGlvbihCKXt2YXIgQT10aGlzOwpCPUJ8fHt9O3JldHVybiBmdW5j +dGlvbihEKXt2YXIgQz1CLmFyZ3VtZW50cztDPShDIT11bmRlZmluZWQpPyRzcGxh +dChDKTpBcnJheS5zbGljZShhcmd1bWVudHMsKEIuZXZlbnQpPzE6MCk7aWYoQi5l +dmVudCl7Qz1bRHx8d2luZG93LmV2ZW50XS5leHRlbmQoQyk7Cn12YXIgRT1mdW5j +dGlvbigpe3JldHVybiBBLmFwcGx5KEIuYmluZHx8bnVsbCxDKTt9O2lmKEIuZGVs +YXkpe3JldHVybiBzZXRUaW1lb3V0KEUsQi5kZWxheSk7fWlmKEIucGVyaW9kaWNh +bCl7cmV0dXJuIHNldEludGVydmFsKEUsQi5wZXJpb2RpY2FsKTt9aWYoQi5hdHRl +bXB0KXtyZXR1cm4gJHRyeShFKTsKfXJldHVybiBFKCk7fTt9LHBhc3M6ZnVuY3Rp +b24oQSxCKXtyZXR1cm4gdGhpcy5jcmVhdGUoe2FyZ3VtZW50czpBLGJpbmQ6Qn0p +O30sYXR0ZW1wdDpmdW5jdGlvbihBLEIpe3JldHVybiB0aGlzLmNyZWF0ZSh7YXJn +dW1lbnRzOkEsYmluZDpCLGF0dGVtcHQ6dHJ1ZX0pKCk7Cn0sYmluZDpmdW5jdGlv +bihCLEEpe3JldHVybiB0aGlzLmNyZWF0ZSh7YmluZDpCLGFyZ3VtZW50czpBfSk7 +fSxiaW5kV2l0aEV2ZW50OmZ1bmN0aW9uKEIsQSl7cmV0dXJuIHRoaXMuY3JlYXRl +KHtiaW5kOkIsZXZlbnQ6dHJ1ZSxhcmd1bWVudHM6QX0pO30sZGVsYXk6ZnVuY3Rp +b24oQixDLEEpe3JldHVybiB0aGlzLmNyZWF0ZSh7ZGVsYXk6QixiaW5kOkMsYXJn +dW1lbnRzOkF9KSgpOwp9LHBlcmlvZGljYWw6ZnVuY3Rpb24oQSxDLEIpe3JldHVy +biB0aGlzLmNyZWF0ZSh7cGVyaW9kaWNhbDpBLGJpbmQ6Qyxhcmd1bWVudHM6Qn0p +KCk7fSxydW46ZnVuY3Rpb24oQSxCKXtyZXR1cm4gdGhpcy5hcHBseShCLCRzcGxh +dChBKSk7fX0pO051bWJlci5pbXBsZW1lbnQoe2xpbWl0OmZ1bmN0aW9uKEIsQSl7 +cmV0dXJuIE1hdGgubWluKEEsTWF0aC5tYXgoQix0aGlzKSk7Cn0scm91bmQ6ZnVu +Y3Rpb24oQSl7QT1NYXRoLnBvdygxMCxBfHwwKTtyZXR1cm4gTWF0aC5yb3VuZCh0 +aGlzKkEpL0E7fSx0aW1lczpmdW5jdGlvbihCLEMpe2Zvcih2YXIgQT0wO0E8dGhp +cztBKyspe0IuY2FsbChDLEEsdGhpcyk7fX0sdG9GbG9hdDpmdW5jdGlvbigpe3Jl +dHVybiBwYXJzZUZsb2F0KHRoaXMpOwp9LHRvSW50OmZ1bmN0aW9uKEEpe3JldHVy +biBwYXJzZUludCh0aGlzLEF8fDEwKTt9fSk7TnVtYmVyLmFsaWFzKCJ0aW1lcyIs +ImVhY2giKTsoZnVuY3Rpb24oQil7dmFyIEE9e307Qi5lYWNoKGZ1bmN0aW9uKEMp +e2lmKCFOdW1iZXJbQ10pe0FbQ109ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aFtDXS5h +cHBseShudWxsLFt0aGlzXS5jb25jYXQoJEEoYXJndW1lbnRzKSkpOwp9O319KTtO +dW1iZXIuaW1wbGVtZW50KEEpO30pKFsiYWJzIiwiYWNvcyIsImFzaW4iLCJhdGFu +IiwiYXRhbjIiLCJjZWlsIiwiY29zIiwiZXhwIiwiZmxvb3IiLCJsb2ciLCJtYXgi +LCJtaW4iLCJwb3ciLCJzaW4iLCJzcXJ0IiwidGFuIl0pO1N0cmluZy5pbXBsZW1l +bnQoe3Rlc3Q6ZnVuY3Rpb24oQSxCKXtyZXR1cm4oKHR5cGVvZiBBPT0ic3RyaW5n +Iik/bmV3IFJlZ0V4cChBLEIpOkEpLnRlc3QodGhpcyk7Cn0sY29udGFpbnM6ZnVu +Y3Rpb24oQSxCKXtyZXR1cm4oQik/KEIrdGhpcytCKS5pbmRleE9mKEIrQStCKT4t +MTp0aGlzLmluZGV4T2YoQSk+LTE7fSx0cmltOmZ1bmN0aW9uKCl7cmV0dXJuIHRo +aXMucmVwbGFjZSgvXlxzK3xccyskL2csIiIpO30sY2xlYW46ZnVuY3Rpb24oKXty +ZXR1cm4gdGhpcy5yZXBsYWNlKC9ccysvZywiICIpLnRyaW0oKTsKfSxjYW1lbENh +c2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXBsYWNlKC8tXEQvZyxmdW5jdGlv +bihBKXtyZXR1cm4gQS5jaGFyQXQoMSkudG9VcHBlckNhc2UoKTt9KTt9LGh5cGhl +bmF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlcGxhY2UoL1tBLVpdL2csZnVu +Y3Rpb24oQSl7cmV0dXJuKCItIitBLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpKTsK +fSk7fSxjYXBpdGFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVwbGFjZSgv +XGJbYS16XS9nLGZ1bmN0aW9uKEEpe3JldHVybiBBLnRvVXBwZXJDYXNlKCk7fSk7 +fSxlc2NhcGVSZWdFeHA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXBsYWNlKC8o +Wy0uKis/XiR7fSgpfFtcXVwvXFxdKS9nLCJcXCQxIik7Cn0sdG9JbnQ6ZnVuY3Rp +b24oQSl7cmV0dXJuIHBhcnNlSW50KHRoaXMsQXx8MTApO30sdG9GbG9hdDpmdW5j +dGlvbigpe3JldHVybiBwYXJzZUZsb2F0KHRoaXMpO30saGV4VG9SZ2I6ZnVuY3Rp +b24oQil7dmFyIEE9dGhpcy5tYXRjaCgvXiM/KFx3ezEsMn0pKFx3ezEsMn0pKFx3 +ezEsMn0pJC8pOwpyZXR1cm4oQSk/QS5zbGljZSgxKS5oZXhUb1JnYihCKTpudWxs +O30scmdiVG9IZXg6ZnVuY3Rpb24oQil7dmFyIEE9dGhpcy5tYXRjaCgvXGR7MSwz +fS9nKTtyZXR1cm4oQSk/QS5yZ2JUb0hleChCKTpudWxsO30sc3RyaXBTY3JpcHRz +OmZ1bmN0aW9uKEIpe3ZhciBBPSIiOwp2YXIgQz10aGlzLnJlcGxhY2UoLzxzY3Jp +cHRbXj5dKj4oW1xzXFNdKj8pPFwvc2NyaXB0Pi9naSxmdW5jdGlvbigpe0ErPWFy +Z3VtZW50c1sxXSsiXG4iO3JldHVybiIiO30pO2lmKEI9PT10cnVlKXskZXhlYyhB +KTt9ZWxzZXtpZigkdHlwZShCKT09ImZ1bmN0aW9uIil7QihBLEMpOwp9fXJldHVy +biBDO30sc3Vic3RpdHV0ZTpmdW5jdGlvbihBLEIpe3JldHVybiB0aGlzLnJlcGxh +Y2UoQnx8KC9cXD9ceyhbXn1dKylcfS9nKSxmdW5jdGlvbihELEMpe2lmKEQuY2hh +ckF0KDApPT0iXFwiKXtyZXR1cm4gRC5zbGljZSgxKTt9cmV0dXJuKEFbQ10hPXVu +ZGVmaW5lZCk/QVtDXToiIjsKfSk7fX0pO0hhc2guaW1wbGVtZW50KHtoYXM6T2Jq +ZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxrZXlPZjpmdW5jdGlvbihCKXtm +b3IodmFyIEEgaW4gdGhpcyl7aWYodGhpcy5oYXNPd25Qcm9wZXJ0eShBKSYmdGhp +c1tBXT09PUIpe3JldHVybiBBO319cmV0dXJuIG51bGw7Cn0saGFzVmFsdWU6ZnVu +Y3Rpb24oQSl7cmV0dXJuKEhhc2gua2V5T2YodGhpcyxBKSE9PW51bGwpO30sZXh0 +ZW5kOmZ1bmN0aW9uKEEpe0hhc2guZWFjaChBLGZ1bmN0aW9uKEMsQil7SGFzaC5z +ZXQodGhpcyxCLEMpO30sdGhpcyk7cmV0dXJuIHRoaXM7fSxjb21iaW5lOmZ1bmN0 +aW9uKEEpe0hhc2guZWFjaChBLGZ1bmN0aW9uKEMsQil7SGFzaC5pbmNsdWRlKHRo +aXMsQixDKTsKfSx0aGlzKTtyZXR1cm4gdGhpczt9LGVyYXNlOmZ1bmN0aW9uKEEp +e2lmKHRoaXMuaGFzT3duUHJvcGVydHkoQSkpe2RlbGV0ZSB0aGlzW0FdO31yZXR1 +cm4gdGhpczt9LGdldDpmdW5jdGlvbihBKXtyZXR1cm4odGhpcy5oYXNPd25Qcm9w +ZXJ0eShBKSk/dGhpc1tBXTpudWxsOwp9LHNldDpmdW5jdGlvbihBLEIpe2lmKCF0 +aGlzW0FdfHx0aGlzLmhhc093blByb3BlcnR5KEEpKXt0aGlzW0FdPUI7fXJldHVy +biB0aGlzO30sZW1wdHk6ZnVuY3Rpb24oKXtIYXNoLmVhY2godGhpcyxmdW5jdGlv +bihCLEEpe2RlbGV0ZSB0aGlzW0FdO30sdGhpcyk7CnJldHVybiB0aGlzO30saW5j +bHVkZTpmdW5jdGlvbihCLEMpe3ZhciBBPXRoaXNbQl07aWYoQT09dW5kZWZpbmVk +KXt0aGlzW0JdPUM7fXJldHVybiB0aGlzO30sbWFwOmZ1bmN0aW9uKEIsQyl7dmFy +IEE9bmV3IEhhc2g7SGFzaC5lYWNoKHRoaXMsZnVuY3Rpb24oRSxEKXtBLnNldChE +LEIuY2FsbChDLEUsRCx0aGlzKSk7Cn0sdGhpcyk7cmV0dXJuIEE7fSxmaWx0ZXI6 +ZnVuY3Rpb24oQixDKXt2YXIgQT1uZXcgSGFzaDtIYXNoLmVhY2godGhpcyxmdW5j +dGlvbihFLEQpe2lmKEIuY2FsbChDLEUsRCx0aGlzKSl7QS5zZXQoRCxFKTt9fSx0 +aGlzKTtyZXR1cm4gQTt9LGV2ZXJ5OmZ1bmN0aW9uKEIsQyl7Zm9yKHZhciBBIGlu +IHRoaXMpe2lmKHRoaXMuaGFzT3duUHJvcGVydHkoQSkmJiFCLmNhbGwoQyx0aGlz +W0FdLEEpKXtyZXR1cm4gZmFsc2U7Cn19cmV0dXJuIHRydWU7fSxzb21lOmZ1bmN0 +aW9uKEIsQyl7Zm9yKHZhciBBIGluIHRoaXMpe2lmKHRoaXMuaGFzT3duUHJvcGVy +dHkoQSkmJkIuY2FsbChDLHRoaXNbQV0sQSkpe3JldHVybiB0cnVlO319cmV0dXJu +IGZhbHNlO30sZ2V0S2V5czpmdW5jdGlvbigpe3ZhciBBPVtdOwpIYXNoLmVhY2go +dGhpcyxmdW5jdGlvbihDLEIpe0EucHVzaChCKTt9KTtyZXR1cm4gQTt9LGdldFZh +bHVlczpmdW5jdGlvbigpe3ZhciBBPVtdO0hhc2guZWFjaCh0aGlzLGZ1bmN0aW9u +KEIpe0EucHVzaChCKTt9KTtyZXR1cm4gQTt9LHRvUXVlcnlTdHJpbmc6ZnVuY3Rp +b24oQSl7dmFyIEI9W107Ckhhc2guZWFjaCh0aGlzLGZ1bmN0aW9uKEYsRSl7aWYo +QSl7RT1BKyJbIitFKyJdIjt9dmFyIEQ7c3dpdGNoKCR0eXBlKEYpKXtjYXNlIm9i +amVjdCI6RD1IYXNoLnRvUXVlcnlTdHJpbmcoRixFKTticmVhaztjYXNlImFycmF5 +Ijp2YXIgQz17fTtGLmVhY2goZnVuY3Rpb24oSCxHKXtDW0ddPUg7Cn0pO0Q9SGFz +aC50b1F1ZXJ5U3RyaW5nKEMsRSk7YnJlYWs7ZGVmYXVsdDpEPUUrIj0iK2VuY29k +ZVVSSUNvbXBvbmVudChGKTt9aWYoRiE9dW5kZWZpbmVkKXtCLnB1c2goRCk7fX0p +O3JldHVybiBCLmpvaW4oIiYiKTt9fSk7SGFzaC5hbGlhcyh7a2V5T2Y6ImluZGV4 +T2YiLGhhc1ZhbHVlOiJjb250YWlucyJ9KTsKdmFyIEV2ZW50PW5ldyBOYXRpdmUo +e25hbWU6IkV2ZW50Iixpbml0aWFsaXplOmZ1bmN0aW9uKEEsRil7Rj1GfHx3aW5k +b3c7dmFyIEs9Ri5kb2N1bWVudDtBPUF8fEYuZXZlbnQ7aWYoQS4kZXh0ZW5kZWQp +e3JldHVybiBBO310aGlzLiRleHRlbmRlZD10cnVlO3ZhciBKPUEudHlwZTsKdmFy +IEc9QS50YXJnZXR8fEEuc3JjRWxlbWVudDt3aGlsZShHJiZHLm5vZGVUeXBlPT0z +KXtHPUcucGFyZW50Tm9kZTt9aWYoSi50ZXN0KC9rZXkvKSl7dmFyIEI9QS53aGlj +aHx8QS5rZXlDb2RlO3ZhciBNPUV2ZW50LktleXMua2V5T2YoQik7aWYoSj09Imtl +eWRvd24iKXt2YXIgRD1CLTExMTsKaWYoRD4wJiZEPDEzKXtNPSJmIitEO319TT1N +fHxTdHJpbmcuZnJvbUNoYXJDb2RlKEIpLnRvTG93ZXJDYXNlKCk7fWVsc2V7aWYo +Si5tYXRjaCgvKGNsaWNrfG1vdXNlfG1lbnUpL2kpKXtLPSghSy5jb21wYXRNb2Rl +fHxLLmNvbXBhdE1vZGU9PSJDU1MxQ29tcGF0Iik/Sy5odG1sOksuYm9keTsKdmFy +IEk9e3g6QS5wYWdlWHx8QS5jbGllbnRYK0suc2Nyb2xsTGVmdCx5OkEucGFnZVl8 +fEEuY2xpZW50WStLLnNjcm9sbFRvcH07dmFyIEM9e3g6KEEucGFnZVgpP0EucGFn +ZVgtRi5wYWdlWE9mZnNldDpBLmNsaWVudFgseTooQS5wYWdlWSk/QS5wYWdlWS1G +LnBhZ2VZT2Zmc2V0OkEuY2xpZW50WX07CmlmKEoubWF0Y2goL0RPTU1vdXNlU2Ny +b2xsfG1vdXNld2hlZWwvKSl7dmFyIEg9KEEud2hlZWxEZWx0YSk/QS53aGVlbERl +bHRhLzEyMDotKEEuZGV0YWlsfHwwKS8zO312YXIgRT0oQS53aGljaD09Myl8fChB +LmJ1dHRvbj09Mik7dmFyIEw9bnVsbDtpZihKLm1hdGNoKC9vdmVyfG91dC8pKXtz +d2l0Y2goSil7Y2FzZSJtb3VzZW92ZXIiOkw9QS5yZWxhdGVkVGFyZ2V0fHxBLmZy +b21FbGVtZW50OwpicmVhaztjYXNlIm1vdXNlb3V0IjpMPUEucmVsYXRlZFRhcmdl +dHx8QS50b0VsZW1lbnQ7fWlmKCEoZnVuY3Rpb24oKXt3aGlsZShMJiZMLm5vZGVU +eXBlPT0zKXtMPUwucGFyZW50Tm9kZTt9cmV0dXJuIHRydWU7fSkuY3JlYXRlKHth +dHRlbXB0OkJyb3dzZXIuRW5naW5lLmdlY2tvfSkoKSl7TD1mYWxzZTsKfX19fXJl +dHVybiAkZXh0ZW5kKHRoaXMse2V2ZW50OkEsdHlwZTpKLHBhZ2U6SSxjbGllbnQ6 +QyxyaWdodENsaWNrOkUsd2hlZWw6SCxyZWxhdGVkVGFyZ2V0OkwsdGFyZ2V0Okcs +Y29kZTpCLGtleTpNLHNoaWZ0OkEuc2hpZnRLZXksY29udHJvbDpBLmN0cmxLZXks +YWx0OkEuYWx0S2V5LG1ldGE6QS5tZXRhS2V5fSk7Cn19KTtFdmVudC5LZXlzPW5l +dyBIYXNoKHtlbnRlcjoxMyx1cDozOCxkb3duOjQwLGxlZnQ6MzcscmlnaHQ6Mzks +ZXNjOjI3LHNwYWNlOjMyLGJhY2tzcGFjZTo4LHRhYjo5LCJkZWxldGUiOjQ2fSk7 +RXZlbnQuaW1wbGVtZW50KHtzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3Rv +cFByb3BhZ2F0aW9uKCkucHJldmVudERlZmF1bHQoKTsKfSxzdG9wUHJvcGFnYXRp +b246ZnVuY3Rpb24oKXtpZih0aGlzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbil7dGhp +cy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKTt9ZWxzZXt0aGlzLmV2ZW50LmNhbmNl +bEJ1YmJsZT10cnVlO31yZXR1cm4gdGhpczt9LHByZXZlbnREZWZhdWx0OmZ1bmN0 +aW9uKCl7aWYodGhpcy5ldmVudC5wcmV2ZW50RGVmYXVsdCl7dGhpcy5ldmVudC5w +cmV2ZW50RGVmYXVsdCgpOwp9ZWxzZXt0aGlzLmV2ZW50LnJldHVyblZhbHVlPWZh +bHNlO31yZXR1cm4gdGhpczt9fSk7dmFyIENsYXNzPW5ldyBOYXRpdmUoe25hbWU6 +IkNsYXNzIixpbml0aWFsaXplOmZ1bmN0aW9uKEIpe0I9Qnx8e307dmFyIEE9ZnVu +Y3Rpb24oRSl7Zm9yKHZhciBEIGluIHRoaXMpe3RoaXNbRF09JHVubGluayh0aGlz +W0RdKTsKfWZvcih2YXIgRiBpbiBDbGFzcy5NdXRhdG9ycyl7aWYoIXRoaXNbRl0p +e2NvbnRpbnVlO31DbGFzcy5NdXRhdG9yc1tGXSh0aGlzLHRoaXNbRl0pO2RlbGV0 +ZSB0aGlzW0ZdO310aGlzLmNvbnN0cnVjdG9yPUE7aWYoRT09PSRlbXB0eSl7cmV0 +dXJuIHRoaXM7fXZhciBDPSh0aGlzLmluaXRpYWxpemUpP3RoaXMuaW5pdGlhbGl6 +ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dGhpczsKaWYodGhpcy5vcHRpb25zJiZ0 +aGlzLm9wdGlvbnMuaW5pdGlhbGl6ZSl7dGhpcy5vcHRpb25zLmluaXRpYWxpemUu +Y2FsbCh0aGlzKTt9cmV0dXJuIEM7fTskZXh0ZW5kKEEsdGhpcyk7QS5jb25zdHJ1 +Y3Rvcj1DbGFzcztBLnByb3RvdHlwZT1CO3JldHVybiBBO319KTsKQ2xhc3MuaW1w +bGVtZW50KHtpbXBsZW1lbnQ6ZnVuY3Rpb24oKXtDbGFzcy5NdXRhdG9ycy5JbXBs +ZW1lbnRzKHRoaXMucHJvdG90eXBlLEFycmF5LnNsaWNlKGFyZ3VtZW50cykpO3Jl +dHVybiB0aGlzO319KTtDbGFzcy5NdXRhdG9ycz17SW1wbGVtZW50czpmdW5jdGlv +bihBLEIpeyRzcGxhdChCKS5lYWNoKGZ1bmN0aW9uKEMpeyRleHRlbmQoQSwoJHR5 +cGUoQyk9PSJjbGFzcyIpP25ldyBDKCRlbXB0eSk6Qyk7Cn0pO30sRXh0ZW5kczpm +dW5jdGlvbihzZWxmLGtsYXNzKXt2YXIgaW5zdGFuY2U9bmV3IGtsYXNzKCRlbXB0 +eSk7ZGVsZXRlIGluc3RhbmNlLnBhcmVudDtkZWxldGUgaW5zdGFuY2UucGFyZW50 +T2Y7Zm9yKHZhciBrZXkgaW4gaW5zdGFuY2Upe3ZhciBjdXJyZW50PXNlbGZba2V5 +XSxwcmV2aW91cz1pbnN0YW5jZVtrZXldOwppZihjdXJyZW50PT11bmRlZmluZWQp +e3NlbGZba2V5XT1wcmV2aW91cztjb250aW51ZTt9dmFyIGN0eXBlPSR0eXBlKGN1 +cnJlbnQpLHB0eXBlPSR0eXBlKHByZXZpb3VzKTtpZihjdHlwZSE9cHR5cGUpe2Nv +bnRpbnVlO31zd2l0Y2goY3R5cGUpe2Nhc2UiZnVuY3Rpb24iOmlmKCFhcmd1bWVu +dHMuY2FsbGVlLmNhbGxlcil7c2VsZltrZXldPWV2YWwoIigiK1N0cmluZyhjdXJy +ZW50KS5yZXBsYWNlKC9cYnRoaXNcLnBhcmVudFwoXHMqKFwpKT8vZyxmdW5jdGlv +bihmdWxsLGNsb3NlKXtyZXR1cm4iYXJndW1lbnRzLmNhbGxlZS5fcGFyZW50Xy5j +YWxsKHRoaXMiKyhjbG9zZXx8IiwgIik7Cn0pKyIpIik7fXNlbGZba2V5XS5fcGFy +ZW50Xz1wcmV2aW91czticmVhaztjYXNlIm9iamVjdCI6c2VsZltrZXldPSRtZXJn +ZShwcmV2aW91cyxjdXJyZW50KTt9fXNlbGYucGFyZW50PWZ1bmN0aW9uKCl7cmV0 +dXJuIGFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyLl9wYXJlbnRfLmFwcGx5KHRoaXMs +YXJndW1lbnRzKTsKfTtzZWxmLnBhcmVudE9mPWZ1bmN0aW9uKGRlc2NlbmRhbnQp +e3JldHVybiBkZXNjZW5kYW50Ll9wYXJlbnRfLmFwcGx5KHRoaXMsQXJyYXkuc2xp +Y2UoYXJndW1lbnRzLDEpKTt9O319O3ZhciBDaGFpbj1uZXcgQ2xhc3Moe2NoYWlu +OmZ1bmN0aW9uKCl7dGhpcy4kY2hhaW49KHRoaXMuJGNoYWlufHxbXSkuZXh0ZW5k +KGFyZ3VtZW50cyk7CnJldHVybiB0aGlzO30sY2FsbENoYWluOmZ1bmN0aW9uKCl7 +cmV0dXJuKHRoaXMuJGNoYWluJiZ0aGlzLiRjaGFpbi5sZW5ndGgpP3RoaXMuJGNo +YWluLnNoaWZ0KCkuYXBwbHkodGhpcyxhcmd1bWVudHMpOmZhbHNlO30sY2xlYXJD +aGFpbjpmdW5jdGlvbigpe2lmKHRoaXMuJGNoYWluKXt0aGlzLiRjaGFpbi5lbXB0 +eSgpOwp9cmV0dXJuIHRoaXM7fX0pO3ZhciBFdmVudHM9bmV3IENsYXNzKHthZGRF +dmVudDpmdW5jdGlvbihDLEIsQSl7Qz1FdmVudHMucmVtb3ZlT24oQyk7aWYoQiE9 +JGVtcHR5KXt0aGlzLiRldmVudHM9dGhpcy4kZXZlbnRzfHx7fTt0aGlzLiRldmVu +dHNbQ109dGhpcy4kZXZlbnRzW0NdfHxbXTsKdGhpcy4kZXZlbnRzW0NdLmluY2x1 +ZGUoQik7aWYoQSl7Qi5pbnRlcm5hbD10cnVlO319cmV0dXJuIHRoaXM7fSxhZGRF +dmVudHM6ZnVuY3Rpb24oQSl7Zm9yKHZhciBCIGluIEEpe3RoaXMuYWRkRXZlbnQo +QixBW0JdKTt9cmV0dXJuIHRoaXM7fSxmaXJlRXZlbnQ6ZnVuY3Rpb24oQyxCLEEp +e0M9RXZlbnRzLnJlbW92ZU9uKEMpOwppZighdGhpcy4kZXZlbnRzfHwhdGhpcy4k +ZXZlbnRzW0NdKXtyZXR1cm4gdGhpczt9dGhpcy4kZXZlbnRzW0NdLmVhY2goZnVu +Y3Rpb24oRCl7RC5jcmVhdGUoe2JpbmQ6dGhpcyxkZWxheTpBLCJhcmd1bWVudHMi +OkJ9KSgpO30sdGhpcyk7cmV0dXJuIHRoaXM7fSxyZW1vdmVFdmVudDpmdW5jdGlv +bihCLEEpe0I9RXZlbnRzLnJlbW92ZU9uKEIpOwppZighdGhpcy4kZXZlbnRzfHwh +dGhpcy4kZXZlbnRzW0JdKXtyZXR1cm4gdGhpczt9aWYoIUEuaW50ZXJuYWwpe3Ro +aXMuJGV2ZW50c1tCXS5lcmFzZShBKTt9cmV0dXJuIHRoaXM7fSxyZW1vdmVFdmVu +dHM6ZnVuY3Rpb24oQyl7Zm9yKHZhciBEIGluIHRoaXMuJGV2ZW50cyl7aWYoQyYm +QyE9RCl7Y29udGludWU7Cn12YXIgQj10aGlzLiRldmVudHNbRF07Zm9yKHZhciBB +PUIubGVuZ3RoO0EtLTtBKXt0aGlzLnJlbW92ZUV2ZW50KEQsQltBXSk7fX1yZXR1 +cm4gdGhpczt9fSk7RXZlbnRzLnJlbW92ZU9uPWZ1bmN0aW9uKEEpe3JldHVybiBB +LnJlcGxhY2UoL15vbihbQS1aXSkvLGZ1bmN0aW9uKEIsQyl7cmV0dXJuIEMudG9M +b3dlckNhc2UoKTsKfSk7fTt2YXIgT3B0aW9ucz1uZXcgQ2xhc3Moe3NldE9wdGlv +bnM6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnM9JG1lcmdlLnJ1bihbdGhpcy5vcHRp +b25zXS5leHRlbmQoYXJndW1lbnRzKSk7aWYoIXRoaXMuYWRkRXZlbnQpe3JldHVy +biB0aGlzO31mb3IodmFyIEEgaW4gdGhpcy5vcHRpb25zKXtpZigkdHlwZSh0aGlz +Lm9wdGlvbnNbQV0pIT0iZnVuY3Rpb24ifHwhKC9eb25bQS1aXS8pLnRlc3QoQSkp +e2NvbnRpbnVlOwp9dGhpcy5hZGRFdmVudChBLHRoaXMub3B0aW9uc1tBXSk7ZGVs +ZXRlIHRoaXMub3B0aW9uc1tBXTt9cmV0dXJuIHRoaXM7fX0pO0RvY3VtZW50Lmlt +cGxlbWVudCh7bmV3RWxlbWVudDpmdW5jdGlvbihBLEIpe2lmKEJyb3dzZXIuRW5n +aW5lLnRyaWRlbnQmJkIpe1sibmFtZSIsInR5cGUiLCJjaGVja2VkIl0uZWFjaChm +dW5jdGlvbihDKXtpZighQltDXSl7cmV0dXJuIDsKfUErPSIgIitDKyc9IicrQltD +XSsnIic7aWYoQyE9ImNoZWNrZWQiKXtkZWxldGUgQltDXTt9fSk7QT0iPCIrQSsi +PiI7fXJldHVybiAkLmVsZW1lbnQodGhpcy5jcmVhdGVFbGVtZW50KEEpKS5zZXQo +Qik7fSxuZXdUZXh0Tm9kZTpmdW5jdGlvbihBKXtyZXR1cm4gdGhpcy5jcmVhdGVU +ZXh0Tm9kZShBKTsKfSxnZXREb2N1bWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlz +O30sZ2V0V2luZG93OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdFZpZXd8 +fHRoaXMucGFyZW50V2luZG93O30scHVyZ2U6ZnVuY3Rpb24oKXt2YXIgQz10aGlz +LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7CmZvcih2YXIgQj0wLEE9Qy5sZW5n +dGg7QjxBO0IrKyl7QnJvd3Nlci5mcmVlTWVtKENbQl0pO319fSk7dmFyIEVsZW1l +bnQ9bmV3IE5hdGl2ZSh7bmFtZToiRWxlbWVudCIsbGVnYWN5OndpbmRvdy5FbGVt +ZW50LGluaXRpYWxpemU6ZnVuY3Rpb24oQSxCKXt2YXIgQz1FbGVtZW50LkNvbnN0 +cnVjdG9ycy5nZXQoQSk7CmlmKEMpe3JldHVybiBDKEIpO31pZih0eXBlb2YgQT09 +InN0cmluZyIpe3JldHVybiBkb2N1bWVudC5uZXdFbGVtZW50KEEsQik7fXJldHVy +biAkKEEpLnNldChCKTt9LGFmdGVySW1wbGVtZW50OmZ1bmN0aW9uKEEsQil7aWYo +IUFycmF5W0FdKXtFbGVtZW50cy5pbXBsZW1lbnQoQSxFbGVtZW50cy5tdWx0aShB +KSk7Cn1FbGVtZW50LlByb3RvdHlwZVtBXT1CO319KTtFbGVtZW50LlByb3RvdHlw +ZT17JGZhbWlseTp7bmFtZToiZWxlbWVudCJ9fTtFbGVtZW50LkNvbnN0cnVjdG9y +cz1uZXcgSGFzaDt2YXIgSUZyYW1lPW5ldyBOYXRpdmUoe25hbWU6IklGcmFtZSIs +Z2VuZXJpY3M6ZmFsc2UsaW5pdGlhbGl6ZTpmdW5jdGlvbigpe3ZhciBFPUFycmF5 +LmxpbmsoYXJndW1lbnRzLHtwcm9wZXJ0aWVzOk9iamVjdC50eXBlLGlmcmFtZTok +ZGVmaW5lZH0pOwp2YXIgQz1FLnByb3BlcnRpZXN8fHt9O3ZhciBCPSQoRS5pZnJh +bWUpfHxmYWxzZTt2YXIgRD1DLm9ubG9hZHx8JGVtcHR5O2RlbGV0ZSBDLm9ubG9h +ZDtDLmlkPUMubmFtZT0kcGljayhDLmlkLEMubmFtZSxCLmlkLEIubmFtZSwiSUZy +YW1lXyIrJHRpbWUoKSk7Qj1uZXcgRWxlbWVudChCfHwiaWZyYW1lIixDKTsKdmFy +IEE9ZnVuY3Rpb24oKXt2YXIgRj0kdHJ5KGZ1bmN0aW9uKCl7cmV0dXJuIEIuY29u +dGVudFdpbmRvdy5sb2NhdGlvbi5ob3N0O30pO2lmKEYmJkY9PXdpbmRvdy5sb2Nh +dGlvbi5ob3N0KXt2YXIgSD1uZXcgV2luZG93KEIuY29udGVudFdpbmRvdyk7dmFy +IEc9bmV3IERvY3VtZW50KEIuY29udGVudFdpbmRvdy5kb2N1bWVudCk7CiRleHRl +bmQoSC5FbGVtZW50LnByb3RvdHlwZSxFbGVtZW50LlByb3RvdHlwZSk7fUQuY2Fs +bChCLmNvbnRlbnRXaW5kb3csQi5jb250ZW50V2luZG93LmRvY3VtZW50KTt9Oygh +d2luZG93LmZyYW1lc1tDLmlkXSk/Qi5hZGRMaXN0ZW5lcigibG9hZCIsQSk6QSgp +O3JldHVybiBCOwp9fSk7dmFyIEVsZW1lbnRzPW5ldyBOYXRpdmUoe2luaXRpYWxp +emU6ZnVuY3Rpb24oRixCKXtCPSRleHRlbmQoe2RkdXA6dHJ1ZSxjYXNoOnRydWV9 +LEIpO0Y9Rnx8W107aWYoQi5kZHVwfHxCLmNhc2gpe3ZhciBHPXt9LEU9W107Zm9y +KHZhciBDPTAsQT1GLmxlbmd0aDsKQzxBO0MrKyl7dmFyIEQ9JC5lbGVtZW50KEZb +Q10sIUIuY2FzaCk7aWYoQi5kZHVwKXtpZihHW0QudWlkXSl7Y29udGludWU7fUdb +RC51aWRdPXRydWU7fUUucHVzaChEKTt9Rj1FO31yZXR1cm4oQi5jYXNoKT8kZXh0 +ZW5kKEYsdGhpcyk6Rjt9fSk7RWxlbWVudHMuaW1wbGVtZW50KHtmaWx0ZXI6ZnVu +Y3Rpb24oQSxCKXtpZighQSl7cmV0dXJuIHRoaXM7Cn1yZXR1cm4gbmV3IEVsZW1l +bnRzKEFycmF5LmZpbHRlcih0aGlzLCh0eXBlb2YgQT09InN0cmluZyIpP2Z1bmN0 +aW9uKEMpe3JldHVybiBDLm1hdGNoKEEpO306QSxCKSk7fX0pO0VsZW1lbnRzLm11 +bHRpPWZ1bmN0aW9uKEEpe3JldHVybiBmdW5jdGlvbigpe3ZhciBCPVtdOwp2YXIg +Rj10cnVlO2Zvcih2YXIgRD0wLEM9dGhpcy5sZW5ndGg7RDxDO0QrKyl7dmFyIEU9 +dGhpc1tEXVtBXS5hcHBseSh0aGlzW0RdLGFyZ3VtZW50cyk7Qi5wdXNoKEUpO2lm +KEYpe0Y9KCR0eXBlKEUpPT0iZWxlbWVudCIpO319cmV0dXJuKEYpP25ldyBFbGVt +ZW50cyhCKTpCOwp9O307V2luZG93LmltcGxlbWVudCh7JDpmdW5jdGlvbihCLEMp +e2lmKEImJkIuJGZhbWlseSYmQi51aWQpe3JldHVybiBCO312YXIgQT0kdHlwZShC +KTtyZXR1cm4oJFtBXSk/JFtBXShCLEMsdGhpcy5kb2N1bWVudCk6bnVsbDt9LCQk +OmZ1bmN0aW9uKEEpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PTEmJnR5cGVvZiBBPT0i +c3RyaW5nIil7cmV0dXJuIHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudHMoQSk7Cn12 +YXIgRj1bXTt2YXIgQz1BcnJheS5mbGF0dGVuKGFyZ3VtZW50cyk7Zm9yKHZhciBE +PTAsQj1DLmxlbmd0aDtEPEI7RCsrKXt2YXIgRT1DW0RdO3N3aXRjaCgkdHlwZShF +KSl7Y2FzZSJlbGVtZW50IjpFPVtFXTticmVhaztjYXNlInN0cmluZyI6RT10aGlz +LmRvY3VtZW50LmdldEVsZW1lbnRzKEUsdHJ1ZSk7CmJyZWFrO2RlZmF1bHQ6RT1m +YWxzZTt9aWYoRSl7Ri5leHRlbmQoRSk7fX1yZXR1cm4gbmV3IEVsZW1lbnRzKEYp +O30sZ2V0RG9jdW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb2N1bWVudDt9 +LGdldFdpbmRvdzpmdW5jdGlvbigpe3JldHVybiB0aGlzO319KTsKJC5zdHJpbmc9 +ZnVuY3Rpb24oQyxCLEEpe0M9QS5nZXRFbGVtZW50QnlJZChDKTtyZXR1cm4oQyk/ +JC5lbGVtZW50KEMsQik6bnVsbDt9OyQuZWxlbWVudD1mdW5jdGlvbihBLEQpeyR1 +aWQoQSk7aWYoIUQmJiFBLiRmYW1pbHkmJiEoL15vYmplY3R8ZW1iZWQkL2kpLnRl +c3QoQS50YWdOYW1lKSl7dmFyIEI9RWxlbWVudC5Qcm90b3R5cGU7CmZvcih2YXIg +QyBpbiBCKXtBW0NdPUJbQ107fX1yZXR1cm4gQTt9OyQub2JqZWN0PWZ1bmN0aW9u +KEIsQyxBKXtpZihCLnRvRWxlbWVudCl7cmV0dXJuICQuZWxlbWVudChCLnRvRWxl +bWVudChBKSxDKTt9cmV0dXJuIG51bGw7fTskLnRleHRub2RlPSQud2hpdGVzcGFj +ZT0kLndpbmRvdz0kLmRvY3VtZW50PSRhcmd1bWVudHMoMCk7Ck5hdGl2ZS5pbXBs +ZW1lbnQoW0VsZW1lbnQsRG9jdW1lbnRdLHtnZXRFbGVtZW50OmZ1bmN0aW9uKEEs +Qil7cmV0dXJuICQodGhpcy5nZXRFbGVtZW50cyhBLHRydWUpWzBdfHxudWxsLEIp +O30sZ2V0RWxlbWVudHM6ZnVuY3Rpb24oQSxEKXtBPUEuc3BsaXQoIiwiKTsKdmFy +IEM9W107dmFyIEI9KEEubGVuZ3RoPjEpO0EuZWFjaChmdW5jdGlvbihFKXt2YXIg +Rj10aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKEUudHJpbSgpKTsoQik/Qy5leHRl +bmQoRik6Qz1GO30sdGhpcyk7cmV0dXJuIG5ldyBFbGVtZW50cyhDLHtkZHVwOkIs +Y2FzaDohRH0pOwp9fSk7RWxlbWVudC5TdG9yYWdlPXtnZXQ6ZnVuY3Rpb24oQSl7 +cmV0dXJuKHRoaXNbQV18fCh0aGlzW0FdPXt9KSk7fX07RWxlbWVudC5JbnNlcnRl +cnM9bmV3IEhhc2goe2JlZm9yZTpmdW5jdGlvbihCLEEpe2lmKEEucGFyZW50Tm9k +ZSl7QS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShCLEEpOwp9fSxhZnRlcjpmdW5j +dGlvbihCLEEpe2lmKCFBLnBhcmVudE5vZGUpe3JldHVybiA7fXZhciBDPUEubmV4 +dFNpYmxpbmc7KEMpP0EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoQixDKTpBLnBh +cmVudE5vZGUuYXBwZW5kQ2hpbGQoQik7fSxib3R0b206ZnVuY3Rpb24oQixBKXtB +LmFwcGVuZENoaWxkKEIpOwp9LHRvcDpmdW5jdGlvbihCLEEpe3ZhciBDPUEuZmly +c3RDaGlsZDsoQyk/QS5pbnNlcnRCZWZvcmUoQixDKTpBLmFwcGVuZENoaWxkKEIp +O319KTtFbGVtZW50Lkluc2VydGVycy5pbnNpZGU9RWxlbWVudC5JbnNlcnRlcnMu +Ym90dG9tO0VsZW1lbnQuSW5zZXJ0ZXJzLmVhY2goZnVuY3Rpb24oQyxCKXt2YXIg +QT1CLmNhcGl0YWxpemUoKTsKRWxlbWVudC5pbXBsZW1lbnQoImluamVjdCIrQSxm +dW5jdGlvbihEKXtDKHRoaXMsJChELHRydWUpKTtyZXR1cm4gdGhpczt9KTtFbGVt +ZW50LmltcGxlbWVudCgiZ3JhYiIrQSxmdW5jdGlvbihEKXtDKCQoRCx0cnVlKSx0 +aGlzKTtyZXR1cm4gdGhpczt9KTt9KTtFbGVtZW50LmltcGxlbWVudCh7Z2V0RG9j +dW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50Owp9LGdl +dFdpbmRvdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuZ2V0 +V2luZG93KCk7fSxnZXRFbGVtZW50QnlJZDpmdW5jdGlvbihELEMpe3ZhciBCPXRo +aXMub3duZXJEb2N1bWVudC5nZXRFbGVtZW50QnlJZChEKTtpZighQil7cmV0dXJu +IG51bGw7Cn1mb3IodmFyIEE9Qi5wYXJlbnROb2RlO0EhPXRoaXM7QT1BLnBhcmVu +dE5vZGUpe2lmKCFBKXtyZXR1cm4gbnVsbDt9fXJldHVybiAkLmVsZW1lbnQoQixD +KTt9LHNldDpmdW5jdGlvbihELEIpe3N3aXRjaCgkdHlwZShEKSl7Y2FzZSJvYmpl +Y3QiOmZvcih2YXIgQyBpbiBEKXt0aGlzLnNldChDLERbQ10pOwp9YnJlYWs7Y2Fz +ZSJzdHJpbmciOnZhciBBPUVsZW1lbnQuUHJvcGVydGllcy5nZXQoRCk7KEEmJkEu +c2V0KT9BLnNldC5hcHBseSh0aGlzLEFycmF5LnNsaWNlKGFyZ3VtZW50cywxKSk6 +dGhpcy5zZXRQcm9wZXJ0eShELEIpO31yZXR1cm4gdGhpczt9LGdldDpmdW5jdGlv +bihCKXt2YXIgQT1FbGVtZW50LlByb3BlcnRpZXMuZ2V0KEIpOwpyZXR1cm4oQSYm +QS5nZXQpP0EuZ2V0LmFwcGx5KHRoaXMsQXJyYXkuc2xpY2UoYXJndW1lbnRzLDEp +KTp0aGlzLmdldFByb3BlcnR5KEIpO30sZXJhc2U6ZnVuY3Rpb24oQil7dmFyIEE9 +RWxlbWVudC5Qcm9wZXJ0aWVzLmdldChCKTsoQSYmQS5lcmFzZSk/QS5lcmFzZS5h +cHBseSh0aGlzLEFycmF5LnNsaWNlKGFyZ3VtZW50cywxKSk6dGhpcy5yZW1vdmVQ +cm9wZXJ0eShCKTsKcmV0dXJuIHRoaXM7fSxtYXRjaDpmdW5jdGlvbihBKXtyZXR1 +cm4oIUF8fEVsZW1lbnQuZ2V0KHRoaXMsInRhZyIpPT1BKTt9LGluamVjdDpmdW5j +dGlvbihCLEEpe0VsZW1lbnQuSW5zZXJ0ZXJzLmdldChBfHwiYm90dG9tIikodGhp +cywkKEIsdHJ1ZSkpO3JldHVybiB0aGlzOwp9LHdyYXBzOmZ1bmN0aW9uKEIsQSl7 +Qj0kKEIsdHJ1ZSk7cmV0dXJuIHRoaXMucmVwbGFjZXMoQikuZ3JhYihCLEEpO30s +Z3JhYjpmdW5jdGlvbihCLEEpe0VsZW1lbnQuSW5zZXJ0ZXJzLmdldChBfHwiYm90 +dG9tIikoJChCLHRydWUpLHRoaXMpO3JldHVybiB0aGlzOwp9LGFwcGVuZFRleHQ6 +ZnVuY3Rpb24oQixBKXtyZXR1cm4gdGhpcy5ncmFiKHRoaXMuZ2V0RG9jdW1lbnQo +KS5uZXdUZXh0Tm9kZShCKSxBKTt9LGFkb3B0OmZ1bmN0aW9uKCl7QXJyYXkuZmxh +dHRlbihhcmd1bWVudHMpLmVhY2goZnVuY3Rpb24oQSl7QT0kKEEsdHJ1ZSk7Cmlm +KEEpe3RoaXMuYXBwZW5kQ2hpbGQoQSk7fX0sdGhpcyk7cmV0dXJuIHRoaXM7fSxk +aXNwb3NlOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucGFyZW50Tm9kZSk/dGhpcy5w +YXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMpOnRoaXM7fSxjbG9uZTpmdW5jdGlv +bihELEMpe3N3aXRjaCgkdHlwZSh0aGlzKSl7Y2FzZSJlbGVtZW50Ijp2YXIgSD17 +fTsKZm9yKHZhciBHPTAsRT10aGlzLmF0dHJpYnV0ZXMubGVuZ3RoO0c8RTtHKysp +e3ZhciBCPXRoaXMuYXR0cmlidXRlc1tHXSxMPUIubm9kZU5hbWUudG9Mb3dlckNh +c2UoKTtpZihCcm93c2VyLkVuZ2luZS50cmlkZW50JiYoL2lucHV0L2kpLnRlc3Qo +dGhpcy50YWdOYW1lKSYmKC93aWR0aHxoZWlnaHQvKS50ZXN0KEwpKXtjb250aW51 +ZTsKfXZhciBLPShMPT0ic3R5bGUiJiZ0aGlzLnN0eWxlKT90aGlzLnN0eWxlLmNz +c1RleHQ6Qi5ub2RlVmFsdWU7aWYoISRjaGsoSyl8fEw9PSJ1aWQifHwoTD09Imlk +IiYmIUMpKXtjb250aW51ZTt9aWYoSyE9ImluaGVyaXQiJiZbInN0cmluZyIsIm51 +bWJlciJdLmNvbnRhaW5zKCR0eXBlKEspKSl7SFtMXT1LOwp9fXZhciBKPW5ldyBF +bGVtZW50KHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxIKTtpZihEIT09ZmFs +c2Upe2Zvcih2YXIgST0wLEY9dGhpcy5jaGlsZE5vZGVzLmxlbmd0aDtJPEY7SSsr +KXt2YXIgQT1FbGVtZW50LmNsb25lKHRoaXMuY2hpbGROb2Rlc1tJXSx0cnVlLEMp +OwppZihBKXtKLmdyYWIoQSk7fX19cmV0dXJuIEo7Y2FzZSJ0ZXh0bm9kZSI6cmV0 +dXJuIGRvY3VtZW50Lm5ld1RleHROb2RlKHRoaXMubm9kZVZhbHVlKTt9cmV0dXJu +IG51bGw7fSxyZXBsYWNlczpmdW5jdGlvbihBKXtBPSQoQSx0cnVlKTtBLnBhcmVu +dE5vZGUucmVwbGFjZUNoaWxkKHRoaXMsQSk7CnJldHVybiB0aGlzO30saGFzQ2xh +c3M6ZnVuY3Rpb24oQSl7cmV0dXJuIHRoaXMuY2xhc3NOYW1lLmNvbnRhaW5zKEEs +IiAiKTt9LGFkZENsYXNzOmZ1bmN0aW9uKEEpe2lmKCF0aGlzLmhhc0NsYXNzKEEp +KXt0aGlzLmNsYXNzTmFtZT0odGhpcy5jbGFzc05hbWUrIiAiK0EpLmNsZWFuKCk7 +Cn1yZXR1cm4gdGhpczt9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKEEpe3RoaXMuY2xh +c3NOYW1lPXRoaXMuY2xhc3NOYW1lLnJlcGxhY2UobmV3IFJlZ0V4cCgiKF58XFxz +KSIrQSsiKD86XFxzfCQpIiksIiQxIikuY2xlYW4oKTtyZXR1cm4gdGhpczt9LHRv +Z2dsZUNsYXNzOmZ1bmN0aW9uKEEpe3JldHVybiB0aGlzLmhhc0NsYXNzKEEpP3Ro +aXMucmVtb3ZlQ2xhc3MoQSk6dGhpcy5hZGRDbGFzcyhBKTsKfSxnZXRDb21wdXRl +ZFN0eWxlOmZ1bmN0aW9uKEIpe2lmKHRoaXMuY3VycmVudFN0eWxlKXtyZXR1cm4g +dGhpcy5jdXJyZW50U3R5bGVbQi5jYW1lbENhc2UoKV07fXZhciBBPXRoaXMuZ2V0 +V2luZG93KCkuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpO3JldHVybihBKT9B +LmdldFByb3BlcnR5VmFsdWUoW0IuaHlwaGVuYXRlKCldKTpudWxsOwp9LGVtcHR5 +OmZ1bmN0aW9uKCl7JEEodGhpcy5jaGlsZE5vZGVzKS5lYWNoKGZ1bmN0aW9uKEEp +e0Jyb3dzZXIuZnJlZU1lbShBKTtFbGVtZW50LmVtcHR5KEEpO0VsZW1lbnQuZGlz +cG9zZShBKTt9LHRoaXMpO3JldHVybiB0aGlzO30sZGVzdHJveTpmdW5jdGlvbigp +e0Jyb3dzZXIuZnJlZU1lbSh0aGlzLmVtcHR5KCkuZGlzcG9zZSgpKTsKcmV0dXJu +IG51bGw7fSxnZXRTZWxlY3RlZDpmdW5jdGlvbigpe3JldHVybiBuZXcgRWxlbWVu +dHMoJEEodGhpcy5vcHRpb25zKS5maWx0ZXIoZnVuY3Rpb24oQSl7cmV0dXJuIEEu +c2VsZWN0ZWQ7fSkpO30sdG9RdWVyeVN0cmluZzpmdW5jdGlvbigpe3ZhciBBPVtd +Owp0aGlzLmdldEVsZW1lbnRzKCJpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSIpLmVh +Y2goZnVuY3Rpb24oQil7aWYoIUIubmFtZXx8Qi5kaXNhYmxlZCl7cmV0dXJuIDt9 +dmFyIEM9KEIudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0ic2VsZWN0Iik/RWxlbWVu +dC5nZXRTZWxlY3RlZChCKS5tYXAoZnVuY3Rpb24oRCl7cmV0dXJuIEQudmFsdWU7 +Cn0pOigoQi50eXBlPT0icmFkaW8ifHxCLnR5cGU9PSJjaGVja2JveCIpJiYhQi5j +aGVja2VkKT9udWxsOkIudmFsdWU7JHNwbGF0KEMpLmVhY2goZnVuY3Rpb24oRCl7 +aWYoRCl7QS5wdXNoKEIubmFtZSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KEQpKTt9 +fSk7fSk7cmV0dXJuIEEuam9pbigiJiIpOwp9LGdldFByb3BlcnR5OmZ1bmN0aW9u +KEMpe3ZhciBCPUVsZW1lbnQuQXR0cmlidXRlcyxBPUIuUHJvcHNbQ107dmFyIEQ9 +KEEpP3RoaXNbQV06dGhpcy5nZXRBdHRyaWJ1dGUoQywyKTtyZXR1cm4oQi5Cb29s +c1tDXSk/ISFEOihBKT9EOkR8fG51bGw7fSxnZXRQcm9wZXJ0aWVzOmZ1bmN0aW9u +KCl7dmFyIEE9JEEoYXJndW1lbnRzKTsKcmV0dXJuIEEubWFwKGZ1bmN0aW9uKEIp +e3JldHVybiB0aGlzLmdldFByb3BlcnR5KEIpO30sdGhpcykuYXNzb2NpYXRlKEEp +O30sc2V0UHJvcGVydHk6ZnVuY3Rpb24oRCxFKXt2YXIgQz1FbGVtZW50LkF0dHJp +YnV0ZXMsQj1DLlByb3BzW0RdLEE9JGRlZmluZWQoRSk7CmlmKEImJkMuQm9vbHNb +RF0pe0U9KEV8fCFBKT90cnVlOmZhbHNlO31lbHNle2lmKCFBKXtyZXR1cm4gdGhp +cy5yZW1vdmVQcm9wZXJ0eShEKTt9fShCKT90aGlzW0JdPUU6dGhpcy5zZXRBdHRy +aWJ1dGUoRCxFKTtyZXR1cm4gdGhpczt9LHNldFByb3BlcnRpZXM6ZnVuY3Rpb24o +QSl7Zm9yKHZhciBCIGluIEEpe3RoaXMuc2V0UHJvcGVydHkoQixBW0JdKTsKfXJl +dHVybiB0aGlzO30scmVtb3ZlUHJvcGVydHk6ZnVuY3Rpb24oRCl7dmFyIEM9RWxl +bWVudC5BdHRyaWJ1dGVzLEI9Qy5Qcm9wc1tEXSxBPShCJiZDLkJvb2xzW0RdKTso +Qik/dGhpc1tCXT0oQSk/ZmFsc2U6IiI6dGhpcy5yZW1vdmVBdHRyaWJ1dGUoRCk7 +cmV0dXJuIHRoaXM7Cn0scmVtb3ZlUHJvcGVydGllczpmdW5jdGlvbigpe0FycmF5 +LmVhY2goYXJndW1lbnRzLHRoaXMucmVtb3ZlUHJvcGVydHksdGhpcyk7cmV0dXJu +IHRoaXM7fX0pOyhmdW5jdGlvbigpe3ZhciBBPWZ1bmN0aW9uKEQsQixJLEMsRixI +KXt2YXIgRT1EW0l8fEJdO3ZhciBHPVtdOwp3aGlsZShFKXtpZihFLm5vZGVUeXBl +PT0xJiYoIUN8fEVsZW1lbnQubWF0Y2goRSxDKSkpe0cucHVzaChFKTtpZighRil7 +YnJlYWs7fX1FPUVbQl07fXJldHVybihGKT9uZXcgRWxlbWVudHMoRyx7ZGR1cDpm +YWxzZSxjYXNoOiFIfSk6JChHWzBdLEgpO307RWxlbWVudC5pbXBsZW1lbnQoe2dl +dFByZXZpb3VzOmZ1bmN0aW9uKEIsQyl7cmV0dXJuIEEodGhpcywicHJldmlvdXNT +aWJsaW5nIixudWxsLEIsZmFsc2UsQyk7Cn0sZ2V0QWxsUHJldmlvdXM6ZnVuY3Rp +b24oQixDKXtyZXR1cm4gQSh0aGlzLCJwcmV2aW91c1NpYmxpbmciLG51bGwsQix0 +cnVlLEMpO30sZ2V0TmV4dDpmdW5jdGlvbihCLEMpe3JldHVybiBBKHRoaXMsIm5l +eHRTaWJsaW5nIixudWxsLEIsZmFsc2UsQyk7fSxnZXRBbGxOZXh0OmZ1bmN0aW9u +KEIsQyl7cmV0dXJuIEEodGhpcywibmV4dFNpYmxpbmciLG51bGwsQix0cnVlLEMp +Owp9LGdldEZpcnN0OmZ1bmN0aW9uKEIsQyl7cmV0dXJuIEEodGhpcywibmV4dFNp +YmxpbmciLCJmaXJzdENoaWxkIixCLGZhbHNlLEMpO30sZ2V0TGFzdDpmdW5jdGlv +bihCLEMpe3JldHVybiBBKHRoaXMsInByZXZpb3VzU2libGluZyIsImxhc3RDaGls +ZCIsQixmYWxzZSxDKTsKfSxnZXRQYXJlbnQ6ZnVuY3Rpb24oQixDKXtyZXR1cm4g +QSh0aGlzLCJwYXJlbnROb2RlIixudWxsLEIsZmFsc2UsQyk7fSxnZXRQYXJlbnRz +OmZ1bmN0aW9uKEIsQyl7cmV0dXJuIEEodGhpcywicGFyZW50Tm9kZSIsbnVsbCxC +LHRydWUsQyk7fSxnZXRDaGlsZHJlbjpmdW5jdGlvbihCLEMpe3JldHVybiBBKHRo +aXMsIm5leHRTaWJsaW5nIiwiZmlyc3RDaGlsZCIsQix0cnVlLEMpOwp9LGhhc0No +aWxkOmZ1bmN0aW9uKEIpe0I9JChCLHRydWUpO3JldHVybighIUImJiRBKHRoaXMu +Z2V0RWxlbWVudHNCeVRhZ05hbWUoQi50YWdOYW1lKSkuY29udGFpbnMoQikpO319 +KTt9KSgpO0VsZW1lbnQuUHJvcGVydGllcz1uZXcgSGFzaDtFbGVtZW50LlByb3Bl +cnRpZXMuc3R5bGU9e3NldDpmdW5jdGlvbihBKXt0aGlzLnN0eWxlLmNzc1RleHQ9 +QTsKfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHlsZS5jc3NUZXh0O30s +ZXJhc2U6ZnVuY3Rpb24oKXt0aGlzLnN0eWxlLmNzc1RleHQ9IiI7fX07RWxlbWVu +dC5Qcm9wZXJ0aWVzLnRhZz17Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFn +TmFtZS50b0xvd2VyQ2FzZSgpOwp9fTtFbGVtZW50LlByb3BlcnRpZXMuaHJlZj17 +Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuKCF0aGlzLmhyZWYpP251bGw6dGhpcy5ocmVm +LnJlcGxhY2UobmV3IFJlZ0V4cCgiXiIrZG9jdW1lbnQubG9jYXRpb24ucHJvdG9j +b2wrIi8vIitkb2N1bWVudC5sb2NhdGlvbi5ob3N0KSwiIik7Cn19O0VsZW1lbnQu +UHJvcGVydGllcy5odG1sPXtzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbm5l +ckhUTUw9QXJyYXkuZmxhdHRlbihhcmd1bWVudHMpLmpvaW4oIiIpO319O05hdGl2 +ZS5pbXBsZW1lbnQoW0VsZW1lbnQsV2luZG93LERvY3VtZW50XSx7YWRkTGlzdGVu +ZXI6ZnVuY3Rpb24oQixBKXtpZih0aGlzLmFkZEV2ZW50TGlzdGVuZXIpe3RoaXMu +YWRkRXZlbnRMaXN0ZW5lcihCLEEsZmFsc2UpOwp9ZWxzZXt0aGlzLmF0dGFjaEV2 +ZW50KCJvbiIrQixBKTt9cmV0dXJuIHRoaXM7fSxyZW1vdmVMaXN0ZW5lcjpmdW5j +dGlvbihCLEEpe2lmKHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcil7dGhpcy5yZW1v +dmVFdmVudExpc3RlbmVyKEIsQSxmYWxzZSk7fWVsc2V7dGhpcy5kZXRhY2hFdmVu +dCgib24iK0IsQSk7Cn1yZXR1cm4gdGhpczt9LHJldHJpZXZlOmZ1bmN0aW9uKEIs +QSl7dmFyIEQ9RWxlbWVudC5TdG9yYWdlLmdldCh0aGlzLnVpZCk7dmFyIEM9RFtC +XTtpZigkZGVmaW5lZChBKSYmISRkZWZpbmVkKEMpKXtDPURbQl09QTt9cmV0dXJu +ICRwaWNrKEMpO30sc3RvcmU6ZnVuY3Rpb24oQixBKXt2YXIgQz1FbGVtZW50LlN0 +b3JhZ2UuZ2V0KHRoaXMudWlkKTsKQ1tCXT1BO3JldHVybiB0aGlzO30sZWxpbWlu +YXRlOmZ1bmN0aW9uKEEpe3ZhciBCPUVsZW1lbnQuU3RvcmFnZS5nZXQodGhpcy51 +aWQpO2RlbGV0ZSBCW0FdO3JldHVybiB0aGlzO319KTtFbGVtZW50LkF0dHJpYnV0 +ZXM9bmV3IEhhc2goe1Byb3BzOntodG1sOiJpbm5lckhUTUwiLCJjbGFzcyI6ImNs +YXNzTmFtZSIsImZvciI6Imh0bWxGb3IiLHRleHQ6KEJyb3dzZXIuRW5naW5lLnRy +aWRlbnQpPyJpbm5lclRleHQiOiJ0ZXh0Q29udGVudCJ9LEJvb2xzOlsiY29tcGFj +dCIsIm5vd3JhcCIsImlzbWFwIiwiZGVjbGFyZSIsIm5vc2hhZGUiLCJjaGVja2Vk +IiwiZGlzYWJsZWQiLCJyZWFkb25seSIsIm11bHRpcGxlIiwic2VsZWN0ZWQiLCJu +b3Jlc2l6ZSIsImRlZmVyIl0sQ2FtZWxzOlsidmFsdWUiLCJhY2Nlc3NLZXkiLCJj +ZWxsUGFkZGluZyIsImNlbGxTcGFjaW5nIiwiY29sU3BhbiIsImZyYW1lQm9yZGVy +IiwibWF4TGVuZ3RoIiwicmVhZE9ubHkiLCJyb3dTcGFuIiwidGFiSW5kZXgiLCJ1 +c2VNYXAiXX0pOwpCcm93c2VyLmZyZWVNZW09ZnVuY3Rpb24oQSl7aWYoIUEpe3Jl +dHVybiA7fWlmKEJyb3dzZXIuRW5naW5lLnRyaWRlbnQmJigvb2JqZWN0L2kpLnRl +c3QoQS50YWdOYW1lKSl7Zm9yKHZhciBCIGluIEEpe2lmKHR5cGVvZiBBW0JdPT0i +ZnVuY3Rpb24iKXtBW0JdPSRlbXB0eTsKfX1FbGVtZW50LmRpc3Bvc2UoQSk7fWlm +KEEudWlkJiZBLnJlbW92ZUV2ZW50cyl7QS5yZW1vdmVFdmVudHMoKTt9fTsoZnVu +Y3Rpb24oQil7dmFyIEM9Qi5Cb29scyxBPUIuQ2FtZWxzO0IuQm9vbHM9Qz1DLmFz +c29jaWF0ZShDKTtIYXNoLmV4dGVuZChIYXNoLmNvbWJpbmUoQi5Qcm9wcyxDKSxB +LmFzc29jaWF0ZShBLm1hcChmdW5jdGlvbihEKXtyZXR1cm4gRC50b0xvd2VyQ2Fz +ZSgpOwp9KSkpO0IuZXJhc2UoIkNhbWVscyIpO30pKEVsZW1lbnQuQXR0cmlidXRl +cyk7d2luZG93LmFkZExpc3RlbmVyKCJ1bmxvYWQiLGZ1bmN0aW9uKCl7d2luZG93 +LnJlbW92ZUxpc3RlbmVyKCJ1bmxvYWQiLGFyZ3VtZW50cy5jYWxsZWUpO2RvY3Vt +ZW50LnB1cmdlKCk7CmlmKEJyb3dzZXIuRW5naW5lLnRyaWRlbnQpe0NvbGxlY3RH +YXJiYWdlKCk7fX0pO0VsZW1lbnQuUHJvcGVydGllcy5ldmVudHM9e3NldDpmdW5j +dGlvbihBKXt0aGlzLmFkZEV2ZW50cyhBKTt9fTtOYXRpdmUuaW1wbGVtZW50KFtF +bGVtZW50LFdpbmRvdyxEb2N1bWVudF0se2FkZEV2ZW50OmZ1bmN0aW9uKEUsRyl7 +dmFyIEg9dGhpcy5yZXRyaWV2ZSgiZXZlbnRzIix7fSk7CkhbRV09SFtFXXx8e2tl +eXM6W10sdmFsdWVzOltdfTtpZihIW0VdLmtleXMuY29udGFpbnMoRykpe3JldHVy +biB0aGlzO31IW0VdLmtleXMucHVzaChHKTt2YXIgRj1FLEE9RWxlbWVudC5FdmVu +dHMuZ2V0KEUpLEM9RyxJPXRoaXM7aWYoQSl7aWYoQS5vbkFkZCl7QS5vbkFkZC5j +YWxsKHRoaXMsRyk7Cn1pZihBLmNvbmRpdGlvbil7Qz1mdW5jdGlvbihKKXtpZihB +LmNvbmRpdGlvbi5jYWxsKHRoaXMsSikpe3JldHVybiBHLmNhbGwodGhpcyxKKTt9 +cmV0dXJuIGZhbHNlO307fUY9QS5iYXNlfHxGO312YXIgRD1mdW5jdGlvbigpe3Jl +dHVybiBHLmNhbGwoSSk7fTt2YXIgQj1FbGVtZW50Lk5hdGl2ZUV2ZW50c1tGXXx8 +MDsKaWYoQil7aWYoQj09Mil7RD1mdW5jdGlvbihKKXtKPW5ldyBFdmVudChKLEku +Z2V0V2luZG93KCkpO2lmKEMuY2FsbChJLEopPT09ZmFsc2Upe0ouc3RvcCgpO319 +O310aGlzLmFkZExpc3RlbmVyKEYsRCk7fUhbRV0udmFsdWVzLnB1c2goRCk7cmV0 +dXJuIHRoaXM7fSxyZW1vdmVFdmVudDpmdW5jdGlvbihELEMpe3ZhciBCPXRoaXMu +cmV0cmlldmUoImV2ZW50cyIpOwppZighQnx8IUJbRF0pe3JldHVybiB0aGlzO312 +YXIgRz1CW0RdLmtleXMuaW5kZXhPZihDKTtpZihHPT0tMSl7cmV0dXJuIHRoaXM7 +fXZhciBBPUJbRF0ua2V5cy5zcGxpY2UoRywxKVswXTt2YXIgRj1CW0RdLnZhbHVl +cy5zcGxpY2UoRywxKVswXTt2YXIgRT1FbGVtZW50LkV2ZW50cy5nZXQoRCk7Cmlm +KEUpe2lmKEUub25SZW1vdmUpe0Uub25SZW1vdmUuY2FsbCh0aGlzLEMpO31EPUUu +YmFzZXx8RDt9cmV0dXJuKEVsZW1lbnQuTmF0aXZlRXZlbnRzW0RdKT90aGlzLnJl +bW92ZUxpc3RlbmVyKEQsRik6dGhpczt9LGFkZEV2ZW50czpmdW5jdGlvbihBKXtm +b3IodmFyIEIgaW4gQSl7dGhpcy5hZGRFdmVudChCLEFbQl0pOwp9cmV0dXJuIHRo +aXM7fSxyZW1vdmVFdmVudHM6ZnVuY3Rpb24oQil7dmFyIEE9dGhpcy5yZXRyaWV2 +ZSgiZXZlbnRzIik7aWYoIUEpe3JldHVybiB0aGlzO31pZighQil7Zm9yKHZhciBD +IGluIEEpe3RoaXMucmVtb3ZlRXZlbnRzKEMpO31BPW51bGw7fWVsc2V7aWYoQVtC +XSl7d2hpbGUoQVtCXS5rZXlzWzBdKXt0aGlzLnJlbW92ZUV2ZW50KEIsQVtCXS5r +ZXlzWzBdKTsKfUFbQl09bnVsbDt9fXJldHVybiB0aGlzO30sZmlyZUV2ZW50OmZ1 +bmN0aW9uKEQsQixBKXt2YXIgQz10aGlzLnJldHJpZXZlKCJldmVudHMiKTtpZigh +Q3x8IUNbRF0pe3JldHVybiB0aGlzO31DW0RdLmtleXMuZWFjaChmdW5jdGlvbihF +KXtFLmNyZWF0ZSh7YmluZDp0aGlzLGRlbGF5OkEsImFyZ3VtZW50cyI6Qn0pKCk7 +Cn0sdGhpcyk7cmV0dXJuIHRoaXM7fSxjbG9uZUV2ZW50czpmdW5jdGlvbihELEEp +e0Q9JChEKTt2YXIgQz1ELnJldHJpZXZlKCJldmVudHMiKTtpZighQyl7cmV0dXJu +IHRoaXM7fWlmKCFBKXtmb3IodmFyIEIgaW4gQyl7dGhpcy5jbG9uZUV2ZW50cyhE +LEIpO319ZWxzZXtpZihDW0FdKXtDW0FdLmtleXMuZWFjaChmdW5jdGlvbihFKXt0 +aGlzLmFkZEV2ZW50KEEsRSk7Cn0sdGhpcyk7fX1yZXR1cm4gdGhpczt9fSk7RWxl +bWVudC5OYXRpdmVFdmVudHM9e2NsaWNrOjIsZGJsY2xpY2s6Mixtb3VzZXVwOjIs +bW91c2Vkb3duOjIsY29udGV4dG1lbnU6Mixtb3VzZXdoZWVsOjIsRE9NTW91c2VT +Y3JvbGw6Mixtb3VzZW92ZXI6Mixtb3VzZW91dDoyLG1vdXNlbW92ZToyLHNlbGVj +dHN0YXJ0OjIsc2VsZWN0ZW5kOjIsa2V5ZG93bjoyLGtleXByZXNzOjIsa2V5dXA6 +Mixmb2N1czoyLGJsdXI6MixjaGFuZ2U6MixyZXNldDoyLHNlbGVjdDoyLHN1Ym1p +dDoyLGxvYWQ6MSx1bmxvYWQ6MSxiZWZvcmV1bmxvYWQ6MixyZXNpemU6MSxtb3Zl +OjEsRE9NQ29udGVudExvYWRlZDoxLHJlYWR5c3RhdGVjaGFuZ2U6MSxlcnJvcjox +LGFib3J0OjEsc2Nyb2xsOjF9OwooZnVuY3Rpb24oKXt2YXIgQT1mdW5jdGlvbihC +KXt2YXIgQz1CLnJlbGF0ZWRUYXJnZXQ7aWYoQz09dW5kZWZpbmVkKXtyZXR1cm4g +dHJ1ZTt9aWYoQz09PWZhbHNlKXtyZXR1cm4gZmFsc2U7fXJldHVybigkdHlwZSh0 +aGlzKSE9ImRvY3VtZW50IiYmQyE9dGhpcyYmQy5wcmVmaXghPSJ4dWwiJiYhdGhp +cy5oYXNDaGlsZChDKSk7Cn07RWxlbWVudC5FdmVudHM9bmV3IEhhc2goe21vdXNl +ZW50ZXI6e2Jhc2U6Im1vdXNlb3ZlciIsY29uZGl0aW9uOkF9LG1vdXNlbGVhdmU6 +e2Jhc2U6Im1vdXNlb3V0Iixjb25kaXRpb246QX0sbW91c2V3aGVlbDp7YmFzZToo +QnJvd3Nlci5FbmdpbmUuZ2Vja28pPyJET01Nb3VzZVNjcm9sbCI6Im1vdXNld2hl +ZWwifX0pOwp9KSgpO0VsZW1lbnQuUHJvcGVydGllcy5zdHlsZXM9e3NldDpmdW5j +dGlvbihBKXt0aGlzLnNldFN0eWxlcyhBKTt9fTtFbGVtZW50LlByb3BlcnRpZXMu +b3BhY2l0eT17c2V0OmZ1bmN0aW9uKEEsQil7aWYoIUIpe2lmKEE9PTApe2lmKHRo +aXMuc3R5bGUudmlzaWJpbGl0eSE9ImhpZGRlbiIpe3RoaXMuc3R5bGUudmlzaWJp +bGl0eT0iaGlkZGVuIjsKfX1lbHNle2lmKHRoaXMuc3R5bGUudmlzaWJpbGl0eSE9 +InZpc2libGUiKXt0aGlzLnN0eWxlLnZpc2liaWxpdHk9InZpc2libGUiO319fWlm +KCF0aGlzLmN1cnJlbnRTdHlsZXx8IXRoaXMuY3VycmVudFN0eWxlLmhhc0xheW91 +dCl7dGhpcy5zdHlsZS56b29tPTE7fWlmKEJyb3dzZXIuRW5naW5lLnRyaWRlbnQp +e3RoaXMuc3R5bGUuZmlsdGVyPShBPT0xKT8iIjoiYWxwaGEob3BhY2l0eT0iK0Eq +MTAwKyIpIjsKfXRoaXMuc3R5bGUub3BhY2l0eT1BO3RoaXMuc3RvcmUoIm9wYWNp +dHkiLEEpO30sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmV0cmlldmUoIm9w +YWNpdHkiLDEpO319O0VsZW1lbnQuaW1wbGVtZW50KHtzZXRPcGFjaXR5OmZ1bmN0 +aW9uKEEpe3JldHVybiB0aGlzLnNldCgib3BhY2l0eSIsQSx0cnVlKTsKfSxnZXRP +cGFjaXR5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0KCJvcGFjaXR5Iik7fSxz +ZXRTdHlsZTpmdW5jdGlvbihCLEEpe3N3aXRjaChCKXtjYXNlIm9wYWNpdHkiOnJl +dHVybiB0aGlzLnNldCgib3BhY2l0eSIscGFyc2VGbG9hdChBKSk7Y2FzZSJmbG9h +dCI6Qj0oQnJvd3Nlci5FbmdpbmUudHJpZGVudCk/InN0eWxlRmxvYXQiOiJjc3NG +bG9hdCI7Cn1CPUIuY2FtZWxDYXNlKCk7aWYoJHR5cGUoQSkhPSJzdHJpbmciKXt2 +YXIgQz0oRWxlbWVudC5TdHlsZXMuZ2V0KEIpfHwiQCIpLnNwbGl0KCIgIik7QT0k +c3BsYXQoQSkubWFwKGZ1bmN0aW9uKEUsRCl7aWYoIUNbRF0pe3JldHVybiIiO31y +ZXR1cm4oJHR5cGUoRSk9PSJudW1iZXIiKT9DW0RdLnJlcGxhY2UoIkAiLE1hdGgu +cm91bmQoRSkpOkU7Cn0pLmpvaW4oIiAiKTt9ZWxzZXtpZihBPT1TdHJpbmcoTnVt +YmVyKEEpKSl7QT1NYXRoLnJvdW5kKEEpO319dGhpcy5zdHlsZVtCXT1BO3JldHVy +biB0aGlzO30sZ2V0U3R5bGU6ZnVuY3Rpb24oRyl7c3dpdGNoKEcpe2Nhc2Uib3Bh +Y2l0eSI6cmV0dXJuIHRoaXMuZ2V0KCJvcGFjaXR5Iik7CmNhc2UiZmxvYXQiOkc9 +KEJyb3dzZXIuRW5naW5lLnRyaWRlbnQpPyJzdHlsZUZsb2F0IjoiY3NzRmxvYXQi +O31HPUcuY2FtZWxDYXNlKCk7dmFyIEE9dGhpcy5zdHlsZVtHXTtpZighJGNoayhB +KSl7QT1bXTtmb3IodmFyIEYgaW4gRWxlbWVudC5TaG9ydFN0eWxlcyl7aWYoRyE9 +Ril7Y29udGludWU7Cn1mb3IodmFyIEUgaW4gRWxlbWVudC5TaG9ydFN0eWxlc1tG +XSl7QS5wdXNoKHRoaXMuZ2V0U3R5bGUoRSkpO31yZXR1cm4gQS5qb2luKCIgIik7 +fUE9dGhpcy5nZXRDb21wdXRlZFN0eWxlKEcpO31pZihBKXtBPVN0cmluZyhBKTt2 +YXIgQz1BLm1hdGNoKC9yZ2JhP1woW1xkXHMsXStcKS8pOwppZihDKXtBPUEucmVw +bGFjZShDWzBdLENbMF0ucmdiVG9IZXgoKSk7fX1pZihCcm93c2VyLkVuZ2luZS5w +cmVzdG98fChCcm93c2VyLkVuZ2luZS50cmlkZW50JiYhJGNoayhwYXJzZUludChB +KSkpKXtpZihHLnRlc3QoL14oaGVpZ2h0fHdpZHRoKSQvKSl7dmFyIEI9KEc9PSJ3 +aWR0aCIpP1sibGVmdCIsInJpZ2h0Il06WyJ0b3AiLCJib3R0b20iXSxEPTA7CkIu +ZWFjaChmdW5jdGlvbihIKXtEKz10aGlzLmdldFN0eWxlKCJib3JkZXItIitIKyIt +d2lkdGgiKS50b0ludCgpK3RoaXMuZ2V0U3R5bGUoInBhZGRpbmctIitIKS50b0lu +dCgpO30sdGhpcyk7cmV0dXJuIHRoaXNbIm9mZnNldCIrRy5jYXBpdGFsaXplKCld +LUQrInB4IjsKfWlmKEJyb3dzZXIuRW5naW5lLnByZXN0byYmU3RyaW5nKEEpLnRl +c3QoInB4Iikpe3JldHVybiBBO31pZihHLnRlc3QoLyhib3JkZXIoLispV2lkdGh8 +bWFyZ2lufHBhZGRpbmcpLykpe3JldHVybiIwcHgiO319cmV0dXJuIEE7fSxzZXRT +dHlsZXM6ZnVuY3Rpb24oQil7Zm9yKHZhciBBIGluIEIpe3RoaXMuc2V0U3R5bGUo +QSxCW0FdKTsKfXJldHVybiB0aGlzO30sZ2V0U3R5bGVzOmZ1bmN0aW9uKCl7dmFy +IEE9e307QXJyYXkuZWFjaChhcmd1bWVudHMsZnVuY3Rpb24oQil7QVtCXT10aGlz +LmdldFN0eWxlKEIpO30sdGhpcyk7cmV0dXJuIEE7fX0pO0VsZW1lbnQuU3R5bGVz +PW5ldyBIYXNoKHtsZWZ0OiJAcHgiLHRvcDoiQHB4Iixib3R0b206IkBweCIscmln +aHQ6IkBweCIsd2lkdGg6IkBweCIsaGVpZ2h0OiJAcHgiLG1heFdpZHRoOiJAcHgi +LG1heEhlaWdodDoiQHB4IixtaW5XaWR0aDoiQHB4IixtaW5IZWlnaHQ6IkBweCIs +YmFja2dyb3VuZENvbG9yOiJyZ2IoQCwgQCwgQCkiLGJhY2tncm91bmRQb3NpdGlv +bjoiQHB4IEBweCIsY29sb3I6InJnYihALCBALCBAKSIsZm9udFNpemU6IkBweCIs +bGV0dGVyU3BhY2luZzoiQHB4IixsaW5lSGVpZ2h0OiJAcHgiLGNsaXA6InJlY3Qo +QHB4IEBweCBAcHggQHB4KSIsbWFyZ2luOiJAcHggQHB4IEBweCBAcHgiLHBhZGRp +bmc6IkBweCBAcHggQHB4IEBweCIsYm9yZGVyOiJAcHggQCByZ2IoQCwgQCwgQCkg +QHB4IEAgcmdiKEAsIEAsIEApIEBweCBAIHJnYihALCBALCBAKSIsYm9yZGVyV2lk +dGg6IkBweCBAcHggQHB4IEBweCIsYm9yZGVyU3R5bGU6IkAgQCBAIEAiLGJvcmRl +ckNvbG9yOiJyZ2IoQCwgQCwgQCkgcmdiKEAsIEAsIEApIHJnYihALCBALCBAKSBy +Z2IoQCwgQCwgQCkiLHpJbmRleDoiQCIsem9vbToiQCIsZm9udFdlaWdodDoiQCIs +dGV4dEluZGVudDoiQHB4IixvcGFjaXR5OiJAIn0pOwpFbGVtZW50LlNob3J0U3R5 +bGVzPXttYXJnaW46e30scGFkZGluZzp7fSxib3JkZXI6e30sYm9yZGVyV2lkdGg6 +e30sYm9yZGVyU3R5bGU6e30sYm9yZGVyQ29sb3I6e319O1siVG9wIiwiUmlnaHQi +LCJCb3R0b20iLCJMZWZ0Il0uZWFjaChmdW5jdGlvbihHKXt2YXIgRj1FbGVtZW50 +LlNob3J0U3R5bGVzOwp2YXIgQj1FbGVtZW50LlN0eWxlcztbIm1hcmdpbiIsInBh +ZGRpbmciXS5lYWNoKGZ1bmN0aW9uKEgpe3ZhciBJPUgrRztGW0hdW0ldPUJbSV09 +IkBweCI7fSk7dmFyIEU9ImJvcmRlciIrRztGLmJvcmRlcltFXT1CW0VdPSJAcHgg +QCByZ2IoQCwgQCwgQCkiO3ZhciBEPUUrIldpZHRoIixBPUUrIlN0eWxlIixDPUUr +IkNvbG9yIjsKRltFXT17fTtGLmJvcmRlcldpZHRoW0RdPUZbRV1bRF09QltEXT0i +QHB4IjtGLmJvcmRlclN0eWxlW0FdPUZbRV1bQV09QltBXT0iQCI7Ri5ib3JkZXJD +b2xvcltDXT1GW0VdW0NdPUJbQ109InJnYihALCBALCBAKSI7fSk7KGZ1bmN0aW9u +KCl7RWxlbWVudC5pbXBsZW1lbnQoe3Njcm9sbFRvOmZ1bmN0aW9uKEgsSSl7aWYo +Qih0aGlzKSl7dGhpcy5nZXRXaW5kb3coKS5zY3JvbGxUbyhILEkpOwp9ZWxzZXt0 +aGlzLnNjcm9sbExlZnQ9SDt0aGlzLnNjcm9sbFRvcD1JO31yZXR1cm4gdGhpczt9 +LGdldFNpemU6ZnVuY3Rpb24oKXtpZihCKHRoaXMpKXtyZXR1cm4gdGhpcy5nZXRX +aW5kb3coKS5nZXRTaXplKCk7fXJldHVybnt4OnRoaXMub2Zmc2V0V2lkdGgseTp0 +aGlzLm9mZnNldEhlaWdodH07Cn0sZ2V0U2Nyb2xsU2l6ZTpmdW5jdGlvbigpe2lm +KEIodGhpcykpe3JldHVybiB0aGlzLmdldFdpbmRvdygpLmdldFNjcm9sbFNpemUo +KTt9cmV0dXJue3g6dGhpcy5zY3JvbGxXaWR0aCx5OnRoaXMuc2Nyb2xsSGVpZ2h0 +fTt9LGdldFNjcm9sbDpmdW5jdGlvbigpe2lmKEIodGhpcykpe3JldHVybiB0aGlz +LmdldFdpbmRvdygpLmdldFNjcm9sbCgpOwp9cmV0dXJue3g6dGhpcy5zY3JvbGxM +ZWZ0LHk6dGhpcy5zY3JvbGxUb3B9O30sZ2V0U2Nyb2xsczpmdW5jdGlvbigpe3Zh +ciBJPXRoaXMsSD17eDowLHk6MH07d2hpbGUoSSYmIUIoSSkpe0gueCs9SS5zY3Jv +bGxMZWZ0O0gueSs9SS5zY3JvbGxUb3A7ST1JLnBhcmVudE5vZGU7Cn1yZXR1cm4g +SDt9LGdldE9mZnNldFBhcmVudDpmdW5jdGlvbigpe3ZhciBIPXRoaXM7aWYoQihI +KSl7cmV0dXJuIG51bGw7fWlmKCFCcm93c2VyLkVuZ2luZS50cmlkZW50KXtyZXR1 +cm4gSC5vZmZzZXRQYXJlbnQ7fXdoaWxlKChIPUgucGFyZW50Tm9kZSkmJiFCKEgp +KXtpZihEKEgsInBvc2l0aW9uIikhPSJzdGF0aWMiKXtyZXR1cm4gSDsKfX1yZXR1 +cm4gbnVsbDt9LGdldE9mZnNldHM6ZnVuY3Rpb24oKXt2YXIgST10aGlzLEg9e3g6 +MCx5OjB9O2lmKEIodGhpcykpe3JldHVybiBIO313aGlsZShJJiYhQihJKSl7SC54 +Kz1JLm9mZnNldExlZnQ7SC55Kz1JLm9mZnNldFRvcDtpZihCcm93c2VyLkVuZ2lu +ZS5nZWNrbyl7aWYoIUYoSSkpe0gueCs9QyhJKTsKSC55Kz1HKEkpO312YXIgSj1J +LnBhcmVudE5vZGU7aWYoSiYmRChKLCJvdmVyZmxvdyIpIT0idmlzaWJsZSIpe0gu +eCs9QyhKKTtILnkrPUcoSik7fX1lbHNle2lmKEkhPXRoaXMmJihCcm93c2VyLkVu +Z2luZS50cmlkZW50fHxCcm93c2VyLkVuZ2luZS53ZWJraXQpKXtILngrPUMoSSk7 +CkgueSs9RyhJKTt9fUk9SS5vZmZzZXRQYXJlbnQ7aWYoQnJvd3Nlci5FbmdpbmUu +dHJpZGVudCl7d2hpbGUoSSYmIUkuY3VycmVudFN0eWxlLmhhc0xheW91dCl7ST1J +Lm9mZnNldFBhcmVudDt9fX1pZihCcm93c2VyLkVuZ2luZS5nZWNrbyYmIUYodGhp +cykpe0gueC09Qyh0aGlzKTsKSC55LT1HKHRoaXMpO31yZXR1cm4gSDt9LGdldFBv +c2l0aW9uOmZ1bmN0aW9uKEspe2lmKEIodGhpcykpe3JldHVybnt4OjAseTowfTt9 +dmFyIEw9dGhpcy5nZXRPZmZzZXRzKCksST10aGlzLmdldFNjcm9sbHMoKTt2YXIg +SD17eDpMLngtSS54LHk6TC55LUkueX07dmFyIEo9KEsmJihLPSQoSykpKT9LLmdl +dFBvc2l0aW9uKCk6e3g6MCx5OjB9OwpyZXR1cm57eDpILngtSi54LHk6SC55LUou +eX07fSxnZXRDb29yZGluYXRlczpmdW5jdGlvbihKKXtpZihCKHRoaXMpKXtyZXR1 +cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRDb29yZGluYXRlcygpO312YXIgSD10aGlz +LmdldFBvc2l0aW9uKEopLEk9dGhpcy5nZXRTaXplKCk7CnZhciBLPXtsZWZ0Okgu +eCx0b3A6SC55LHdpZHRoOkkueCxoZWlnaHQ6SS55fTtLLnJpZ2h0PUsubGVmdCtL +LndpZHRoO0suYm90dG9tPUsudG9wK0suaGVpZ2h0O3JldHVybiBLO30sY29tcHV0 +ZVBvc2l0aW9uOmZ1bmN0aW9uKEgpe3JldHVybntsZWZ0OkgueC1FKHRoaXMsIm1h +cmdpbi1sZWZ0IiksdG9wOkgueS1FKHRoaXMsIm1hcmdpbi10b3AiKX07Cn0scG9z +aXRpb246ZnVuY3Rpb24oSCl7cmV0dXJuIHRoaXMuc2V0U3R5bGVzKHRoaXMuY29t +cHV0ZVBvc2l0aW9uKEgpKTt9fSk7TmF0aXZlLmltcGxlbWVudChbRG9jdW1lbnQs +V2luZG93XSx7Z2V0U2l6ZTpmdW5jdGlvbigpe3ZhciBJPXRoaXMuZ2V0V2luZG93 +KCk7CmlmKEJyb3dzZXIuRW5naW5lLnByZXN0b3x8QnJvd3Nlci5FbmdpbmUud2Vi +a2l0KXtyZXR1cm57eDpJLmlubmVyV2lkdGgseTpJLmlubmVySGVpZ2h0fTt9dmFy +IEg9QSh0aGlzKTtyZXR1cm57eDpILmNsaWVudFdpZHRoLHk6SC5jbGllbnRIZWln +aHR9O30sZ2V0U2Nyb2xsOmZ1bmN0aW9uKCl7dmFyIEk9dGhpcy5nZXRXaW5kb3co +KTsKdmFyIEg9QSh0aGlzKTtyZXR1cm57eDpJLnBhZ2VYT2Zmc2V0fHxILnNjcm9s +bExlZnQseTpJLnBhZ2VZT2Zmc2V0fHxILnNjcm9sbFRvcH07fSxnZXRTY3JvbGxT +aXplOmZ1bmN0aW9uKCl7dmFyIEk9QSh0aGlzKTt2YXIgSD10aGlzLmdldFNpemUo +KTtyZXR1cm57eDpNYXRoLm1heChJLnNjcm9sbFdpZHRoLEgueCkseTpNYXRoLm1h +eChJLnNjcm9sbEhlaWdodCxILnkpfTsKfSxnZXRQb3NpdGlvbjpmdW5jdGlvbigp +e3JldHVybnt4OjAseTowfTt9LGdldENvb3JkaW5hdGVzOmZ1bmN0aW9uKCl7dmFy +IEg9dGhpcy5nZXRTaXplKCk7cmV0dXJue3RvcDowLGxlZnQ6MCxib3R0b206SC55 +LHJpZ2h0OkgueCxoZWlnaHQ6SC55LHdpZHRoOkgueH07Cn19KTt2YXIgRD1FbGVt +ZW50LmdldENvbXB1dGVkU3R5bGU7ZnVuY3Rpb24gRShILEkpe3JldHVybiBEKEgs +SSkudG9JbnQoKXx8MDt9ZnVuY3Rpb24gRihIKXtyZXR1cm4gRChILCItbW96LWJv +eC1zaXppbmciKT09ImJvcmRlci1ib3giO31mdW5jdGlvbiBHKEgpe3JldHVybiBF +KEgsImJvcmRlci10b3Atd2lkdGgiKTsKfWZ1bmN0aW9uIEMoSCl7cmV0dXJuIEUo +SCwiYm9yZGVyLWxlZnQtd2lkdGgiKTt9ZnVuY3Rpb24gQihIKXtyZXR1cm4oL14o +Pzpib2R5fGh0bWwpJC9pKS50ZXN0KEgudGFnTmFtZSk7fWZ1bmN0aW9uIEEoSCl7 +dmFyIEk9SC5nZXREb2N1bWVudCgpO3JldHVybighSS5jb21wYXRNb2RlfHxJLmNv +bXBhdE1vZGU9PSJDU1MxQ29tcGF0Iik/SS5odG1sOkkuYm9keTsKfX0pKCk7TmF0 +aXZlLmltcGxlbWVudChbV2luZG93LERvY3VtZW50LEVsZW1lbnRdLHtnZXRIZWln +aHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRTaXplKCkueTt9LGdldFdpZHRo +OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0U2l6ZSgpLng7fSxnZXRTY3JvbGxU +b3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRTY3JvbGwoKS55Owp9LGdldFNj +cm9sbExlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRTY3JvbGwoKS54O30s +Z2V0U2Nyb2xsSGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0U2Nyb2xs +U2l6ZSgpLnk7fSxnZXRTY3JvbGxXaWR0aDpmdW5jdGlvbigpe3JldHVybiB0aGlz +LmdldFNjcm9sbFNpemUoKS54Owp9LGdldFRvcDpmdW5jdGlvbigpe3JldHVybiB0 +aGlzLmdldFBvc2l0aW9uKCkueTt9LGdldExlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4g +dGhpcy5nZXRQb3NpdGlvbigpLng7fX0pO05hdGl2ZS5pbXBsZW1lbnQoW0RvY3Vt +ZW50LEVsZW1lbnRdLHtnZXRFbGVtZW50czpmdW5jdGlvbihILEcpe0g9SC5zcGxp +dCgiLCIpOwp2YXIgQyxFPXt9O2Zvcih2YXIgRD0wLEI9SC5sZW5ndGg7RDxCO0Qr +Kyl7dmFyIEE9SFtEXSxGPVNlbGVjdG9ycy5VdGlscy5zZWFyY2godGhpcyxBLEUp +O2lmKEQhPTAmJkYuaXRlbSl7Rj0kQShGKTt9Qz0oRD09MCk/RjooQy5pdGVtKT8k +QShDKS5jb25jYXQoRik6Qy5jb25jYXQoRik7Cn1yZXR1cm4gbmV3IEVsZW1lbnRz +KEMse2RkdXA6KEgubGVuZ3RoPjEpLGNhc2g6IUd9KTt9fSk7RWxlbWVudC5pbXBs +ZW1lbnQoe21hdGNoOmZ1bmN0aW9uKEIpe2lmKCFCKXtyZXR1cm4gdHJ1ZTt9dmFy +IEQ9U2VsZWN0b3JzLlV0aWxzLnBhcnNlVGFnQW5kSUQoQik7CnZhciBBPURbMF0s +RT1EWzFdO2lmKCFTZWxlY3RvcnMuRmlsdGVycy5ieUlEKHRoaXMsRSl8fCFTZWxl +Y3RvcnMuRmlsdGVycy5ieVRhZyh0aGlzLEEpKXtyZXR1cm4gZmFsc2U7fXZhciBD +PVNlbGVjdG9ycy5VdGlscy5wYXJzZVNlbGVjdG9yKEIpO3JldHVybihDKT9TZWxl +Y3RvcnMuVXRpbHMuZmlsdGVyKHRoaXMsQyx7fSk6dHJ1ZTsKfX0pO3ZhciBTZWxl +Y3RvcnM9e0NhY2hlOntudGg6e30scGFyc2VkOnt9fX07U2VsZWN0b3JzLlJlZ0V4 +cHM9e2lkOigvIyhbXHctXSspLyksdGFnOigvXihcdyt8XCopLykscXVpY2s6KC9e +KFx3K3xcKikkLyksc3BsaXR0ZXI6KC9ccyooWys+flxzXSlccyooW2EtekEtWiMu +KjpcW10pL2cpLGNvbWJpbmVkOigvXC4oW1x3LV0rKXxcWyhcdyspKD86KFshKl4k +fnxdPz0pWyInXT8oLio/KVsiJ10/KT9cXXw6KFtcdy1dKykoPzpcKFsiJ10/KC4q +Pyk/WyInXT9cKXwkKS9nKX07ClNlbGVjdG9ycy5VdGlscz17Y2hrOmZ1bmN0aW9u +KEIsQyl7aWYoIUMpe3JldHVybiB0cnVlO312YXIgQT0kdWlkKEIpO2lmKCFDW0Fd +KXtyZXR1cm4gQ1tBXT10cnVlO31yZXR1cm4gZmFsc2U7fSxwYXJzZU50aEFyZ3Vt +ZW50OmZ1bmN0aW9uKEYpe2lmKFNlbGVjdG9ycy5DYWNoZS5udGhbRl0pe3JldHVy +biBTZWxlY3RvcnMuQ2FjaGUubnRoW0ZdOwp9dmFyIEM9Ri5tYXRjaCgvXihbKy1d +P1xkKik/KFthLXpdKyk/KFsrLV0/XGQqKT8kLyk7aWYoIUMpe3JldHVybiBmYWxz +ZTt9dmFyIEU9cGFyc2VJbnQoQ1sxXSk7dmFyIEI9KEV8fEU9PT0wKT9FOjE7dmFy +IEQ9Q1syXXx8ZmFsc2U7dmFyIEE9cGFyc2VJbnQoQ1szXSl8fDA7CmlmKEIhPTAp +e0EtLTt3aGlsZShBPDEpe0ErPUI7fXdoaWxlKEE+PUIpe0EtPUI7fX1lbHNle0I9 +QTtEPSJpbmRleCI7fXN3aXRjaChEKXtjYXNlIm4iOkM9e2E6QixiOkEsc3BlY2lh +bDoibiJ9O2JyZWFrO2Nhc2Uib2RkIjpDPXthOjIsYjowLHNwZWNpYWw6Im4ifTsK +YnJlYWs7Y2FzZSJldmVuIjpDPXthOjIsYjoxLHNwZWNpYWw6Im4ifTticmVhaztj +YXNlImZpcnN0IjpDPXthOjAsc3BlY2lhbDoiaW5kZXgifTticmVhaztjYXNlImxh +c3QiOkM9e3NwZWNpYWw6Imxhc3QtY2hpbGQifTticmVhaztjYXNlIm9ubHkiOkM9 +e3NwZWNpYWw6Im9ubHktY2hpbGQifTsKYnJlYWs7ZGVmYXVsdDpDPXthOihCLTEp +LHNwZWNpYWw6ImluZGV4In07fXJldHVybiBTZWxlY3RvcnMuQ2FjaGUubnRoW0Zd +PUM7fSxwYXJzZVNlbGVjdG9yOmZ1bmN0aW9uKEUpe2lmKFNlbGVjdG9ycy5DYWNo +ZS5wYXJzZWRbRV0pe3JldHVybiBTZWxlY3RvcnMuQ2FjaGUucGFyc2VkW0VdOwp9 +dmFyIEQsSD17Y2xhc3NlczpbXSxwc2V1ZG9zOltdLGF0dHJpYnV0ZXM6W119O3do +aWxlKChEPVNlbGVjdG9ycy5SZWdFeHBzLmNvbWJpbmVkLmV4ZWMoRSkpKXt2YXIg +ST1EWzFdLEc9RFsyXSxGPURbM10sQj1EWzRdLEM9RFs1XSxKPURbNl07aWYoSSl7 +SC5jbGFzc2VzLnB1c2goSSk7Cn1lbHNle2lmKEMpe3ZhciBBPVNlbGVjdG9ycy5Q +c2V1ZG8uZ2V0KEMpO2lmKEEpe0gucHNldWRvcy5wdXNoKHtwYXJzZXI6QSxhcmd1 +bWVudDpKfSk7fWVsc2V7SC5hdHRyaWJ1dGVzLnB1c2goe25hbWU6QyxvcGVyYXRv +cjoiPSIsdmFsdWU6Sn0pO319ZWxzZXtpZihHKXtILmF0dHJpYnV0ZXMucHVzaCh7 +bmFtZTpHLG9wZXJhdG9yOkYsdmFsdWU6Qn0pOwp9fX19aWYoIUguY2xhc3Nlcy5s +ZW5ndGgpe2RlbGV0ZSBILmNsYXNzZXM7fWlmKCFILmF0dHJpYnV0ZXMubGVuZ3Ro +KXtkZWxldGUgSC5hdHRyaWJ1dGVzO31pZighSC5wc2V1ZG9zLmxlbmd0aCl7ZGVs +ZXRlIEgucHNldWRvczt9aWYoIUguY2xhc3NlcyYmIUguYXR0cmlidXRlcyYmIUgu +cHNldWRvcyl7SD1udWxsOwp9cmV0dXJuIFNlbGVjdG9ycy5DYWNoZS5wYXJzZWRb +RV09SDt9LHBhcnNlVGFnQW5kSUQ6ZnVuY3Rpb24oQil7dmFyIEE9Qi5tYXRjaChT +ZWxlY3RvcnMuUmVnRXhwcy50YWcpO3ZhciBDPUIubWF0Y2goU2VsZWN0b3JzLlJl +Z0V4cHMuaWQpO3JldHVyblsoQSk/QVsxXToiKiIsKEMpP0NbMV06ZmFsc2VdOwp9 +LGZpbHRlcjpmdW5jdGlvbihGLEMsRSl7dmFyIEQ7aWYoQy5jbGFzc2VzKXtmb3Io +RD1DLmNsYXNzZXMubGVuZ3RoO0QtLTtEKXt2YXIgRz1DLmNsYXNzZXNbRF07aWYo +IVNlbGVjdG9ycy5GaWx0ZXJzLmJ5Q2xhc3MoRixHKSl7cmV0dXJuIGZhbHNlO319 +fWlmKEMuYXR0cmlidXRlcyl7Zm9yKEQ9Qy5hdHRyaWJ1dGVzLmxlbmd0aDsKRC0t +O0Qpe3ZhciBCPUMuYXR0cmlidXRlc1tEXTtpZighU2VsZWN0b3JzLkZpbHRlcnMu +YnlBdHRyaWJ1dGUoRixCLm5hbWUsQi5vcGVyYXRvcixCLnZhbHVlKSl7cmV0dXJu +IGZhbHNlO319fWlmKEMucHNldWRvcyl7Zm9yKEQ9Qy5wc2V1ZG9zLmxlbmd0aDtE +LS07RCl7dmFyIEE9Qy5wc2V1ZG9zW0RdOwppZighU2VsZWN0b3JzLkZpbHRlcnMu +YnlQc2V1ZG8oRixBLnBhcnNlcixBLmFyZ3VtZW50LEUpKXtyZXR1cm4gZmFsc2U7 +fX19cmV0dXJuIHRydWU7fSxnZXRCeVRhZ0FuZElEOmZ1bmN0aW9uKEIsQSxEKXtp +ZihEKXt2YXIgQz0oQi5nZXRFbGVtZW50QnlJZCk/Qi5nZXRFbGVtZW50QnlJZChE +LHRydWUpOkVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoQixELHRydWUpOwpyZXR1cm4o +QyYmU2VsZWN0b3JzLkZpbHRlcnMuYnlUYWcoQyxBKSk/W0NdOltdO31lbHNle3Jl +dHVybiBCLmdldEVsZW1lbnRzQnlUYWdOYW1lKEEpO319LHNlYXJjaDpmdW5jdGlv +bihKLEksTyl7dmFyIEI9W107dmFyIEM9SS50cmltKCkucmVwbGFjZShTZWxlY3Rv +cnMuUmVnRXhwcy5zcGxpdHRlcixmdW5jdGlvbihaLFksWCl7Qi5wdXNoKFkpOwpy +ZXR1cm4iOikiK1g7fSkuc3BsaXQoIjopIik7dmFyIEssRixFLFY7Zm9yKHZhciBV +PTAsUT1DLmxlbmd0aDtVPFE7VSsrKXt2YXIgVD1DW1VdO2lmKFU9PTAmJlNlbGVj +dG9ycy5SZWdFeHBzLnF1aWNrLnRlc3QoVCkpe0s9Si5nZXRFbGVtZW50c0J5VGFn +TmFtZShUKTsKY29udGludWU7fXZhciBBPUJbVS0xXTt2YXIgTD1TZWxlY3RvcnMu +VXRpbHMucGFyc2VUYWdBbmRJRChUKTt2YXIgVz1MWzBdLE09TFsxXTtpZihVPT0w +KXtLPVNlbGVjdG9ycy5VdGlscy5nZXRCeVRhZ0FuZElEKEosVyxNKTt9ZWxzZXt2 +YXIgRD17fSxIPVtdO2Zvcih2YXIgUz0wLFI9Sy5sZW5ndGg7ClM8UjtTKyspe0g9 +U2VsZWN0b3JzLkdldHRlcnNbQV0oSCxLW1NdLFcsTSxEKTt9Sz1IO312YXIgRz1T +ZWxlY3RvcnMuVXRpbHMucGFyc2VTZWxlY3RvcihUKTtpZihHKXtFPVtdO2Zvcih2 +YXIgUD0wLE49Sy5sZW5ndGg7UDxOO1ArKyl7Vj1LW1BdO2lmKFNlbGVjdG9ycy5V +dGlscy5maWx0ZXIoVixHLE8pKXtFLnB1c2goVik7Cn19Sz1FO319cmV0dXJuIEs7 +fX07U2VsZWN0b3JzLkdldHRlcnM9eyIgIjpmdW5jdGlvbihILEcsSSxBLEUpe3Zh +ciBEPVNlbGVjdG9ycy5VdGlscy5nZXRCeVRhZ0FuZElEKEcsSSxBKTtmb3IodmFy +IEM9MCxCPUQubGVuZ3RoO0M8QjtDKyspe3ZhciBGPURbQ107aWYoU2VsZWN0b3Jz +LlV0aWxzLmNoayhGLEUpKXtILnB1c2goRik7Cn19cmV0dXJuIEg7fSwiPiI6ZnVu +Y3Rpb24oSCxHLEksQSxGKXt2YXIgQz1TZWxlY3RvcnMuVXRpbHMuZ2V0QnlUYWdB +bmRJRChHLEksQSk7Zm9yKHZhciBFPTAsRD1DLmxlbmd0aDtFPEQ7RSsrKXt2YXIg +Qj1DW0VdO2lmKEIucGFyZW50Tm9kZT09RyYmU2VsZWN0b3JzLlV0aWxzLmNoayhC +LEYpKXtILnB1c2goQik7Cn19cmV0dXJuIEg7fSwiKyI6ZnVuY3Rpb24oQyxCLEEs +RSxEKXt3aGlsZSgoQj1CLm5leHRTaWJsaW5nKSl7aWYoQi5ub2RlVHlwZT09MSl7 +aWYoU2VsZWN0b3JzLlV0aWxzLmNoayhCLEQpJiZTZWxlY3RvcnMuRmlsdGVycy5i +eVRhZyhCLEEpJiZTZWxlY3RvcnMuRmlsdGVycy5ieUlEKEIsRSkpe0MucHVzaChC +KTsKfWJyZWFrO319cmV0dXJuIEM7fSwifiI6ZnVuY3Rpb24oQyxCLEEsRSxEKXt3 +aGlsZSgoQj1CLm5leHRTaWJsaW5nKSl7aWYoQi5ub2RlVHlwZT09MSl7aWYoIVNl +bGVjdG9ycy5VdGlscy5jaGsoQixEKSl7YnJlYWs7fWlmKFNlbGVjdG9ycy5GaWx0 +ZXJzLmJ5VGFnKEIsQSkmJlNlbGVjdG9ycy5GaWx0ZXJzLmJ5SUQoQixFKSl7Qy5w +dXNoKEIpOwp9fX1yZXR1cm4gQzt9fTtTZWxlY3RvcnMuRmlsdGVycz17YnlUYWc6 +ZnVuY3Rpb24oQixBKXtyZXR1cm4oQT09IioifHwoQi50YWdOYW1lJiZCLnRhZ05h +bWUudG9Mb3dlckNhc2UoKT09QSkpO30sYnlJRDpmdW5jdGlvbihBLEIpe3JldHVy +bighQnx8KEEuaWQmJkEuaWQ9PUIpKTsKfSxieUNsYXNzOmZ1bmN0aW9uKEIsQSl7 +cmV0dXJuKEIuY2xhc3NOYW1lJiZCLmNsYXNzTmFtZS5jb250YWlucyhBLCIgIikp +O30sYnlQc2V1ZG86ZnVuY3Rpb24oQSxELEMsQil7cmV0dXJuIEQuY2FsbChBLEMs +Qik7fSxieUF0dHJpYnV0ZTpmdW5jdGlvbihDLEQsQixFKXt2YXIgQT1FbGVtZW50 +LnByb3RvdHlwZS5nZXRQcm9wZXJ0eS5jYWxsKEMsRCk7CmlmKCFBKXtyZXR1cm4g +ZmFsc2U7fWlmKCFCfHxFPT11bmRlZmluZWQpe3JldHVybiB0cnVlO31zd2l0Y2go +Qil7Y2FzZSI9IjpyZXR1cm4oQT09RSk7Y2FzZSIqPSI6cmV0dXJuKEEuY29udGFp +bnMoRSkpO2Nhc2UiXj0iOnJldHVybihBLnN1YnN0cigwLEUubGVuZ3RoKT09RSk7 +CmNhc2UiJD0iOnJldHVybihBLnN1YnN0cihBLmxlbmd0aC1FLmxlbmd0aCk9PUUp +O2Nhc2UiIT0iOnJldHVybihBIT1FKTtjYXNlIn49IjpyZXR1cm4gQS5jb250YWlu +cyhFLCIgIik7Y2FzZSJ8PSI6cmV0dXJuIEEuY29udGFpbnMoRSwiLSIpO31yZXR1 +cm4gZmFsc2U7Cn19O1NlbGVjdG9ycy5Qc2V1ZG89bmV3IEhhc2goe2VtcHR5OmZ1 +bmN0aW9uKCl7cmV0dXJuICEodGhpcy5pbm5lclRleHR8fHRoaXMudGV4dENvbnRl +bnR8fCIiKS5sZW5ndGg7fSxub3Q6ZnVuY3Rpb24oQSl7cmV0dXJuICFFbGVtZW50 +Lm1hdGNoKHRoaXMsQSk7fSxjb250YWluczpmdW5jdGlvbihBKXtyZXR1cm4odGhp +cy5pbm5lclRleHR8fHRoaXMudGV4dENvbnRlbnR8fCIiKS5jb250YWlucyhBKTsK +fSwiZmlyc3QtY2hpbGQiOmZ1bmN0aW9uKCl7cmV0dXJuIFNlbGVjdG9ycy5Qc2V1 +ZG8uaW5kZXguY2FsbCh0aGlzLDApO30sImxhc3QtY2hpbGQiOmZ1bmN0aW9uKCl7 +dmFyIEE9dGhpczt3aGlsZSgoQT1BLm5leHRTaWJsaW5nKSl7aWYoQS5ub2RlVHlw +ZT09MSl7cmV0dXJuIGZhbHNlOwp9fXJldHVybiB0cnVlO30sIm9ubHktY2hpbGQi +OmZ1bmN0aW9uKCl7dmFyIEI9dGhpczt3aGlsZSgoQj1CLnByZXZpb3VzU2libGlu +Zykpe2lmKEIubm9kZVR5cGU9PTEpe3JldHVybiBmYWxzZTt9fXZhciBBPXRoaXM7 +d2hpbGUoKEE9QS5uZXh0U2libGluZykpe2lmKEEubm9kZVR5cGU9PTEpe3JldHVy +biBmYWxzZTsKfX1yZXR1cm4gdHJ1ZTt9LCJudGgtY2hpbGQiOmZ1bmN0aW9uKEcs +RSl7Rz0oRz09dW5kZWZpbmVkKT8ibiI6Rzt2YXIgQz1TZWxlY3RvcnMuVXRpbHMu +cGFyc2VOdGhBcmd1bWVudChHKTtpZihDLnNwZWNpYWwhPSJuIil7cmV0dXJuIFNl +bGVjdG9ycy5Qc2V1ZG9bQy5zcGVjaWFsXS5jYWxsKHRoaXMsQy5hLEUpOwp9dmFy +IEY9MDtFLnBvc2l0aW9ucz1FLnBvc2l0aW9uc3x8e307dmFyIEQ9JHVpZCh0aGlz +KTtpZighRS5wb3NpdGlvbnNbRF0pe3ZhciBCPXRoaXM7d2hpbGUoKEI9Qi5wcmV2 +aW91c1NpYmxpbmcpKXtpZihCLm5vZGVUeXBlIT0xKXtjb250aW51ZTt9RisrO3Zh +ciBBPUUucG9zaXRpb25zWyR1aWQoQildOwppZihBIT11bmRlZmluZWQpe0Y9QStG +O2JyZWFrO319RS5wb3NpdGlvbnNbRF09Rjt9cmV0dXJuKEUucG9zaXRpb25zW0Rd +JUMuYT09Qy5iKTt9LGluZGV4OmZ1bmN0aW9uKEEpe3ZhciBCPXRoaXMsQz0wO3do +aWxlKChCPUIucHJldmlvdXNTaWJsaW5nKSl7aWYoQi5ub2RlVHlwZT09MSYmKytD +PkEpe3JldHVybiBmYWxzZTsKfX1yZXR1cm4oQz09QSk7fSxldmVuOmZ1bmN0aW9u +KEIsQSl7cmV0dXJuIFNlbGVjdG9ycy5Qc2V1ZG9bIm50aC1jaGlsZCJdLmNhbGwo +dGhpcywiMm4rMSIsQSk7fSxvZGQ6ZnVuY3Rpb24oQixBKXtyZXR1cm4gU2VsZWN0 +b3JzLlBzZXVkb1sibnRoLWNoaWxkIl0uY2FsbCh0aGlzLCIybiIsQSk7Cn19KTtF +bGVtZW50LkV2ZW50cy5kb21yZWFkeT17b25BZGQ6ZnVuY3Rpb24oQSl7aWYoQnJv +d3Nlci5sb2FkZWQpe0EuY2FsbCh0aGlzKTt9fX07KGZ1bmN0aW9uKCl7dmFyIEI9 +ZnVuY3Rpb24oKXtpZihCcm93c2VyLmxvYWRlZCl7cmV0dXJuIDt9QnJvd3Nlci5s +b2FkZWQ9dHJ1ZTsKd2luZG93LmZpcmVFdmVudCgiZG9tcmVhZHkiKTtkb2N1bWVu +dC5maXJlRXZlbnQoImRvbXJlYWR5Iik7fTtzd2l0Y2goQnJvd3Nlci5FbmdpbmUu +bmFtZSl7Y2FzZSJ3ZWJraXQiOihmdW5jdGlvbigpeyhbImxvYWRlZCIsImNvbXBs +ZXRlIl0uY29udGFpbnMoZG9jdW1lbnQucmVhZHlTdGF0ZSkpP0IoKTphcmd1bWVu +dHMuY2FsbGVlLmRlbGF5KDUwKTsKfSkoKTticmVhaztjYXNlInRyaWRlbnQiOnZh +ciBBPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOyhmdW5jdGlvbigpeygk +dHJ5KGZ1bmN0aW9uKCl7QS5kb1Njcm9sbCgibGVmdCIpO3JldHVybiAkKEEpLmlu +amVjdChkb2N1bWVudC5ib2R5KS5zZXQoImh0bWwiLCJ0ZW1wIikuZGlzcG9zZSgp +Owp9KSk/QigpOmFyZ3VtZW50cy5jYWxsZWUuZGVsYXkoNTApO30pKCk7YnJlYWs7 +ZGVmYXVsdDp3aW5kb3cuYWRkRXZlbnQoImxvYWQiLEIpO2RvY3VtZW50LmFkZEV2 +ZW50KCJET01Db250ZW50TG9hZGVkIixCKTt9fSkoKTt2YXIgSlNPTj1uZXcgSGFz +aCh7ZW5jb2RlOmZ1bmN0aW9uKEIpe3N3aXRjaCgkdHlwZShCKSl7Y2FzZSJzdHJp +bmciOnJldHVybiciJytCLnJlcGxhY2UoL1tceDAwLVx4MWZcXCJdL2csSlNPTi4k +cmVwbGFjZUNoYXJzKSsnIic7CmNhc2UiYXJyYXkiOnJldHVybiJbIitTdHJpbmco +Qi5tYXAoSlNPTi5lbmNvZGUpLmZpbHRlcigkZGVmaW5lZCkpKyJdIjtjYXNlIm9i +amVjdCI6Y2FzZSJoYXNoIjp2YXIgQT1bXTtIYXNoLmVhY2goQixmdW5jdGlvbihF +LEQpe3ZhciBDPUpTT04uZW5jb2RlKEUpO2lmKEMpe0EucHVzaChKU09OLmVuY29k +ZShEKSsiOiIrQyk7Cn19KTtyZXR1cm4ieyIrQSsifSI7Y2FzZSJudW1iZXIiOmNh +c2UiYm9vbGVhbiI6cmV0dXJuIFN0cmluZyhCKTtjYXNlIGZhbHNlOnJldHVybiJu +dWxsIjt9cmV0dXJuIG51bGw7fSwkc3BlY2lhbENoYXJzOnsiXGIiOiJcXGIiLCJc +dCI6IlxcdCIsIlxuIjoiXFxuIiwiXGYiOiJcXGYiLCJcciI6IlxcciIsJyInOidc +XCInLCJcXCI6IlxcXFwifSwkcmVwbGFjZUNoYXJzOmZ1bmN0aW9uKEEpe3JldHVy +biBKU09OLiRzcGVjaWFsQ2hhcnNbQV18fCJcXHUwMCIrTWF0aC5mbG9vcihBLmNo +YXJDb2RlQXQoKS8xNikudG9TdHJpbmcoMTYpKyhBLmNoYXJDb2RlQXQoKSUxNiku +dG9TdHJpbmcoMTYpOwp9LGRlY29kZTpmdW5jdGlvbihzdHJpbmcsc2VjdXJlKXtp +ZigkdHlwZShzdHJpbmcpIT0ic3RyaW5nInx8IXN0cmluZy5sZW5ndGgpe3JldHVy +biBudWxsO31pZihzZWN1cmUmJiEoL15bLDp7fVxbXF0wLTkuXC0rRWFlZmxuci11 +IFxuXHJcdF0qJC8pLnRlc3Qoc3RyaW5nLnJlcGxhY2UoL1xcLi9nLCJAIikucmVw +bGFjZSgvIlteIlxcXG5ccl0qIi9nLCIiKSkpe3JldHVybiBudWxsOwp9cmV0dXJu +IGV2YWwoIigiK3N0cmluZysiKSIpO319KTtOYXRpdmUuaW1wbGVtZW50KFtIYXNo +LEFycmF5LFN0cmluZyxOdW1iZXJdLHt0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm4g +SlNPTi5lbmNvZGUodGhpcyk7fX0pO3ZhciBDb29raWU9bmV3IENsYXNzKHtJbXBs +ZW1lbnRzOk9wdGlvbnMsb3B0aW9uczp7cGF0aDpmYWxzZSxkb21haW46ZmFsc2Us +ZHVyYXRpb246ZmFsc2Usc2VjdXJlOmZhbHNlLGRvY3VtZW50OmRvY3VtZW50fSxp +bml0aWFsaXplOmZ1bmN0aW9uKEIsQSl7dGhpcy5rZXk9QjsKdGhpcy5zZXRPcHRp +b25zKEEpO30sd3JpdGU6ZnVuY3Rpb24oQil7Qj1lbmNvZGVVUklDb21wb25lbnQo +Qik7aWYodGhpcy5vcHRpb25zLmRvbWFpbil7Qis9IjsgZG9tYWluPSIrdGhpcy5v +cHRpb25zLmRvbWFpbjt9aWYodGhpcy5vcHRpb25zLnBhdGgpe0IrPSI7IHBhdGg9 +Iit0aGlzLm9wdGlvbnMucGF0aDsKfWlmKHRoaXMub3B0aW9ucy5kdXJhdGlvbil7 +dmFyIEE9bmV3IERhdGUoKTtBLnNldFRpbWUoQS5nZXRUaW1lKCkrdGhpcy5vcHRp +b25zLmR1cmF0aW9uKjI0KjYwKjYwKjEwMDApO0IrPSI7IGV4cGlyZXM9IitBLnRv +R01UU3RyaW5nKCk7fWlmKHRoaXMub3B0aW9ucy5zZWN1cmUpe0IrPSI7IHNlY3Vy +ZSI7Cn10aGlzLm9wdGlvbnMuZG9jdW1lbnQuY29va2llPXRoaXMua2V5KyI9IitC +O3JldHVybiB0aGlzO30scmVhZDpmdW5jdGlvbigpe3ZhciBBPXRoaXMub3B0aW9u +cy5kb2N1bWVudC5jb29raWUubWF0Y2goIig/Ol58OylcXHMqIit0aGlzLmtleS5l +c2NhcGVSZWdFeHAoKSsiPShbXjtdKikiKTsKcmV0dXJuKEEpP2RlY29kZVVSSUNv +bXBvbmVudChBWzFdKTpudWxsO30sZGlzcG9zZTpmdW5jdGlvbigpe25ldyBDb29r +aWUodGhpcy5rZXksJG1lcmdlKHRoaXMub3B0aW9ucyx7ZHVyYXRpb246LTF9KSku +d3JpdGUoIiIpO3JldHVybiB0aGlzO319KTtDb29raWUud3JpdGU9ZnVuY3Rpb24o +QixDLEEpe3JldHVybiBuZXcgQ29va2llKEIsQSkud3JpdGUoQyk7Cn07Q29va2ll +LnJlYWQ9ZnVuY3Rpb24oQSl7cmV0dXJuIG5ldyBDb29raWUoQSkucmVhZCgpO307 +Q29va2llLmRpc3Bvc2U9ZnVuY3Rpb24oQixBKXtyZXR1cm4gbmV3IENvb2tpZShC +LEEpLmRpc3Bvc2UoKTt9O3ZhciBTd2lmZj1uZXcgQ2xhc3Moe0ltcGxlbWVudHM6 +W09wdGlvbnNdLG9wdGlvbnM6e2lkOm51bGwsaGVpZ2h0OjEsd2lkdGg6MSxjb250 +YWluZXI6bnVsbCxwcm9wZXJ0aWVzOnt9LHBhcmFtczp7cXVhbGl0eToiaGlnaCIs +YWxsb3dTY3JpcHRBY2Nlc3M6ImFsd2F5cyIsd01vZGU6InRyYW5zcGFyZW50Iixz +d0xpdmVDb25uZWN0OnRydWV9LGNhbGxCYWNrczp7fSx2YXJzOnt9fSx0b0VsZW1l +bnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vYmplY3Q7Cn0saW5pdGlhbGl6ZTpm +dW5jdGlvbihMLE0pe3RoaXMuaW5zdGFuY2U9IlN3aWZmXyIrJHRpbWUoKTt0aGlz +LnNldE9wdGlvbnMoTSk7TT10aGlzLm9wdGlvbnM7dmFyIEI9dGhpcy5pZD1NLmlk +fHx0aGlzLmluc3RhbmNlO3ZhciBBPSQoTS5jb250YWluZXIpO1N3aWZmLkNhbGxC +YWNrc1t0aGlzLmluc3RhbmNlXT17fTsKdmFyIEU9TS5wYXJhbXMsRz1NLnZhcnMs +Rj1NLmNhbGxCYWNrczt2YXIgSD0kZXh0ZW5kKHtoZWlnaHQ6TS5oZWlnaHQsd2lk +dGg6TS53aWR0aH0sTS5wcm9wZXJ0aWVzKTt2YXIgSz10aGlzO2Zvcih2YXIgRCBp +biBGKXtTd2lmZi5DYWxsQmFja3NbdGhpcy5pbnN0YW5jZV1bRF09KGZ1bmN0aW9u +KE4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBOLmFwcGx5KEsub2JqZWN0LGFy +Z3VtZW50cyk7Cn07fSkoRltEXSk7R1tEXT0iU3dpZmYuQ2FsbEJhY2tzLiIrdGhp +cy5pbnN0YW5jZSsiLiIrRDt9RS5mbGFzaFZhcnM9SGFzaC50b1F1ZXJ5U3RyaW5n +KEcpO2lmKEJyb3dzZXIuRW5naW5lLnRyaWRlbnQpe0guY2xhc3NpZD0iY2xzaWQ6 +RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIjsKRS5tb3ZpZT1M +O31lbHNle0gudHlwZT0iYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giO0gu +ZGF0YT1MO312YXIgSj0nPG9iamVjdCBpZD0iJytCKyciJztmb3IodmFyIEkgaW4g +SCl7Sis9IiAiK0krJz0iJytIW0ldKyciJzt9Sis9Ij4iO2Zvcih2YXIgQyBpbiBF +KXtpZihFW0NdKXtKKz0nPHBhcmFtIG5hbWU9IicrQysnIiB2YWx1ZT0iJytFW0Nd +KyciIC8+JzsKfX1KKz0iPC9vYmplY3Q+Ijt0aGlzLm9iamVjdD0oKEEpP0EuZW1w +dHkoKTpuZXcgRWxlbWVudCgiZGl2IikpLnNldCgiaHRtbCIsSikuZmlyc3RDaGls +ZDt9LHJlcGxhY2VzOmZ1bmN0aW9uKEEpe0E9JChBLHRydWUpO0EucGFyZW50Tm9k +ZS5yZXBsYWNlQ2hpbGQodGhpcy50b0VsZW1lbnQoKSxBKTsKcmV0dXJuIHRoaXM7 +fSxpbmplY3Q6ZnVuY3Rpb24oQSl7JChBLHRydWUpLmFwcGVuZENoaWxkKHRoaXMu +dG9FbGVtZW50KCkpO3JldHVybiB0aGlzO30scmVtb3RlOmZ1bmN0aW9uKCl7cmV0 +dXJuIFN3aWZmLnJlbW90ZS5hcHBseShTd2lmZixbdGhpcy50b0VsZW1lbnQoKV0u +ZXh0ZW5kKGFyZ3VtZW50cykpOwp9fSk7U3dpZmYuQ2FsbEJhY2tzPXt9O1N3aWZm +LnJlbW90ZT1mdW5jdGlvbihvYmosZm4pe3ZhciBycz1vYmouQ2FsbEZ1bmN0aW9u +KCc8aW52b2tlIG5hbWU9IicrZm4rJyIgcmV0dXJudHlwZT0iamF2YXNjcmlwdCI+ +JytfX2ZsYXNoX19hcmd1bWVudHNUb1hNTChhcmd1bWVudHMsMikrIjwvaW52b2tl +PiIpOwpyZXR1cm4gZXZhbChycyk7fTt2YXIgRng9bmV3IENsYXNzKHtJbXBsZW1l +bnRzOltDaGFpbixFdmVudHMsT3B0aW9uc10sb3B0aW9uczp7ZnBzOjUwLHVuaXQ6 +ZmFsc2UsZHVyYXRpb246NTAwLGxpbms6Imlnbm9yZSIsdHJhbnNpdGlvbjpmdW5j +dGlvbihBKXtyZXR1cm4gLShNYXRoLmNvcyhNYXRoLlBJKkEpLTEpLzI7Cn19LGlu +aXRpYWxpemU6ZnVuY3Rpb24oQSl7dGhpcy5zdWJqZWN0PXRoaXMuc3ViamVjdHx8 +dGhpczt0aGlzLnNldE9wdGlvbnMoQSk7dGhpcy5vcHRpb25zLmR1cmF0aW9uPUZ4 +LkR1cmF0aW9uc1t0aGlzLm9wdGlvbnMuZHVyYXRpb25dfHx0aGlzLm9wdGlvbnMu +ZHVyYXRpb24udG9JbnQoKTsKdmFyIEI9dGhpcy5vcHRpb25zLndhaXQ7aWYoQj09 +PWZhbHNlKXt0aGlzLm9wdGlvbnMubGluaz0iY2FuY2VsIjt9fSxzdGVwOmZ1bmN0 +aW9uKCl7dmFyIEE9JHRpbWUoKTtpZihBPHRoaXMudGltZSt0aGlzLm9wdGlvbnMu +ZHVyYXRpb24pe3ZhciBCPXRoaXMub3B0aW9ucy50cmFuc2l0aW9uKChBLXRoaXMu +dGltZSkvdGhpcy5vcHRpb25zLmR1cmF0aW9uKTsKdGhpcy5zZXQodGhpcy5jb21w +dXRlKHRoaXMuZnJvbSx0aGlzLnRvLEIpKTt9ZWxzZXt0aGlzLnNldCh0aGlzLmNv +bXB1dGUodGhpcy5mcm9tLHRoaXMudG8sMSkpO3RoaXMuY29tcGxldGUoKTt9fSxz +ZXQ6ZnVuY3Rpb24oQSl7cmV0dXJuIEE7fSxjb21wdXRlOmZ1bmN0aW9uKEMsQixB +KXtyZXR1cm4gRnguY29tcHV0ZShDLEIsQSk7Cn0sY2hlY2s6ZnVuY3Rpb24oQSl7 +aWYoIXRoaXMudGltZXIpe3JldHVybiB0cnVlO31zd2l0Y2godGhpcy5vcHRpb25z +Lmxpbmspe2Nhc2UiY2FuY2VsIjp0aGlzLmNhbmNlbCgpO3JldHVybiB0cnVlO2Nh +c2UiY2hhaW4iOnRoaXMuY2hhaW4oQS5iaW5kKHRoaXMsQXJyYXkuc2xpY2UoYXJn +dW1lbnRzLDEpKSk7CnJldHVybiBmYWxzZTt9cmV0dXJuIGZhbHNlO30sc3RhcnQ6 +ZnVuY3Rpb24oQixBKXtpZighdGhpcy5jaGVjayhhcmd1bWVudHMuY2FsbGVlLEIs +QSkpe3JldHVybiB0aGlzO310aGlzLmZyb209Qjt0aGlzLnRvPUE7dGhpcy50aW1l +PTA7dGhpcy5zdGFydFRpbWVyKCk7CnRoaXMub25TdGFydCgpO3JldHVybiB0aGlz +O30sY29tcGxldGU6ZnVuY3Rpb24oKXtpZih0aGlzLnN0b3BUaW1lcigpKXt0aGlz +Lm9uQ29tcGxldGUoKTt9cmV0dXJuIHRoaXM7fSxjYW5jZWw6ZnVuY3Rpb24oKXtp +Zih0aGlzLnN0b3BUaW1lcigpKXt0aGlzLm9uQ2FuY2VsKCk7Cn1yZXR1cm4gdGhp +czt9LG9uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLmZpcmVFdmVudCgic3RhcnQiLHRo +aXMuc3ViamVjdCk7fSxvbkNvbXBsZXRlOmZ1bmN0aW9uKCl7dGhpcy5maXJlRXZl +bnQoImNvbXBsZXRlIix0aGlzLnN1YmplY3QpO2lmKCF0aGlzLmNhbGxDaGFpbigp +KXt0aGlzLmZpcmVFdmVudCgiY2hhaW5Db21wbGV0ZSIsdGhpcy5zdWJqZWN0KTsK +fX0sb25DYW5jZWw6ZnVuY3Rpb24oKXt0aGlzLmZpcmVFdmVudCgiY2FuY2VsIix0 +aGlzLnN1YmplY3QpLmNsZWFyQ2hhaW4oKTt9LHBhdXNlOmZ1bmN0aW9uKCl7dGhp +cy5zdG9wVGltZXIoKTtyZXR1cm4gdGhpczt9LHJlc3VtZTpmdW5jdGlvbigpe3Ro +aXMuc3RhcnRUaW1lcigpOwpyZXR1cm4gdGhpczt9LHN0b3BUaW1lcjpmdW5jdGlv +bigpe2lmKCF0aGlzLnRpbWVyKXtyZXR1cm4gZmFsc2U7fXRoaXMudGltZT0kdGlt +ZSgpLXRoaXMudGltZTt0aGlzLnRpbWVyPSRjbGVhcih0aGlzLnRpbWVyKTtyZXR1 +cm4gdHJ1ZTt9LHN0YXJ0VGltZXI6ZnVuY3Rpb24oKXtpZih0aGlzLnRpbWVyKXty +ZXR1cm4gZmFsc2U7Cn10aGlzLnRpbWU9JHRpbWUoKS10aGlzLnRpbWU7dGhpcy50 +aW1lcj10aGlzLnN0ZXAucGVyaW9kaWNhbChNYXRoLnJvdW5kKDEwMDAvdGhpcy5v +cHRpb25zLmZwcyksdGhpcyk7cmV0dXJuIHRydWU7fX0pO0Z4LmNvbXB1dGU9ZnVu +Y3Rpb24oQyxCLEEpe3JldHVybihCLUMpKkErQzsKfTtGeC5EdXJhdGlvbnM9eyJz +aG9ydCI6MjUwLG5vcm1hbDo1MDAsImxvbmciOjEwMDB9O0Z4LkNTUz1uZXcgQ2xh +c3Moe0V4dGVuZHM6RngscHJlcGFyZTpmdW5jdGlvbihELEUsQil7Qj0kc3BsYXQo +Qik7dmFyIEM9QlsxXTtpZighJGNoayhDKSl7QlsxXT1CWzBdOwpCWzBdPUQuZ2V0 +U3R5bGUoRSk7fXZhciBBPUIubWFwKHRoaXMucGFyc2UpO3JldHVybntmcm9tOkFb +MF0sdG86QVsxXX07fSxwYXJzZTpmdW5jdGlvbihBKXtBPSRsYW1iZGEoQSkoKTtB +PSh0eXBlb2YgQT09InN0cmluZyIpP0Euc3BsaXQoIiAiKTokc3BsYXQoQSk7CnJl +dHVybiBBLm1hcChmdW5jdGlvbihDKXtDPVN0cmluZyhDKTt2YXIgQj1mYWxzZTtG +eC5DU1MuUGFyc2Vycy5lYWNoKGZ1bmN0aW9uKEYsRSl7aWYoQil7cmV0dXJuIDt9 +dmFyIEQ9Ri5wYXJzZShDKTtpZigkY2hrKEQpKXtCPXt2YWx1ZTpELHBhcnNlcjpG +fTt9fSk7CkI9Qnx8e3ZhbHVlOkMscGFyc2VyOkZ4LkNTUy5QYXJzZXJzLlN0cmlu +Z307cmV0dXJuIEI7fSk7fSxjb21wdXRlOmZ1bmN0aW9uKEQsQyxCKXt2YXIgQT1b +XTsoTWF0aC5taW4oRC5sZW5ndGgsQy5sZW5ndGgpKS50aW1lcyhmdW5jdGlvbihF +KXtBLnB1c2goe3ZhbHVlOkRbRV0ucGFyc2VyLmNvbXB1dGUoRFtFXS52YWx1ZSxD +W0VdLnZhbHVlLEIpLHBhcnNlcjpEW0VdLnBhcnNlcn0pOwp9KTtBLiRmYW1pbHk9 +e25hbWU6ImZ4OmNzczp2YWx1ZSJ9O3JldHVybiBBO30sc2VydmU6ZnVuY3Rpb24o +QyxCKXtpZigkdHlwZShDKSE9ImZ4OmNzczp2YWx1ZSIpe0M9dGhpcy5wYXJzZShD +KTt9dmFyIEE9W107Qy5lYWNoKGZ1bmN0aW9uKEQpe0E9QS5jb25jYXQoRC5wYXJz +ZXIuc2VydmUoRC52YWx1ZSxCKSk7Cn0pO3JldHVybiBBO30scmVuZGVyOmZ1bmN0 +aW9uKEEsRCxDLEIpe0Euc2V0U3R5bGUoRCx0aGlzLnNlcnZlKEMsQikpO30sc2Vh +cmNoOmZ1bmN0aW9uKEEpe2lmKEZ4LkNTUy5DYWNoZVtBXSl7cmV0dXJuIEZ4LkNT +Uy5DYWNoZVtBXTt9dmFyIEI9e307QXJyYXkuZWFjaChkb2N1bWVudC5zdHlsZVNo +ZWV0cyxmdW5jdGlvbihFLEQpe3ZhciBDPUUuaHJlZjsKaWYoQyYmQy5jb250YWlu +cygiOi8vIikmJiFDLmNvbnRhaW5zKGRvY3VtZW50LmRvbWFpbikpe3JldHVybiA7 +fXZhciBGPUUucnVsZXN8fEUuY3NzUnVsZXM7QXJyYXkuZWFjaChGLGZ1bmN0aW9u +KEksRyl7aWYoIUkuc3R5bGUpe3JldHVybiA7fXZhciBIPShJLnNlbGVjdG9yVGV4 +dCk/SS5zZWxlY3RvclRleHQucmVwbGFjZSgvXlx3Ky8sZnVuY3Rpb24oSil7cmV0 +dXJuIEoudG9Mb3dlckNhc2UoKTsKfSk6bnVsbDtpZighSHx8IUgudGVzdCgiXiIr +QSsiJCIpKXtyZXR1cm4gO31FbGVtZW50LlN0eWxlcy5lYWNoKGZ1bmN0aW9uKEss +Sil7aWYoIUkuc3R5bGVbSl18fEVsZW1lbnQuU2hvcnRTdHlsZXNbSl0pe3JldHVy +biA7fUs9U3RyaW5nKEkuc3R5bGVbSl0pO0JbSl09KEsudGVzdCgvXnJnYi8pKT9L +LnJnYlRvSGV4KCk6SzsKfSk7fSk7fSk7cmV0dXJuIEZ4LkNTUy5DYWNoZVtBXT1C +O319KTtGeC5DU1MuQ2FjaGU9e307RnguQ1NTLlBhcnNlcnM9bmV3IEhhc2goe0Nv +bG9yOntwYXJzZTpmdW5jdGlvbihBKXtpZihBLm1hdGNoKC9eI1swLTlhLWZdezMs +Nn0kL2kpKXtyZXR1cm4gQS5oZXhUb1JnYih0cnVlKTsKfXJldHVybigoQT1BLm1h +dGNoKC8oXGQrKSxccyooXGQrKSxccyooXGQrKS8pKSk/W0FbMV0sQVsyXSxBWzNd +XTpmYWxzZTt9LGNvbXB1dGU6ZnVuY3Rpb24oQyxCLEEpe3JldHVybiBDLm1hcChm +dW5jdGlvbihFLEQpe3JldHVybiBNYXRoLnJvdW5kKEZ4LmNvbXB1dGUoQ1tEXSxC +W0RdLEEpKTsKfSk7fSxzZXJ2ZTpmdW5jdGlvbihBKXtyZXR1cm4gQS5tYXAoTnVt +YmVyKTt9fSxOdW1iZXI6e3BhcnNlOnBhcnNlRmxvYXQsY29tcHV0ZTpGeC5jb21w +dXRlLHNlcnZlOmZ1bmN0aW9uKEIsQSl7cmV0dXJuKEEpP0IrQTpCO319LFN0cmlu +Zzp7cGFyc2U6JGxhbWJkYShmYWxzZSksY29tcHV0ZTokYXJndW1lbnRzKDEpLHNl +cnZlOiRhcmd1bWVudHMoMCl9fSk7CkZ4LlR3ZWVuPW5ldyBDbGFzcyh7RXh0ZW5k +czpGeC5DU1MsaW5pdGlhbGl6ZTpmdW5jdGlvbihCLEEpe3RoaXMuZWxlbWVudD10 +aGlzLnN1YmplY3Q9JChCKTt0aGlzLnBhcmVudChBKTt9LHNldDpmdW5jdGlvbihC +LEEpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PTEpe0E9QjsKQj10aGlzLnByb3BlcnR5 +fHx0aGlzLm9wdGlvbnMucHJvcGVydHk7fXRoaXMucmVuZGVyKHRoaXMuZWxlbWVu +dCxCLEEsdGhpcy5vcHRpb25zLnVuaXQpO3JldHVybiB0aGlzO30sc3RhcnQ6ZnVu +Y3Rpb24oQyxFLEQpe2lmKCF0aGlzLmNoZWNrKGFyZ3VtZW50cy5jYWxsZWUsQyxF +LEQpKXtyZXR1cm4gdGhpczsKfXZhciBCPUFycmF5LmZsYXR0ZW4oYXJndW1lbnRz +KTt0aGlzLnByb3BlcnR5PXRoaXMub3B0aW9ucy5wcm9wZXJ0eXx8Qi5zaGlmdCgp +O3ZhciBBPXRoaXMucHJlcGFyZSh0aGlzLmVsZW1lbnQsdGhpcy5wcm9wZXJ0eSxC +KTtyZXR1cm4gdGhpcy5wYXJlbnQoQS5mcm9tLEEudG8pOwp9fSk7RWxlbWVudC5Q +cm9wZXJ0aWVzLnR3ZWVuPXtzZXQ6ZnVuY3Rpb24oQSl7dmFyIEI9dGhpcy5yZXRy +aWV2ZSgidHdlZW4iKTtpZihCKXtCLmNhbmNlbCgpO31yZXR1cm4gdGhpcy5lbGlt +aW5hdGUoInR3ZWVuIikuc3RvcmUoInR3ZWVuOm9wdGlvbnMiLCRleHRlbmQoe2xp +bms6ImNhbmNlbCJ9LEEpKTsKfSxnZXQ6ZnVuY3Rpb24oQSl7aWYoQXx8IXRoaXMu +cmV0cmlldmUoInR3ZWVuIikpe2lmKEF8fCF0aGlzLnJldHJpZXZlKCJ0d2Vlbjpv +cHRpb25zIikpe3RoaXMuc2V0KCJ0d2VlbiIsQSk7fXRoaXMuc3RvcmUoInR3ZWVu +IixuZXcgRnguVHdlZW4odGhpcyx0aGlzLnJldHJpZXZlKCJ0d2VlbjpvcHRpb25z +IikpKTsKfXJldHVybiB0aGlzLnJldHJpZXZlKCJ0d2VlbiIpO319O0VsZW1lbnQu +aW1wbGVtZW50KHt0d2VlbjpmdW5jdGlvbihBLEMsQil7dGhpcy5nZXQoInR3ZWVu +Iikuc3RhcnQoYXJndW1lbnRzKTtyZXR1cm4gdGhpczt9LGZhZGU6ZnVuY3Rpb24o +Qyl7dmFyIEU9dGhpcy5nZXQoInR3ZWVuIiksRD0ib3BhY2l0eSIsQTsKQz0kcGlj +ayhDLCJ0b2dnbGUiKTtzd2l0Y2goQyl7Y2FzZSJpbiI6RS5zdGFydChELDEpO2Jy +ZWFrO2Nhc2Uib3V0IjpFLnN0YXJ0KEQsMCk7YnJlYWs7Y2FzZSJzaG93IjpFLnNl +dChELDEpO2JyZWFrO2Nhc2UiaGlkZSI6RS5zZXQoRCwwKTticmVhaztjYXNlInRv +Z2dsZSI6dmFyIEI9dGhpcy5yZXRyaWV2ZSgiZmFkZTpmbGFnIix0aGlzLmdldCgi +b3BhY2l0eSIpPT0xKTsKRS5zdGFydChELChCKT8wOjEpO3RoaXMuc3RvcmUoImZh +ZGU6ZmxhZyIsIUIpO0E9dHJ1ZTticmVhaztkZWZhdWx0OkUuc3RhcnQoRCxhcmd1 +bWVudHMpO31pZighQSl7dGhpcy5lbGltaW5hdGUoImZhZGU6ZmxhZyIpO31yZXR1 +cm4gdGhpczt9LGhpZ2hsaWdodDpmdW5jdGlvbihDLEEpe2lmKCFBKXtBPXRoaXMu +cmV0cmlldmUoImhpZ2hsaWdodDpvcmlnaW5hbCIsdGhpcy5nZXRTdHlsZSgiYmFj +a2dyb3VuZC1jb2xvciIpKTsKQT0oQT09InRyYW5zcGFyZW50Iik/IiNmZmYiOkE7 +fXZhciBCPXRoaXMuZ2V0KCJ0d2VlbiIpO0Iuc3RhcnQoImJhY2tncm91bmQtY29s +b3IiLEN8fCIjZmZmZjg4IixBKS5jaGFpbihmdW5jdGlvbigpe3RoaXMuc2V0U3R5 +bGUoImJhY2tncm91bmQtY29sb3IiLHRoaXMucmV0cmlldmUoImhpZ2hsaWdodDpv +cmlnaW5hbCIpKTsKQi5jYWxsQ2hhaW4oKTt9LmJpbmQodGhpcykpO3JldHVybiB0 +aGlzO319KTtGeC5Nb3JwaD1uZXcgQ2xhc3Moe0V4dGVuZHM6RnguQ1NTLGluaXRp +YWxpemU6ZnVuY3Rpb24oQixBKXt0aGlzLmVsZW1lbnQ9dGhpcy5zdWJqZWN0PSQo +Qik7dGhpcy5wYXJlbnQoQSk7fSxzZXQ6ZnVuY3Rpb24oQSl7aWYodHlwZW9mIEE9 +PSJzdHJpbmciKXtBPXRoaXMuc2VhcmNoKEEpOwp9Zm9yKHZhciBCIGluIEEpe3Ro +aXMucmVuZGVyKHRoaXMuZWxlbWVudCxCLEFbQl0sdGhpcy5vcHRpb25zLnVuaXQp +O31yZXR1cm4gdGhpczt9LGNvbXB1dGU6ZnVuY3Rpb24oRSxELEMpe3ZhciBBPXt9 +O2Zvcih2YXIgQiBpbiBFKXtBW0JdPXRoaXMucGFyZW50KEVbQl0sRFtCXSxDKTsK +fXJldHVybiBBO30sc3RhcnQ6ZnVuY3Rpb24oQil7aWYoIXRoaXMuY2hlY2soYXJn +dW1lbnRzLmNhbGxlZSxCKSl7cmV0dXJuIHRoaXM7fWlmKHR5cGVvZiBCPT0ic3Ry +aW5nIil7Qj10aGlzLnNlYXJjaChCKTt9dmFyIEU9e30sRD17fTtmb3IodmFyIEMg +aW4gQil7dmFyIEE9dGhpcy5wcmVwYXJlKHRoaXMuZWxlbWVudCxDLEJbQ10pOwpF +W0NdPUEuZnJvbTtEW0NdPUEudG87fXJldHVybiB0aGlzLnBhcmVudChFLEQpO319 +KTtFbGVtZW50LlByb3BlcnRpZXMubW9ycGg9e3NldDpmdW5jdGlvbihBKXt2YXIg +Qj10aGlzLnJldHJpZXZlKCJtb3JwaCIpO2lmKEIpe0IuY2FuY2VsKCk7fXJldHVy +biB0aGlzLmVsaW1pbmF0ZSgibW9ycGgiKS5zdG9yZSgibW9ycGg6b3B0aW9ucyIs +JGV4dGVuZCh7bGluazoiY2FuY2VsIn0sQSkpOwp9LGdldDpmdW5jdGlvbihBKXtp +ZihBfHwhdGhpcy5yZXRyaWV2ZSgibW9ycGgiKSl7aWYoQXx8IXRoaXMucmV0cmll +dmUoIm1vcnBoOm9wdGlvbnMiKSl7dGhpcy5zZXQoIm1vcnBoIixBKTt9dGhpcy5z +dG9yZSgibW9ycGgiLG5ldyBGeC5Nb3JwaCh0aGlzLHRoaXMucmV0cmlldmUoIm1v +cnBoOm9wdGlvbnMiKSkpOwp9cmV0dXJuIHRoaXMucmV0cmlldmUoIm1vcnBoIik7 +fX07RWxlbWVudC5pbXBsZW1lbnQoe21vcnBoOmZ1bmN0aW9uKEEpe3RoaXMuZ2V0 +KCJtb3JwaCIpLnN0YXJ0KEEpO3JldHVybiB0aGlzO319KTsoZnVuY3Rpb24oKXt2 +YXIgQT1GeC5wcm90b3R5cGUuaW5pdGlhbGl6ZTsKRngucHJvdG90eXBlLmluaXRp +YWxpemU9ZnVuY3Rpb24oQil7QS5jYWxsKHRoaXMsQik7dmFyIEM9dGhpcy5vcHRp +b25zLnRyYW5zaXRpb247aWYodHlwZW9mIEM9PSJzdHJpbmciJiYoQz1DLnNwbGl0 +KCI6IikpKXt2YXIgRD1GeC5UcmFuc2l0aW9ucztEPURbQ1swXV18fERbQ1swXS5j +YXBpdGFsaXplKCldOwppZihDWzFdKXtEPURbImVhc2UiK0NbMV0uY2FwaXRhbGl6 +ZSgpKyhDWzJdP0NbMl0uY2FwaXRhbGl6ZSgpOiIiKV07fXRoaXMub3B0aW9ucy50 +cmFuc2l0aW9uPUQ7fX07fSkoKTtGeC5UcmFuc2l0aW9uPWZ1bmN0aW9uKEIsQSl7 +QT0kc3BsYXQoQSk7cmV0dXJuICRleHRlbmQoQix7ZWFzZUluOmZ1bmN0aW9uKEMp +e3JldHVybiBCKEMsQSk7Cn0sZWFzZU91dDpmdW5jdGlvbihDKXtyZXR1cm4gMS1C +KDEtQyxBKTt9LGVhc2VJbk91dDpmdW5jdGlvbihDKXtyZXR1cm4oQzw9MC41KT9C +KDIqQyxBKS8yOigyLUIoMiooMS1DKSxBKSkvMjt9fSk7fTtGeC5UcmFuc2l0aW9u +cz1uZXcgSGFzaCh7bGluZWFyOiRhcmd1bWVudHMoMCl9KTsKRnguVHJhbnNpdGlv +bnMuZXh0ZW5kPWZ1bmN0aW9uKEEpe2Zvcih2YXIgQiBpbiBBKXtGeC5UcmFuc2l0 +aW9uc1tCXT1uZXcgRnguVHJhbnNpdGlvbihBW0JdKTt9fTtGeC5UcmFuc2l0aW9u +cy5leHRlbmQoe1BvdzpmdW5jdGlvbihCLEEpe3JldHVybiBNYXRoLnBvdyhCLEFb +MF18fDYpOwp9LEV4cG86ZnVuY3Rpb24oQSl7cmV0dXJuIE1hdGgucG93KDIsOCoo +QS0xKSk7fSxDaXJjOmZ1bmN0aW9uKEEpe3JldHVybiAxLU1hdGguc2luKE1hdGgu +YWNvcyhBKSk7fSxTaW5lOmZ1bmN0aW9uKEEpe3JldHVybiAxLU1hdGguc2luKCgx +LUEpKk1hdGguUEkvMik7Cn0sQmFjazpmdW5jdGlvbihCLEEpe0E9QVswXXx8MS42 +MTg7cmV0dXJuIE1hdGgucG93KEIsMikqKChBKzEpKkItQSk7fSxCb3VuY2U6ZnVu +Y3Rpb24oRCl7dmFyIEM7Zm9yKHZhciBCPTAsQT0xOzE7Qis9QSxBLz0yKXtpZihE +Pj0oNy00KkIpLzExKXtDPS1NYXRoLnBvdygoMTEtNipCLTExKkQpLzQsMikrQSpB +OwpicmVhazt9fXJldHVybiBDO30sRWxhc3RpYzpmdW5jdGlvbihCLEEpe3JldHVy +biBNYXRoLnBvdygyLDEwKi0tQikqTWF0aC5jb3MoMjAqQipNYXRoLlBJKihBWzBd +fHwxKS8zKTt9fSk7WyJRdWFkIiwiQ3ViaWMiLCJRdWFydCIsIlF1aW50Il0uZWFj +aChmdW5jdGlvbihCLEEpe0Z4LlRyYW5zaXRpb25zW0JdPW5ldyBGeC5UcmFuc2l0 +aW9uKGZ1bmN0aW9uKEMpe3JldHVybiBNYXRoLnBvdyhDLFtBKzJdKTsKfSk7fSk7 +dmFyIFJlcXVlc3Q9bmV3IENsYXNzKHtJbXBsZW1lbnRzOltDaGFpbixFdmVudHMs +T3B0aW9uc10sb3B0aW9uczp7dXJsOiIiLGRhdGE6IiIsaGVhZGVyczp7IlgtUmVx +dWVzdGVkLVdpdGgiOiJYTUxIdHRwUmVxdWVzdCIsQWNjZXB0OiJ0ZXh0L2phdmFz +Y3JpcHQsIHRleHQvaHRtbCwgYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCwgKi8q +In0sYXN5bmM6dHJ1ZSxmb3JtYXQ6ZmFsc2UsbWV0aG9kOiJwb3N0IixsaW5rOiJp +Z25vcmUiLGlzU3VjY2VzczpudWxsLGVtdWxhdGlvbjp0cnVlLHVybEVuY29kZWQ6 +dHJ1ZSxlbmNvZGluZzoidXRmLTgiLGV2YWxTY3JpcHRzOmZhbHNlLGV2YWxSZXNw +b25zZTpmYWxzZX0saW5pdGlhbGl6ZTpmdW5jdGlvbihBKXt0aGlzLnhocj1uZXcg +QnJvd3Nlci5SZXF1ZXN0KCk7CnRoaXMuc2V0T3B0aW9ucyhBKTt0aGlzLm9wdGlv +bnMuaXNTdWNjZXNzPXRoaXMub3B0aW9ucy5pc1N1Y2Nlc3N8fHRoaXMuaXNTdWNj +ZXNzO3RoaXMuaGVhZGVycz1uZXcgSGFzaCh0aGlzLm9wdGlvbnMuaGVhZGVycyk7 +fSxvblN0YXRlQ2hhbmdlOmZ1bmN0aW9uKCl7aWYodGhpcy54aHIucmVhZHlTdGF0 +ZSE9NHx8IXRoaXMucnVubmluZyl7cmV0dXJuIDsKfXRoaXMucnVubmluZz1mYWxz +ZTt0aGlzLnN0YXR1cz0wOyR0cnkoZnVuY3Rpb24oKXt0aGlzLnN0YXR1cz10aGlz +Lnhoci5zdGF0dXM7fS5iaW5kKHRoaXMpKTtpZih0aGlzLm9wdGlvbnMuaXNTdWNj +ZXNzLmNhbGwodGhpcyx0aGlzLnN0YXR1cykpe3RoaXMucmVzcG9uc2U9e3RleHQ6 +dGhpcy54aHIucmVzcG9uc2VUZXh0LHhtbDp0aGlzLnhoci5yZXNwb25zZVhNTH07 +CnRoaXMuc3VjY2Vzcyh0aGlzLnJlc3BvbnNlLnRleHQsdGhpcy5yZXNwb25zZS54 +bWwpO31lbHNle3RoaXMucmVzcG9uc2U9e3RleHQ6bnVsbCx4bWw6bnVsbH07dGhp +cy5mYWlsdXJlKCk7fXRoaXMueGhyLm9ucmVhZHlzdGF0ZWNoYW5nZT0kZW1wdHk7 +fSxpc1N1Y2Nlc3M6ZnVuY3Rpb24oKXtyZXR1cm4oKHRoaXMuc3RhdHVzPj0yMDAp +JiYodGhpcy5zdGF0dXM8MzAwKSk7Cn0scHJvY2Vzc1NjcmlwdHM6ZnVuY3Rpb24o +QSl7aWYodGhpcy5vcHRpb25zLmV2YWxSZXNwb25zZXx8KC8oZWNtYXxqYXZhKXNj +cmlwdC8pLnRlc3QodGhpcy5nZXRIZWFkZXIoIkNvbnRlbnQtdHlwZSIpKSl7cmV0 +dXJuICRleGVjKEEpO31yZXR1cm4gQS5zdHJpcFNjcmlwdHModGhpcy5vcHRpb25z +LmV2YWxTY3JpcHRzKTsKfSxzdWNjZXNzOmZ1bmN0aW9uKEIsQSl7dGhpcy5vblN1 +Y2Nlc3ModGhpcy5wcm9jZXNzU2NyaXB0cyhCKSxBKTt9LG9uU3VjY2VzczpmdW5j +dGlvbigpe3RoaXMuZmlyZUV2ZW50KCJjb21wbGV0ZSIsYXJndW1lbnRzKS5maXJl +RXZlbnQoInN1Y2Nlc3MiLGFyZ3VtZW50cykuY2FsbENoYWluKCk7Cn0sZmFpbHVy +ZTpmdW5jdGlvbigpe3RoaXMub25GYWlsdXJlKCk7fSxvbkZhaWx1cmU6ZnVuY3Rp +b24oKXt0aGlzLmZpcmVFdmVudCgiY29tcGxldGUiKS5maXJlRXZlbnQoImZhaWx1 +cmUiLHRoaXMueGhyKTt9LHNldEhlYWRlcjpmdW5jdGlvbihBLEIpe3RoaXMuaGVh +ZGVycy5zZXQoQSxCKTsKcmV0dXJuIHRoaXM7fSxnZXRIZWFkZXI6ZnVuY3Rpb24o +QSl7cmV0dXJuICR0cnkoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54aHIuZ2V0UmVz +cG9uc2VIZWFkZXIoQSk7fS5iaW5kKHRoaXMpKTt9LGNoZWNrOmZ1bmN0aW9uKEEp +e2lmKCF0aGlzLnJ1bm5pbmcpe3JldHVybiB0cnVlOwp9c3dpdGNoKHRoaXMub3B0 +aW9ucy5saW5rKXtjYXNlImNhbmNlbCI6dGhpcy5jYW5jZWwoKTtyZXR1cm4gdHJ1 +ZTtjYXNlImNoYWluIjp0aGlzLmNoYWluKEEuYmluZCh0aGlzLEFycmF5LnNsaWNl +KGFyZ3VtZW50cywxKSkpO3JldHVybiBmYWxzZTt9cmV0dXJuIGZhbHNlOwp9LHNl +bmQ6ZnVuY3Rpb24oSSl7aWYoIXRoaXMuY2hlY2soYXJndW1lbnRzLmNhbGxlZSxJ +KSl7cmV0dXJuIHRoaXM7fXRoaXMucnVubmluZz10cnVlO3ZhciBHPSR0eXBlKEkp +O2lmKEc9PSJzdHJpbmcifHxHPT0iZWxlbWVudCIpe0k9e2RhdGE6SX07fXZhciBE +PXRoaXMub3B0aW9uczsKST0kZXh0ZW5kKHtkYXRhOkQuZGF0YSx1cmw6RC51cmws +bWV0aG9kOkQubWV0aG9kfSxJKTt2YXIgRT1JLmRhdGEsQj1JLnVybCxBPUkubWV0 +aG9kO3N3aXRjaCgkdHlwZShFKSl7Y2FzZSJlbGVtZW50IjpFPSQoRSkudG9RdWVy +eVN0cmluZygpO2JyZWFrO2Nhc2Uib2JqZWN0IjpjYXNlImhhc2giOkU9SGFzaC50 +b1F1ZXJ5U3RyaW5nKEUpOwp9aWYodGhpcy5vcHRpb25zLmZvcm1hdCl7dmFyIEg9 +ImZvcm1hdD0iK3RoaXMub3B0aW9ucy5mb3JtYXQ7RT0oRSk/SCsiJiIrRTpIO31p +Zih0aGlzLm9wdGlvbnMuZW11bGF0aW9uJiZbInB1dCIsImRlbGV0ZSJdLmNvbnRh +aW5zKEEpKXt2YXIgRj0iX21ldGhvZD0iK0E7CkU9KEUpP0YrIiYiK0U6RjtBPSJw +b3N0Ijt9aWYodGhpcy5vcHRpb25zLnVybEVuY29kZWQmJkE9PSJwb3N0Iil7dmFy +IEM9KHRoaXMub3B0aW9ucy5lbmNvZGluZyk/IjsgY2hhcnNldD0iK3RoaXMub3B0 +aW9ucy5lbmNvZGluZzoiIjt0aGlzLmhlYWRlcnMuc2V0KCJDb250ZW50LXR5cGUi +LCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiK0MpOwp9aWYoRSYm +QT09ImdldCIpe0I9QisoQi5jb250YWlucygiPyIpPyImIjoiPyIpK0U7RT1udWxs +O310aGlzLnhoci5vcGVuKEEudG9VcHBlckNhc2UoKSxCLHRoaXMub3B0aW9ucy5h +c3luYyk7dGhpcy54aHIub25yZWFkeXN0YXRlY2hhbmdlPXRoaXMub25TdGF0ZUNo +YW5nZS5iaW5kKHRoaXMpOwp0aGlzLmhlYWRlcnMuZWFjaChmdW5jdGlvbihLLEop +e2lmKCEkdHJ5KGZ1bmN0aW9uKCl7dGhpcy54aHIuc2V0UmVxdWVzdEhlYWRlcihK +LEspO3JldHVybiB0cnVlO30uYmluZCh0aGlzKSkpe3RoaXMuZmlyZUV2ZW50KCJl +eGNlcHRpb24iLFtKLEtdKTt9fSx0aGlzKTsKdGhpcy5maXJlRXZlbnQoInJlcXVl +c3QiKTt0aGlzLnhoci5zZW5kKEUpO2lmKCF0aGlzLm9wdGlvbnMuYXN5bmMpe3Ro +aXMub25TdGF0ZUNoYW5nZSgpO31yZXR1cm4gdGhpczt9LGNhbmNlbDpmdW5jdGlv +bigpe2lmKCF0aGlzLnJ1bm5pbmcpe3JldHVybiB0aGlzOwp9dGhpcy5ydW5uaW5n +PWZhbHNlO3RoaXMueGhyLmFib3J0KCk7dGhpcy54aHIub25yZWFkeXN0YXRlY2hh +bmdlPSRlbXB0eTt0aGlzLnhocj1uZXcgQnJvd3Nlci5SZXF1ZXN0KCk7dGhpcy5m +aXJlRXZlbnQoImNhbmNlbCIpO3JldHVybiB0aGlzO319KTsoZnVuY3Rpb24oKXt2 +YXIgQT17fTsKWyJnZXQiLCJwb3N0IiwicHV0IiwiZGVsZXRlIiwiR0VUIiwiUE9T +VCIsIlBVVCIsIkRFTEVURSJdLmVhY2goZnVuY3Rpb24oQil7QVtCXT1mdW5jdGlv +bigpe3ZhciBDPUFycmF5LmxpbmsoYXJndW1lbnRzLHt1cmw6U3RyaW5nLnR5cGUs +ZGF0YTokZGVmaW5lZH0pOwpyZXR1cm4gdGhpcy5zZW5kKCRleHRlbmQoQyx7bWV0 +aG9kOkIudG9Mb3dlckNhc2UoKX0pKTt9O30pO1JlcXVlc3QuaW1wbGVtZW50KEEp +O30pKCk7RWxlbWVudC5Qcm9wZXJ0aWVzLnNlbmQ9e3NldDpmdW5jdGlvbihBKXt2 +YXIgQj10aGlzLnJldHJpZXZlKCJzZW5kIik7CmlmKEIpe0IuY2FuY2VsKCk7fXJl +dHVybiB0aGlzLmVsaW1pbmF0ZSgic2VuZCIpLnN0b3JlKCJzZW5kOm9wdGlvbnMi +LCRleHRlbmQoe2RhdGE6dGhpcyxsaW5rOiJjYW5jZWwiLG1ldGhvZDp0aGlzLmdl +dCgibWV0aG9kIil8fCJwb3N0Iix1cmw6dGhpcy5nZXQoImFjdGlvbiIpfSxBKSk7 +Cn0sZ2V0OmZ1bmN0aW9uKEEpe2lmKEF8fCF0aGlzLnJldHJpZXZlKCJzZW5kIikp +e2lmKEF8fCF0aGlzLnJldHJpZXZlKCJzZW5kOm9wdGlvbnMiKSl7dGhpcy5zZXQo +InNlbmQiLEEpO310aGlzLnN0b3JlKCJzZW5kIixuZXcgUmVxdWVzdCh0aGlzLnJl +dHJpZXZlKCJzZW5kOm9wdGlvbnMiKSkpOwp9cmV0dXJuIHRoaXMucmV0cmlldmUo +InNlbmQiKTt9fTtFbGVtZW50LmltcGxlbWVudCh7c2VuZDpmdW5jdGlvbihBKXt2 +YXIgQj10aGlzLmdldCgic2VuZCIpO0Iuc2VuZCh7ZGF0YTp0aGlzLHVybDpBfHxC +Lm9wdGlvbnMudXJsfSk7cmV0dXJuIHRoaXM7fX0pO1JlcXVlc3QuSFRNTD1uZXcg +Q2xhc3Moe0V4dGVuZHM6UmVxdWVzdCxvcHRpb25zOnt1cGRhdGU6ZmFsc2UsZXZh +bFNjcmlwdHM6dHJ1ZSxmaWx0ZXI6ZmFsc2V9LHByb2Nlc3NIVE1MOmZ1bmN0aW9u +KEMpe3ZhciBCPUMubWF0Y2goLzxib2R5W14+XSo+KFtcc1xTXSo/KTxcL2JvZHk+ +L2kpOwpDPShCKT9CWzFdOkM7dmFyIEE9bmV3IEVsZW1lbnQoImRpdiIpO3JldHVy +biAkdHJ5KGZ1bmN0aW9uKCl7dmFyIEQ9Ijxyb290PiIrQysiPC9yb290PiIsRztp +ZihCcm93c2VyLkVuZ2luZS50cmlkZW50KXtHPW5ldyBBY3RpdmVYT2JqZWN0KCJN +aWNyb3NvZnQuWE1MRE9NIik7CkcuYXN5bmM9ZmFsc2U7Ry5sb2FkWE1MKEQpO31l +bHNle0c9bmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhELCJ0ZXh0L3ht +bCIpO31EPUcuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInJvb3QiKVswXTtmb3IodmFy +IEY9MCxFPUQuY2hpbGROb2Rlcy5sZW5ndGg7CkY8RTtGKyspe3ZhciBIPUVsZW1l +bnQuY2xvbmUoRC5jaGlsZE5vZGVzW0ZdLHRydWUsdHJ1ZSk7aWYoSCl7QS5ncmFi +KEgpO319cmV0dXJuIEE7fSl8fEEuc2V0KCJodG1sIixDKTt9LHN1Y2Nlc3M6ZnVu +Y3Rpb24oRCl7dmFyIEM9dGhpcy5vcHRpb25zLEI9dGhpcy5yZXNwb25zZTsKQi5o +dG1sPUQuc3RyaXBTY3JpcHRzKGZ1bmN0aW9uKEUpe0IuamF2YXNjcmlwdD1FO30p +O3ZhciBBPXRoaXMucHJvY2Vzc0hUTUwoQi5odG1sKTtCLnRyZWU9QS5jaGlsZE5v +ZGVzO0IuZWxlbWVudHM9QS5nZXRFbGVtZW50cygiKiIpO2lmKEMuZmlsdGVyKXtC +LnRyZWU9Qi5lbGVtZW50cy5maWx0ZXIoQy5maWx0ZXIpOwp9aWYoQy51cGRhdGUp +eyQoQy51cGRhdGUpLmVtcHR5KCkuYWRvcHQoQi50cmVlKTt9aWYoQy5ldmFsU2Ny +aXB0cyl7JGV4ZWMoQi5qYXZhc2NyaXB0KTt9dGhpcy5vblN1Y2Nlc3MoQi50cmVl +LEIuZWxlbWVudHMsQi5odG1sLEIuamF2YXNjcmlwdCk7fX0pO0VsZW1lbnQuUHJv +cGVydGllcy5sb2FkPXtzZXQ6ZnVuY3Rpb24oQSl7dmFyIEI9dGhpcy5yZXRyaWV2 +ZSgibG9hZCIpOwppZihCKXtzZW5kLmNhbmNlbCgpO31yZXR1cm4gdGhpcy5lbGlt +aW5hdGUoImxvYWQiKS5zdG9yZSgibG9hZDpvcHRpb25zIiwkZXh0ZW5kKHtkYXRh +OnRoaXMsbGluazoiY2FuY2VsIix1cGRhdGU6dGhpcyxtZXRob2Q6ImdldCJ9LEEp +KTt9LGdldDpmdW5jdGlvbihBKXtpZihBfHwhdGhpcy5yZXRyaWV2ZSgibG9hZCIp +KXtpZihBfHwhdGhpcy5yZXRyaWV2ZSgibG9hZDpvcHRpb25zIikpe3RoaXMuc2V0 +KCJsb2FkIixBKTsKfXRoaXMuc3RvcmUoImxvYWQiLG5ldyBSZXF1ZXN0LkhUTUwo +dGhpcy5yZXRyaWV2ZSgibG9hZDpvcHRpb25zIikpKTt9cmV0dXJuIHRoaXMucmV0 +cmlldmUoImxvYWQiKTt9fTtFbGVtZW50LmltcGxlbWVudCh7bG9hZDpmdW5jdGlv +bigpe3RoaXMuZ2V0KCJsb2FkIikuc2VuZChBcnJheS5saW5rKGFyZ3VtZW50cyx7 +ZGF0YTpPYmplY3QudHlwZSx1cmw6U3RyaW5nLnR5cGV9KSk7CnJldHVybiB0aGlz +O319KTtSZXF1ZXN0LkpTT049bmV3IENsYXNzKHtFeHRlbmRzOlJlcXVlc3Qsb3B0 +aW9uczp7c2VjdXJlOnRydWV9LGluaXRpYWxpemU6ZnVuY3Rpb24oQSl7dGhpcy5w +YXJlbnQoQSk7dGhpcy5oZWFkZXJzLmV4dGVuZCh7QWNjZXB0OiJhcHBsaWNhdGlv +bi9qc29uIiwiWC1SZXF1ZXN0IjoiSlNPTiJ9KTsKfSxzdWNjZXNzOmZ1bmN0aW9u +KEEpe3RoaXMucmVzcG9uc2UuanNvbj1KU09OLmRlY29kZShBLHRoaXMub3B0aW9u +cy5zZWN1cmUpO3RoaXMub25TdWNjZXNzKHRoaXMucmVzcG9uc2UuanNvbixBKTt9 +fSk7Ci8vTW9vVG9vbHMgTW9yZSwgPGh0dHA6Ly9tb290b29scy5uZXQvbW9yZT4u +IENvcHlyaWdodCAoYykgMjAwNi0yMDA4IFZhbGVyaW8gUHJvaWV0dGksIDxodHRw +Oi8vbWFkNG1pbGsubmV0PiwgTUlUIFN0eWxlIExpY2Vuc2UuCnZhciBBc3NldD1u +ZXcgSGFzaCh7amF2YXNjcmlwdDpmdW5jdGlvbihGLEQpe0Q9JGV4dGVuZCh7b25s +b2FkOiRlbXB0eSxkb2N1bWVudDpkb2N1bWVudCxjaGVjazokbGFtYmRhKHRydWUp +fSxEKTt2YXIgQj1uZXcgRWxlbWVudCgic2NyaXB0Iix7c3JjOkYsdHlwZToidGV4 +dC9qYXZhc2NyaXB0In0pOwp2YXIgRT1ELm9ubG9hZC5iaW5kKEIpLEE9RC5jaGVj +ayxHPUQuZG9jdW1lbnQ7ZGVsZXRlIEQub25sb2FkO2RlbGV0ZSBELmNoZWNrO2Rl +bGV0ZSBELmRvY3VtZW50O0IuYWRkRXZlbnRzKHtsb2FkOkUscmVhZHlzdGF0ZWNo +YW5nZTpmdW5jdGlvbigpe2lmKFsibG9hZGVkIiwiY29tcGxldGUiXS5jb250YWlu +cyh0aGlzLnJlYWR5U3RhdGUpKXtFKCk7Cn19fSkuc2V0UHJvcGVydGllcyhEKTtp +ZihCcm93c2VyLkVuZ2luZS53ZWJraXQ0MTkpe3ZhciBDPShmdW5jdGlvbigpe2lm +KCEkdHJ5KEEpKXtyZXR1cm4gO30kY2xlYXIoQyk7RSgpO30pLnBlcmlvZGljYWwo +NTApO31yZXR1cm4gQi5pbmplY3QoRy5oZWFkKTt9LGNzczpmdW5jdGlvbihCLEEp +e3JldHVybiBuZXcgRWxlbWVudCgibGluayIsJG1lcmdlKHtyZWw6InN0eWxlc2hl +ZXQiLG1lZGlhOiJzY3JlZW4iLHR5cGU6InRleHQvY3NzIixocmVmOkJ9LEEpKS5p +bmplY3QoZG9jdW1lbnQuaGVhZCk7Cn0saW1hZ2U6ZnVuY3Rpb24oQyxCKXtCPSRt +ZXJnZSh7b25sb2FkOiRlbXB0eSxvbmFib3J0OiRlbXB0eSxvbmVycm9yOiRlbXB0 +eX0sQik7dmFyIEQ9bmV3IEltYWdlKCk7dmFyIEE9JChEKXx8bmV3IEVsZW1lbnQo +ImltZyIpO1sibG9hZCIsImFib3J0IiwiZXJyb3IiXS5lYWNoKGZ1bmN0aW9uKEUp +e3ZhciBGPSJvbiIrRTsKdmFyIEc9QltGXTtkZWxldGUgQltGXTtEW0ZdPWZ1bmN0 +aW9uKCl7aWYoIUQpe3JldHVybiA7fWlmKCFBLnBhcmVudE5vZGUpe0Eud2lkdGg9 +RC53aWR0aDtBLmhlaWdodD1ELmhlaWdodDt9RD1ELm9ubG9hZD1ELm9uYWJvcnQ9 +RC5vbmVycm9yPW51bGw7Ry5kZWxheSgxLEEsQSk7CkEuZmlyZUV2ZW50KEUsQSwx +KTt9O30pO0Quc3JjPUEuc3JjPUM7aWYoRCYmRC5jb21wbGV0ZSl7RC5vbmxvYWQu +ZGVsYXkoMSk7fXJldHVybiBBLnNldFByb3BlcnRpZXMoQik7fSxpbWFnZXM6ZnVu +Y3Rpb24oRCxDKXtDPSRtZXJnZSh7b25Db21wbGV0ZTokZW1wdHksb25Qcm9ncmVz +czokZW1wdHl9LEMpOwppZighRC5wdXNoKXtEPVtEXTt9dmFyIEE9W107dmFyIEI9 +MDtELmVhY2goZnVuY3Rpb24oRil7dmFyIEU9bmV3IEFzc2V0LmltYWdlKEYse29u +bG9hZDpmdW5jdGlvbigpe0Mub25Qcm9ncmVzcy5jYWxsKHRoaXMsQixELmluZGV4 +T2YoRikpO0IrKztpZihCPT1ELmxlbmd0aCl7Qy5vbkNvbXBsZXRlKCk7Cn19fSk7 +QS5wdXNoKEUpO30pO3JldHVybiBuZXcgRWxlbWVudHMoQSk7fX0pOwovL01vb1Rv +b2xzIE1vcmUsIDxodHRwOi8vbW9vdG9vbHMubmV0L21vcmU+LiBDb3B5cmlnaHQg +KGMpIDIwMDYtMjAwOCBWYWxlcmlvIFByb2lldHRpLCA8aHR0cDovL21hZDRtaWxr +Lm5ldD4sIE1JVCBTdHlsZSBMaWNlbnNlLgpGeC5TY3JvbGw9bmV3IENsYXNzKHtF +eHRlbmRzOkZ4LG9wdGlvbnM6e29mZnNldDp7eDowLHk6MH0sd2hlZWxTdG9wczp0 +cnVlfSxpbml0aWFsaXplOmZ1bmN0aW9uKEIsQSl7dGhpcy5lbGVtZW50PXRoaXMu +c3ViamVjdD0kKEIpO3RoaXMucGFyZW50KEEpO3ZhciBEPXRoaXMuY2FuY2VsLmJp +bmQodGhpcyxmYWxzZSk7CmlmKCR0eXBlKHRoaXMuZWxlbWVudCkhPSJlbGVtZW50 +Iil7dGhpcy5lbGVtZW50PSQodGhpcy5lbGVtZW50LmdldERvY3VtZW50KCkuYm9k +eSk7fXZhciBDPXRoaXMuZWxlbWVudDtpZih0aGlzLm9wdGlvbnMud2hlZWxTdG9w +cyl7dGhpcy5hZGRFdmVudCgic3RhcnQiLGZ1bmN0aW9uKCl7Qy5hZGRFdmVudCgi +bW91c2V3aGVlbCIsRCk7Cn0sdHJ1ZSk7dGhpcy5hZGRFdmVudCgiY29tcGxldGUi +LGZ1bmN0aW9uKCl7Qy5yZW1vdmVFdmVudCgibW91c2V3aGVlbCIsRCk7fSx0cnVl +KTt9fSxzZXQ6ZnVuY3Rpb24oKXt2YXIgQT1BcnJheS5mbGF0dGVuKGFyZ3VtZW50 +cyk7dGhpcy5lbGVtZW50LnNjcm9sbFRvKEFbMF0sQVsxXSk7Cn0sY29tcHV0ZTpm +dW5jdGlvbihFLEQsQyl7dmFyIEI9W107dmFyIEE9MjtBLnRpbWVzKGZ1bmN0aW9u +KEYpe0IucHVzaChGeC5jb21wdXRlKEVbRl0sRFtGXSxDKSk7fSk7cmV0dXJuIEI7 +fSxzdGFydDpmdW5jdGlvbihDLEgpe2lmKCF0aGlzLmNoZWNrKGFyZ3VtZW50cy5j +YWxsZWUsQyxIKSl7cmV0dXJuIHRoaXM7Cn12YXIgRT10aGlzLmVsZW1lbnQuZ2V0 +U2l6ZSgpLEY9dGhpcy5lbGVtZW50LmdldFNjcm9sbFNpemUoKTt2YXIgQj10aGlz +LmVsZW1lbnQuZ2V0U2Nyb2xsKCksRD17eDpDLHk6SH07Zm9yKHZhciBHIGluIEQp +e3ZhciBBPUZbR10tRVtHXTtpZigkY2hrKERbR10pKXtEW0ddPSgkdHlwZShEW0dd +KT09Im51bWJlciIpP0RbR10ubGltaXQoMCxBKTpBOwp9ZWxzZXtEW0ddPUJbR107 +fURbR10rPXRoaXMub3B0aW9ucy5vZmZzZXRbR107fXJldHVybiB0aGlzLnBhcmVu +dChbQi54LEIueV0sW0QueCxELnldKTt9LHRvVG9wOmZ1bmN0aW9uKCl7cmV0dXJu +IHRoaXMuc3RhcnQoZmFsc2UsMCk7fSx0b0xlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4g +dGhpcy5zdGFydCgwLGZhbHNlKTsKfSx0b1JpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJu +IHRoaXMuc3RhcnQoInJpZ2h0IixmYWxzZSk7fSx0b0JvdHRvbTpmdW5jdGlvbigp +e3JldHVybiB0aGlzLnN0YXJ0KGZhbHNlLCJib3R0b20iKTt9LHRvRWxlbWVudDpm +dW5jdGlvbihCKXt2YXIgQT0kKEIpLmdldFBvc2l0aW9uKHRoaXMuZWxlbWVudCk7 +CnJldHVybiB0aGlzLnN0YXJ0KEEueCxBLnkpO319KTsKLy9Nb29Ub29scyBNb3Jl +LCA8aHR0cDovL21vb3Rvb2xzLm5ldC9tb3JlPi4gQ29weXJpZ2h0IChjKSAyMDA2 +LTIwMDggVmFsZXJpbyBQcm9pZXR0aSwgPGh0dHA6Ly9tYWQ0bWlsay5uZXQ+LCBN +SVQgU3R5bGUgTGljZW5zZS4KdmFyIERyYWc9bmV3IENsYXNzKHtJbXBsZW1lbnRz +OltFdmVudHMsT3B0aW9uc10sb3B0aW9uczp7c25hcDo2LHVuaXQ6InB4Iixncmlk +OmZhbHNlLHN0eWxlOnRydWUsbGltaXQ6ZmFsc2UsaGFuZGxlOmZhbHNlLGludmVy +dDpmYWxzZSxwcmV2ZW50RGVmYXVsdDpmYWxzZSxtb2RpZmllcnM6e3g6ImxlZnQi +LHk6InRvcCJ9fSxpbml0aWFsaXplOmZ1bmN0aW9uKCl7dmFyIEI9QXJyYXkubGlu +ayhhcmd1bWVudHMse29wdGlvbnM6T2JqZWN0LnR5cGUsZWxlbWVudDokZGVmaW5l +ZH0pOwp0aGlzLmVsZW1lbnQ9JChCLmVsZW1lbnQpO3RoaXMuZG9jdW1lbnQ9dGhp +cy5lbGVtZW50LmdldERvY3VtZW50KCk7dGhpcy5zZXRPcHRpb25zKEIub3B0aW9u +c3x8e30pO3ZhciBBPSR0eXBlKHRoaXMub3B0aW9ucy5oYW5kbGUpO3RoaXMuaGFu +ZGxlcz0oQT09ImFycmF5Inx8QT09ImNvbGxlY3Rpb24iKT8kJCh0aGlzLm9wdGlv +bnMuaGFuZGxlKTokKHRoaXMub3B0aW9ucy5oYW5kbGUpfHx0aGlzLmVsZW1lbnQ7 +CnRoaXMubW91c2U9e25vdzp7fSxwb3M6e319O3RoaXMudmFsdWU9e3N0YXJ0Ont9 +LG5vdzp7fX07dGhpcy5zZWxlY3Rpb249KEJyb3dzZXIuRW5naW5lLnRyaWRlbnQp +PyJzZWxlY3RzdGFydCI6Im1vdXNlZG93biI7dGhpcy5ib3VuZD17c3RhcnQ6dGhp +cy5zdGFydC5iaW5kKHRoaXMpLGNoZWNrOnRoaXMuY2hlY2suYmluZCh0aGlzKSxk +cmFnOnRoaXMuZHJhZy5iaW5kKHRoaXMpLHN0b3A6dGhpcy5zdG9wLmJpbmQodGhp +cyksY2FuY2VsOnRoaXMuY2FuY2VsLmJpbmQodGhpcyksZXZlbnRTdG9wOiRsYW1i +ZGEoZmFsc2UpfTsKdGhpcy5hdHRhY2goKTt9LGF0dGFjaDpmdW5jdGlvbigpe3Ro +aXMuaGFuZGxlcy5hZGRFdmVudCgibW91c2Vkb3duIix0aGlzLmJvdW5kLnN0YXJ0 +KTtyZXR1cm4gdGhpczt9LGRldGFjaDpmdW5jdGlvbigpe3RoaXMuaGFuZGxlcy5y +ZW1vdmVFdmVudCgibW91c2Vkb3duIix0aGlzLmJvdW5kLnN0YXJ0KTsKcmV0dXJu +IHRoaXM7fSxzdGFydDpmdW5jdGlvbihDKXtpZih0aGlzLm9wdGlvbnMucHJldmVu +dERlZmF1bHQpe0MucHJldmVudERlZmF1bHQoKTt9dGhpcy5maXJlRXZlbnQoImJl +Zm9yZVN0YXJ0Iix0aGlzLmVsZW1lbnQpO3RoaXMubW91c2Uuc3RhcnQ9Qy5wYWdl +Owp2YXIgQT10aGlzLm9wdGlvbnMubGltaXQ7dGhpcy5saW1pdD17eDpbXSx5Oltd +fTtmb3IodmFyIEQgaW4gdGhpcy5vcHRpb25zLm1vZGlmaWVycyl7aWYoIXRoaXMu +b3B0aW9ucy5tb2RpZmllcnNbRF0pe2NvbnRpbnVlO31pZih0aGlzLm9wdGlvbnMu +c3R5bGUpe3RoaXMudmFsdWUubm93W0RdPXRoaXMuZWxlbWVudC5nZXRTdHlsZSh0 +aGlzLm9wdGlvbnMubW9kaWZpZXJzW0RdKS50b0ludCgpOwp9ZWxzZXt0aGlzLnZh +bHVlLm5vd1tEXT10aGlzLmVsZW1lbnRbdGhpcy5vcHRpb25zLm1vZGlmaWVyc1tE +XV07fWlmKHRoaXMub3B0aW9ucy5pbnZlcnQpe3RoaXMudmFsdWUubm93W0RdKj0t +MTt9dGhpcy5tb3VzZS5wb3NbRF09Qy5wYWdlW0RdLXRoaXMudmFsdWUubm93W0Rd +OwppZihBJiZBW0RdKXtmb3IodmFyIEI9MjtCLS07Qil7aWYoJGNoayhBW0RdW0Jd +KSl7dGhpcy5saW1pdFtEXVtCXT0kbGFtYmRhKEFbRF1bQl0pKCk7fX19fWlmKCR0 +eXBlKHRoaXMub3B0aW9ucy5ncmlkKT09Im51bWJlciIpe3RoaXMub3B0aW9ucy5n +cmlkPXt4OnRoaXMub3B0aW9ucy5ncmlkLHk6dGhpcy5vcHRpb25zLmdyaWR9Owp9 +dGhpcy5kb2N1bWVudC5hZGRFdmVudHMoe21vdXNlbW92ZTp0aGlzLmJvdW5kLmNo +ZWNrLG1vdXNldXA6dGhpcy5ib3VuZC5jYW5jZWx9KTt0aGlzLmRvY3VtZW50LmFk +ZEV2ZW50KHRoaXMuc2VsZWN0aW9uLHRoaXMuYm91bmQuZXZlbnRTdG9wKTt9LGNo +ZWNrOmZ1bmN0aW9uKEEpe2lmKHRoaXMub3B0aW9ucy5wcmV2ZW50RGVmYXVsdCl7 +QS5wcmV2ZW50RGVmYXVsdCgpOwp9dmFyIEI9TWF0aC5yb3VuZChNYXRoLnNxcnQo +TWF0aC5wb3coQS5wYWdlLngtdGhpcy5tb3VzZS5zdGFydC54LDIpK01hdGgucG93 +KEEucGFnZS55LXRoaXMubW91c2Uuc3RhcnQueSwyKSkpO2lmKEI+dGhpcy5vcHRp +b25zLnNuYXApe3RoaXMuY2FuY2VsKCk7dGhpcy5kb2N1bWVudC5hZGRFdmVudHMo +e21vdXNlbW92ZTp0aGlzLmJvdW5kLmRyYWcsbW91c2V1cDp0aGlzLmJvdW5kLnN0 +b3B9KTsKdGhpcy5maXJlRXZlbnQoInN0YXJ0Iix0aGlzLmVsZW1lbnQpLmZpcmVF +dmVudCgic25hcCIsdGhpcy5lbGVtZW50KTt9fSxkcmFnOmZ1bmN0aW9uKEEpe2lm +KHRoaXMub3B0aW9ucy5wcmV2ZW50RGVmYXVsdCl7QS5wcmV2ZW50RGVmYXVsdCgp +O310aGlzLm1vdXNlLm5vdz1BLnBhZ2U7CmZvcih2YXIgQiBpbiB0aGlzLm9wdGlv +bnMubW9kaWZpZXJzKXtpZighdGhpcy5vcHRpb25zLm1vZGlmaWVyc1tCXSl7Y29u +dGludWU7fXRoaXMudmFsdWUubm93W0JdPXRoaXMubW91c2Uubm93W0JdLXRoaXMu +bW91c2UucG9zW0JdO2lmKHRoaXMub3B0aW9ucy5pbnZlcnQpe3RoaXMudmFsdWUu +bm93W0JdKj0tMTsKfWlmKHRoaXMub3B0aW9ucy5saW1pdCYmdGhpcy5saW1pdFtC +XSl7aWYoJGNoayh0aGlzLmxpbWl0W0JdWzFdKSYmKHRoaXMudmFsdWUubm93W0Jd +PnRoaXMubGltaXRbQl1bMV0pKXt0aGlzLnZhbHVlLm5vd1tCXT10aGlzLmxpbWl0 +W0JdWzFdO31lbHNle2lmKCRjaGsodGhpcy5saW1pdFtCXVswXSkmJih0aGlzLnZh +bHVlLm5vd1tCXTx0aGlzLmxpbWl0W0JdWzBdKSl7dGhpcy52YWx1ZS5ub3dbQl09 +dGhpcy5saW1pdFtCXVswXTsKfX19aWYodGhpcy5vcHRpb25zLmdyaWRbQl0pe3Ro +aXMudmFsdWUubm93W0JdLT0odGhpcy52YWx1ZS5ub3dbQl0ldGhpcy5vcHRpb25z +LmdyaWRbQl0pO31pZih0aGlzLm9wdGlvbnMuc3R5bGUpe3RoaXMuZWxlbWVudC5z +ZXRTdHlsZSh0aGlzLm9wdGlvbnMubW9kaWZpZXJzW0JdLHRoaXMudmFsdWUubm93 +W0JdK3RoaXMub3B0aW9ucy51bml0KTsKfWVsc2V7dGhpcy5lbGVtZW50W3RoaXMu +b3B0aW9ucy5tb2RpZmllcnNbQl1dPXRoaXMudmFsdWUubm93W0JdO319dGhpcy5m +aXJlRXZlbnQoImRyYWciLHRoaXMuZWxlbWVudCk7fSxjYW5jZWw6ZnVuY3Rpb24o +QSl7dGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudCgibW91c2Vtb3ZlIix0aGlzLmJv +dW5kLmNoZWNrKTsKdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudCgibW91c2V1cCIs +dGhpcy5ib3VuZC5jYW5jZWwpO2lmKEEpe3RoaXMuZG9jdW1lbnQucmVtb3ZlRXZl +bnQodGhpcy5zZWxlY3Rpb24sdGhpcy5ib3VuZC5ldmVudFN0b3ApO3RoaXMuZmly +ZUV2ZW50KCJjYW5jZWwiLHRoaXMuZWxlbWVudCk7Cn19LHN0b3A6ZnVuY3Rpb24o +QSl7dGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudCh0aGlzLnNlbGVjdGlvbix0aGlz +LmJvdW5kLmV2ZW50U3RvcCk7dGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudCgibW91 +c2Vtb3ZlIix0aGlzLmJvdW5kLmRyYWcpO3RoaXMuZG9jdW1lbnQucmVtb3ZlRXZl +bnQoIm1vdXNldXAiLHRoaXMuYm91bmQuc3RvcCk7CmlmKEEpe3RoaXMuZmlyZUV2 +ZW50KCJjb21wbGV0ZSIsdGhpcy5lbGVtZW50KTt9fX0pO0VsZW1lbnQuaW1wbGVt +ZW50KHttYWtlUmVzaXphYmxlOmZ1bmN0aW9uKEEpe3JldHVybiBuZXcgRHJhZyh0 +aGlzLCRtZXJnZSh7bW9kaWZpZXJzOnt4OiJ3aWR0aCIseToiaGVpZ2h0In19LEEp +KTsKfX0pO3ZhciBTbGlkZXI9bmV3IENsYXNzKHtJbXBsZW1lbnRzOltFdmVudHMs +T3B0aW9uc10sb3B0aW9uczp7b25UaWNrOmZ1bmN0aW9uKEEpe2lmKHRoaXMub3B0 +aW9ucy5zbmFwKXtBPXRoaXMudG9Qb3NpdGlvbih0aGlzLnN0ZXApO310aGlzLmtu +b2Iuc2V0U3R5bGUodGhpcy5wcm9wZXJ0eSxBKTsKfSxzbmFwOmZhbHNlLG9mZnNl +dDowLHJhbmdlOmZhbHNlLHdoZWVsOmZhbHNlLHN0ZXBzOjEwMCxtb2RlOiJob3Jp +em9udGFsIn0saW5pdGlhbGl6ZTpmdW5jdGlvbihFLEEsRCl7dGhpcy5zZXRPcHRp +b25zKEQpO3RoaXMuZWxlbWVudD0kKEUpO3RoaXMua25vYj0kKEEpOwp0aGlzLnBy +ZXZpb3VzQ2hhbmdlPXRoaXMucHJldmlvdXNFbmQ9dGhpcy5zdGVwPS0xO3RoaXMu +ZWxlbWVudC5hZGRFdmVudCgibW91c2Vkb3duIix0aGlzLmNsaWNrZWRFbGVtZW50 +LmJpbmQodGhpcykpO2lmKHRoaXMub3B0aW9ucy53aGVlbCl7dGhpcy5lbGVtZW50 +LmFkZEV2ZW50KCJtb3VzZXdoZWVsIix0aGlzLnNjcm9sbGVkRWxlbWVudC5iaW5k +V2l0aEV2ZW50KHRoaXMpKTsKfXZhciBGLEI9e30sQz17eDpmYWxzZSx5OmZhbHNl +fTtzd2l0Y2godGhpcy5vcHRpb25zLm1vZGUpe2Nhc2UidmVydGljYWwiOnRoaXMu +YXhpcz0ieSI7dGhpcy5wcm9wZXJ0eT0idG9wIjtGPSJvZmZzZXRIZWlnaHQiO2Jy +ZWFrO2Nhc2UiaG9yaXpvbnRhbCI6dGhpcy5heGlzPSJ4IjsKdGhpcy5wcm9wZXJ0 +eT0ibGVmdCI7Rj0ib2Zmc2V0V2lkdGgiO310aGlzLmhhbGY9dGhpcy5rbm9iW0Zd +LzI7dGhpcy5mdWxsPXRoaXMuZWxlbWVudFtGXS10aGlzLmtub2JbRl0rKHRoaXMu +b3B0aW9ucy5vZmZzZXQqMik7dGhpcy5taW49JGNoayh0aGlzLm9wdGlvbnMucmFu +Z2VbMF0pP3RoaXMub3B0aW9ucy5yYW5nZVswXTowOwp0aGlzLm1heD0kY2hrKHRo +aXMub3B0aW9ucy5yYW5nZVsxXSk/dGhpcy5vcHRpb25zLnJhbmdlWzFdOnRoaXMu +b3B0aW9ucy5zdGVwczt0aGlzLnJhbmdlPXRoaXMubWF4LXRoaXMubWluO3RoaXMu +c3RlcHM9dGhpcy5vcHRpb25zLnN0ZXBzfHx0aGlzLmZ1bGw7dGhpcy5zdGVwU2l6 +ZT1NYXRoLmFicyh0aGlzLnJhbmdlKS90aGlzLnN0ZXBzOwp0aGlzLnN0ZXBXaWR0 +aD10aGlzLnN0ZXBTaXplKnRoaXMuZnVsbC9NYXRoLmFicyh0aGlzLnJhbmdlKTt0 +aGlzLmtub2Iuc2V0U3R5bGUoInBvc2l0aW9uIiwicmVsYXRpdmUiKS5zZXRTdHls +ZSh0aGlzLnByb3BlcnR5LC10aGlzLm9wdGlvbnMub2Zmc2V0KTtDW3RoaXMuYXhp +c109dGhpcy5wcm9wZXJ0eTsKQlt0aGlzLmF4aXNdPVstdGhpcy5vcHRpb25zLm9m +ZnNldCx0aGlzLmZ1bGwtdGhpcy5vcHRpb25zLm9mZnNldF07dGhpcy5kcmFnPW5l +dyBEcmFnKHRoaXMua25vYix7c25hcDowLGxpbWl0OkIsbW9kaWZpZXJzOkMsb25E +cmFnOnRoaXMuZHJhZ2dlZEtub2IuYmluZCh0aGlzKSxvblN0YXJ0OnRoaXMuZHJh +Z2dlZEtub2IuYmluZCh0aGlzKSxvbkNvbXBsZXRlOmZ1bmN0aW9uKCl7dGhpcy5k +cmFnZ2VkS25vYigpOwp0aGlzLmVuZCgpO30uYmluZCh0aGlzKX0pO2lmKHRoaXMu +b3B0aW9ucy5zbmFwKXt0aGlzLmRyYWcub3B0aW9ucy5ncmlkPU1hdGguY2VpbCh0 +aGlzLnN0ZXBXaWR0aCk7dGhpcy5kcmFnLm9wdGlvbnMubGltaXRbdGhpcy5heGlz +XVsxXT10aGlzLmZ1bGw7fX0sc2V0OmZ1bmN0aW9uKEEpe2lmKCEoKHRoaXMucmFu +Z2U+MCleKEE8dGhpcy5taW4pKSl7QT10aGlzLm1pbjsKfWlmKCEoKHRoaXMucmFu +Z2U+MCleKEE+dGhpcy5tYXgpKSl7QT10aGlzLm1heDt9dGhpcy5zdGVwPU1hdGgu +cm91bmQoQSk7dGhpcy5jaGVja1N0ZXAoKTt0aGlzLmVuZCgpO3RoaXMuZmlyZUV2 +ZW50KCJ0aWNrIix0aGlzLnRvUG9zaXRpb24odGhpcy5zdGVwKSk7cmV0dXJuIHRo +aXM7Cn0sY2xpY2tlZEVsZW1lbnQ6ZnVuY3Rpb24oQyl7dmFyIEI9dGhpcy5yYW5n +ZTwwPy0xOjE7dmFyIEE9Qy5wYWdlW3RoaXMuYXhpc10tdGhpcy5lbGVtZW50Lmdl +dFBvc2l0aW9uKClbdGhpcy5heGlzXS10aGlzLmhhbGY7QT1BLmxpbWl0KC10aGlz +Lm9wdGlvbnMub2Zmc2V0LHRoaXMuZnVsbC10aGlzLm9wdGlvbnMub2Zmc2V0KTsK +dGhpcy5zdGVwPU1hdGgucm91bmQodGhpcy5taW4rQip0aGlzLnRvU3RlcChBKSk7 +dGhpcy5jaGVja1N0ZXAoKTt0aGlzLmVuZCgpO3RoaXMuZmlyZUV2ZW50KCJ0aWNr +IixBKTt9LHNjcm9sbGVkRWxlbWVudDpmdW5jdGlvbihBKXt2YXIgQj0odGhpcy5v +cHRpb25zLm1vZGU9PSJob3Jpem9udGFsIik/KEEud2hlZWw8MCk6KEEud2hlZWw+ +MCk7CnRoaXMuc2V0KEI/dGhpcy5zdGVwLXRoaXMuc3RlcFNpemU6dGhpcy5zdGVw +K3RoaXMuc3RlcFNpemUpO0Euc3RvcCgpO30sZHJhZ2dlZEtub2I6ZnVuY3Rpb24o +KXt2YXIgQj10aGlzLnJhbmdlPDA/LTE6MTt2YXIgQT10aGlzLmRyYWcudmFsdWUu +bm93W3RoaXMuYXhpc107CkE9QS5saW1pdCgtdGhpcy5vcHRpb25zLm9mZnNldCx0 +aGlzLmZ1bGwtdGhpcy5vcHRpb25zLm9mZnNldCk7dGhpcy5zdGVwPU1hdGgucm91 +bmQodGhpcy5taW4rQip0aGlzLnRvU3RlcChBKSk7dGhpcy5jaGVja1N0ZXAoKTt9 +LGNoZWNrU3RlcDpmdW5jdGlvbigpe2lmKHRoaXMucHJldmlvdXNDaGFuZ2UhPXRo +aXMuc3RlcCl7dGhpcy5wcmV2aW91c0NoYW5nZT10aGlzLnN0ZXA7CnRoaXMuZmly +ZUV2ZW50KCJjaGFuZ2UiLHRoaXMuc3RlcCk7fX0sZW5kOmZ1bmN0aW9uKCl7aWYo +dGhpcy5wcmV2aW91c0VuZCE9PXRoaXMuc3RlcCl7dGhpcy5wcmV2aW91c0VuZD10 +aGlzLnN0ZXA7dGhpcy5maXJlRXZlbnQoImNvbXBsZXRlIix0aGlzLnN0ZXArIiIp +Owp9fSx0b1N0ZXA6ZnVuY3Rpb24oQSl7dmFyIEI9KEErdGhpcy5vcHRpb25zLm9m +ZnNldCkqdGhpcy5zdGVwU2l6ZS90aGlzLmZ1bGwqdGhpcy5zdGVwcztyZXR1cm4g +dGhpcy5vcHRpb25zLnN0ZXBzP01hdGgucm91bmQoQi09QiV0aGlzLnN0ZXBTaXpl +KTpCO30sdG9Qb3NpdGlvbjpmdW5jdGlvbihBKXtyZXR1cm4odGhpcy5mdWxsKk1h +dGguYWJzKHRoaXMubWluLUEpKS8odGhpcy5zdGVwcyp0aGlzLnN0ZXBTaXplKS10 +aGlzLm9wdGlvbnMub2Zmc2V0Owp9fSk7 + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline; filename=system.js +Content-Type: application/x-javascript; charset=utf-8; name=system.js +Content-Location: http://habrahabr.ru/js/1307631427/system.js +Content-Transfer-Encoding: Base64 + +RWxlbWVudC5pbXBsZW1lbnQoewoJZmxhc2g6IGZ1bmN0aW9uKHRvLGZyb20scmVw +cyxwcm9wLGR1cikgewoJCWlmKCFyZXBzKSB7IHJlcHMgPSAxOyB9CgkJaWYoIXBy +b3ApIHsgcHJvcCA9ICdiYWNrZ3JvdW5kLWNvbG9yJzsgfQoJCWlmKCFkdXIpIHsg +ZHVyID0gMjUwOyB9CgkJdmFyIGVmZmVjdCA9IG5ldyBGeC5Ud2Vlbih0aGlzLCB7 +CgkJCQlkdXJhdGlvbjogZHVyLAoJCQkJbGluazogJ2NoYWluJwoJCQl9KQoJCWZv +cih4ID0gMTsgeCA8PSByZXBzOyB4KyspCgkJCWVmZmVjdC5zdGFydChwcm9wLGZy +b20sdG8pLnN0YXJ0KHByb3AsdG8sZnJvbSk7Cgl9LAoJcmVwbGFjZUNsYXNzOiBm +dW5jdGlvbihjbGFzczEsIGNsYXNzMikgewoJCXRoaXMucmVtb3ZlQ2xhc3MoY2xh +c3MxKTsKCQl0aGlzLmFkZENsYXNzKGNsYXNzMik7Cgl9LAoJc3dpdGNoQ2xhc3M6 +IGZ1bmN0aW9uKGNsYXNzMSwgY2xhc3MyKSB7CgkJaWYgKHRoaXMuaGFzQ2xhc3Mo +Y2xhc3MxKSkKCQkJdGhpcy5yZXBsYWNlQ2xhc3MoY2xhc3MxLCBjbGFzczIpOwoJ +CWVsc2UKCQkJdGhpcy5yZXBsYWNlQ2xhc3MoY2xhc3MyLCBjbGFzczEpOwoJfQp9 +KTsKCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq +KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLy8qKioqKioqKioq +KioqKiAg0JLQndCY0JzQkNCd0JjQlSEg0JTQkNCb0KzQqNCVINCY0JTQldCiINCh +0KLQoNCQ0KjQndCr0Jkg0KHQotCQ0KDQq9CZINCa0J7QlCEgICoqKioqKioqKioq +KioqKioqCi8vKioqKioqKioqKioqKioqKiAg0J7QlNCV0J3QrNCi0JUg0KHQmtCQ +0KTQkNCd0JTQoCDQn9Cg0Jgg0JLQpdCe0JTQlSDQkiDQrdCi0KMg0JfQntCd0KMh +ICAqKioqKioqKioqKioqKioqKioqCi8vKioqKioqKioqKioqKioqKioqKioqKioq +KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq +KioqKioKCgovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiDQndCw0YHQ +u9C10LTQvtCy0LDQvdC40LUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq +KioqCkZ1bmN0aW9uLnByb3RvdHlwZS5pbmhlcml0c0Zyb20gPSBmdW5jdGlvbihC +YXNlQ2xhc3MpIHsgLy8gdGhhbmtzIHRvIEtldmluIExpbmRzZXkgZm9yIHRoaXMg +aWRlYQoJdmFyIEluaGVyaXRhbmNlID0gZnVuY3Rpb24oKSB7fTsKCUluaGVyaXRh +bmNlLnByb3RvdHlwZSA9IEJhc2VDbGFzcy5wcm90b3R5cGU7Cgl0aGlzLnByb3Rv +dHlwZSA9IG5ldyBJbmhlcml0YW5jZSgpOwoJdGhpcy5wcm90b3R5cGUuY29uc3Ry +dWN0b3IgPSB0aGlzOwoJdGhpcy5zdXBlckNsYXNzID0gQmFzZUNsYXNzOwp9CgpP +YmplY3QuZXh0ZW5kT2JqZWN0ID0gZnVuY3Rpb24oZGVzdGluYXRpb24sIHNvdXJj +ZSkgewoJZm9yICh2YXIgcHJvcGVydHkgaW4gc291cmNlKQoJCWRlc3RpbmF0aW9u +W3Byb3BlcnR5XSA9IHNvdXJjZVtwcm9wZXJ0eV07CglyZXR1cm4gZGVzdGluYXRp +b247Cn07CgovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiDQoNCw0LHQvtGC +0LAg0YEg0YHQvtCx0YvRgtC40Y/QvNC4ICoqKioqKioqKioqKioqKioqKioqKioq +KioqKioqKgpmdW5jdGlvbiBnZXRDaGFyQ29kZShldikgewoJaWYgKGV2LmNoYXJD +b2RlKSB2YXIgY2hhckNvZGUgPSBldi5jaGFyQ29kZTsKCWVsc2UgaWYgKGV2Lmtl +eUNvZGUpIHZhciBjaGFyQ29kZSA9IGV2LmtleUNvZGU7CgllbHNlIGlmIChldi53 +aGljaCkgdmFyIGNoYXJDb2RlID0gZXYud2hpY2g7CgllbHNlIHZhciBjaGFyQ29k +ZSA9IDA7CglyZXR1cm4gY2hhckNvZGU7Cn0KCi8vKioqKioqKioqKioqKioqKioq +KioqKioqKiDQntC/0YDQtdC00LXQu9C10L3QuNC1INCx0YDQvtGD0LfQtdGA0L7Q +siAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgppZiAod2luZG93LkFjdGl2 +ZVhPYmplY3QpIHdpbmRvdy5pZSA9IHdpbmRvd1t3aW5kb3cuWE1MSHR0cFJlcXVl +c3QgPyAnaWU3JyA6ICdpZTYnXSA9IHRydWU7CmVsc2UgaWYgKGRvY3VtZW50LmNo +aWxkTm9kZXMgJiYgIWRvY3VtZW50LmFsbCAmJiAhbmF2aWdhdG9yLnRhaW50RW5h +YmxlZCkgd2luZG93LndlYmtpdCA9IHdpbmRvd1t3aW5kb3cueHBhdGggPyAnd2Vi +a2l0NDIwJyA6ICd3ZWJraXQ0MTknXSA9IHRydWU7CmVsc2UgaWYgKGRvY3VtZW50 +LmdldEJveE9iamVjdEZvciAhPSBudWxsKSB3aW5kb3cuZ2Vja28gPSB0cnVlOwp2 +YXIgaXNJRSAgPSAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5kZXhPZigiTVNJRSIp +ICE9IC0xKSA/IHRydWUgOiBmYWxzZTsKdmFyIGlzV2luID0gKG5hdmlnYXRvci5h +cHBWZXJzaW9uLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigid2luIikgIT0gLTEpID8g +dHJ1ZSA6IGZhbHNlOwp2YXIgaXNPcGVyYSA9IChuYXZpZ2F0b3IudXNlckFnZW50 +LmluZGV4T2YoIk9wZXJhIikgIT0gLTEpID8gdHJ1ZSA6IGZhbHNlOwoKCi8vKioq +KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBBSkFYICoqKioqKioqKioq +KioqKioqKioqKioqKioqKioqKioqKioqKioKLyoKCXVybCAtINC+0YLQutGD0LTQ +sCDQt9Cw0LPRgNGD0LbQsNC10LwKCWFqYXhDYWxsQmFja0Z1bmN0aW9uIC0g0YfR +gtC+INCy0YvQt9GL0LLQsNC10Lwg0L/QviDQt9Cw0LLQtdGA0YjQtdC90LjQuCDQ +t9Cw0LPRgNGD0LfQutC4CglwYXJhbXMgLSDQv9Cw0YDQsNC80LXRgtGA0Ysg0LIg +0LLQuNC00LUg0L7QsdGK0LXQutGC0LAg0LjQu9C4INC80LDRgdGB0LjQstCwCglj +YWxsT2JqZWN0IC0g0LzQtdGC0L7QtNC+0Lwg0LrQsNC60L7Qs9C+INC+0LHRitC1 +0LrRgtCwINGP0LLQu9GP0LXRgtGB0Y8gYWpheENhbGxCYWNrRnVuY3Rpb24gKNC1 +0YHQu9C4INGN0YLQviDQvNC10YLQvtC0LCDQsCDQvdC1INCz0LvQvtCx0LDQu9GM +0L3QsNGPINGE0YPQvdGG0LjRjykKKi8KZnVuY3Rpb24gYWpheFBvc3QodXJsLCBk +YXRhLCBhamF4Q2FsbEJhY2tGdW5jdGlvbiwgcGFyYW1zLCBjYWxsT2JqZWN0LCBh +amF4Q2FsbEJhY2tFcnJvckZ1bmN0aW9uKSB7Cgl2YXIgYWpheE9iamVjdCA9IG51 +bGw7CglpZiAod2luZG93LlhNTEh0dHBSZXF1ZXN0KSAvLyBicmFuY2ggZm9yIG5h +dGl2ZSBYTUxIdHRwUmVxdWVzdCBvYmplY3QKCQlhamF4T2JqZWN0ID0gbmV3IFhN +TEh0dHBSZXF1ZXN0KCk7CgllbHNlIGlmICh3aW5kb3cuQWN0aXZlWE9iamVjdCkg +Ly8gYnJhbmNoIGZvciBJRS9XaW5kb3dzIEFjdGl2ZVggdmVyc2lvbgoJCWFqYXhP +YmplY3QgPSBuZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKTsK +CWlmKGFqYXhPYmplY3QpewoJCWFqYXhPYmplY3Qub25yZWFkeXN0YXRlY2hhbmdl +ID0gZnVuY3Rpb24oKXsKCQkJYWpheEhhbmRsZXIoYWpheE9iamVjdCwgYWpheENh +bGxCYWNrRnVuY3Rpb24sIHBhcmFtcywgY2FsbE9iamVjdCwgYWpheENhbGxCYWNr +RXJyb3JGdW5jdGlvbik7CgkJfQoJCWFqYXhPYmplY3Qub3BlbigiUE9TVCIsIHVy +bCwgdHJ1ZSk7CgkJYWpheE9iamVjdC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50 +LXR5cGUiLCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7CgkJ +YWpheE9iamVjdC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LWxlbmd0aCIsIGRh +dGEubGVuZ3RoKTsKCQlhamF4T2JqZWN0LnNldFJlcXVlc3RIZWFkZXIoIkNvbm5l +Y3Rpb24iLCAiY2xvc2UiKTsKCQlhamF4T2JqZWN0LnNlbmQoZGF0YSk7CQoJfQp9 +CgoKZnVuY3Rpb24gYWpheEhhbmRsZXIoYWpheE9iamVjdCwgYWpheENhbGxCYWNr +RnVuY3Rpb24sIHBhcmFtcywgY2FsbE9iamVjdCwgYWpheENhbGxCYWNrRXJyb3JG +dW5jdGlvbil7IAoJaWYgKGFqYXhPYmplY3QucmVhZHlTdGF0ZSA9PSA0KQoJCWlm +IChhamF4T2JqZWN0LnN0YXR1cyA9PSAyMDApCgkJCWFqYXhDYWxsQmFja0Z1bmN0 +aW9uLmNhbGwoY2FsbE9iamVjdCwgYWpheE9iamVjdCwgcGFyYW1zKTsKCQllbHNl +CgkJCWlmKGFqYXhDYWxsQmFja0Vycm9yRnVuY3Rpb24pCgkJCQlhamF4Q2FsbEJh +Y2tFcnJvckZ1bmN0aW9uLmNhbGwoY2FsbE9iamVjdCwgYWpheE9iamVjdCk7CQoJ +CQllbHNlCgkJCQlmdXR1X2FsZXJ0KCIiLC8qKCLQktC+0LfQvdC40LrQu9CwINC+ +0YjQuNCx0LrQsCDQsiDQv9C+0LvRg9GH0LXQvdC40LggWE1MINC00LDQvdC90YvR +hTo8YnIgLz4iICsgYWpheE9iamVjdC5zdGF0dXNUZXh0KSovICfQo9C/0YEhINCn +0YLQvi3RgtC+INC/0L7RiNC70L4g0L3QtSDRgtCw0LouINCf0L7Qv9GA0L7QsdGD +0LnRgtC1INC10YnQtSDRgNCw0LcuJywgZmFsc2UsICdlcnJvcicpOwp9CgpmdW5j +dGlvbiBhamF4TG9hZFBvc3QodXJsLCBkYXRhLCBhamF4Q2FsbEJhY2tGdW5jdGlv +biwgY2FsbE9iamVjdCwgcGFyYW1zLCBhamF4Q2FsbEJhY2tFcnJvckZ1bmN0aW9u +KSB7Cgl2YXIgYWpheE9iamVjdCA9IG51bGw7CglpZiAod2luZG93LlhNTEh0dHBS +ZXF1ZXN0KSAvLyBicmFuY2ggZm9yIG5hdGl2ZSBYTUxIdHRwUmVxdWVzdCBvYmpl +Y3QKCQlhamF4T2JqZWN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CgllbHNlIGlm +ICh3aW5kb3cuQWN0aXZlWE9iamVjdCkgLy8gYnJhbmNoIGZvciBJRS9XaW5kb3dz +IEFjdGl2ZVggdmVyc2lvbgoJCWFqYXhPYmplY3QgPSBuZXcgQWN0aXZlWE9iamVj +dCgiTWljcm9zb2Z0LlhNTEhUVFAiKTsKCWlmKGFqYXhPYmplY3QpewoJCWFqYXhP +YmplY3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKXsKCQkJYWpheExv +YWRIYW5kbGVyKGFqYXhPYmplY3QsIGFqYXhDYWxsQmFja0Z1bmN0aW9uLCBjYWxs +T2JqZWN0LCBwYXJhbXMsIGFqYXhDYWxsQmFja0Vycm9yRnVuY3Rpb24pOwoJCX0K +CQlhamF4T2JqZWN0Lm9wZW4oIlBPU1QiLCB1cmwsIHRydWUpOwoJCWFqYXhPYmpl +Y3Quc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC10eXBlIiwgImFwcGxpY2F0aW9u +L3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpOwoJCWFqYXhPYmplY3Quc2V0UmVxdWVz +dEhlYWRlcigiQ29udGVudC1sZW5ndGgiLCBkYXRhLmxlbmd0aCk7CgkJYWpheE9i +amVjdC5zZXRSZXF1ZXN0SGVhZGVyKCJDb25uZWN0aW9uIiwgImNsb3NlIik7CgkJ +YWpheE9iamVjdC5zZW5kKGRhdGEpOwoJfQp9CmZ1bmN0aW9uIGFqYXhMb2FkSGFu +ZGxlcihhamF4T2JqZWN0LCBhamF4Q2FsbEJhY2tGdW5jdGlvbiwgY2FsbE9iamVj +dCwgcGFyYW1zLCBhamF4Q2FsbEJhY2tFcnJvckZ1bmN0aW9uKXsKCWlmIChhamF4 +T2JqZWN0LnJlYWR5U3RhdGUgPT0gNCkKCQlpZiAoYWpheE9iamVjdC5zdGF0dXMg +PT0gMjAwKQoJCQlhamF4Q2FsbEJhY2tGdW5jdGlvbi5jYWxsKGNhbGxPYmplY3Qs +IGFqYXhPYmplY3QsIHBhcmFtcyk7CgkJZWxzZQoJCQlpZihhamF4Q2FsbEJhY2tF +cnJvckZ1bmN0aW9uKQoJCQkJYWpheENhbGxCYWNrRXJyb3JGdW5jdGlvbi5jYWxs +KGNhbGxPYmplY3QsIGFqYXhPYmplY3QpOwkKCQkJZWxzZQoJCQkJZnV0dV9hbGVy +dCgiIiwvKigi0JLQvtC30L3QuNC60LvQsCDQvtGI0LjQsdC60LAg0LIg0L/QvtC7 +0YPRh9C10L3QuNC4IFhNTCDQtNCw0L3QvdGL0YU6PGJyIC8+IiArIGFqYXhPYmpl +Y3Quc3RhdHVzVGV4dCkqLyAn0KPQv9GBISDQp9GC0L4t0YLQviDQv9C+0YjQu9C+ +INC90LUg0YLQsNC6LiDQn9C+0L/RgNC+0LHRg9C50YLQtSDQtdGJ0LUg0YDQsNC3 +LicsIHRydWUsICdlcnJvcicpOwp9Cg== + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline; filename=init.js +Content-Type: application/x-javascript; charset=utf-8; name=init.js +Content-Location: http://habrahabr.ru/js/1307631427/tm/init.js +Content-Transfer-Encoding: Base64 + +dmFyIHRtID0gKHR5cGVvZih0bSkgIT0gJ3VuZGVmaW5lZCcpID8gdG0gOiB7fTsK +CmRvY3VtZW50LmlkID0gJDsgLy8g0Y3RgtC+INGH0YLQvtCx0YsgTW9vdG9vbHMg +TW9yZSAxLjIuMy4xINGA0LDQsdC+0YLQsNC7INGBIE1vb3Rvb2xzIENvcmUgMS4y +LjAKCi8qKgogKiDQmNC90YLQtdGA0YTQtdC50YEg0LjQvdC40YbQuNCw0LvQuNC3 +0LDRhtC40Lgg0LTQu9GPINCy0YHQtdCz0L4g0L3QsCDRgdCy0LXRgtC1CiAqIEBh +dXRob3IgYmVib3BraWQKKi8KCnRtLmluaXQgPSB7CglfaW5pdGlhbGl6YXRpb25z +OiBbXSwKCV93aW5kb3dMb2FkZWQ6IGZhbHNlLAoJZm9ybXM6IG51bGwsCgljb250 +cm9sczogbnVsbCwKCWFkZDogZnVuY3Rpb24gKGYpIHsKCQlpZiAodGhpcy5fd2lu +ZG93TG9hZGVkKSB7CgkJCWYuY2FsbCh3aW5kb3cpOwoJCX0KCQllbHNlIHsKCQkJ +dGhpcy5faW5pdGlhbGl6YXRpb25zLnB1c2goZik7CgkJfTsKCX0sCglfbG9hZGVk +OiBmdW5jdGlvbiAoKSB7CgkJdGhpcy5fd2luZG93TG9hZGVkID0gdHJ1ZTsKCQl0 +aGlzLl9pbml0aWFsaXphdGlvbnMuZWFjaCggZnVuY3Rpb24gKGYpIHsKCQkJZi5j +YWxsKHdpbmRvdyk7CgkJfSk7Cgl9Cn07Cgp3aW5kb3cuYWRkRXZlbnQoJ2RvbXJl +YWR5JywgdG0uaW5pdC5fbG9hZGVkLmJpbmQodG0uaW5pdCkpOwoKLyoqCiAqINCk +0YPQvdC60YbQuNGPINC00LvRjyDQu9C+0LPQuNGA0L7QstCw0L3QuNGPLCDQutC+ +0YLQvtGA0LDRjyDQvdC1INCy0YvQt9GL0LLQsNC10YIg0L7RiNC40LHQvtC6LCDQ +tdGB0LvQuCDQvdC10YIg0LrQvtC90YHQvtC70LgKICogQGF1dGhvciBiZWJvcGtp +ZAoqLwp0bS5sb2cgPSBmdW5jdGlvbiAoKSB7CglpZiAoKHR5cGVvZihjb25zb2xl +KSAhPSAndW5kZWZpbmVkJykgJiYgKHR5cGVvZihjb25zb2xlLmxvZykgPT0gJ2Z1 +bmN0aW9uJykpIHsKCSAgICAvL2ZvciAodmFyIGk9MCwgbD1hcmd1bWVudHMubGVu +Z3RoOyBpPGw7IGkrKykgewoJICAgICAgICBjb25zb2xlLmxvZyhhcmd1bWVudHMp +OwoJICAgLy8gfTsKCX0gZWxzZSBpZiAod2luZG93Lm9wZXJhICYmIG9wZXJhLnBv +c3RFcnJvcikgewoJCW9wZXJhLnBvc3RFcnJvcihhcmd1bWVudHMpOwoJfTsKfTsK +CnRtLmJhZFRhZ3MgPSBbCgknT0JKRUNUJywKCSdQQVJBTScsCgknRU1CRUQnLAoJ +J05PRU1CRUQnCl07Cgp0bS5oZWxwZXJzID0gewogICAgLyoqCiAgICAgKiDQktC+ +0LfQstGA0LDRidCw0LXRgiDRhtC10LvQvtC1INGH0LjRgdC70L4g0LIg0YPQtNC+ +0LHQvdC+0Lwg0LTQu9GPINGH0LXQu9C+0LLQtdC60LAg0LLQuNC00LUgLSDRgSDQ +v9GA0L7QsdC10LvQsNC80LgKICAgICAqIEBhdXRob3IgYmVib3BraWQKICAgICov +CiAgICBodW1hbml6ZU51bWJlcjogZnVuY3Rpb24gKG51bWJlcikgewogICAgICAg +IGlmICghbnVtYmVyKSB7IHJldHVybiAnJzsgfQogICAgICAgIHZhciBzID0gbnVt +YmVyLnRvU3RyaW5nKCk7CiAgICAgICAgdmFyIHIgPSAnJzsKICAgICAgICBmb3Ig +KCBpID0gMCwgbCA9IHMubGVuZ3RoOyBpPGw7IGkrKykgewogICAgICAgIAlyID0g +ciArICgoKCgobC1pKSAlIDMpID09IDApICYmIChpICE9IDApKSA/ICcgJyA6ICcn +KSArIHMuY2hhckF0KGkpOwogICAgICAgIH07CiAgICAgICAgcmV0dXJuIHI7CiAg +ICB9LAoJCgkvKioKCSAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINC00LDRgtGDINC4 +INCy0YDQtdC80Y8g0LIg0L3QvtGA0LzQsNC70YzQvdC+0Lwg0LLQuNC00LUKCSAq +IEBhdXRob3IgbWRldmlscwoJICovCglodW1hbml6ZURhdGU6IGZ1bmN0aW9uKHRp +bWVzdGFtcCwgZGF0ZU9ubHkpewoJCXZhciB0b2RheSA9IG5ldyBEYXRlKCk7CgkJ +dmFyIGRhdGUgPSBuZXcgRGF0ZSh0aW1lc3RhbXAgKiAxMDAwKTsKCQl2YXIgbW9u +dGhzID0gWyLRj9C90LLQsNGA0Y8iLCAi0YTQtdCy0YDQsNC70Y8iLCAi0LzQsNGA +0YLQsCIsICLQsNC/0YDQtdC70Y8iLCAi0LzQsNGPIiwgItC40Y7QvdGPIiwgItC4 +0Y7Qu9GPIiwgItCw0LLQs9GD0YHRgtCwIiwgItGB0LXQvdGC0Y/QsdGA0Y8iLCAi +0L7QutGC0Y/QsdGA0Y8iLCAi0L3QvtGP0LHRgNGPIiwgItC00LXQutCw0LHRgNGP +Il07OwoJCXZhciByZXN1bHQgPSAiIjsKCQlpZih0b2RheS5nZXREYXRlKCkgIT0g +ZGF0ZS5nZXREYXRlKCkgfHwgdG9kYXkuZ2V0TW9udGgoKSAhPSBkYXRlLmdldE1v +bnRoKCkgfHwgdG9kYXkuZ2V0RnVsbFllYXIoKSAhPSBkYXRlLmdldEZ1bGxZZWFy +KCkpCgkJCXJlc3VsdCA9IGRhdGUuZ2V0RGF0ZSgpICsgIiAiICsgbW9udGhzW2Rh +dGUuZ2V0TW9udGgoKV07CgkJaWYodG9kYXkuZ2V0RnVsbFllYXIoKSAhPSBkYXRl +LmdldEZ1bGxZZWFyKCkpCgkJCXJlc3VsdCArPSAiICIgKyBkYXRlLmdldEZ1bGxZ +ZWFyKCk7CgkJaWYoIWRhdGVPbmx5KSB7CgkJCWlmIChyZXN1bHQpIHJlc3VsdCAr +PSAiLCAiOwoJCQlyZXN1bHQgKz0gItCyICIgKyB0bS5oZWxwZXJzLmFkZFplcm8o +ZGF0ZS5nZXRIb3VycygpLCAyKSArICI6IiArIHRtLmhlbHBlcnMuYWRkWmVybyhk +YXRlLmdldE1pbnV0ZXMoKSwgMik7CgkJfQoJCXJldHVybiByZXN1bHQ7Cgl9LAoJ +CgkvKioKCSAqINCU0L7QsdCw0LLQu9GP0LXRgiDQvdGD0LvQuCDQv9C10YDQtdC0 +INGH0LjRgdC70L7QvCDQtNC+INGC0LXRhSDQv9C+0YAsINC/0L7QutCwINC+0L3Q +viDQvdC1INC00L7RgdGC0LjQs9C90LXRgiDQvdGD0LbQvdC+0Lkg0LTQu9C40L3R +iwoJICogQGF1dGhvciBtZGV2aWxzCgkgKi8KCWFkZFplcm86IGZ1bmN0aW9uKG51 +bWJlciwgbGVuKSB7CgkJdmFyIHMgPSBudW1iZXIudG9TdHJpbmcoKTsKCQl3aGls +ZSAocy5sZW5ndGggPCBsZW4pIHM9JzAnK3M7CgkJcmV0dXJuIHM7Cgl9Cn07CgpF +bGVtZW50LmltcGxlbWVudCh7CiAgICBzY3JvbGxUb01lOiBmdW5jdGlvbiAoX28p +IHsKICAgICAgICB2YXIgbyA9IF9vfHx7fTsKICAgICAgICAKICAgICAgICB2YXIg +eCA9IG8ueHx8MCwKICAgICAgICAgICAgeSA9IHRoaXMuZ2V0UG9zaXRpb24oKS55 +ICsgKG8ueXx8MCk7CiAgICAgICAgCiAgICAgICAgKHRlbXAud2luZG93U2Nyb2xs +IHx8ICh0ZW1wLndpbmRvd1Njcm9sbCA9IG5ldyBGeC5TY3JvbGwoICQoZG9jdW1l +bnQuYm9keSkgLCB7ICdkdXJhdGlvbic6IDUwMCwgJ2xpbmsnOiAnY2FuY2VsJyB9 +ICkgKSk7CiAgICAgICAgCiAgICAgICAgdGVtcC53aW5kb3dTY3JvbGxbIG8ubm93 +ID8gJ3NldCcgOiAnc3RhcnQnIF0oMCwgdGhpcy5nZXRQb3NpdGlvbigpLnkpOwoK +ICAgICAgICBpZiAobyAmJiBvLmNhbGxiYWNrKSB7CiAgICAgICAgICAgIAogICAg +ICAgICAgICBvLm5vdyA/IG8uY2FsbGJhY2soKSA6IHRlbXAud2luZG93U2Nyb2xs +LmFkZEV2ZW50KCdjb21wbGV0ZScsIChmdW5jdGlvbiAoY2FsbGJhY2spIHsKICAg +ICAgICAgICAgICAgIHRoaXMucmVtb3ZlRXZlbnQoJ2NvbXBsZXRlJywgY2FsbGJh +Y2spOwogICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKICAgICAgICAgICAgfSku +YmluZCh0ZW1wLndpbmRvd1Njcm9sbCwgby5jYWxsYmFjaykpOwogICAgICAgIH0K +ICAgICAgICByZXR1cm4gdGhpczsKICAgIH0KfSk7Cgp0bS5yZXMgPSB7fTsKCnRt +LnJlcy5fbG9hZGVkQ1NTID0gW107CnRtLnJlcy5sb2FkQ1NTID0gZnVuY3Rpb24o +dXJsKSB7CglpZiAoIXRtLnJlcy5fbG9hZGVkQ1NTW3VybF0pIHsKCQl2YXIgY3Nz +ID0gbmV3IEFzc2V0LmNzcyh1cmwpOwoJfQoJdG0ucmVzLl9sb2FkZWRDU1NbdXJs +XSA9IHRydWU7Cn07Cgp0bS5yZXMubG9hZElNRyA9IGZ1bmN0aW9uKHVybCkgewoJ +dmFyIGltZyA9IG5ldyBBc3NldC5pbWFnZSh1cmwpOwp9OwoKZnVuY3Rpb24gZCgp +IHsKCXZhciBkZWJ1Z1NjcmlwdCA9IG5ldyBBc3NldC5qYXZhc2NyaXB0KCcvanMv +dG0vZGVidWcuanMnLCB7aWQ6ICdkZWJ1Z1NjcmlwdCd9KTsKCXZhciBjb25zb2xl +U2NyaXB0ID0gbmV3IEFzc2V0LmphdmFzY3JpcHQoJy9qcy90bS9jb25zb2xlLmpz +Jywge2lkOiAnY29uc29sZVNjcmlwdCd9KTsKfQoKdG0uY3VzdG9tRXZlbnRNYW5h +Z2VyID0gewoJYWRkRXZlbnQ6IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2sp +IHsKCQl0aGlzLl9ldmVudHMgfHwgKHRoaXMuX2V2ZW50cyA9IFtdKTsKCQl0aGlz +Ll9ldmVudHNbZXZlbnROYW1lXSB8fCAodGhpcy5fZXZlbnRzW2V2ZW50TmFtZV0g +PSBbXSk7CgkJdGhpcy5fZXZlbnRzW2V2ZW50TmFtZV0ucHVzaChjYWxsYmFjayk7 +Cgl9LAoJcmVtb3ZlRXZlbnQ6IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2sp +IHsKCQl0aGlzLl9ldmVudHMgfHwgKHRoaXMuX2V2ZW50cyA9IFtdKTsKCQl0aGlz +Ll9ldmVudHNbZXZlbnROYW1lXSB8fCAodGhpcy5fZXZlbnRzW2V2ZW50TmFtZV0g +PSBbXSk7CgkJdGhpcy5fZXZlbnRzW2V2ZW50TmFtZV0uZXJhc2UoY2FsbGJhY2sp +OwoJfSwKCWZpcmVFdmVudDogZnVuY3Rpb24oZXZlbnROYW1lKSB7CgkJdmFyIGFy +Z3MgPSBbXTsKCQlmb3IgKHZhciBpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKykK +CQkJYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7CgkJdGhpcy5fZXZlbnRzIHx8ICh0 +aGlzLl9ldmVudHMgPSBbXSk7CgkJdGhpcy5fZXZlbnRzW2V2ZW50TmFtZV0gfHwg +KHRoaXMuX2V2ZW50c1tldmVudE5hbWVdID0gW10pOwoJCXRoaXMuX2V2ZW50c1tl +dmVudE5hbWVdLmZvckVhY2goZnVuY3Rpb24oaXRlbSl7aXRlbS5hcHBseSh0aGlz +LCBhcmdzKTt9KTsKCQl0bS5sb2coYXJncywgZXZlbnROYW1lICsgJyAoJyArIHRo +aXMuX2V2ZW50c1tldmVudE5hbWVdLmxlbmd0aCArICcpJyk7Cgl9Cn07 + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline; filename=common.js +Content-Type: application/x-javascript; charset=utf-8; name=common.js +Content-Location: http://habrahabr.ru/js/1307631427/common.js +Content-Transfer-Encoding: Base64 + +dG0uaW5pdC5hZGQoZnVuY3Rpb24oKXsKCXZhciBwYWdlTmF2ID0gbnVsbDsKCWlm +IChwYWdlTmF2ID0gJChkb2N1bWVudCkuZ2V0RWxlbWVudCgnLnBhZ2UtbmF2Jykp +IHsKCQl2YXIgcHJldiA9IHBhZ2VOYXYuZ2V0RWxlbWVudCgnLm5leHQtcHJldiAu +cHJldicpOwoJCXZhciBuZXh0ID0gcGFnZU5hdi5nZXRFbGVtZW50KCcubmV4dC1w +cmV2IC5uZXh0Jyk7CgkJJCh3aW5kb3cpLmFkZEV2ZW50KCdrZXlkb3duJywgZnVu +Y3Rpb24oZSl7CgkJCWlmICgoKGUuY29udHJvbCAmJiBlLmtleSA9PSAncmlnaHQn +KSB8fCAoZS5hbHQgJiYgZS5rZXkgPT0gJ3JpZ2h0JykpICYmIG5leHQpIHsKCQkJ +CXRvcC5sb2NhdGlvbi5ocmVmID0gbmV4dC5nZXQoImhyZWYiKTsKCQkJCWUuc3Rv +cCgpOwoJCQl9IGVsc2UgaWYgKCgoZS5jb250cm9sICYmIGUua2V5ID09ICdsZWZ0 +JykgfHwgKGUuYWx0ICYmIGUua2V5ID09ICdsZWZ0JykpICYmIHByZXYpIHsKCQkJ +CXRvcC5sb2NhdGlvbi5ocmVmID0gcHJldi5nZXQoImhyZWYiKTsKCQkJCWUuc3Rv +cCgpOwoJCQl9CgkJfSk7Cgl9Cgl2YXIgc2VhcmNoID0gJCgic2VhcmNoIik7Cglp +ZiAoc2VhcmNoKSB7CgkJdmFyIGlucHV0IAkJPSBzZWFyY2gsCgkJCWxhYmVsIAkJ +PSBpbnB1dC5nZXRQYXJlbnQoKSwKCQkJbGFiZWxzcGFuIAk9IGxhYmVsLmdldEVs +ZW1lbnQoJ3NwYW4nKTsKCQlpZiAoaW5wdXQgJiYgbGFiZWwpIHsKCQkJCgkJCWlm +ICghaW5wdXQudmFsdWUpIHsKCQkJCWxhYmVsLmFkZENsYXNzKCJpbnB1dC1wbGFj +ZWhvbGRpbmciKTsKCQkJfQoKCQkJaW5wdXQuYWRkRXZlbnRzKHsKCQkJCSdmb2N1 +cyc6IGZ1bmN0aW9uICgpIHsKCQkJCQlpZiAoIWxhYmVsLm5vcGxhY2Vob2xkaW5n +KSB7CgkJCQkJCWxhYmVsLnJlbW92ZUNsYXNzKCJpbnB1dC1wbGFjZWhvbGRpbmci +KTsKCQkJCQkJbGFiZWwubm9wbGFjZWhvbGRpbmcgPSB0cnVlOwoJCQkJCX0KCQkJ +CX0sCgkJCQknYmx1cic6IGZ1bmN0aW9uICgpIHsKCQkJCQlpZiAoaW5wdXQudmFs +dWUgPT0gJycpIHsKCQkJCQkJbGFiZWwuYWRkQ2xhc3MoImlucHV0LXBsYWNlaG9s +ZGluZyIpOwoJCQkJCQlsYWJlbC5ub3BsYWNlaG9sZGluZyA9IGZhbHNlOwoJCQkJ +CX0KCQkJCX0sCgkJCQknY2hhbmdlJyA6IGZ1bmN0aW9uKCkgewoJCQkJCWlmICgh +bGFiZWwubm9wbGFjZWhvbGRpbmcpIHsKCQkJCQkJbGFiZWwucmVtb3ZlQ2xhc3Mo +ImlucHV0LXBsYWNlaG9sZGluZyIpOwoJCQkJCQlsYWJlbC5ub3BsYWNlaG9sZGlu +ZyA9IHRydWU7CgkJCQkJfQoJCQkJfQoJCQl9KQoJCQlsYWJlbHNwYW4uYWRkRXZl +bnQoJ21vdXNlZG93bicsZnVuY3Rpb24oKXsKCQkJCWlucHV0LmZvY3VzKCk7CgkJ +CQlyZXR1cm4gZmFsc2UKCQkJfSkKCQl9Cgl9Cgl2YXIgaGVscF90aXBzID0gJCQo +Jy5oZWxwLXRpcCcpOwoJaWYgKGhlbHBfdGlwcyAmJiBoZWxwX3RpcHMubGVuZ3Ro +KSB7CgkJdmFyIGN1cnJlbnRfdGlwID0gbnVsbDsKCQl2YXIgdGlwX2hpZGRpbmdf +dGltZW91dDsKCQkKCQl2YXIgaHRfbmljZV9ub2RlID0gJCgnaGVscC10aXAtdGV4 +dCcpOwoJCQlodF9uaWNlX25vZGUudGV4dF9ub2RlID0gaHRfbmljZV9ub2RlLmdl +dEVsZW1lbnQoJyNoZWxwLXRpcC10ZXh0LWNvbnRlbnQnKTsKCgkJdmFyIHNob3df +aGVscF90aXAgPSBmdW5jdGlvbih0ZXh0LG5vZGUpewoJCQljbGVhclRpbWVvdXQo +dGlwX2hpZGRpbmdfdGltZW91dCk7CgkJCWlmIChjdXJyZW50X3RpcCA9PSBub2Rl +KSB7cmV0dXJuIHRydWU7fQoJCQkKCQkJdmFyIHAgPSBub2RlLmdldFBvc2l0aW9u +KCk7CgkJCQoJCQl2YXIgcHggPSBwLnggKyBub2RlLmdldFN0eWxlKCd3aWR0aCcp +LnRvSW50KCkvMjsKCQkJdmFyIHB5ID0gcC55OwoJCQlub2RlCgkJCQoJCQlodF9u +aWNlX25vZGUuc3R5bGUudG9wID0gcHkgKyAncHgnOwoJCQlodF9uaWNlX25vZGUu +c3R5bGUubGVmdCA9IHB4ICsgJ3B4JzsKCQkJaWYgKHB4IDwgMTc5ICkgewoJCQkJ +aHRfbmljZV9ub2RlLmFkZENsYXNzKCdoZWxwLXRpcHMtdG9vLW11Y2gtbGVmdCcp +OwoJCQl9CgkJCQoJCQlodF9uaWNlX25vZGUudGV4dF9ub2RlLmlubmVySFRNTCA9 +IHRleHQ7CgkJCWh0X25pY2Vfbm9kZS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsK +CQkJY3VycmVudF90aXAgPSBodF9uaWNlX25vZGU7CgkJfQoJCXZhciBoaWRlX2hl +bHBfdGlwID0gZnVuY3Rpb24oKXsKCQkJdGlwX2hpZGRpbmdfdGltZW91dCA9IHNl +dFRpbWVvdXQoZnVuY3Rpb24oKXsKCQkJCWh0X25pY2Vfbm9kZS5zdHlsZS5kaXNw +bGF5ID0gJyc7CgkJCQlodF9uaWNlX25vZGUudGV4dF9ub2RlLnRleHRDb250ZW50 +ID0gJyc7CgkJCQlodF9uaWNlX25vZGUucmVtb3ZlQ2xhc3MoJ2hlbHAtdGlwcy10 +b28tbXVjaC1sZWZ0Jyk7CgkJCX0sMzMzKQoJCQkKCQl9CgkJCgkJZm9yICh2YXIg +aT0wLCBsID0gaGVscF90aXBzLmxlbmd0aDsgaSA8IGw7IGkrKykgewoJCQl2YXIg +aGVscF90aXBfbm9kZSA9IGhlbHBfdGlwc1tpXTsKCQkJCgkJCXZhciBoZWxwX3Rp +cF9ub2RlX2NoaWxkcyA9IGhlbHBfdGlwX25vZGUuZ2V0RWxlbWVudHMoJyonKTsK +CQkJaWYgKGhlbHBfdGlwX25vZGVfY2hpbGRzICYmIGhlbHBfdGlwX25vZGVfY2hp +bGRzLmxlbmd0aCkgewoJCQkJCgkJCQlmb3IgKHZhciBrPTAsIGc9IGhlbHBfdGlw +X25vZGVfY2hpbGRzLmxlbmd0aDsgayA8IGc7IGsrKykgewoJCQkJCWhlbHBfdGlw +X25vZGVfY2hpbGRzW2tdLmh0biA9IGhlbHBfdGlwX25vZGU7CgoJCQkJfTsKCQkJ +fQoJCQl0bS5sb2coJ3p6d3d3Jyk7CgkJCQoJCQloZWxwX3RpcF9ub2RlLmh0biA9 +IGhlbHBfdGlwX25vZGU7CgkJCQoJCQl2YXIgdGl0bGUgPSBoZWxwX3RpcF9ub2Rl +LnRpdGxlOwoJCQlpZiAodGl0bGUubWF0Y2goJ2JyLycpKSB7CgkJCQloZWxwX3Rp +cF9ub2RlLmhlbHBfdGlwID0gaGVscF90aXBfbm9kZS5nZXRFbGVtZW50KCcuaGVs +cC10aXAtdGV4dCcpLmlubmVySFRNTAoJCQl9IGVsc2UgewoJCQkJaGVscF90aXBf +bm9kZS5oZWxwX3RpcCA9IHRpdGxlOwoJCQl9CgkJCQoJCQloZWxwX3RpcF9ub2Rl +LnRpdGxlID0gJyc7CgkJCQoJCQloZWxwX3RpcF9ub2RlLmFkZEV2ZW50cyh7CgkJ +CQknbW91c2VvdmVyJzogZnVuY3Rpb24oZSl7IAoJCQkJCXNob3dfaGVscF90aXAo +ZS50YXJnZXQuaHRuLmhlbHBfdGlwLGUudGFyZ2V0Lmh0bik7CgkJCQl9LAoJCQkJ +J21vdXNlb3V0JzogaGlkZV9oZWxwX3RpcAoJCQl9KQoJCQkKCQkJCgkJfTsKCQlo +dF9uaWNlX25vZGUuYWRkRXZlbnRzKHsKCQkJJ21vdXNlb3Zlcic6IGZ1bmN0aW9u +KCl7IAoJCQkJY2xlYXJUaW1lb3V0KHRpcF9oaWRkaW5nX3RpbWVvdXQpOwoJCQl9 +LAoJCQknbW91c2VvdXQnOiBoaWRlX2hlbHBfdGlwCgkJfSkKCX0KfSk7Cg== + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline; filename=all.js +Content-Type: application/x-javascript; charset=utf-8; name=all.js +Content-Location: http://habrahabr.ru/js/1307631427/all.js +Content-Transfer-Encoding: Base64 + +CgovKiAgIGZhdm91cml0ZXMgICAqLwpmYXZzSGFuZGxlciA9IHsNCglidXR0b246 +e30sDQoJdXJsOiAnL2FqYXgvZmF2b3JpdGVzLycsDQoJeG1sOiB7DQoJCXJlc3Bv +bnNlTm9kZXM6IHsNCgkJCWVycm9yOiAnZXJyb3InLA0KCQkJcmVzdWx0OiAnbWVz +c2FnZScNCgkJfSwNCg0KCQlwYXJzZTogZnVuY3Rpb24oeG1sT2JqKXsNCgkJCXZh +ciB4bWxOb2RlcyA9IHt9Ow0KCQkJZm9yIChwcm9wIGluIGZhdnNIYW5kbGVyLnht +bC5yZXNwb25zZU5vZGVzKXsNCgkJCQl4bWxOb2Rlc1twcm9wXSA9IHhtbE9iai5n +ZXRFbGVtZW50c0J5VGFnTmFtZShmYXZzSGFuZGxlci54bWwucmVzcG9uc2VOb2Rl +c1twcm9wXSk7DQoJCQl9DQoJCQlyZXR1cm4geG1sTm9kZXM7DQoJCX0NCgl9LA0K +CWZhdm9yaXRlc1NlbmQgOiBmdW5jdGlvbiAoYnV0dG9uLCB0YXJnZXRfdHlwZSwg +dGFyZ2V0X2lkKSB7DQoJCXZhciBob2xkZXIgPSAkKGJ1dHRvbikuZ2V0UGFyZW50 +KCcuanMtdG9fZmF2c19ob2xkZXInKTsNCgkJaWYoaG9sZGVyLmhhc0NsYXNzKCd0 +by1mYXZzJykpIHsNCiAgICAJCXZhciBkYXRhID0gJ2FjdGlvbj1hZGQmdGFyZ2V0 +X3R5cGU9JysgdGFyZ2V0X3R5cGUgKycmdGFyZ2V0X2lkPScrIHRhcmdldF9pZDsN +CgkJfQ0KCQllbHNlIGlmIChob2xkZXIuaGFzQ2xhc3MoJ2Zhdl9hZGRlZCcpKXsN +CgkJCXZhciBkYXRhID0gJ2FjdGlvbj1yZW1vdmUmdGFyZ2V0X3R5cGU9JysgdGFy +Z2V0X3R5cGUgKycmdGFyZ2V0X2lkPScrIHRhcmdldF9pZDsNCgkJfQ0KCQlhamF4 +TG9hZFBvc3QoZmF2c0hhbmRsZXIudXJsLCBkYXRhLCBmYXZzSGFuZGxlci5mYXZv +cml0ZXNTZW5kT25sb2FkLCB3aW5kb3csIHtidXR0b246IGJ1dHRvbiwgdGFyZ2V0 +X3R5cGU6dGFyZ2V0X3R5cGUsIHRhcmdldF9pZDp0YXJnZXRfaWR9KTsNCgl9LA0K +DQoJZmF2b3JpdGVzU2VuZE9ubG9hZCA6IGZ1bmN0aW9uKGFqYXhPYmosIHBhcmFt +cykgew0KCQlpZihhamF4T2JqICYmIGFqYXhPYmoucmVzcG9uc2VYTUwpew0KDQoJ +CQl2YXIgeG1sT2JqID0gYWpheE9iai5yZXNwb25zZVhNTDsNCgkJCXZhciB4bWxO +b2RlcyA9IGZhdnNIYW5kbGVyLnhtbC5wYXJzZSh4bWxPYmopOw0KDQoJCQlpZih4 +bWxOb2Rlcy5lcnJvciAmJiB4bWxOb2Rlcy5lcnJvci5sZW5ndGgpew0KCQkJCXZh +ciBlcnJvcnNfbGVuZ3RoID0geG1sTm9kZXMuZXJyb3IubGVuZ3RoOw0KCQkJCWZv +ciAodmFyIGkgPSAwOyBpIDwgZXJyb3JzX2xlbmd0aDsgaSsrKSB7DQoJCQkJCWZ1 +dHVfYWxlcnQoRkFULmZhdm91cml0ZXNfaGVhZGVyLCB4bWxOb2Rlcy5lcnJvcltp +XS5maXJzdENoaWxkLmRhdGEsIHRydWUsICdlcnJvcicpOw0KCQkJCX0NCgkJCX0N +Cg0KCQkJdmFyIHJlc3VsdHMgPSB4bWxPYmouZ2V0RWxlbWVudHNCeVRhZ05hbWUo +J3Jlc3VsdCcpOw0KCQkJaWYoeG1sTm9kZXMucmVzdWx0ICYmIHhtbE5vZGVzLnJl +c3VsdC5sZW5ndGgpIHsNCg0KDQoJCQkJdmFyIG5vZGUgPSBudWxsOw0KCQkJCWlm +IChyZXN1bHRzWzBdKSB7DQoJCQkJCW5vZGUgPSByZXN1bHRzWzBdOw0KCQkJCX0N +Cg0KDQoJCQkJdmFyIHByZXZpb3VzX29mZiA9ICQocGFyYW1zLmJ1dHRvbikuZ2V0 +UGFyZW50KCcuanMtdG9fZmF2c19ob2xkZXInKS5oYXNDbGFzcygndG8tZmF2cycp +Ow0KCQkJCWlmKHByZXZpb3VzX29mZikgew0KDQoJCQkJCWlmIChub2RlKQ0KCQkJ +CQkJc3dpdGNoIChub2RlLmdldEF0dHJpYnV0ZSgidHlwZSIpKSB7DQoJCQkJCQkJ +Y2FzZSAnY29tcGFueV9jb21tZW50cyc6DQoJCQkJCQkJY2FzZSAnY29tbWVudHMn +Og0KCQkJCQkJCQlmdXR1X2FsZXJ0KEZBVC5mYXZvdXJpdGVzX2hlYWRlciwgRkFU +LmZhdm91cml0ZXNfcmVxdWVzdF9jb21tZW50X2FkZF9zdWNjZXNzLCBmYWxzZSwg +J21lc3NhZ2UnKTsNCgkJCQkJCQkJYnJlYWs7DQoJCQkJCQkJY2FzZSAncG9zdHMn +Og0KCQkJCQkJCQlmdXR1X2FsZXJ0KEZBVC5mYXZvdXJpdGVzX2hlYWRlciwgRkFU +LmZhdm91cml0ZXNfcmVxdWVzdF9wb3N0X2FkZF9zdWNjZXNzLCBmYWxzZSwgJ21l +c3NhZ2UnKTsNCgkJCQkJCQkJYnJlYWs7DQoJCQkJCQl9DQoJCQkJfQ0KCQkJCWVs +c2Ugew0KDQoJCQkJCWlmIChub2RlKQ0KCQkJCQkJc3dpdGNoIChub2RlLmdldEF0 +dHJpYnV0ZSgidHlwZSIpKSB7DQoJCQkJCQkJY2FzZSAnY29tcGFueV9jb21tZW50 +cyc6DQoJCQkJCQkJY2FzZSAnY29tbWVudHMnOg0KCQkJCQkJCQlmdXR1X2FsZXJ0 +KEZBVC5mYXZvdXJpdGVzX2hlYWRlciwgRkFULmZhdm91cml0ZXNfcmVxdWVzdF9j +b21tZW50X3JlbW92ZV9zdWNjZXNzLCBmYWxzZSwgJ21lc3NhZ2UnKTsNCgkJCQkJ +CQkJYnJlYWs7DQoJCQkJCQkJY2FzZSAncG9zdHMnOg0KCQkJCQkJCQlmdXR1X2Fs +ZXJ0KEZBVC5mYXZvdXJpdGVzX2hlYWRlciwgRkFULmZhdm91cml0ZXNfcmVxdWVz +dF9wb3N0X3JlbW92ZV9zdWNjZXNzLCBmYWxzZSwgJ21lc3NhZ2UnKTsNCgkJCQkJ +CQkJYnJlYWs7DQoJCQkJCQl9DQoJCQkJCQlpZiAoIShwYXJhbXMudGFyZ2V0X3R5 +cGUgPT0gJ2NvbW1lbnRzJykpIHsNCgkJCQkJCQl0ZW1wLmZhdm91cml0ZXNfYWRk +ICYmIHRlbXAuZmF2b3VyaXRlc19hZGQuY2xlYXJPd25UYWdzKCQocGFyYW1zLmJ1 +dHRvbikpOw0KCQkJCQkJfQ0KDQoJCQkJfQ0KDQoJCQkJaWYgKHBhcmFtcy50YXJn +ZXRfdHlwZSA9PSAncG9zdHMnIHx8IHBhcmFtcy50YXJnZXRfdHlwZSA9PSAncXVl +c3Rpb25zJykgew0KCQkJCQkkKHBhcmFtcy5idXR0b24pLmdldFBhcmVudCgnLmpz +LXRvX2ZhdnNfaG9sZGVyJykuc3dpdGNoQ2xhc3MoJ2Zhdl9hZGRlZCcsICd0by1m +YXZzJyk7DQoNCgkJCQkJdmFyIGRpdiA9IHBhcmFtcy5idXR0b24uZ2V0UGFyZW50 +KCdkaXYuaGVudHJ5Jyk7DQogICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9 +IGRpdi5nZXRFbGVtZW50KCcuZmF2c19jb3VudCcpOw0KICAgICAgICAgICAgICAg +ICAgICB2YXIgcHJldiA9IHBhcnNlSW50KGNvdW50LmdldCgndGV4dCcpKSB8fCAw +Ow0KCQkJCQlpZiAocHJldmlvdXNfb2ZmKSB7DQogICAgICAgICAgICBjb3VudC5z +ZXQoJ3RleHQnLCBwcmV2ICsgMSk7DQoJCQkJCQlwYXJhbXMuYnV0dG9uLnRpdGxl +ID0n0KPQtNCw0LvQuNGC0Ywg0LjQtyDQuNC30LHRgNCw0L3QvdC+0LPQvic7DQog +ICAgCQkJCWlmIChwYXJhbXMudGFyZ2V0X3R5cGUgPT0gJ3F1ZXN0aW9ucycpIHsN +Cg0KICAgIAkJCQl9ZWxzZXsNCgkJCQkJCSAgdmFyIHRhZ3MgPSBkaXYuZ2V0RWxl +bWVudCgnLnRhZ3MnKTsNCiAgICAJCQkJICAobmV3IEVsZW1lbnQoJ2xpJywgeyAn +Y2xhc3MnOiAnZmF2b3VyaXRlc19lZGl0X3RhZ3MnLCAnaHRtbCc6ICc8YSBvbmNs +aWNrPSJ0ZW1wLmZhdm91cml0ZXNfYWRkLmNoYW5nZV90YWdzKHRoaXMpOyByZXR1 +cm4gZmFsc2UiIGhyZWY9IiMiPtCY0LfQvNC10L3QuNGC0Ywg0YHQstC+0Lgg0LzQ +tdGC0LrQuDwvYT4nfSkpLmluamVjdCh0YWdzKTsNCiAgICAJCQkJfQ0KCQkJCQl9 +IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDEgPT0gcHJldikg +ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50LnNldCgndGV4dCcs +ICcnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICBjb3VudC5zZXQoJ3RleHQnLCBwcmV2IC0gMSkN +CiAgICAgICAgICAgICAgICAgICAgICAgIH0NCgkJCQkJCXBhcmFtcy5idXR0b24u +dGl0bGUgPSfQlNC+0LHQsNCy0LjRgtGMINCyINC40LfQsdGA0LDQvdC90L7QtScN +CgkJCQkJfQ0KCQkJCX0gZWxzZSBpZiAocGFyYW1zLnRhcmdldF90eXBlID09ICdj +b21tZW50cycpIHsNCg0KCQkJCQkkKHBhcmFtcy5idXR0b24pLmdldFBhcmVudCgn +LmpzLXRvX2ZhdnNfaG9sZGVyJykuc3dpdGNoQ2xhc3MoJ2Zhdl9hZGRlZCcsICd0 +by1mYXZzJyk7DQoJCQkJfQ0KDQoJCQl9DQoJCX0NCgl9DQp9Ow0KDQp0bS5pbml0 +LmFkZChmdW5jdGlvbiAoKSB7DQoJdGVtcC5mYXZvdXJpdGVzX2FkZCA9IHsNCgkJ +J2luaXQnOiBmdW5jdGlvbiAoKSB7DQoJCQlpZiAodGhpcy5pbml0ZWQpIHsgcmV0 +dXJuOyB9DQoJCQl2YXIgc2VsZiA9IHRoaXM7DQoJCQl0aGlzLmluaXRlZCA9IHRy +dWU7DQoJCQl0aGlzLmhpZGRlbl9jb250YWluZXIgPSAkKCdmYXZvdXJpdGVzX2Fk +ZF9oaWRkZW4nKTsNCgkJCXRoaXMuZm9ybSA9ICQoJ2Zhdm91cml0ZXNfYWRkX2Zv +cm0nKTsNCgkJCXRoaXMuYWRkZXIgPSAkKCdmYXZvdXJpdGVzX2FkZCcpOw0KCQkJ +dGhpcy50YWdzID0gJCgnZmF2b3VyaXRlc19hZGRfdGFncycpOw0KCQkJdGhpcy5p +ZCA9ICQoJ2Zhdm91cml0ZXNfYWRkX2lkJyk7DQoJCQl0aGlzLmJ1dHRvbiA9ICQo +J2Zhdm91cml0ZXNfYWRkX3N1Ym1pdCcpOw0KDQoJCQlCcm93c2VyLkVuZ2luZS50 +cmlkZW50ICYmIHRoaXMudGFncy5hZGRFdmVudCgna2V5cHJlc3MnLCBmdW5jdGlv +biAoZSkgew0KCQkJCWlmIChlLmtleSA9PSAnZW50ZXInKSB7DQoJCQkJCWUuc3Rv +cCgpOw0KCQkJCQlzZWxmLmZvcm0uYXR0YWNoZWQuc3VibWl0KCk7DQoJCQkJfQ0K +CQkJfSk7DQoNCgkJCXZhciBjYW5jZWwgPSAkKCdmYXZvdXJpdGVzX2FkZF9jYW5j +ZWwnKTsNCg0KCQkJY2FuY2VsICYmIGNhbmNlbC5hZGRFdmVudCgnY2xpY2snLCBm +dW5jdGlvbiAoZSkgew0KCQkJCWUuc3RvcCgpOw0KCQkJCXNlbGYuaGlkZSgpOw0K +CQkJfSk7DQoJCX0sDQoJCSdzaG93JzogZnVuY3Rpb24gKGNvbnRhaW5lciwgaWQs +IHRhZ3Nfc3RyaW5nKSB7DQoJCQkhdGhpcy5pbml0ZWQgJiYgdGhpcy5pbml0KCk7 +DQoJCQl0aGlzLmlkLnZhbHVlID0gaWQ7DQoJCQlpZiAodGFnc19zdHJpbmcpIHsN +CgkJCQl0aGlzLnRhZ3MudmFsdWUgPSB0YWdzX3N0cmluZzsNCgkJCQl0aGlzLmJ1 +dHRvbi52YWx1ZSA9ICfQodC+0YXRgNCw0L3QuNGC0YwnOw0KCQkJfQ0KCQkJdGhp +cy5jb250YWluZXIgPSBjb250YWluZXI7DQoJCQljb250YWluZXIgJiYgdGhpcy5h +ZGRlci5pbmplY3QoY29udGFpbmVyKTsNCgkJCXRoaXMudGFncy5mb2N1cygpOw0K +CQl9LA0KCQknaGlkZSc6IGZ1bmN0aW9uICgpIHsNCgkJCXRoaXMuYWRkZXIuaW5q +ZWN0KHRoaXMuaGlkZGVuX2NvbnRhaW5lcik7DQoJCQl0aGlzLnRhZ3MudmFsdWUg +PSAnJzsNCgkJCXRoaXMuaWQudmFsdWUgPSAnJzsNCgkJCXRoaXMuY29udGFpbmVy +ID0gbnVsbDsNCgkJCXRoaXMuYnV0dG9uLnZhbHVlID0gJ9CU0L7QsdCw0LLQuNGC +0Ywg0LIg0LjQt9Cx0YDQsNC90L3QvtC1JzsNCgkJfSwNCgkJJ2NoYW5nZV90YWdz +JzogZnVuY3Rpb24gKGJ1dHRvbikgew0KCQkJdmFyIGNvbnRhaW5lciA9ICQoYnV0 +dG9uKS5nZXRQYXJlbnQoJ2Rpdi5oZW50cnknKSwNCgkJCQlpZCA9IGNvbnRhaW5l +ci5nZXRFbGVtZW50KCcuZW50cnktaW5mbycpLmlkLnJlcGxhY2UoJ2luZm9wYW5l +bCcsICcnKSwNCgkJCQl0YWdzX2hvbGRlciA9ICQoYnV0dG9uLnBhcmVudE5vZGUu +cGFyZW50Tm9kZSksDQoJCQkJdGFncyA9IHRhZ3NfaG9sZGVyLmdldEVsZW1lbnRz +KCdsaS5mYXYgYScpLA0KCQkJCXRhZ3Nfc3RyaW5nID0gJyc7DQoNCg0KCQkJZm9y +ICh2YXIgaSA9IDAsIGwgPSB0YWdzLmxlbmd0aDsgaTxsOyBpKyspIHsNCgkJCQko +aSE9MCkgJiYgKHRhZ3Nfc3RyaW5nICs9ICcsICcpOw0KCQkJCXRhZ3Nfc3RyaW5n +ICs9IHRhZ3NbaV0uaW5uZXJIVE1MOw0KCQkJfQ0KCQkJdGhpcy5zaG93KGNvbnRh +aW5lciwgaWQsIHRhZ3Nfc3RyaW5nKTsNCgkJfSwNCgkJJ2NsZWFyT3duVGFncyc6 +IGZ1bmN0aW9uIChidXR0b24pIHsNCgkJCXRoaXMuY29udGFpbmVyID0gYnV0dG9u +LmdldFBhcmVudCgnZGl2LmhlbnRyeScpOw0KCQkJdmFyIGZhdiA9IHRoaXMuY29u +dGFpbmVyLmdldEVsZW1lbnQoJ2Rpdi5qcy10b19mYXZzX2hvbGRlcicpOw0KCQkJ +ZmF2ICYmIGZhdi5yZW1vdmVDbGFzcygndG8tZmF2cycpLmFkZENsYXNzKCdmYXZf +YWRkZWQnKTsNCgkJCXRoaXMuc2V0VGFncygnJywgdHJ1ZSk7DQoJCX0sDQoJCSdz +ZXRUYWdzJzogZnVuY3Rpb24gKHRhZ3MsIHVuZmF2KSB7DQoJCQlpZiAoIXRoaXMu +Y29udGFpbmVyKSB7IHJldHVybjsgfQ0KDQoJCQl2YXIgdGFnc19ob2xkZXIgPSB0 +aGlzLmNvbnRhaW5lci5nZXRFbGVtZW50KCd1bC50YWdzJyk7DQoNCgkJCWlmICgh +dGFnc19ob2xkZXIpIHsNCgkJCQlpZiAodGFncykgew0KCQkJCQl2YXIgY29udGVu +dCA9IHRoaXMuY29udGFpbmVyLmdldEVsZW1lbnQoJ2Rpdi5jb250ZW50Jyk7DQoJ +CQkJCXRhZ3NfaG9sZGVyID0gKG5ldyBFbGVtZW50KCd1bCcsIHsgJ2NsYXNzJzog +J3RhZ3MgJ30pKS5pbmplY3QoY29udGVudCwgJ2FmdGVyJyk7DQoJCQkJfQ0KCQkJ +fQ0KCQkJaWYgKHRhZ3NfaG9sZGVyKSB7DQoJCQkJdmFyIGVkaXRfdGFncyA9IHRh +Z3NfaG9sZGVyLmdldEVsZW1lbnQoJ2xpLmZhdm91cml0ZXNfZWRpdF90YWdzJyk7 +DQoNCgkJCQl0YWdzX2hvbGRlci5nZXRFbGVtZW50cygnbGkuZmF2JykuZGlzcG9z +ZSgpOw0KDQoJCQkJaWYgKHVuZmF2KSB7DQoJCQkJICAgIGlmIChlZGl0X3RhZ3Mp +IGVkaXRfdGFncy5kaXNwb3NlKCk7DQoJCQkJfSBlbHNlIHsNCgkJCQkJaWYgKCFl +ZGl0X3RhZ3MpIHsNCgkJCQkJCWVkaXRfdGFncyA9IChuZXcgRWxlbWVudCgnbGkn +LCB7ICdjbGFzcyc6ICdmYXZvdXJpdGVzX2VkaXRfdGFncycsICdodG1sJzogJzxh +IG9uY2xpY2s9InRlbXAuZmF2b3VyaXRlc19hZGQuY2hhbmdlX3RhZ3ModGhpcyk7 +IHJldHVybiBmYWxzZTsiIGhyZWY9IiMiPtCY0LfQvNC10L3QuNGC0Ywg0YHQstC+ +0Lgg0LzQtdGC0LrQuDwvYT4nIH0pKS5pbmplY3QodGFnc19ob2xkZXIpOw0KCQkJ +CQl9DQoJCQkJfQ0KDQoJCQkJdmFyIGVtcHR5ID0gISh0YWdzX2hvbGRlci5nZXRF +bGVtZW50cygnbGknKS5sZW5ndGggKyAoZWRpdF90YWdzID8gLTEgOiAwICkpOw0K +DQoJCQkJaWYgKCF1bmZhdiAmJiB0YWdzKSB7DQoJCQkJCXZhciB0YWdzID0gdGFn +cy5zcGxpdCgnLCcpOw0KCQkJCQlmb3IodmFyIGk9MCwgbD10YWdzLmxlbmd0aDsg +aTxsOyBpKyspIHsNCgkJCQkJCXZhciB0YWcgPSB0YWdzW2ldLmNsZWFuKCk7DQoJ +CQkJCQkobmV3IEVsZW1lbnQoJ2xpJywgeyAnY2xhc3MnOiAnZmF2JywgJ2h0bWwn +OiAoKGVtcHR5ICYmIGk9PTApID8gJycgOiAnLCAnKSArICc8YSBocmVmPSJodHRw +Oi8vJyArIHRlbXAudXNlci5sb2dpbiArICcuJyArIHRlbXAuYmFzZV9zaG9ydCAr +ICcvZmF2b3JpdGVzL3RhZy8nICsgdGFnICsgJyI+JyArIHRhZyArICc8L2E+J30p +KS5pbmplY3QoZWRpdF90YWdzLCAnYmVmb3JlJyk7DQoJCQkJCX0NCgkJCQl9DQoN +CgkJCQlpZiAoIXRhZ3NfaG9sZGVyLmdldEVsZW1lbnRzKCdsaScpLmxlbmd0aCkg +eyB0YWdzX2hvbGRlci5kaXNwb3NlKCk7IH0NCg0KCQkJCXRoaXMuY29udGFpbmVy +ID0gbnVsbDsNCgkJCX0NCgkJfQ0KCX07DQp9KTsNCgoKCgovKiAgIGZ1dHVfYWxl +cnQgICAqLwpmdW5jdGlvbiBmdXR1X2FsZXJ0KGhlYWRlciwgdGV4dCwgY2xvc2Us +IGNsYXNzTmFtZSkgew0KCWlmICghJCgnZnV0dV9hbGVydHNfaG9sZGVyJykpIHsN +CgkJdmFyIGZ1dHVBbGVydE91dGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn +ZGl2Jyk7DQoJCWZ1dHVBbGVydE91dGVyLmNsYXNzTmFtZSA9ICdmdXR1X2FsZXJ0 +X291dGVyJzsNCgkJZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmdXR1QWxlcnRP +dXRlcik7DQoJCXZhciBmdXR1QWxlcnRGcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVs +ZW1lbnQoJ2RpdicpOw0KCQlmdXR1QWxlcnRGcmFtZS5jbGFzc05hbWUgPSAnZnJh +bWUnOw0KCQlmdXR1QWxlcnRPdXRlci5hcHBlbmRDaGlsZChmdXR1QWxlcnRGcmFt +ZSk7DQoJCQ0KCQl2YXIgZnV0dUFsZXJ0c0hvbGRlciA9IGRvY3VtZW50LmNyZWF0 +ZUVsZW1lbnQoJ2RpdicpOw0KCQlmdXR1QWxlcnRzSG9sZGVyLmlkID0gJ2Z1dHVf +YWxlcnRzX2hvbGRlcic7DQoJCWZ1dHVBbGVydHNIb2xkZXIuY2xhc3NOYW1lID0g +J2Z1dHVfYWxlcnRzX2hvbGRlcic7DQoJCWZ1dHVBbGVydEZyYW1lLmFwcGVuZENo +aWxkKGZ1dHVBbGVydHNIb2xkZXIpOw0KCQkNCgl9IGVsc2Ugew0KDQoNCgl9DQoJ +dmFyIGZ1dHVBbGVydCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOw0K +CWZ1dHVBbGVydC5jbGFzc05hbWUgPSAnZnV0dV9hbGVydCAnICsgY2xhc3NOYW1l +Ow0KCSQoJ2Z1dHVfYWxlcnRzX2hvbGRlcicpLmFwcGVuZENoaWxkKGZ1dHVBbGVy +dCk7DQoNCgl2YXIgZnV0dUFsZXJ0SGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxl +bWVudCgnZGl2Jyk7DQoJZnV0dUFsZXJ0SGVhZGVyLmNsYXNzTmFtZSA9ICdmdXR1 +X2FsZXJ0X2hlYWRlcic7DQoJZnV0dUFsZXJ0LmFwcGVuZENoaWxkKGZ1dHVBbGVy +dEhlYWRlcik7DQoJDQoJZnV0dUFsZXJ0SGVhZGVyLmlubmVySFRNTCA9IGhlYWRl +cjsNCglpZiAoY2xvc2UpIHsNCgkJdmFyIGZ1dHVBbGVydENsb3NlQnV0dG9uID0g +ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOw0KCQlmdXR1QWxlcnRDbG9zZUJ1 +dHRvbi5ocmVmID0gJyMnOw0KCQlmdXR1QWxlcnRDbG9zZUJ1dHRvbi5jbGFzc05h +bWUgPSAnZnV0dV9hbGVydF9jbG9zZV9idXR0b24nOw0KCQlmdXR1QWxlcnRDbG9z +ZUJ1dHRvbi5vbmNsaWNrID0gZnVuY3Rpb24oZXYpIHsNCgkJCWlmKCFldikgew0K +CQkJCWV2PXdpbmRvdy5ldmVudDsNCgkJCX0NCgkJCWlmICghZG9jdW1lbnQuYWxs +KSBldi5wcmV2ZW50RGVmYXVsdCgpOyBlbHNlIGV2LnJldHVyblZhbHVlID0gZmFs +c2U7DQoJCQkkKGZ1dHVBbGVydCkuZGlzcG9zZSgpDQoJCX0NCgkJZnV0dUFsZXJ0 +LmFwcGVuZENoaWxkKGZ1dHVBbGVydENsb3NlQnV0dG9uKTsNCgkJDQoJCXZhciBm +dXR1QWxlcnRDbG9zZUJ1dHRvbkljb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50 +KCdpbWcnKTsNCgkJZnV0dUFsZXJ0Q2xvc2VCdXR0b25JY29uLnNyYyA9ICcvaS9i +dXR0b25zL2J0bl9jbG9zZS5naWYnOw0KCQlmdXR1QWxlcnRDbG9zZUJ1dHRvbi5h +cHBlbmRDaGlsZChmdXR1QWxlcnRDbG9zZUJ1dHRvbkljb24pOw0KCX0NCgkNCgkN +Cgl2YXIgZnV0dUFsZXJ0VGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp +dicpOw0KCWZ1dHVBbGVydFRleHQuY2xhc3NOYW1lID0gJ2Z1dHVfYWxlcnRfdGV4 +dCc7DQoJZnV0dUFsZXJ0LmFwcGVuZENoaWxkKGZ1dHVBbGVydFRleHQpOw0KDQoJ +DQoJZnV0dUFsZXJ0VGV4dC5pbm5lckhUTUwgPSB0ZXh0Ow0KCQ0KCWZ1dHVBbGVy +dC5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7DQoJZnV0dUFsZXJ0LnN0eWxl +LnRvcCA9ICcwJzsNCglmdXR1QWxlcnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7 +DQoNCgkNCglpZiAoIWNsb3NlKSB7DQoJCSQoZnV0dUFsZXJ0KS5hZGRFdmVudCgi +Y2xpY2siLGZ1bmN0aW9uKCl7DQoJCQkkKGZ1dHVBbGVydCkuZGlzcG9zZSgpDQoJ +CX0pDQoJCXNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyAkKGZ1dHVBbGVydCkuZGlz +cG9zZSgpIH0sIDMwMDApOw0KCQkNCgl9DQp9DQoNCi8vIEZ1dHUgQWxlcnQgVGV4 +dHMNCnZhciBGQVQgPSB7DQoJcHJlbG9hZGVyIDogJ9CS0LDRiCDQt9Cw0L/RgNC+ +0YEg0L7RgtC/0YDQsNCy0LvQtdC9INC/0L4g0YHQtdC60YDQtdGC0L3QvtC5INC7 +0LjQvdC40LguINCW0LTQuNGC0LUg0L/QvtC20LDQu9GD0LnRgdGC0LAg0L7RgtCy +0LXRgtCwJywNCgllbXB0eTogJ9Cd0YMg0LTQu9GPINC90LDRh9Cw0LvQsCDRgdC6 +0LDQttC40YLQtSwg0YfRgtC+INCy0Ysg0L3QsNC80LXRgNC10L3RiyDQtNC10LvQ +sNGC0YwnLA0KDQoJLy8g0L/RgNC+0YTQuNC70YwNCglwcm9maWxlX2hlYWRlciA6 +ICfQpdCw0LHRgNCw0YXQsNCx0YAgLSDQndCw0YHRgtGA0L7QudC60LgnLA0KDQoJ +Ly8g0YDQtdC30Y7QvNC1DQoJcmVzdW1lX2hlYWRlciA6ICfQpdCw0LHRgNCw0YXQ +sNCx0YAg4oCUINCg0LXQt9GO0LzQtScsDQoJDQoJLy8g0L/QvtGH0YLQsA0KCW1h +aWxfaGVhZGVyIDogJ9Cl0LDQsdGA0LDRhdCw0LHRgCDigJQg0J/QvtGH0YLQsCcs +DQoJbWFpbF9sZXR0ZXJfc2VuZF9yZXF1ZXN0IDogJ9CS0Ysg0L7RgtC/0YDQsNCy +0LjQu9C4INC30LDQv9GA0L7RgSDQvdCwINC+0YLQv9GA0LDQstC60YMg0L/QuNGB +0YzQvNCwLicsDQoJbWFpbF9sZXR0ZXJfZGVsZXRlIDogJ9Cf0LjRgdGM0LzQviDR +g9C00LDQu9C10L3QvicsDQoNCgkvLyDQutC+0LzQvNC10L3RgtCw0YDQuNC4DQoJ +Y29tbWVudHNfaGVhZGVyIDogJ9Cl0LDQsdGA0LDRhdCw0LHRgCDigJQg0JrQvtC8 +0LzQtdC90YLQsNGA0LjQuCcsDQoJY29tbWVudHNfZXJyb3JfYmxhbmtfbWVzc2Fn +ZSA6ICfQktCy0LXQtNC40YLQtSDRh9GC0L4t0L3QuNCx0YPQtNGMIScsDQoJY29t +bWVudHNfYWRkX3N1Y2Nlc3MgOiAn0JLRiyDQtNC+0LHQsNCy0LjQu9C4INC60L7Q +vNC80LXQvdGC0LDRgNC40LkuJywNCgljb21tZW50c19hZGRfcmVxdWVzdCA6ICfQ +ktGLINC+0YLQv9GA0LDQstC40LvQuCDQt9Cw0L/RgNC+0YEg0L3QsCDQtNC+0LHQ +sNCy0LvQtdC90LjQtSDQutC+0LzQvNC10L3RgtCw0YDQuNGPLicsDQoNCgkvLyDQ +s9C+0YHQvtCy0LDQvdC40LUNCgl2b3RpbmdzX2hlYWRlciA6ICfQpdCw0LHRgNCw +0YXQsNCx0YAg4oCUINCT0L7Qu9C+0YHQvtCy0LDQvdC40Y8nLA0KCXZvdGluZ3Nf +dW5rbm93bl9lcnJvciA6ICfQndC10L7Qv9C+0LfQvdCw0L3QvdCw0Y8g0YHRgtGA +0LDQvdC90LDRjyDQvtGI0LjQsdC60LAnLA0KCXZvdGluZ3NfZXJyb3Jfc2VsZiA6 +ICfQk9C+0LvQvtGB0L7QstCw0YLRjCDQt9CwINGB0LLQvtC4INCy0LXRidC4INC9 +0LXQu9GM0LfRjycsDQoJdm90aW5nc19lcnJvcl9wcm9oaWJpdGVkIDogJ9CS0LDQ +vCDQt9Cw0L/RgNC10YnQtdC90L4g0LfQtNC10YHRjCDQs9C+0LvQvtGB0L7QstCw +0YLRjCcsDQoJdm90aW5nc19lcnJvcl9pc19leHBpcmVkIDogJ9CS0YDQtdC80Y8g +0LPQvtC70L7RgdC+0LLQsNC90LjRjyDQv9GA0L7RiNC70L4nLA0KCXZvdGluZ3Nf +ZXJyb3Jfbm9fYWNjZXNzIDogJ9Ct0YLQviDQtNC10LnRgdGC0LLQuNC1INC00L7R +gdGC0YPQv9C90L4g0YLQvtC70YzQutC+INC00LvRjyDQt9Cw0YDQtdCz0LjRgdGC +0YDQuNGA0L7QstCw0L3QvdGL0YUg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9C10Lkn +LA0KDQoJLy8g0LHQu9C+0LPQuA0KCWJsb2dzOiB7DQoJCWhlYWRlcjogJ9Cl0LDQ +sdGA0LDRhdCw0LHRgCDigJQg0JHQu9C+0LPQuCcsDQoJCWRpc2FibGVkOiAn0JLQ +sNGI0LAg0L/RgNC+0YHRjNCx0LAg0L4g0L/QvtC00L/QuNGB0LrQtS/QstGB0YLR +g9C/0LvQtdC90LjQuCDQsiDQsdC70L7QsyDRg9C20LUg0LHRi9C70LAg0L7RgtC/ +0YDQsNCy0LvQtdC90LAg0LzQvtC00LXRgNCw0YLQvtGA0YMnLA0KCQllbXB0eV9m +aWVsZDogJ9Cd0YMg0LLQstC10LTQuNGC0LUg0YXQvtGC0Ywg0YfRgtC+LdC90LjQ +sdGD0LTRjCEnLA0KCQlibG9nX2pvaW46ICfQktGLINCy0YHRgtGD0L/QuNC70Lgg +0LIg0LHQu9C+0LMnLA0KCQlibG9nX2xlYXZlOiAn0JLRiyDQv9C+0LrQuNC90YPQ +u9C4INCx0LvQvtCzJw0KCX0sDQoNCg0KCS8vINGA0LXQs9C40YHRgtGA0LDRhtC4 +0Y8NCglyZWdpc3RyYXRpb246IHsNCgkJaGVhZGVyOiAn0KXQsNCx0YDQsNGF0LDQ +sdGAIOKAlCDQoNC10LPQuNGB0YLRgNCw0YbQuNGPJywNCgkJZXJyb3I6ICfQntGI +0LjQsdC60LA6INC/0YDQvtCy0LXRgNGM0YLQtSDQv9GA0LDQstC40LvRjNC90L7R +gdGC0Ywg0LfQsNC/0L7Qu9C90LXQvdC40Y8g0YTQvtGA0LzRiycNCgl9LA0KDQoJ +Ly8g0L/QvtGB0YLRiw0KCXBvc3RzX2hlYWRlciA6ICfQpdCw0LHRgNCw0YXQsNCx +0YAg4oCUINCf0YPQsdC70LjQutCw0YbQuNC4JywNCglwb3N0c19zbGlkZXNob3df +YWRkIDogJ9Ch0LvQsNC50LTRiNC+0YMg0LTQvtCx0LDQstC70LXQvdC+JywNCg0K +CS8vINCU0L7QsdCw0LLQu9C10L3QuNC1INCyINC00YDRg9C30YzRjw0KCWZyaWVu +ZGxpZXJfaGVhZGVyIDogJ9Cl0LDQsdGA0LDRhdCw0LHRgCDigJQg0JTRgNGD0LfR +jNGPJywNCglmcmllbmRsaWVyX3Vua25vd25fZXJyb3IgOiAn0J3QtdC+0L/QvtC3 +0L3QsNC90L3QsNGPINGB0YLRgNCw0L3QvdCw0Y8g0L7RiNC40LHQutCwJywNCg0K +CS8vINCd0LDRgdGC0YDQvtC50LrQuA0KCXVzZXJfc2V0dGluZ3NfaGVhZGVyIDog +J9Cl0LDQsdGA0LDRhdCw0LHRgCDigJQg0J3QsNGB0YLRgNC+0LnQutC4INC/0L7Q +u9GM0LfQvtCy0LDRgtC10LvRjycsDQoJdXNlcl9zZXR0aW5nc19zYXZlX3N1Y2Nl +c3MgOiAn0J3QsNGB0YLRgNC+0LnQutC4INC+0LHQvdC+0LLQu9C10L3RiycsDQoJ +dXNlcl9zZXR0aW5nc191bmtub3duX2Vycm9yIDogJ9Cd0LXQuNC30LLQtdGB0YLQ +vdCw0Y8g0L7RiNC40LHQutCwJywNCgkNCgkvLyDQmtCw0YDRgtCwINCx0LvQvtCz +0L7Qsg0KCWJsb2dfbWFwX2hlYWRlciA6ICfQpdCw0LHRgNCw0YXQsNCx0YAg4oCU +INCa0LDRgNGC0LAg0LHQu9C+0LPQvtCyJywNCglibG9nX2Vycm9yX25vX2JyYW5k +IDogJ9Cc0LDRgNC60LAg0L3QtSDQvdCw0LnQtNC10L3QsCcsDQoJYmxvZ19lcnJv +cl9ub19tb2RlbCA6ICfQnNC+0LTQtdC70Ywg0L3QtSDQvdCw0LnQtNC10L3QsCcs +DQoJYmxvZ19lcnJvcl9ub19ibG9nIDogJ9CR0LvQvtCzINC90LUg0L3QsNC50LTQ +tdC9JywNCgkNCgkvLyDQmtCw0YDRgtCwDQoJZ21hcF9oZWFkZXIgOiAn0KXQsNCx +0YDQsNGF0LDQsdGAIOKAlCDQmtCw0YDRgtGLJywNCglnbWFwX21hcmtlcl9hZGRf +c3VjY2VzcyA6ICfQntCx0YrQtdC60YIg0LTQvtCx0LDQstC70LXQvScsDQoJZ21h +cF9tYXJrZXJfYWRkX25vX21hcmtlciA6ICfQn9C+0LbQsNC70YPQudGB0YLQsCwg +0LrQu9C40LrQvdC40YLQtSDQvdCwINC60LDRgNGC0YMg0LTQu9GPINC00L7QsdCw +0LLQu9C10L3QuNGPINC+0LHRitC10LrRgtCwJywNCglnbWFwX3NlYXJjaF9wbGFj +ZV9ub19hZGRyZXNzX2Vycm9yIDogJ9Cf0L7QttCw0LvRg9C50YHRgtCwLCDRg9GC +0L7Rh9C90LjRgtC1LCDRh9GC0L4sINGB0L7QsdGB0YLQstC10L3QvdC+LCDQuNGB +0LrQsNGC0YwuJywNCgkNCgkvLyDQmNC30LHRgNCw0L3QvdC+0LUNCglmYXZvdXJp +dGVzX2hlYWRlciA6ICAn0KXQsNCx0YDQsNGF0LDQsdGAIOKAlCDQmNC30LHRgNCw +0L3QvdC+0LUnLA0KCWZhdm91cml0ZXNfcmVxdWVzdF9hZGQgOiAgJ9Cl0LDQsdGA +0LDRhdCw0LHRgCDigJQg0JLRiyDQv9C+0YHQu9Cw0LvQuCDQt9Cw0L/RgNC+0YEg +0L3QsCDQtNC+0LHQsNCy0LvQtdC90LjQtSDQv9C+0YHRgtCwINCyINC40LfQsdGA +0LDQvdC90L7QtScsDQoJZmF2b3VyaXRlc19yZXF1ZXN0X3JlbW92ZSA6ICAn0KXQ +sNCx0YDQsNGF0LDQsdGAIOKAlCDQktGLINC/0L7RgdC70LDQu9C4INC30LDQv9GA +0L7RgSDQvdCwINGD0LTQsNC70LXQvdC40LUg0L/QvtGB0YLQsCDQuNC3INC40LfQ +sdGA0LDQvdC90L7Qs9C+JywNCg0KCWZhdm91cml0ZXNfcmVxdWVzdF9wb3N0X2Fk +ZF9zdWNjZXNzIDogICfQpdCw0LHRgNCw0YXQsNCx0YAg4oCUINCS0Ysg0LTQvtCx +0LDQstC40LvQuCDQv9C+0YHRgiDQsiDQuNC30LHRgNCw0L3QvdC+0LUnLA0KCWZh +dm91cml0ZXNfcmVxdWVzdF9wb3N0X3JlbW92ZV9zdWNjZXNzIDogICfQpdCw0LHR +gNCw0YXQsNCx0YAg4oCUINCS0Ysg0YPQtNCw0LvQuNC70Lgg0L/QvtGB0YIg0LjQ +tyDQuNC30LHRgNCw0L3QvdC+0LPQvicsDQoJDQoJZmF2b3VyaXRlc19yZXF1ZXN0 +X2NvbW1lbnRfYWRkX3N1Y2Nlc3MgOiAgJ9Cl0LDQsdGA0LDRhdCw0LHRgCDigJQg +0JLRiyDQtNC+0LHQsNCy0LjQu9C4INC60L7QvNC80LXQvdGC0LDRgNC40Lkg0LIg +0LjQt9Cx0YDQsNC90L3QvtC1JywNCglmYXZvdXJpdGVzX3JlcXVlc3RfY29tbWVu +dF9yZW1vdmVfc3VjY2VzcyA6ICAn0KXQsNCx0YDQsNGF0LDQsdGAIOKAlCDQktGL +INGD0LTQsNC70LjQu9C4INC60L7QvNC80LXQvdGC0LDRgNC40Lkg0LjQtyDQuNC3 +0LHRgNCw0L3QvdC+0LPQvicsDQoNCgkvLyDQn9Cf0JANCglwcGFfaGVhZGVyIDog +J9Cf0J/QkCcsDQoJDQoJDQoJLy8g0JPQtdC+DQoJZ2VvX2hlYWRlciA6ICAn0KXQ +sNCx0YDQsNGF0LDQsdGAIOKAlCDQodGC0YDQsNC90YsnLA0KCQ0KCS8vIA0KCWNv +bXBhbmllc19oZWFkZXIgOiAgJ9Cl0LDQsdGA0LDRhdCw0LHRgCDigJQg0JrQvtC8 +0L/QsNC90LjQuCcsDQoJDQoJcG9sbF9oZWFkZXIgOiAn0KXQsNCx0YDQsNGF0LDQ +sdGAIOKAlCDQntC/0YDQvtGB0YsnLA0KCWZhaWx0dXJlIDogJ9Cl0LDQsdGA0LDR +hdCw0LHRgCDigJQg0J7RiNC40LHQutCwJywNCgkvLyBhamF4IGVycm9yDQoJYWph +eF9lcnJvciA6ICfQpdCw0LHRgNCw0YXQsNCx0YAg4oCUINCe0YjQuNCx0LrQsCBB +amF4LdC30LDQv9GA0L7RgdCwJw0KfTsNCgoKCgovKiAgIGdlbyAgICovCmdlb0hh +bmRsZXIgPSB7DQoJdXJsOiAnL2FqYXgvZ2VvLycsDQoJY2xhc3NOYW1lcyA6IHsN +CgkJYWxsSG9sZGVyOiAnanMtZ2VvX2Jsb2NrX2hvbGRlcicsDQoJCWNvdW50cnlI +b2xkZXI6ICdqcy1nZW9fY291bnRyeV9zZWxlY3RfaG9sZGVyJywNCgkJcmVnaW9u +SG9sZGVyOiAnanMtZ2VvX3JlZ2lvbl9zZWxlY3RfaG9sZGVyJywNCgkJY2l0eUhv +bGRlcjogJ2pzLWdlb19jaXR5X3NlbGVjdF9ob2xkZXInLA0KCQljb3VudHJ5U2Vs +ZWN0OiAnanMtZ2VvX2NvdW50cnlfc2VsZWN0JywNCgkJcmVnaW9uU2VsZWN0OiAn +anMtZ2VvX3JlZ2lvbl9zZWxlY3QnLA0KCQljaXR5U2VsZWN0OiAnanMtZ2VvX2Np +dHlfc2VsZWN0Jw0KCX0sDQoJeG1sOiB7DQoJCXJlc3BvbnNlTm9kZXM6IHsNCgkJ +CWVycm9yIDogJ2Vycm9yJywNCgkJCXJlc3VsdCA6ICdtZXNzYWdlJywNCgkJCXJl +Z2lvbiA6ICdyZWdpb24nLA0KCQkJY2l0eSA6ICdjaXR5Jw0KCQl9LA0KDQoJCXBh +cnNlOiBmdW5jdGlvbih4bWxPYmopew0KCQkJdmFyIHhtbE5vZGVzID0ge307DQoJ +CQlmb3IgKHByb3AgaW4gZ2VvSGFuZGxlci54bWwucmVzcG9uc2VOb2Rlcykgew0K +CQkJCXhtbE5vZGVzW3Byb3BdID0geG1sT2JqLmdldEVsZW1lbnRzQnlUYWdOYW1l +KGdlb0hhbmRsZXIueG1sLnJlc3BvbnNlTm9kZXNbcHJvcF0pOw0KCQkJfQ0KCQkJ +cmV0dXJuIHhtbE5vZGVzOw0KCQl9DQoJfSwNCgkNCglzZW5kRGF0YSA6IGZ1bmN0 +aW9uIChzZWxlY3Rfb2JqLCBzZW5kX3R5cGUsIGdldF90eXBlKSB7DQoJCQ0KCQl2 +YXIgYWxsSG9sZGVyID0gJChzZWxlY3Rfb2JqKS5nZXRQYXJlbnQoJy4nICsgZ2Vv +SGFuZGxlci5jbGFzc05hbWVzLmFsbEhvbGRlcik7DQoJCWlmIChzZWxlY3Rfb2Jq +LnZhbHVlID09ICcnKSB7DQoJCQlpZiAoZ2V0X3R5cGUgPT0gJ3JlZ2lvbnMnKSB7 +DQoJCQkJJChhbGxIb2xkZXIpLmdldEVsZW1lbnQoJy4nICsgZ2VvSGFuZGxlci5j +bGFzc05hbWVzLnJlZ2lvbkhvbGRlcikuYWRkQ2xhc3MoJ2hpZGRlbicpOw0KCQkJ +CSQoYWxsSG9sZGVyKS5nZXRFbGVtZW50KCcuJyArIGdlb0hhbmRsZXIuY2xhc3NO +YW1lcy5jaXR5SG9sZGVyKS5hZGRDbGFzcygnaGlkZGVuJyk7DQoJCQkJJChhbGxI +b2xkZXIpLmdldEVsZW1lbnQoJy4nICsgZ2VvSGFuZGxlci5jbGFzc05hbWVzLnJl +Z2lvblNlbGVjdCkuc2VsZWN0ZWRJbmRleCA9IDA7DQoJCQkJJChhbGxIb2xkZXIp +LmdldEVsZW1lbnQoJy4nICsgZ2VvSGFuZGxlci5jbGFzc05hbWVzLmNpdHlTZWxl +Y3QpLnNlbGVjdGVkSW5kZXggPSAwOw0KCQkJfSBlbHNlIGlmIChnZXRfdHlwZSA9 +PSAnY2l0aWVzJykgew0KCQkJCSQoYWxsSG9sZGVyKS5nZXRFbGVtZW50KCcuJyAr +IGdlb0hhbmRsZXIuY2xhc3NOYW1lcy5jaXR5SG9sZGVyKS5hZGRDbGFzcygnaGlk +ZGVuJyk7DQoJCQkJJChhbGxIb2xkZXIpLmdldEVsZW1lbnQoJy4nICsgZ2VvSGFu +ZGxlci5jbGFzc05hbWVzLmNpdHlTZWxlY3QpLnNlbGVjdGVkSW5kZXggPSAwOw0K +CQkJfQ0KCQkJDQoJCX0gZWxzZSB7DQoJCQl2YXIgZGF0YSA9IHNlbmRfdHlwZSAr +ICc9JyArIHNlbGVjdF9vYmoudmFsdWU7DQoJCQl2YXIgdXJsID0gJy9hamF4L2dl +by8nICsgZ2V0X3R5cGUgKyAnLyc7DQoJCQlhamF4TG9hZFBvc3QodXJsLCBkYXRh +LCBnZW9IYW5kbGVyLnNlbmREYXRhT25sb2FkLCB3aW5kb3csIHtzZWxlY3Rfb2Jq +OnNlbGVjdF9vYmosIHNlbmRfdHlwZTpzZW5kX3R5cGUsIGdldF90eXBlOmdldF90 +eXBlfSk7DQoJCX0NCgl9LA0KCQ0KCXNlbmREYXRhT25sb2FkIDogZnVuY3Rpb24o +YWpheE9iaiwgcGFyYW1zKSB7DQoJCWlmKGFqYXhPYmogJiYgYWpheE9iai5yZXNw +b25zZVhNTCl7DQoJCQl2YXIgeG1sT2JqID0gYWpheE9iai5yZXNwb25zZVhNTDsN +CgkJCXZhciB4bWxOb2RlcyA9IGdlb0hhbmRsZXIueG1sLnBhcnNlKHhtbE9iaik7 +DQoJCQlpZih4bWxOb2Rlcy5lcnJvciAmJiB4bWxOb2Rlcy5lcnJvci5sZW5ndGgp +ew0KCQkJCXZhciBlcnJvcnNfbGVuZ3RoID0geG1sTm9kZXMuZXJyb3IubGVuZ3Ro +Ow0KCQkJCWZvciAodmFyIGkgPSAwOyBpIDwgZXJyb3JzX2xlbmd0aDsgaSsrKSB7 +DQoJCQkJCWZ1dHVfYWxlcnQoRkFULmdlb19oZWFkZXIsIHhtbE5vZGVzLmVycm9y +W2ldLmZpcnN0Q2hpbGQuZGF0YSwgdHJ1ZSwgJ2Vycm9yJyk7DQoJCQkJfQ0KCQkJ +fQ0KCQkJaWYoeG1sTm9kZXMucmVzdWx0ICYmIHhtbE5vZGVzLnJlc3VsdC5sZW5n +dGgpIHsNCgkJCQlnZW9IYW5kbGVyLnNob3dSZXN1bHQoeG1sTm9kZXMsIHBhcmFt +cyk7DQoJCQl9DQoJCX0NCgl9LA0KCQ0KCXNob3dSZXN1bHQgOiBmdW5jdGlvbiAo +eG1sTm9kZXMsIHBhcmFtcykgew0KDQoJCXZhciBhbGxIb2xkZXIgPSAkKHBhcmFt +cy5zZWxlY3Rfb2JqKS5nZXRQYXJlbnQoJy4nICsgZ2VvSGFuZGxlci5jbGFzc05h +bWVzLmFsbEhvbGRlcik7DQogICAgICAgIA0KCQlpZiAocGFyYW1zLmdldF90eXBl +ID09ICdyZWdpb25zJykgew0KCQkJdmFyIHNlbGVjdFJlZ2lvbnMgPSAkKGFsbEhv +bGRlcikuZ2V0RWxlbWVudCgnLicgKyBnZW9IYW5kbGVyLmNsYXNzTmFtZXMucmVn +aW9uU2VsZWN0KTsNCgkJCXZhciBzZWxlY3RSZWdpb25zSG9sZGVyID0gJChhbGxI +b2xkZXIpLmdldEVsZW1lbnQoJy4nICsgZ2VvSGFuZGxlci5jbGFzc05hbWVzLnJl +Z2lvbkhvbGRlcik7DQoJCQkNCgkJCXZhciBjdXJPcHRpb25zID0gc2VsZWN0UmVn +aW9ucy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb3B0aW9uJyk7DQoJCQl2YXIgY3Vy +T3B0aW9uc0xlbmd0aCA9IGN1ck9wdGlvbnMubGVuZ3RoOw0KCQkJDQoJCQlmb3Ig +KHZhciBpID0gMTsgaSA8IGN1ck9wdGlvbnNMZW5ndGg7IGkrKykgew0KCQkJCXNl +bGVjdFJlZ2lvbnMucmVtb3ZlKDEpOw0KCQkJfQ0KCQkJDQoJCQlpZiAoeG1sTm9k +ZXMucmVnaW9uICYmIHhtbE5vZGVzLnJlZ2lvbi5sZW5ndGgpIHsNCgkJCQlsID0g +eG1sTm9kZXMucmVnaW9uLmxlbmd0aDsNCgkJCQlmb3IgKHZhciBpID0gMDsgaSA8 +IGw7IGkrKykgew0KCQkJCQl2YXIgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxl +bWVudCgnb3B0aW9uJyk7DQoJCQkJCW9wdGlvbi52YWx1ZSA9IHhtbE5vZGVzLnJl +Z2lvbltpXS5nZXRBdHRyaWJ1dGUoJ2lkJyk7DQoJCQkJCW9wdGlvbi5pbm5lckhU +TUwgPSB4bWxOb2Rlcy5yZWdpb25baV0uZmlyc3RDaGlsZC5kYXRhOw0KCQkJCQlz +ZWxlY3RSZWdpb25zLmFwcGVuZENoaWxkKG9wdGlvbik7DQoJCQkJCSQoc2VsZWN0 +UmVnaW9ucykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpOw0KCQkJCQkkKHNlbGVjdFJl +Z2lvbnNIb2xkZXIpLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTsNCgkJCQl9DQoJCQkJ +JChhbGxIb2xkZXIpLmdldEVsZW1lbnQoJy4nICsgZ2VvSGFuZGxlci5jbGFzc05h +bWVzLmNpdHlIb2xkZXIpLmFkZENsYXNzKCdoaWRkZW4nKTsNCgkJCQkkKGFsbEhv +bGRlcikuZ2V0RWxlbWVudCgnLicgKyBnZW9IYW5kbGVyLmNsYXNzTmFtZXMuY2l0 +eVNlbGVjdCkuc2VsZWN0ZWRJbmRleCA9IDA7DQoJCQl9DQoJCQkNCgkJfSBlbHNl +IGlmIChwYXJhbXMuZ2V0X3R5cGUgPT0gJ2NpdGllcycpIHsNCgkJCXZhciBzZWxl +Y3RDaXRpZXMgPSAkKGFsbEhvbGRlcikuZ2V0RWxlbWVudCgnLicgKyBnZW9IYW5k +bGVyLmNsYXNzTmFtZXMuY2l0eVNlbGVjdCk7DQoJCQl2YXIgc2VsZWN0Q2l0aWVz +SG9sZGVyID0gJChhbGxIb2xkZXIpLmdldEVsZW1lbnQoJy4nICsgZ2VvSGFuZGxl +ci5jbGFzc05hbWVzLmNpdHlIb2xkZXIpOw0KCQkJDQoJCQl2YXIgY3VyT3B0aW9u +cyA9IHNlbGVjdENpdGllcy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb3B0aW9uJyk7 +DQoJCQl2YXIgY3VyT3B0aW9uc0xlbmd0aCA9IGN1ck9wdGlvbnMubGVuZ3RoOw0K +CQkJDQoJCQlmb3IgKHZhciBpID0gMTsgaSA8IGN1ck9wdGlvbnNMZW5ndGg7IGkr +Kykgew0KCQkJCXNlbGVjdENpdGllcy5yZW1vdmUoMSk7DQoJCQl9DQoJCQlpZiAo +eG1sTm9kZXMuY2l0eSAmJiB4bWxOb2Rlcy5jaXR5Lmxlbmd0aCkgew0KCQkJCWwg +PSB4bWxOb2Rlcy5jaXR5Lmxlbmd0aDsNCgkJCQlmb3IgKHZhciBpID0gMDsgaSA8 +IGw7IGkrKykgew0KCQkJCQl2YXIgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxl +bWVudCgnb3B0aW9uJyk7DQoJCQkJCW9wdGlvbi52YWx1ZSA9IHhtbE5vZGVzLmNp +dHlbaV0uZ2V0QXR0cmlidXRlKCdpZCcpOw0KCQkJCQlvcHRpb24uaW5uZXJIVE1M +ID0geG1sTm9kZXMuY2l0eVtpXS5maXJzdENoaWxkLmRhdGE7DQoJCQkJCXNlbGVj +dENpdGllcy5hcHBlbmRDaGlsZChvcHRpb24pOw0KCQkJCQkkKHNlbGVjdENpdGll +cykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpOw0KCQkJCQkkKHNlbGVjdENpdGllc0hv +bGRlcikucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpOw0KCQkJCX0NCgkJCX0NCgkJfQ0K +CX0NCn07CgoKCi8qICAgYWpheEZvcm0gICAqLwovKg0KCWFqYXhGb3JtQ2xhc3MN +CgnQkdCw0LfQvtCy0YvQuSDQutC70LDRgdGBLCDQvdC1INC/0YDQuNC80LXQvdGP +0Y7RidC40LnRgdGPINGB0LDQvNC+0YHRgtC+0Y/RgtC10LvRjNC90L4gKNC+0YIg +0L3QtdCz0L4g0YPQttC1INC90LDRgdC70LXQtNGD0Y7RgiDQv9C+0LTQutC70LDR +gdGB0YssINC+0LHRgdC70YPQttC40LLQsNGO0YnQuNC1INC60L7QvdC60YDQtdGC +0L3Ri9C1INGE0L7RgNC80YspDQoNCiovDQp2YXIgYWpheEZvcm1DbGFzcyA9IGZ1 +bmN0aW9uKCl7DQoNCgkvLyDQstC+0LfQvNC+0LbQvdGL0LUgdXJsICjQt9Cw0LTQ +sNGO0YLRgdGPINGB0LLQvtC40Lwg0LrQvtC90LrRgNC10YLQvdGL0Lwg0L/QvtC0 +0LrQu9Cw0YHRgdC+0LwpDQoJLy8g0L/RgNC4INC+0YLQv9GA0LDQstC60LUg0LTQ +sNC90L3Ri9GFINC90LAg0YHQtdGA0LLQtdGAINC90LAg0YTQvtGA0LzRgyDQvdCw +0LLQtdGI0LjQstCw0Y7RgtGB0Y8g0LDQvdCw0LvQvtCz0LjRh9C90YvQtSDQutC7 +0LDRgdGB0Ys6DQoJLy8gc2F2ZS1sb2FkaW5nLCBwcmV2aWV3LWxvYWRpbmcsIGRy +YWZ0LWxvYWRpbmcNCgl0aGlzLmFqYXhVcmxzID0gew0KCQlzYXZlOiAnJyAvLyDR +gdC+0YXRgNCw0L3QtdC90LjQtSDQv9C+0YHRgtCwDQoJCS8vcHJldmlldzogJycs +IC8vINC/0YDQtdC00L/RgNC+0YHQvNC+0YLRgA0KCQkvL2RyYWZ0OiAnJywgLy8g +0LIg0YfQtdGA0L3QvtCy0LjQutC4DQoJCS8vYXV0b3NhdmU6ICcnIC8vINCyINCw +0LLRgtC+0YHRjdC50LINCgl9Ow0KDQoJLy8g0JjQvNC10L3QsCB4bWwg0L3QvtC0 +0L7QsiDQuCDRgdC+0L7RgtCy0LXRgdGC0LLRg9GO0YnQuNC1INC40Lwg0LjQvNC1 +0L3QsCDRhNGD0L3QutGG0LjQuS3QvtCx0YDQsNCx0L7RgtGH0LjQutC+0LINCgl0 +aGlzLnhtbFJlc3BvbnNlID0gew0KCQltZXNzYWdlOiB7DQoJCQlub2RlOiAnbWVz +c2FnZScsDQoJCQloYW5kbGVyOiBudWxsDQoJCX0sDQoNCgkJZXJyb3I6IHsNCgkJ +CW5vZGU6ICdlcnJvcicsDQoJCQloYW5kbGVyOiAneG1sUmVzcG9uc2VIYW5kbGVy +X2Vycm9yJw0KCQl9LA0KDQoJCXJlZGlyZWN0OiB7DQoJCQlub2RlOiAncmVkaXJl +Y3RfdXJsJywNCgkJCWhhbmRsZXI6ICd4bWxSZXNwb25zZUhhbmRsZXJfcmVkaXJl +Y3QnDQoJCX0NCgl9Ow0KDQoJLy8g0JjRgdC/0L7Qu9GM0LfRg9C10LzRi9C1INCy +INGE0L7RgNC80LUgY2xhc3NOYW1lcw0KCXRoaXMuY2xhc3NOYW1lcyA9IHsNCgkJ +ZmllbGRIb2xkZXI6ICdqcy1maWVsZC1ob2xkZXInLCAvLyDQutC+0L3RgtC10LnQ +vdC10YAt0YDQvtC00LjRgtC10LvRjCDQv9C+0LvRjyDRhNC+0YDQvNGLINC4INC+ +0YjQuNCx0LrQuA0KCQlmaWVsZERhdGE6ICdqcy1maWVsZC1kYXRhJywgLy8g0L/Q +vtC70LUg0YTQvtGA0LzRiywg0LrQvtGC0L7RgNC+0LUg0L3Rg9C20L3QviDRgdC1 +0YDQuNCw0LvQuNC30L7QstCw0YLRjA0KCQlmaWVsZEVycm9yTXNnQm94OiAnanMt +ZmllbGQtZXJyb3ItbXNnJywgLy8g0LrQvtC90YLQtdC50L3QtdGAINC00LvRjyDQ +stGL0LLQvtC00LAg0YHQvtC+0LHRidC10L3QuNGPINC+0LEg0L7RiNC40LHQutC1 +DQoJCWZpZWxkTWFya2VkRXJyb3I6ICdqcy1tYXJrZWQtZXJyb3InLCAvLyDQv9C+ +0LzQtdGH0LDQtdC8INC60L7QvdGC0LXQudC90LXRgCwg0LXRgdC70Lgg0LIg0L/Q +vtC70LUgLSDQvtGI0LjQsdC60LANCgkJZmllbGRNYXJrZWRDaGVja2VkOiAnanMt +bWFya2VkLWNoZWNrZWQnLCAvLyDQv9C+0LzQtdGH0LDQtdC8INC60L7QvdGC0LXQ +udC90LXRgCwg0LXRgdC70Lgg0L/QvtC70LUg0L/RgNC+0YjQu9C+INC/0YDQvtCy +0LXRgNC60YMNCgkJZmllbGRJc1JlcXVpcmVkOiAnanMtcmVxdWlyZWQnLCAvLyDQ +v9C+0LvQtSwg0L7QsdGP0LfQsNGC0LXQu9GM0L3QvtC1INC00LvRjyDQt9Cw0L/Q +vtC70L3QtdC90LjRjyANCgkJZmllbGRQYXNzXzE6ICdqcy1wYXNzLWZpZWxkLW1h +aW4nLCAvLyDQv9C+0LvQtSDRgSDQvtGB0L3QvtCy0L3Ri9C8INC/0LDRgNC+0LvQ +tdC8DQoJCWZpZWxkUGFzc18yOiAnanMtcGFzcy1maWVsZC1yZXBlYXQnLCAvLyDQ +v9C+0LvQtSDRgSDQv9C+0LLRgtC+0YDQvtC8INC/0LDRgNC+0LvRjw0KCQlpc0xv +YWRpbmc6ICdsb2FkaW5nJywgLy8g0L/RgNC10LvQvtCw0LTQtdGADQoJCXVua25v +d25FcnJvckhvbGRlcjogJ2pzLXVua25vd24tZXJyb3ItaG9sZGVyJywgLy8g0LTQ +tdGA0LbQsNGC0LXQu9GMINCy0YvQstC+0LTQsCDQvdC10L7Qv9C+0LfQvdCw0L3Q +vdC+0Lkg0L7RiNC40LHQutC4DQoJCXVua25vd25FcnJvck1zZzogJ2pzLXVua25v +d24tZXJyb3ItbXNnJyAvLyDRgdCw0LzQviDQv9C+0LvQtSDQvdC10L7Qv9C+0LfQ +vdCw0L3QvdC+0Lkg0L7RiNC40LHQutC4DQoJfTsNCg0KCS8vINCS0YvQstC+0LTQ +uNC80YvQtSDQutC70LjQtdC90YLQvtC8INGB0L7QvtCx0YnQtdC90LjRjyDQvtCx +INC+0YjQuNCx0LrQsNGFDQoJdGhpcy5lcnJvck1lc3NhZ2VzID0gew0KCQlmaWVs +ZElzRW1wdHk6ICfQndC10L7QsdGF0L7QtNC40LzQviDQt9Cw0L/QvtC70L3QuNGC +0Ywg0Y3RgtC+INC/0L7Qu9C1JywNCgkJaW5wdXRJc0luY29ycmVjdDogJ9CS0Ysg +0LLQstC10LvQuCDQvdC10LTQvtC/0YPRgdGC0LjQvNGL0Lkg0YHQuNC80LLQvtC7 +JywNCgkJaW5wdXRJc0luc3VmZmljaWVudDogJ9CS0Ysg0LLQstC10LvQuCDQvdC1 +0LTQvtGB0YLQsNGC0L7Rh9C90L4g0YHQuNC80LLQvtC70L7QsicsDQoJCWVtYWls +SXNJbmNvcnJlY3Q6ICfQktGLINCy0LLQtdC70Lgg0L3QtdC00L7Qv9GD0YHRgtC4 +0LzRi9C5IGVtYWlsJywNCgkJdXJsSXNJbmNvcnJlY3Q6ICfQktGLINCy0LLQtdC7 +0Lgg0L3QtdC00L7Qv9GD0YHRgtC40LzRi9C5IHVybCcsDQoJCWlucHV0Q2hhcnNO +dW1iZXJJc0luY29ycmVjdDogJ9CS0Ysg0LLQstC10LvQuCDQvdC10LLQtdGA0L3Q +vtC1INGH0LjRgdC70L4g0LHRg9C60LInLA0KCQlwYXNzd29yZElzU2hvcnQ6ICfQ +n9Cw0YDQvtC70Ywg0YHQu9C40YjQutC+0Lwg0LrQvtGA0L7RgtC60LjQuScsDQoJ +CXBhc3N3b3Jkc0FyZU5vdEVxdWFsOiAn0J/QsNGA0L7Qu9C4INC90LUg0YHQvtCy +0L/QsNC00LDRjtGCJywNCgkJdW5rbm93bkVycm9yOiAn0J3QtdC+0L/QvtC30L3Q +sNC90L3QsNGPINC+0YjQuNCx0LrQsCcgLy8g0J/Rg9GB0YLQvtC1INGB0L7QvtCx +0YnQtdC90LjQtSDQvtCxINC+0YjQuNCx0LrQtQ0KCX07DQoNCn07DQoNCg0KT2Jq +ZWN0LmV4dGVuZE9iamVjdCgNCglhamF4Rm9ybUNsYXNzLnByb3RvdHlwZSwgew0K +DQoJLy8J0J/QtdGA0LXQutC70Y7Rh9C10L3QuNC1INC80LXQttC00YMg0YTQvtGA +0LzQsNC80Lgg0L3QsCDRgdGC0YDQsNC90LjRhtC1DQoJc3dpdGNoRm9ybTogZnVu +Y3Rpb24obGluayl7DQoJCQkkKCdyZWctd3JhcHBlcicpLmNsYXNzTmFtZSA9IGxp +bmsuY2xhc3NOYW1lOw0KCQkJcmV0dXJuIGZhbHNlOw0KCX0sDQoNCg0KCS8vINCf +0LXRgNC10LLQvtC00LjQvCB4bWwg0LTQtdGA0LXQstC+INCyINC+0LHRitC10LrR +gg0KCXBhcnNlWE1MOiBmdW5jdGlvbih4bWxPYmopew0KCQkJdmFyIHhtbE5vZGVz +ID0ge307DQoJCQlmb3IgKHByb3AgaW4gdGhpcy54bWxSZXNwb25zZSl7DQoJCQkJ +eG1sTm9kZXNbcHJvcF0gPSB4bWxPYmouZ2V0RWxlbWVudHNCeVRhZ05hbWUodGhp +cy54bWxSZXNwb25zZVtwcm9wXS5ub2RlKTsNCgkJCX0NCgkJCXJldHVybiB4bWxO +b2RlczsNCgl9LA0KDQoNCgkvLyDQktC+0LfQstGA0LDRidCw0LXRgiDQsdC70L7Q +uiDQstGL0LLQvtC00LAg0L7RiNC40LHQutC4INC00LvRjyDQtNCw0L3QvdC+0LPQ +viDQv9C+0LvRjyDRhNC+0YDQvNGLDQoJZ2V0RXJyb3JNc2dCb3hCeUZpZWxkOiBm +dW5jdGlvbihmaWVsZCl7DQoJCQl2YXIgZmllbGRIb2xkZXIgPSAkKGZpZWxkKS5n +ZXRQYXJlbnQoJy4nICsgdGhpcy5jbGFzc05hbWVzLmZpZWxkSG9sZGVyKTsNCgkJ +CWlmKGZpZWxkSG9sZGVyKXsNCgkJCQl2YXIgZXJyb3JNc2dCb3hlcyA9ICQoZmll +bGRIb2xkZXIpLmdldEVsZW1lbnRzKCcuJyArIHRoaXMuY2xhc3NOYW1lcy5maWVs +ZEVycm9yTXNnQm94KTsNCgkJCQlpZihlcnJvck1zZ0JveGVzICYmIGVycm9yTXNn +Qm94ZXMubGVuZ3RoKXsNCgkJCQkJcmV0dXJuIGVycm9yTXNnQm94ZXNbMF07DQoJ +CQkJfSANCgkJCX1lbHNlIHsNCgkJCQlyZXR1cm4gbnVsbDsNCgkJCX0NCgl9LA0K +DQoNCgkvLyANCgljb21wbGV0ZUZvcm06IGZ1bmN0aW9uKHJlZGlyZWN0VXJsKXsN +CgkJCWlmKHJlZGlyZWN0VXJsKXsNCgkJCQl3aW5kb3cubG9jYXRpb24uaHJlZiA9 +IHJlZGlyZWN0VXJsOw0KCQkJfSBlbHNlIHsNCgkJCQl3aW5kb3cubG9jYXRpb24u +aHJlZiA9ICIvIjsNCgkJCX0NCgl9LA0KDQoNCgkvLwnQn9GA0L7QstC10YDQutCw +INC30LDQv9C+0LvQvdC10L3QvdC+0YHRgtC4INGE0L7RgNC80Ysg0Lgg0L7RgtGB +0YPRgtGB0LLQuNGPINC+0YjQuNCx0L7QuiAo0YHQtNC10LvQsNGC0YwgY2xhc3NO +YW1lPSdyZXF1aXJlZCcg0LTQu9GPINC/0L7Qu9C10LkpDQoJY2hlY2tGb3JtQ29t +cGxpdGlvbjogZnVuY3Rpb24oZm9ybSl7DQoJCQl2YXIgZm9ybUlzQ29tcGxpdGVk +ID0gdHJ1ZTsgDQoJCQl2YXIgZGF0YXMgPSAkKGZvcm0pLmdldEVsZW1lbnRzKCcu +JyArIHRoaXMuY2xhc3NOYW1lcy5maWVsZERhdGEpOw0KDQoJCQlmb3IgKHZhciBp +PTAsIGxlbmd0aD1kYXRhcy5sZW5ndGg7IGk8bGVuZ3RoOyBpKyspew0KCQkJCQ0K +CQkJCQ0KCQkJCXZhciBmaWVsZEhvbGRlciA9ICQoZGF0YXNbaV0pLmdldFBhcmVu +dCgnLicgKyB0aGlzLmNsYXNzTmFtZXMuZmllbGRIb2xkZXIpOw0KCQkJCQ0KCQkJ +CWlmICgNCgkJCQkJCShkYXRhc1tpXS52YWx1ZSA9PSAnJyAmJiAvLyDQv9GD0YHR +gtC+0LUg0L7QsdGP0LfQsNGC0LXQu9GM0L3QvtC1INC/0L7Qu9C1DQoJCQkJCQkJ +JChkYXRhc1tpXSkuaGFzQ2xhc3ModGhpcy5jbGFzc05hbWVzLmZpZWxkSXNSZXF1 +aXJlZCkpIHx8DQoJCQkJCQkNCgkJCQkJCShkYXRhc1tpXS5nZXRBdHRyaWJ1dGUo +J3R5cGUnKSA9PSAnY2hlY2tib3gnICYmIC8vINC+0LHRj9C30LDRgtC10LvRjNC9 +0YvQuSDRh9C10LrQsdC+0LrRgQ0KCQkJCQkJCSQoZGF0YXNbaV0pLmhhc0NsYXNz +KHRoaXMuY2xhc3NOYW1lcy5maWVsZElzUmVxdWlyZWQpICYmDQoJCQkJCQkJIWRh +dGFzW2ldLmNoZWNrZWQpDQoJCQkJCSl7DQoJCQkJCWZvcm1Jc0NvbXBsaXRlZCA9 +IGZhbHNlOw0KCQkJCQl0aGlzLm1hcmtGaWVsZF9lcnJvcihkYXRhc1tpXSwgdGhp +cy5lcnJvck1lc3NhZ2VzLmZpZWxkSXNFbXB0eSk7DQoNCgkJCQl9IGVsc2UgaWYo +DQoJCQkJCQkoZmllbGRIb2xkZXIgJiYgLy8g0L/QvtC70LUg0YEg0L3QtdC40YHQ +v9GA0LDQstC70LXQvdC90L7QuSDQvtGI0LjQsdC60L7QuQ0KCQkJCQkJCSQoZmll +bGRIb2xkZXIpLmhhc0NsYXNzKHRoaXMuY2xhc3NOYW1lcy5maWVsZE1hcmtlZEVy +cm9yKSkNCgkJCQkJKXsNCgkJCQkJdmFyIGVycm9yTXNnQm94ID0gdGhpcy5nZXRF +cnJvck1zZ0JveEJ5RmllbGQoZGF0YXNbaV0pOw0KCQkJCQlpZiAoZXJyb3JNc2dC +b3gpIHsNCgkJCQkJCWVycm9yTXNnQm94LmlubmVySFRNTCA9ICcnOw0KCQkJCQl9 +DQoJDQoJCQkJCXRoaXMubWFya0ZpZWxkX2NsZWFyKGRhdGFzW2ldKTsNCgkJCQl9 +DQoJCQl9DQoJCQlyZXR1cm4gZm9ybUlzQ29tcGxpdGVkOw0KCX0sDQoNCgkvLyDQ +odC10YDQuNCw0LvQuNC30LDRhtC40Y8g0L/QvtC70LXQuSDRhNC+0YDQvNGLDQoJ +c2VyaWFsaXplRm9ybTogZnVuY3Rpb24oZm9ybSl7DQoJCQl2YXIgZGF0YSA9ICcn +Ow0KCQkJDQoJCQl2YXIgZGF0YXMgPSAkKGZvcm0pLmdldEVsZW1lbnRzKCcuJyAr +IHRoaXMuY2xhc3NOYW1lcy5maWVsZERhdGEpOw0KCQkJZm9yICh2YXIgaT0wLCBs +ZW5ndGg9ZGF0YXMubGVuZ3RoOyBpPGxlbmd0aDsgaSsrKXsNCgkJCQl2YXIgdHlw +ZSA9IGRhdGFzW2ldLmdldEF0dHJpYnV0ZSgndHlwZScpOw0KCQkJCXZhciBwYXJh +bSA9IGRhdGFzW2ldLmdldEF0dHJpYnV0ZSgnbmFtZScpOw0KCQkJCXZhciB2YWx1 +ZSA9IGRhdGFzW2ldLnZhbHVlOw0KDQoJCQkJaWYodHlwZSA9PSAncmFkaW8nICYm +ICFkYXRhc1tpXS5jaGVja2VkKXsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0KDQoJ +CQkJaWYodHlwZSA9PSAnY2hlY2tib3gnKXsNCgkJCQkJdmFsdWUgPSBkYXRhc1tp +XS5jaGVja2VkID8gdHJ1ZSA6IGZhbHNlOw0KCQkJCX0gZWxzZSB7DQoJCQkJCXZh +bHVlID0gZGF0YXNbaV0udmFsdWU7DQoJCQkJfQ0KCQkJCWRhdGEgKz0gKGkhPTAg +PyAnJicgOiAnJykgKyBwYXJhbSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2 +YWx1ZSk7DQoJCQl9DQoJCQlyZXR1cm4gZGF0YTsNCgl9LA0KCQ0KCS8vINCh0LXR +gNC40LDQu9C40LfQsNGG0LjRjyDQv9C+0LvQtdC5INGE0L7RgNC80YsNCgljbGFz +c2ljU2VyaWFsaXplRm9ybTogZnVuY3Rpb24oZm9ybSl7DQoJCQl2YXIgZGF0YSA9 +ICcnOw0KCQkJDQoJCQl2YXIgZGF0YXMgPSAkKGZvcm0pLmdldEVsZW1lbnRzKCcu +JyArIHRoaXMuY2xhc3NOYW1lcy5maWVsZERhdGEpOw0KCQkJZm9yICh2YXIgaT0w +LCBsZW5ndGg9ZGF0YXMubGVuZ3RoOyBpPGxlbmd0aDsgaSsrKXsNCgkJCQl2YXIg +dHlwZSA9IGRhdGFzW2ldLmdldEF0dHJpYnV0ZSgndHlwZScpOw0KCQkJCXZhciBw +YXJhbSA9IGRhdGFzW2ldLmdldEF0dHJpYnV0ZSgnbmFtZScpOw0KCQkJCXZhciB2 +YWx1ZSA9IGRhdGFzW2ldLnZhbHVlOw0KDQoJCQkJaWYodHlwZSA9PSAncmFkaW8n +ICYmICFkYXRhc1tpXS5jaGVja2VkKXsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0K +DQoJCQkJaWYodHlwZSA9PSAnY2hlY2tib3gnICYmICFkYXRhc1tpXS5jaGVja2Vk +KXsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0KCQkJCWRhdGEgKz0gKGRhdGEhPScn +ID8gJyYnIDogJycpICsgcGFyYW0gKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQo +dmFsdWUpOw0KCQkJfQ0KCQkJcmV0dXJuIGRhdGE7DQoJfSwNCg0KCS8vINCh0LXR +gNC40LDQu9C40LfQsNGG0LjRjyDQv9C+0LvQtdC5INGE0L7RgNC80YsNCglyZWFs +U2VyaWFsaXplRm9ybTogZnVuY3Rpb24oZm9ybSl7DQoJCQl2YXIgZGF0YSA9ICcn +Ow0KCQkJDQoJCQl2YXIgZGF0YXMgPSBmb3JtLmVsZW1lbnRzOw0KCQkJZm9yICh2 +YXIgaT0wLCBsZW5ndGg9ZGF0YXMubGVuZ3RoOyBpPGxlbmd0aDsgaSsrKXsNCgkJ +CQl2YXIgdHlwZSA9IGRhdGFzW2ldLmdldEF0dHJpYnV0ZSgndHlwZScpOw0KCQkJ +CXZhciBwYXJhbSA9IGRhdGFzW2ldLmdldEF0dHJpYnV0ZSgnbmFtZScpOw0KCQkJ +CXZhciB2YWx1ZSA9IGRhdGFzW2ldLnZhbHVlOw0KDQoJCQkJaWYodHlwZSA9PSAn +cmFkaW8nICYmICFkYXRhc1tpXS5jaGVja2VkKXsNCgkJCQkJY29udGludWU7DQoJ +CQkJfQ0KDQoJCQkJaWYodHlwZSA9PSAnY2hlY2tib3gnICYmICFkYXRhc1tpXS5j +aGVja2VkKXsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0KCQkJCWRhdGEgKz0gKGRh +dGEhPScnID8gJyYnIDogJycpICsgcGFyYW0gKyAnPScgKyBlbmNvZGVVUklDb21w +b25lbnQodmFsdWUpOw0KCQkJfQ0KCQkJcmV0dXJuIGRhdGE7DQoJfSwNCg0KDQoJ +Ly8g0J7RgtC/0YDQsNCy0LrQsCDQstGB0LXRhSDQv9C+0LvQtdC5INGE0L7RgNC8 +0Ysg0L3QsCDRgdC10YDQstC10YANCgkvLyBzdWJtaXRUeXBlIC0g0L3QtdC+0LHR +j9C30LDRgtC10LvRjNC90YvQuSDQv9Cw0YDQsNC80LXRgtGADQoJLy8gZkNoZWNr +Rm9ybUNvbXBsaXRpb24gLSDQvdC10L7QsdGP0LfQsNGC0LXQu9GM0L3Ri9C5INC/ +0LDRgNCw0LzQtdGC0YAgKNGB0LLQvtGPINGE0YPQvdC60YbQuNGPINC/0YDQvtCy +0LXRgNC60Lgg0YTQvtGA0LzRiyDQvdCwINC30LDQv9C+0LvQvdC10L3QvdC+0YHR +gtGMKQ0KCS8vCQlmQ2hlY2tGb3JtQ29tcGxpdGlvbiA9PSBmKCl7fSAo0L3QtSDQ +vdCw0LTQviDQv9GA0L7QstC10YDRj9GC0YwpDQoJLy8JCWZDaGVja0Zvcm1Db21w +bGl0aW9uID09IGZhbHNlINC40LvQuCBmQ2hlY2tGb3JtQ29tcGxpdGlvbiA9PSB1 +bmRlZmluZWQgKNC90LDQtNC+INC/0YDQvtCy0LXRgNGP0YLRjCkNCglzZW5kRGF0 +YTogZnVuY3Rpb24gKGZvcm0sIHN1Ym1pdFR5cGUsIGZDaGVja0Zvcm1Db21wbGl0 +aW9uLCBjbGFzc2ljU2VyaWFsaXplKXsNCgkJCS8vINCf0YDQvtCy0LXRgNC60LAg +0L3QsCDQt9Cw0L/QvtC70L3QtdC90L3QvtGB0YLRjCDQstGB0LXRhSDQv9C+0LvQ +tdC5INC4INC90LAg0LjRhSDQstCw0LvQuNC00L3QvtGB0YLRjA0KCQkJaWYoIWZD +aGVja0Zvcm1Db21wbGl0aW9uICYmICF0aGlzLmNoZWNrRm9ybUNvbXBsaXRpb24o +Zm9ybSkpIHsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9IGVsc2UgaWYoZkNoZWNr +Rm9ybUNvbXBsaXRpb24gJiYgIWZDaGVja0Zvcm1Db21wbGl0aW9uKGZvcm0pKXsN +CgkJCQlhbGVydCgnZmFsc2UnKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoN +CgkJCS8vINCX0LDQtNCw0LXQvCDQutC70LDRgdGB0L3QtdC50LwsINC+0L/RgNC1 +0LTQtdC70Y/RjtGJ0LjQuSwg0YfRgtC+INC40LzQtdC90L3QviDQs9GA0YPQt9C4 +0YLRgdGPINCyINC00LDQvdC90YvQuSDQvNC+0LzQtdC90YINCgkJCXZhciBsb2Fk +aW5nQ2xhc3NOYW1lID0gKHN1Ym1pdFR5cGUgfHwgJ3NhdmUnKSArICctJyArIHRo +aXMuY2xhc3NOYW1lcy5pc0xvYWRpbmc7DQoNCgkJCS8vINCf0YDQvtCy0LXRgNC6 +0LAg0YLQvtCz0L4sINGH0YLQviDRhNC+0YDQvNCwINC90LUg0L7QsdGA0LDQsdCw +0YLRi9Cy0LDQtdGCINGD0LbQtSDRgtC+0LPQviwg0YfRgtC+INC80Ysg0LfQsNC/ +0YDQvtGB0LjQu9C4INCyINC00LDQvdC90YvQuSDQvNC+0LzQtdC90YINCgkJCWlm +KCQoZm9ybSkuaGFzQ2xhc3MobG9hZGluZ0NsYXNzTmFtZSkpew0KCQkJCXJldHVy +biBmYWxzZTsNCgkJCX0NCgkJCQ0KCQkJLy8g0LXRgdC70Lggc3VibWl0VHlwZSDQ +vdC1INC/0LXRgNC10LTQsNC9LCDRgtC+INC40YHQv9C+0LvRjNC30YPQtdC8IHRo +aXMuYWpheFVybHMuc2F2ZQ0KCQkJdmFyIHVybCA9IHRoaXMuYWpheFVybHNbc3Vi +bWl0VHlwZV0gfHwgdGhpcy5hamF4VXJscy5zYXZlOw0KCQkJDQoJCQlpZiAoIWNs +YXNzaWNTZXJpYWxpemUpIHsNCgkJCQl2YXIgZGF0YSA9IHRoaXMuc2VyaWFsaXpl +Rm9ybShmb3JtKTsNCgkJCX0gZWxzZSB7DQoJCQkJdmFyIGRhdGEgPSB0aGlzLmNs +YXNzaWNTZXJpYWxpemVGb3JtKGZvcm0pOw0KCQkJfQ0KDQoJCQl2YXIgcGFyYW1z +ID0gew0KCQkJCWZvcm06IGZvcm0sDQoJCQkJbG9hZGluZ0NsYXNzTmFtZTogbG9h +ZGluZ0NsYXNzTmFtZQ0KCQkJfTsNCg0KCQkJJChmb3JtKS5hZGRDbGFzcyhsb2Fk +aW5nQ2xhc3NOYW1lKTsNCgkJCQ0KCQkJYWpheFBvc3QoDQoJCQkJdXJsLA0KCQkJ +CWRhdGEsDQoJCQkJdGhpcy5zZW5kRGF0YU9ubG9hZCwNCgkJCQlwYXJhbXMsDQoJ +CQkJdGhpcyk7DQoJCQkNCgkJCXRoaXMuX2Zvcm0gPSAkKGZvcm0pOw0KCQkJcmV0 +dXJuIGZhbHNlOw0KCX0sDQoNCg0KCS8vINCn0YLQtdC90LjQtSDQvtGC0LLQtdGC +0LAg0YHQtdGA0LLQtdGA0LAg0L3QsCDQv9C10YDQtdGB0YvQu9C60YMgINCy0YHQ +tdGFINC00LDQvdC90YvRhSDRhNC+0YDQvNGLINC4INC+0LHRgNCw0LHQvtGC0LrQ +sCDQstGL0LTQsNC90L3Ri9GFINC+0YjQuNCx0L7Qug0KCXNlbmREYXRhT25sb2Fk +OiBmdW5jdGlvbiAoYWpheE9iaiwgcGFyYW1zKXsNCg0KCQkJaWYgKHRoaXMuX2Zv +cm0pIHRoaXMuX2Zvcm0ucmVtb3ZlQ2xhc3MocGFyYW1zLmxvYWRpbmdDbGFzc05h +bWUpOw0KCQkJaWYoYWpheE9iaiAmJiBhamF4T2JqLnJlc3BvbnNlWE1MKXsNCgkJ +CQl2YXIgeG1sT2JqID0gYWpheE9iai5yZXNwb25zZVhNTDsNCgkJCQl2YXIgeG1s +Tm9kZXMgPSB0aGlzLnBhcnNlWE1MKHhtbE9iaik7DQoNCgkJCQlmb3IgKHByb3Ag +aW4geG1sTm9kZXMpew0KCQkJCQlpZih0aGlzW3RoaXMueG1sUmVzcG9uc2VbcHJv +cF0uaGFuZGxlcl0pIHsNCgkJCQkJCXRoaXNbdGhpcy54bWxSZXNwb25zZVtwcm9w +XS5oYW5kbGVyXSh4bWxOb2RlcywgcGFyYW1zKTsNCgkJCQkJfQ0KCQkJCX0NCgkJ +CX0NCgl9LA0KDQoJLy8g0J7QsdGA0LDQsdC+0YLRh9C40Log0L7RgtCy0LXRgtCw +INGB0LXRgNCy0LXRgNCwINC/0YDQuCDQv9C+0LvRg9GH0LXQvdC40Lgg0L7RiNC4 +0LHQutC4DQoJeG1sUmVzcG9uc2VIYW5kbGVyX2Vycm9yOiBmdW5jdGlvbih4bWxO +b2RlcywgcGFyYW1zKXsNCgkJaWYoeG1sTm9kZXMuZXJyb3IgJiYgeG1sTm9kZXMu +ZXJyb3IubGVuZ3RoKSB7DQoJCQkkKHBhcmFtcy5mb3JtKS5yZW1vdmVDbGFzcyhw +YXJhbXMubG9hZGluZ0NsYXNzTmFtZSk7DQoNCgkJCWZvciAodmFyIGk9MDsgaTx4 +bWxOb2Rlcy5lcnJvci5sZW5ndGg7IGkrKyl7DQoJCQkJdmFyIGZpZWxkTWFya2Vk +RXJyb3IgPSBwYXJhbXMuZm9ybVt4bWxOb2Rlcy5lcnJvcltpXS5nZXRBdHRyaWJ1 +dGUoJ2ZpZWxkJyldOw0KCQkJCXZhciBlcnJvck1lc3NhZ2UgPSB4bWxOb2Rlcy5l +cnJvcltpXS5maXJzdENoaWxkID8geG1sTm9kZXMuZXJyb3JbaV0uZmlyc3RDaGls +ZC5kYXRhIDogdGhpcy5lcnJvck1lc3NhZ2VzLnVua25vd25FcnJvcjsNCg0KCQkJ +CWlmKCFmaWVsZE1hcmtlZEVycm9yKSB7DQoJCQkJCWZpZWxkTWFya2VkRXJyb3Ig +PSAkKHBhcmFtcy5mb3JtKS5nZXRFbGVtZW50KCcuJyArIHRoaXMuY2xhc3NOYW1l +cy51bmtub3duRXJyb3JNc2cpOw0KCQkJCX0gDQoJCQkJDQoJCQkJaWYgKGZpZWxk +TWFya2VkRXJyb3IpIHsNCgkJCQkJdGhpcy5tYXJrRmllbGRfZXJyb3IoZmllbGRN +YXJrZWRFcnJvciwgZXJyb3JNZXNzYWdlKTsNCgkJCQl9DQoJCQl9DQoNCgkJfQ0K +CX0sDQoNCgkvLyDQntCx0YDQsNCx0L7RgtGH0LjQuiDQvtGC0LLQtdGC0LAg0YHQ +tdGA0LLQtdGA0LAg0L/RgNC4INGA0LXQtNC40YDQtdC60YLQtQ0KCXhtbFJlc3Bv +bnNlSGFuZGxlcl9yZWRpcmVjdDogZnVuY3Rpb24oeG1sTm9kZXMsIHBhcmFtcyl7 +DQoJCWlmKHhtbE5vZGVzLnJlZGlyZWN0ICYmIHhtbE5vZGVzLnJlZGlyZWN0Lmxl +bmd0aCkgew0KCQkJdGhpcy5jb21wbGV0ZUZvcm0oeG1sTm9kZXMucmVkaXJlY3Rb +MF0uZmlyc3RDaGlsZC5kYXRhKTsNCgkJfQ0KCX0sDQoNCg0KCS8vINCf0LXRgNC1 +0YHRi9C70LrQsCDQv9C+0LvQtdC5INGE0L7RgNC80YsgKNC/0LXRgNCy0L7QtSDQ +v9C+0LvQtSDQvNCw0YHRgdC40LLQsCAtINGC0LXQutGD0YnQtdC1KQ0KCWNoZWNr +RGF0YTogZnVuY3Rpb24gKGZpZWxkcywgYWN0aW9uLCBzdWJtaXRUeXBlKXsNCgkJ +CQ0KCQkJLy8g0LXRgdC70Lggc3VibWl0VHlwZSDQvdC1INC/0LXRgNC10LTQsNC9 +LCDRgtC+INC40YHQv9C+0LvRjNC30YPQtdC8IHRoaXMuYWpheFVybHMuc2F2ZQ0K +CQkJdmFyIHVybCA9IHRoaXMuYWpheFVybHNbc3VibWl0VHlwZV0gfHwgdGhpcy5h +amF4VXJscy5zYXZlOw0KDQoJCQl2YXIgZGF0YSA9ICIiOw0KCQkJdmFyIGZpZWxk +Ow0KCQkJDQoJCQlpZiAoZmllbGRzLmxlbmd0aCAmJiBmaWVsZHMubGVuZ3RoID4g +MSkgew0KCQkJCWZpZWxkID0gZmllbGRzWzBdOw0KCQkJCQ0KCQkJCWZvciAodmFy +IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7DQoJCQkJCXZhciB0eXBl +ID0gZmllbGRzW2ldLmdldEF0dHJpYnV0ZSgndHlwZScpOw0KCQkJCQl2YXIgcGFy +YW0gPSBmaWVsZHNbaV0uZ2V0QXR0cmlidXRlKCduYW1lJyk7DQoJCQkJCXZhciB2 +YWx1ZTsNCg0KCQkJCQlpZih0eXBlID09ICdjaGVja2JveCcpew0KCQkJCQkJdmFs +dWUgPSBmaWVsZHNbaV0uY2hlY2tlZCA/IHRydWUgOiBmYWxzZTsNCgkJCQkJfSBl +bHNlIHsNCgkJCQkJCXZhbHVlID0gZmllbGRzW2ldLnZhbHVlOw0KCQkJCQl9DQoN +CgkJCQkJZGF0YSArPSAoaSE9MCA/ICcmJyA6ICcnKSArIHBhcmFtICsgJz0nICsg +ZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTsNCgkJCQl9DQoJCQkJDQoJCQl9IGVs +c2Ugew0KCQkJCWZpZWxkID0gZmllbGRzLmxlbmd0aCA/IGZpZWxkc1swXSA6IGZp +ZWxkczsNCgkJCQl2YXIgcGFyYW0gPSBmaWVsZC5nZXRBdHRyaWJ1dGUoJ25hbWUn +KTsNCgkJCQl2YXIgdmFsdWUgPSBmaWVsZC52YWx1ZTsNCgkJCQlkYXRhID0gcGFy +YW0gKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpOw0KCQkJfQ0KCQkJ +DQoNCgkJCWRhdGEgKz0gIiZhY3Rpb249IiArIGFjdGlvbjsNCg0KCQkJdmFyIGZp +ZWxkUGFyZW50ID0gJChmaWVsZCkuZ2V0UGFyZW50KCcuJyArIHRoaXMuY2xhc3NO +YW1lcy5maWVsZEhvbGRlcik7DQoJCQlpZihmaWVsZFBhcmVudCkgJChmaWVsZFBh +cmVudCkuYWRkQ2xhc3ModGhpcy5jbGFzc05hbWVzLmlzTG9hZGluZyk7DQoJCQkN +CgkJCWFqYXhQb3N0KA0KCQkJCXVybCwNCgkJCQlkYXRhLA0KCQkJCXRoaXMuY2hl +Y2tEYXRhT25sb2FkLA0KCQkJCWZpZWxkLA0KCQkJCXRoaXMpOw0KCX0sDQoNCgkN +CgkvLyDQp9GC0LXQvdC40LUg0L7RgtCy0LXRgtCwINGB0LXRgNCy0LXRgNCwINC9 +0LAg0L/QtdGA0LXRgdGL0LvQutGDINC60L7QvdC60YDQtdGC0L3QvtCz0L4g0L/Q +vtC70Y8g0YTQvtGA0LzRiyDQuCDQvtCx0YDQsNCx0L7RgtC60LAg0LLRi9C00LDQ +vdC90YvRhSDQvtGI0LjQsdC+0LoNCgljaGVja0RhdGFPbmxvYWQ6IGZ1bmN0aW9u +IChhamF4T2JqLCBmaWVsZCl7DQoJCQkNCgkJCXZhciBmaWVsZFBhcmVudCA9ICQo +ZmllbGQpLmdldFBhcmVudCgnLicgKyB0aGlzLmNsYXNzTmFtZXMuZmllbGRIb2xk +ZXIpOw0KCQkJaWYoZmllbGRQYXJlbnQpICQoZmllbGRQYXJlbnQpLnJlbW92ZUNs +YXNzKHRoaXMuY2xhc3NOYW1lcy5pc0xvYWRpbmcpOw0KDQoJCQlpZihhamF4T2Jq +ICYmIGFqYXhPYmoucmVzcG9uc2VYTUwpew0KCQkJCQ0KCQkJCXZhciB4bWxPYmog +PSBhamF4T2JqLnJlc3BvbnNlWE1MOw0KCQkJCXZhciB4bWxOb2RlcyA9IHRoaXMu +cGFyc2VYTUwoeG1sT2JqKTsNCgkJCQkNCgkJCQlpZih4bWxOb2Rlcy5lcnJvciAm +JiB4bWxOb2Rlcy5lcnJvci5sZW5ndGgpIHsNCgkJCQkJZm9yICh2YXIgaT0wOyBp +PHhtbE5vZGVzLmVycm9yLmxlbmd0aDsgaSsrKXsNCgkJCQkJCXZhciBmaWVsZE1h +cmtlZEVycm9yID0gZmllbGQ7DQoJCQkJCQl2YXIgZXJyb3JNZXNzYWdlID0geG1s +Tm9kZXMuZXJyb3JbaV0uZmlyc3RDaGlsZC5kYXRhOw0KCQkJCQkJdGhpcy5tYXJr +RmllbGRfZXJyb3IoZmllbGRNYXJrZWRFcnJvciwgZXJyb3JNZXNzYWdlKTsNCgkJ +CQkJfQ0KDQoJCQkJfSBlbHNlIGlmKHhtbE5vZGVzLnJlZGlyZWN0ICYmIHhtbE5v +ZGVzLnJlZGlyZWN0Lmxlbmd0aCkgew0KCQkJCQl0aGlzLmNvbXBsZXRlRm9ybSh4 +bWxOb2Rlcy5yZWRpcmVjdFswXS5maXJzdENoaWxkLmRhdGEpOw0KDQoJCQkJfSBl +bHNlIHsNCgkJCQkJdGhpcy5tYXJrRmllbGRfY2hlY2tlZChmaWVsZCk7DQoJCQkJ +fQ0KDQoJCQl9DQoJfSwNCg0KDQoNCg0KCS8vINCe0YfQuNGJ0LDQtdC8INC/0L7Q +u9C1INC+0YIg0LvRjtCx0YvRhSDQvtGC0LzQtdGC0L7Qug0KCW1hcmtGaWVsZF9j +bGVhcjogZnVuY3Rpb24oZmllbGQpew0KCQkJdmFyIGZpZWxkSG9sZGVyID0gJChm +aWVsZCkuZ2V0UGFyZW50KCcuJyArIHRoaXMuY2xhc3NOYW1lcy5maWVsZEhvbGRl +cik7DQoJCQlpZihmaWVsZEhvbGRlcil7DQoJCQkJJChmaWVsZEhvbGRlcikucmVt +b3ZlQ2xhc3ModGhpcy5jbGFzc05hbWVzLmZpZWxkTWFya2VkRXJyb3IpOw0KCQkJ +CSQoZmllbGRIb2xkZXIpLnJlbW92ZUNsYXNzKHRoaXMuY2xhc3NOYW1lcy5maWVs +ZE1hcmtlZENoZWNrZWQpOw0KCQkJfQ0KCX0sDQoNCg0KCS8vINCe0YLQvNC10YfQ +sNC10Lwg0L/QvtC70LUg0LrQsNC6INC/0YDQvtGI0LXQtNGI0LXQtSDQv9GA0L7Q +stC10YDQutGDDQoJbWFya0ZpZWxkX2NoZWNrZWQ6IGZ1bmN0aW9uKGZpZWxkKXsN +CgkJCXZhciBmaWVsZEhvbGRlciA9ICQoZmllbGQpLmdldFBhcmVudCgnLicgKyB0 +aGlzLmNsYXNzTmFtZXMuZmllbGRIb2xkZXIpOw0KCQkJaWYoZmllbGRIb2xkZXIp +ew0KCQkJCSQoZmllbGRIb2xkZXIpLnJlbW92ZUNsYXNzKHRoaXMuY2xhc3NOYW1l +cy5maWVsZE1hcmtlZEVycm9yKTsNCgkJCQkkKGZpZWxkSG9sZGVyKS5hZGRDbGFz +cyh0aGlzLmNsYXNzTmFtZXMuZmllbGRNYXJrZWRDaGVja2VkKTsNCgkJCX0NCgl9 +LA0KDQoNCgkvLyDQntGC0LzQtdGH0LDQtdC8INC/0L7Qu9C1INC60LDQuiDQvtGI +0LjQsdC+0YfQvdC+0LUg0Lgg0LLRi9Cy0L7QtNC40Lwg0YHQvtC+0LHRidC10L3Q +uNC1INC+0LEg0L7RiNC40LHQutC1DQoJbWFya0ZpZWxkX2Vycm9yOiBmdW5jdGlv +bihmaWVsZCwgZXJyb3JNZXNzYWdlKSB7DQoJCQl2YXIgZmllbGRIb2xkZXIgPSAk +KGZpZWxkKS5nZXRQYXJlbnQoJy4nICsgdGhpcy5jbGFzc05hbWVzLmZpZWxkSG9s +ZGVyKTsNCgkJCWlmKGZpZWxkSG9sZGVyKXsNCgkJCQkkKGZpZWxkSG9sZGVyKS5y +ZW1vdmVDbGFzcyh0aGlzLmNsYXNzTmFtZXMuZmllbGRNYXJrZWRDaGVja2VkKTsN +CgkJCQkkKGZpZWxkSG9sZGVyKS5hZGRDbGFzcyh0aGlzLmNsYXNzTmFtZXMuZmll +bGRNYXJrZWRFcnJvcik7DQoNCgkJCQl2YXIgZXJyb3JNc2dCb3ggPSB0aGlzLmdl +dEVycm9yTXNnQm94QnlGaWVsZChmaWVsZCk7DQoJCQkJaWYoZXJyb3JNc2dCb3gp +ew0KCQkJCQllcnJvck1zZ0JveC5pbm5lckhUTUwgPSBlcnJvck1lc3NhZ2U7DQoJ +CQkJfQ0KCQkJfQ0KCQkJDQoJfSwNCg0KDQoJLy8J0J/RgNC+0LLQtdGA0LrQsCDQ +v9C+0LvRjyDQvdCwINC/0YPRgdGC0L7RgtGDDQoJY2hlY2tGaWVsZF9lbXB0eTog +ZnVuY3Rpb24oZSwgZmllbGQpew0KDQoJCQlpZihlID09IG51bGwgJiYgZmllbGQu +dmFsdWUgIT0gJycpIHsNCgkJCQl0aGlzLm1hcmtGaWVsZF9jbGVhcihmaWVsZCk7 +DQoJCQkJcmV0dXJuOw0KCQkJfQ0KDQoJCQlpZighZSkgZSA9IHdpbmRvdy5ldmVu +dDsNCgkJCQ0KCQkJc3dpdGNoKGUudHlwZSl7DQoJCQkJY2FzZSAnYmx1cic6DQoJ +CQkJCWlmKGZpZWxkLnZhbHVlLmxlbmd0aCAhPSAwKXsNCgkJCQkJCXRoaXMubWFy +a0ZpZWxkX2NsZWFyKGZpZWxkKTsNCgkJCQkJfQ0KCQkJCQlicmVhazsNCg0KCQkJ +CWNhc2UgJ2tleXVwJzoNCgkJCQkJdGhpcy5tYXJrRmllbGRfY2xlYXIoZmllbGQp +Ow0KCQkJCQlicmVhazsNCg0KCQkJCWNhc2UgJ2NoYW5nZSc6DQoJCQkJCWlmKGZp +ZWxkLnZhbHVlICE9ICcnKXsNCgkJCQkJCXRoaXMubWFya0ZpZWxkX2NsZWFyKGZp +ZWxkKTsNCgkJCQkJfQ0KCQkJCQlicmVhazsNCgkJCX0NCgl9DQoNCn0pOwoKCgov +KiAgIHBvbGxGb3JtICAgKi8KdmFyIHBvbGxGb3JtQ2xhc3MgPSBmdW5jdGlvbigp +ew0KCXBvbGxGb3JtQ2xhc3Muc3VwZXJDbGFzcy5hcHBseSh0aGlzLCBhcmd1bWVu +dHMpOw0KDQoJdGhpcy5hamF4VXJscyA9IHsNCgkJc2F2ZTogIi9hamF4L3BvbGwv +Ig0KCX07DQoJDQoJT2JqZWN0LmV4dGVuZE9iamVjdCgNCgkJdGhpcy54bWxSZXNw +b25zZSwgew0KCQkNCgkJdHdpdHRlciA6IHsNCgkJCW5vZGU6ICd0d2l0dGVyJywN +CgkJCWhhbmRsZXI6ICd4bWxSZXNwb25zZUhhbmRsZXJfdHdpdHRlcicNCgkJfSwN +CgkJDQoJCXJlZ2lvbiA6IHsNCgkJCW5vZGU6ICdyZWdpb24nLA0KCQkJaGFuZGxl +cjogJ3htbFJlc3BvbnNlSGFuZGxlcl9yZWdpb24nDQoJCX0sDQoJCQ0KCQljaXR5 +IDogew0KCQkJbm9kZTogJ2NpdHknLA0KCQkJaGFuZGxlcjogJ3htbFJlc3BvbnNl +SGFuZGxlcl9jaXR5Jw0KCQl9LA0KCQkNCgkJdGV4dCA6IHsNCgkJCW5vZGU6ICd0 +ZXh0JywNCgkJCWhhbmRsZXI6ICd4bWxSZXNwb25zZUhhbmRsZXJfdGV4dCcNCgkJ +fSwNCgkJDQoJCWh0bWwgOiB7DQoJCQlub2RlOiAnaHRtbCcsDQoJCQloYW5kbGVy +OiAneG1sUmVzcG9uc2VIYW5kbGVyX2h0bWwnDQoJCX0NCgl9KTsNCg0KfTsNCg0K +cG9sbEZvcm1DbGFzcy5pbmhlcml0c0Zyb20oYWpheEZvcm1DbGFzcyk7DQoNCk9i +amVjdC5leHRlbmRPYmplY3QoDQoJcG9sbEZvcm1DbGFzcy5wcm90b3R5cGUsIHsN +CgkNCglzZW5kRGF0YTogZnVuY3Rpb24gKGZvcm0sIHN1Ym1pdFR5cGUsIHBvc3Rf +aWQpew0KCQkvLyDQl9Cw0LTQsNC10Lwg0LrQu9Cw0YHRgdC90LXQudC8LCDQvtC/ +0YDQtdC00LXQu9GP0Y7RidC40LksINGH0YLQviDQuNC80LXQvdC90L4g0LPRgNGD +0LfQuNGC0YHRjyDQsiDQtNCw0L3QvdGL0Lkg0LzQvtC80LXQvdGCDQoJCXZhciBs +b2FkaW5nQ2xhc3NOYW1lID0gKHN1Ym1pdFR5cGUgfHwgJ3NhdmUnKSArICctJyAr +IHRoaXMuY2xhc3NOYW1lcy5pc0xvYWRpbmc7DQoNCgkJLy8g0J/RgNC+0LLQtdGA +0LrQsCDRgtC+0LPQviwg0YfRgtC+INGE0L7RgNC80LAg0L3QtSDQvtCx0YDQsNCx +0LDRgtGL0LLQsNC10YIg0YPQttC1INGC0L7Qs9C+LCDRh9GC0L4g0LzRiyDQt9Cw +0L/RgNC+0YHQuNC70Lgg0LIg0LTQsNC90L3Ri9C5INC80L7QvNC10L3Rgg0KCQlp +ZigkKGZvcm0pLmhhc0NsYXNzKGxvYWRpbmdDbGFzc05hbWUpKXsNCgkJCXJldHVy +biBmYWxzZTsNCgkJfQ0KCQlpZiAoc3VibWl0VHlwZSA9PSAncG9sbCcpIHsNCgkJ +CXZhciBkYXRhID0gJ2FjdGlvbj12b3RlJzsNCgkJfSBlbHNlIGlmIChzdWJtaXRU +eXBlID09ICdjYW5jZWwnKSB7DQoJCQl2YXIgZGF0YSA9ICdhY3Rpb249cGFzcyc7 +DQoJCX0NCgkJZGF0YSArPSAnJnBvc3RfaWQ9JyArIHBvc3RfaWQgKyAnJic7DQoJ +CWRhdGEgKz0gdGhpcy5jbGFzc2ljU2VyaWFsaXplRm9ybShmb3JtKTsNCgkJDQoJ +CQ0KCQkvLyDQtdGB0LvQuCBzdWJtaXRUeXBlINC90LUg0L/QtdGA0LXQtNCw0L0s +INGC0L4g0LjRgdC/0L7Qu9GM0LfRg9C10LwgdGhpcy5hamF4VXJscy5zYXZlDQoJ +CXZhciB1cmwgPSB0aGlzLmFqYXhVcmxzW3N1Ym1pdFR5cGVdIHx8IHRoaXMuYWph +eFVybHMuc2F2ZTsNCgkJDQoJCQ0KCQl2YXIgcGFyYW1zID0gew0KCQkJZm9ybTog +Zm9ybSwNCgkJCWxvYWRpbmdDbGFzc05hbWU6IGxvYWRpbmdDbGFzc05hbWUNCgkJ +fTsNCg0KCQkkKGZvcm0pLmFkZENsYXNzKGxvYWRpbmdDbGFzc05hbWUpOw0KCQkN +CgkJYWpheFBvc3QoDQoJCQl1cmwsDQoJCQlkYXRhLA0KCQkJdGhpcy5zZW5kRGF0 +YU9ubG9hZCwNCgkJCXBhcmFtcywNCgkJCXRoaXMpOw0KCQkNCgkJcmV0dXJuIGZh +bHNlOw0KCX0sDQoJeG1sUmVzcG9uc2VIYW5kbGVyX2h0bWw6IGZ1bmN0aW9uKHht +bE5vZGVzLCBwYXJhbXMpew0KCQlpZih4bWxOb2Rlcy5odG1sICYmIHhtbE5vZGVz +Lmh0bWwubGVuZ3RoKSB7DQoJCQlwYXJhbXMuZm9ybS5wYXJlbnROb2RlLmlubmVy +SFRNTCA9IHhtbE5vZGVzLmh0bWxbMF0uZmlyc3RDaGlsZC5kYXRhOw0KCQl9DQoJ +fSwNCgkvLyDQntCx0YDQsNCx0L7RgtGH0LjQuiDQvtGC0LLQtdGC0LAg0YHQtdGA +0LLQtdGA0LAg0L/RgNC4INC/0L7Qu9GD0YfQtdC90LjQuCDQvtGI0LjQsdC60LgN +Cgl4bWxSZXNwb25zZUhhbmRsZXJfZXJyb3I6IGZ1bmN0aW9uKHhtbE5vZGVzLCBw +YXJhbXMpew0KCQlpZih4bWxOb2Rlcy5lcnJvciAmJiB4bWxOb2Rlcy5lcnJvci5s +ZW5ndGgpIHsNCgkJCSQocGFyYW1zLmZvcm0pLnJlbW92ZUNsYXNzKHBhcmFtcy5s +b2FkaW5nQ2xhc3NOYW1lKTsNCg0KCQkJZm9yICh2YXIgaT0wOyBpPHhtbE5vZGVz +LmVycm9yLmxlbmd0aDsgaSsrKXsNCgkJCQl2YXIgZmllbGRNYXJrZWRFcnJvciA9 +IHBhcmFtcy5mb3JtW3htbE5vZGVzLmVycm9yW2ldLmdldEF0dHJpYnV0ZSgnZmll +bGQnKV07DQoJCQkJaWYgKGZpZWxkTWFya2VkRXJyb3IpIHsNCgkJCQkJdmFyIGVy +cm9yTWVzc2FnZSA9IHhtbE5vZGVzLmVycm9yW2ldLmZpcnN0Q2hpbGQgPyB4bWxO +b2Rlcy5lcnJvcltpXS5maXJzdENoaWxkLmRhdGEgOiB0aGlzLmVycm9yTWVzc2Fn +ZXMudW5rbm93bkVycm9yOw0KDQoJCQkJCWlmKCFmaWVsZE1hcmtlZEVycm9yKQ0K +CQkJCQkJZmllbGRNYXJrZWRFcnJvciA9ICQocGFyYW1zLmZvcm0pLmdldEVsZW1l +bnQoJy4nICsgdGhpcy5jbGFzc05hbWVzLnVua25vd25FcnJvck1zZyk7DQoNCgkJ +CQkJdGhpcy5tYXJrRmllbGRfZXJyb3IoZmllbGRNYXJrZWRFcnJvciwgZXJyb3JN +ZXNzYWdlKTsNCgkJCQl9IGVsc2Ugew0KCQkJCQl2YXIgZXJyb3JNZXNzYWdlID0g +eG1sTm9kZXMuZXJyb3JbaV0uZmlyc3RDaGlsZCA/IHhtbE5vZGVzLmVycm9yW2ld +LmZpcnN0Q2hpbGQuZGF0YSA6IHRoaXMuZXJyb3JNZXNzYWdlcy51bmtub3duRXJy +b3I7DQoJCQkJCWZ1dHVfYWxlcnQoRkFULnBvbGxfaGVhZGVyLCBlcnJvck1lc3Nh +Z2UsIGZhbHNlLCAnZXJyb3InKTsNCgkJCQl9DQoJCQl9DQoNCgkJfQ0KCX0NCn0p +Ow0KDQoNCnZhciBwb2xsRm9ybSA9IG5ldyBwb2xsRm9ybUNsYXNzKCk7CgoKCi8q +ICAgYmxvZ3MgICAqLwpibG9nc0hhbmRsZXIgPSB7DQoNCgl1cmxfbGVhdmVfam9p +bjogJy9hamF4L2Jsb2dzL21lbWJlcnNoaXAvJywNCgl1cmxfZ2V0X2luZm86ICcv +YWpheC9ibG9ncy9nZXRpbmZvLycsDQoJDQoJeG1sOiB7DQoJCXJlc3BvbnNlTm9k +ZXM6IHsNCgkJCWVycm9yIDogJ2Vycm9yJywNCgkJCW1lbWJlcnNfY291bnRfc3Ry +IDogJ21lbWJlcnNfY291bnRfc3RyJywNCgkJCXJlc3VsdCA6ICdtZXNzYWdlJywN +CgkJCXBhcmFtIDogJ3BhcmFtJywNCgkJCWRpdmNvbnRlbnQgOiAnZGl2Y29udGVu +dCcNCgkJfSwNCg0KCQlwYXJzZTogZnVuY3Rpb24oeG1sT2JqKXsNCgkJCXZhciB4 +bWxOb2RlcyA9IHt9Ow0KCQkJZm9yIChwcm9wIGluIGJsb2dzSGFuZGxlci54bWwu +cmVzcG9uc2VOb2Rlcykgew0KCQkJCXhtbE5vZGVzW3Byb3BdID0geG1sT2JqLmdl +dEVsZW1lbnRzQnlUYWdOYW1lKGJsb2dzSGFuZGxlci54bWwucmVzcG9uc2VOb2Rl +c1twcm9wXSk7DQoJCQl9DQoJCQlyZXR1cm4geG1sTm9kZXM7DQoJCX0NCgl9LA0K +CQ0KCWpvaW5MZWF2ZUJsb2cgOiBmdW5jdGlvbihhY3Rpb24sIHRhcmdldF9pZCkg +ew0KCQl2YXIgZGF0YSA9ICdhY3Rpb249JysgYWN0aW9uICsnJmJsb2dfaWQ9JyAr +IHRhcmdldF9pZDsNCgkJYWpheExvYWRQb3N0KGJsb2dzSGFuZGxlci51cmxfbGVh +dmVfam9pbiArIGFjdGlvbiArICcvJywgZGF0YSwgYmxvZ3NIYW5kbGVyLmpvaW5M +ZWF2ZUJsb2dPbmxvYWQpOw0KCX0sDQoJDQoJDQoJam9pbkxlYXZlQmxvZ09ubG9h +ZCA6IGZ1bmN0aW9uKGFqYXhPYmopIHsNCgkJaWYoYWpheE9iaiAmJiBhamF4T2Jq +LnJlc3BvbnNlWE1MKXsNCgkJCXZhciB4bWxPYmogPSBhamF4T2JqLnJlc3BvbnNl +WE1MOw0KCQkJdmFyIHhtbE5vZGVzID0gYmxvZ3NIYW5kbGVyLnhtbC5wYXJzZSh4 +bWxPYmopOw0KCQkJaWYoeG1sTm9kZXMuZXJyb3IgJiYgeG1sTm9kZXMuZXJyb3Iu +bGVuZ3RoKXsNCgkJCQl2YXIgZXJyb3JzX2xlbmd0aCA9IHhtbE5vZGVzLmVycm9y +Lmxlbmd0aDsNCgkJCQlmb3IgKHZhciBpID0gMDsgaSA8IGVycm9yc19sZW5ndGg7 +IGkrKykgew0KCQkJCQlmdXR1X2FsZXJ0KEZBVC5ibG9ncy5oZWFkZXIsIHhtbE5v +ZGVzLmVycm9yW2ldLmZpcnN0Q2hpbGQuZGF0YSwgdHJ1ZSwgJ2Vycm9yJyk7DQoJ +CQkJfQ0KCQkJfQ0KCQkJaWYoeG1sTm9kZXMucmVzdWx0ICYmIHhtbE5vZGVzLnJl +c3VsdC5sZW5ndGgpIHsNCgkJCQlpZih4bWxOb2Rlcy5wYXJhbSAmJiB4bWxOb2Rl +cy5wYXJhbS5sZW5ndGgpIHsNCgkJCQkJaWYgKHhtbE5vZGVzLnBhcmFtWzBdLmZp +cnN0Q2hpbGQuZGF0YSA9PSAnbGVhdmUnKSB7DQoJCQkJCQkkKCdqcy1hZGRCbG9n +TWVtYmVyJykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpOw0KCQkJCQkJJCgnanMtcmVt +b3ZlQmxvZ01lbWJlcicpLmFkZENsYXNzKCdoaWRkZW4nKTsNCgkJCQkJCWZ1dHVf +YWxlcnQoRkFULmJsb2dzLmhlYWRlciwgRkFULmJsb2dzLmJsb2dfbGVhdmUsIGZh +bHNlLCAnbWVzc2FnZScpOw0KCQkJCQl9IGVsc2UgaWYgKHhtbE5vZGVzLnBhcmFt +WzBdLmZpcnN0Q2hpbGQuZGF0YSA9PSAnam9pbicpIHsNCgkJCQkJCSQoJ2pzLWFk +ZEJsb2dNZW1iZXInKS5hZGRDbGFzcygnaGlkZGVuJyk7DQoJCQkJCQkkKCdqcy1y +ZW1vdmVCbG9nTWVtYmVyJykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpOw0KCQkJCQkJ +ZnV0dV9hbGVydChGQVQuYmxvZ3MuaGVhZGVyLCBGQVQuYmxvZ3MuYmxvZ19qb2lu +LCBmYWxzZSwgJ21lc3NhZ2UnKTsNCgkJCQkJfQ0KCQkJCQkkKCdtZW1iZXJzX2Nv +dW50Jykuc2V0KCdodG1sJywgeG1sTm9kZXMubWVtYmVyc19jb3VudF9zdHJbMF0u +Zmlyc3RDaGlsZC5kYXRhKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9LA0KCQ0KCWdl +dEJsb2dQZW9wbGUgOiBmdW5jdGlvbihhY3Rpb24sIHRhcmdldF9pZCkgew0KCQlp +ZiAoYWN0aW9uID09ICdhZG1pbmlzdHJhdGlvbicpIHsNCgkJCWlmICgkKCdqcy1h +ZG1pbnNfbW9kZXJhdG9yc19ob2xkZXInKS5oYXNDbGFzcygnanMtaXNfbG9hZGVk +JykpIHsNCgkJCQkkKCdqcy1hZG1pbnNfbW9kZXJhdG9yc19ob2xkZXInKS5yZW1v +dmVDbGFzcygnaGlkZGVuJyk7DQoJCQkJDQovLwkJCQlhZGRDbGFzcygkKCdqcy1h +ZG1pbnNfbW9kZXJhdG9yc19ob2xkZXJfc2hvdycpLCAnaGlkZGVuJyk7DQovLwkJ +CQlyZW1vdmVDbGFzcygkKCdqcy1hZG1pbnNfbW9kZXJhdG9yc19ob2xkZXJfaGlk +ZScpLCAnaGlkZGVuJyk7DQoJCQl9IGVsc2UgaWYgKCEkKCdqcy1hZG1pbnNfbW9k +ZXJhdG9yc19ob2xkZXInKS5oYXNDbGFzcygnanMtaXNfbG9hZGluZycpKSB7DQoJ +CQkJdmFyIGRhdGEgPSAna2luZD0nKyBhY3Rpb24gKycmYmxvZ19pZD0nICsgdGFy +Z2V0X2lkOw0KCQkJCWFqYXhMb2FkUG9zdChibG9nc0hhbmRsZXIudXJsX2dldF9p +bmZvLCBkYXRhLCBibG9nc0hhbmRsZXIuZ2V0QmxvZ1Blb3BsZU9ubG9hZCwgd2lu +ZG93LCB7YWN0aW9uOmFjdGlvbn0pOw0KCQkJCSQoJ2pzLWFkbWluc19tb2RlcmF0 +b3JzX2hvbGRlcicpLmFkZENsYXNzKCdqcy1pc19sb2FkaW5nJyk7DQoJCQkJDQov +LwkJCQlhZGRDbGFzcygkKCdqcy1hZG1pbnNfbW9kZXJhdG9yc19ob2xkZXJfc2hv +dycpLCAnaGlkZGVuJyk7DQovLwkJCQlyZW1vdmVDbGFzcygkKCdqcy1hZG1pbnNf +bW9kZXJhdG9yc19ob2xkZXJfaGlkZScpLCAnaGlkZGVuJyk7DQoJCQl9DQoJCQkJ +DQoJCX0gZWxzZSBpZiAoYWN0aW9uID09ICdtZW1iZXJzJykgew0KCQkJaWYgKCQo +J2pzLWFkbWluc19yZWFkZXJzX2hvbGRlcicpLmhhc0NsYXNzKCdqcy1pc19sb2Fk +ZWQnKSkgew0KCQkJCSQoJ2pzLWFkbWluc19yZWFkZXJzX2hvbGRlcicpLnJlbW92 +ZUNsYXNzKCdoaWRkZW4nKTsNCgkJCQkNCgkJCQkkKCdqcy1hZG1pbnNfcmVhZGVy +c19ob2xkZXJfc2hvdycpLmFkZENsYXNzKCdoaWRkZW4nKTsNCgkJCQkkKCdqcy1h +ZG1pbnNfcmVhZGVyc19ob2xkZXJfaGlkZScpLnJlbW92ZUNsYXNzKCdoaWRkZW4n +KTsNCgkJCX0gZWxzZSBpZiAoISQoJ2pzLWFkbWluc19yZWFkZXJzX2hvbGRlcicp +Lmhhc0NsYXNzKCdqcy1pc19sb2FkaW5nJykpIHsNCgkJCQl2YXIgZGF0YSA9ICdr +aW5kPScrIGFjdGlvbiArJyZibG9nX2lkPScgKyB0YXJnZXRfaWQ7DQoJCQkJYWph +eExvYWRQb3N0KGJsb2dzSGFuZGxlci51cmxfZ2V0X2luZm8sIGRhdGEsIGJsb2dz +SGFuZGxlci5nZXRCbG9nUGVvcGxlT25sb2FkLCB3aW5kb3csIHthY3Rpb246YWN0 +aW9ufSk7DQoJCQkJJCgnanMtYWRtaW5zX3JlYWRlcnNfaG9sZGVyJykuYWRkQ2xh +c3MoJ2pzLWlzX2xvYWRpbmcnKTsNCgkJCQkNCgkJCQkkKCdqcy1hZG1pbnNfcmVh +ZGVyc19ob2xkZXJfc2hvdycpLmFkZENsYXNzKCdoaWRkZW4nKTsNCgkJCQkkKCdq +cy1hZG1pbnNfcmVhZGVyc19ob2xkZXJfaGlkZScpLnJlbW92ZUNsYXNzKCdoaWRk +ZW4nKTsNCgkJCX0NCgkJfQ0KCQkNCgl9LA0KCQ0KCWhpZGVCbG9nUGVvcGxlIDog +ZnVuY3Rpb24oYWN0aW9uKSB7DQoJCWlmIChhY3Rpb24gPT0gJ2FkbWluaXN0cmF0 +aW9uJykgew0KCQkJJCgnanMtYWRtaW5zX21vZGVyYXRvcnNfaG9sZGVyJykuYWRk +Q2xhc3MoJ2hpZGRlbicpOw0KCQkJJCgnanMtYWRtaW5zX21vZGVyYXRvcnNfaG9s +ZGVyX3Nob3cnKS5yZW1vdmVDbGFzcygnaGlkZGVuJyk7DQoJCQkkKCdqcy1hZG1p +bnNfbW9kZXJhdG9yc19ob2xkZXJfaGlkZScpLmFkZENsYXNzKCdoaWRkZW4nKTsN +CgkJfSBlbHNlIGlmIChhY3Rpb24gPT0gJ21lbWJlcnMnKSB7DQoJCQkkKCdqcy1h +ZG1pbnNfcmVhZGVyc19ob2xkZXInKS5hZGRDbGFzcygnaGlkZGVuJyk7DQoJCQkk +KCdqcy1hZG1pbnNfcmVhZGVyc19ob2xkZXJfc2hvdycpLnJlbW92ZUNsYXNzKCdo +aWRkZW4nKTsNCgkJCSQoJ2pzLWFkbWluc19yZWFkZXJzX2hvbGRlcl9oaWRlJyku +YWRkQ2xhc3MoJ2hpZGRlbicpOw0KCQl9DQoJfSwNCgkNCglnZXRCbG9nUGVvcGxl +T25sb2FkIDogZnVuY3Rpb24oYWpheE9iaiwgcGFyYW1zKSB7DQoJCWlmKGFqYXhP +YmogJiYgYWpheE9iai5yZXNwb25zZVhNTCl7DQoJCQl2YXIgeG1sT2JqID0gYWph +eE9iai5yZXNwb25zZVhNTDsNCgkJCXZhciB4bWxOb2RlcyA9IGJsb2dzSGFuZGxl +ci54bWwucGFyc2UoeG1sT2JqKTsNCgkJCWlmKHhtbE5vZGVzLmVycm9yICYmIHht +bE5vZGVzLmVycm9yLmxlbmd0aCl7DQoJCQkJdmFyIGVycm9yc19sZW5ndGggPSB4 +bWxOb2Rlcy5lcnJvci5sZW5ndGg7DQoJCQkJZm9yICh2YXIgaSA9IDA7IGkgPCBl +cnJvcnNfbGVuZ3RoOyBpKyspIHsNCgkJCQkJZnV0dV9hbGVydChGQVQuYmxvZ3Mu +aGVhZGVyLCB4bWxOb2Rlcy5lcnJvcltpXS5maXJzdENoaWxkLmRhdGEsIHRydWUs +ICdlcnJvcicpOw0KCQkJCX0NCgkJCX0NCgkJCWlmKHhtbE5vZGVzLnJlc3VsdCAm +JiB4bWxOb2Rlcy5yZXN1bHQubGVuZ3RoKSB7DQoJCQkJaWYoeG1sTm9kZXMuZGl2 +Y29udGVudCAmJiB4bWxOb2Rlcy5kaXZjb250ZW50Lmxlbmd0aCkgew0KCQkJCQlp +ZiAocGFyYW1zLmFjdGlvbiA9PSAnYWRtaW5pc3RyYXRpb24nKSB7DQoJCQkJCQkk +KCdqcy1hZG1pbnNfbW9kZXJhdG9yc19ob2xkZXInKS5pbm5lckhUTUwgPSB4bWxO +b2Rlcy5kaXZjb250ZW50WzBdLmZpcnN0Q2hpbGQuZGF0YTsNCgkJCQkJCSQoJ2pz +LWFkbWluc19tb2RlcmF0b3JzX2hvbGRlcicpLnJlbW92ZUNsYXNzKCdoaWRkZW4n +KTsNCgkJCQkJCSQoJ2pzLWFkbWluc19tb2RlcmF0b3JzX2hvbGRlcicpLnJlbW92 +ZUNsYXNzKCdqcy1pc19sb2FkaW5nJyk7DQoJCQkJCQkkKCdqcy1hZG1pbnNfbW9k +ZXJhdG9yc19ob2xkZXInKS5hZGRDbGFzcygnanMtaXNfbG9hZGVkJyk7DQoJCQkJ +CQkNCi8vCQkJCQkJYWRkQ2xhc3MoJCgnanMtYWRtaW5zX21vZGVyYXRvcnNfaG9s +ZGVyX3Nob3cnKSwgJ2hpZGRlbicpOw0KLy8JCQkJCQlyZW1vdmVDbGFzcygkKCdq +cy1hZG1pbnNfbW9kZXJhdG9yc19ob2xkZXJfaGlkZScpLCAnaGlkZGVuJyk7DQoJ +CQkJCX0gZWxzZSBpZiAocGFyYW1zLmFjdGlvbiA9PSAnbWVtYmVycycpIHsNCgkJ +CQkJCSQoJ2pzLWFkbWluc19yZWFkZXJzX2hvbGRlcicpLmlubmVySFRNTCA9IHht +bE5vZGVzLmRpdmNvbnRlbnRbMF0uZmlyc3RDaGlsZC5kYXRhOw0KCQkJCQkJJCgn +anMtYWRtaW5zX3JlYWRlcnNfaG9sZGVyJykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicp +Ow0KCQkJCQkJJCgnanMtYWRtaW5zX3JlYWRlcnNfaG9sZGVyJykucmVtb3ZlQ2xh +c3MoJ2pzLWlzX2xvYWRpbmcnKTsNCgkJCQkJCSQoJ2pzLWFkbWluc19yZWFkZXJz +X2hvbGRlcicpLmFkZENsYXNzKCdqcy1pc19sb2FkZWQnKTsNCgkJCQkJCQ0KLy8J +CQkJCQlhZGRDbGFzcygkKCdqcy1hZG1pbnNfcmVhZGVyc19ob2xkZXJfc2hvdycp +LCAnaGlkZGVuJyk7DQovLwkJCQkJCXJlbW92ZUNsYXNzKCQoJ2pzLWFkbWluc19y +ZWFkZXJzX2hvbGRlcl9oaWRlJyksICdoaWRkZW4nKTsNCgkJCQkJfQ0KCQkJCX0N +CgkJCX0NCgkJfQ0KCX0sDQoJDQoJdG9nZ2xlQmxvZ0luZm8gOiBmdW5jdGlvbiAo +dGFyZ2V0X2lkLGVsZW1lbnQpIHsNCgkJdmFyIF9ib3ggPSAkKCdqcy1ibG9nX2lu +Zm8nKTsNCgkJaWYgKF9ib3guaGFzQ2xhc3MoJ2hpZGRlbicpKSB7DQoJCQlfYm94 +LnJlbW92ZUNsYXNzKCdoaWRkZW4nKTsNCgkJCWJsb2dzSGFuZGxlci5nZXRCbG9n +UGVvcGxlKCdhZG1pbmlzdHJhdGlvbicsIHRhcmdldF9pZCk7IA0KCQkJDQoJCQkN +CgkJCXZhciBwID0gZWxlbWVudC5nZXRQb3NpdGlvbigpOw0KCQkJX2JveC5zdHls +ZS50b3AgPSAocC55IC0gMTQpICsgJ3B4JzsNCgkJCWlmIChwLnggPiAoJChkb2N1 +bWVudCkuZ2V0U2l6ZSgpLngvMikpIHsNCgkJCQlfYm94LmFkZENsYXNzKCJ0aXBC +b3gtdG9vLW1hY2gtcmlnaHQiKQ0KCQkJfSBlbHNlIHsNCgkJCQlfYm94LnJlbW92 +ZUNsYXNzKCJ0aXBCb3gtdG9vLW1hY2gtcmlnaHQiKQ0KCQkJfQ0KCQkJX2JveC5z +dHlsZS5sZWZ0ID0gcC54ICsgJ3B4JzsNCgkJCV9ib3guc3R5bGUuZGlzcGxheSA9 +ICdibG9jayc7DQoJCQkNCgkJCQ0KCQkJDQoJCX0gZWxzZSB7DQoJCQlfYm94LmFk +ZENsYXNzKCdoaWRkZW4nKTsNCgkJfQ0KCQkNCgl9LA0KCQ0KCWZpbHRlciA6IGZ1 +bmN0aW9uIChvYmopIHsNCgkJdmFyIGZpZWxkcyA9ICQob2JqLmZvcm0pLmdldEVs +ZW1lbnRzKCcuanMtZmllbGQtZGF0YScpOw0KCQlmb3IgKHZhciBpPTAsIGo9Zmll +bGRzLmxlbmd0aDsgaTxqOyBpKyspIHsNCgkJCWlmKGZpZWxkc1tpXS5jaGVja2Vk +ID09IHRydWUpIHsNCgkJCQl3aW5kb3cubG9jYXRpb24uaHJlZiA9ICcvYmxvZycg +KyBmaWVsZHNbaV0udmFsdWU7DQoJCQl9DQoJCX0NCgl9DQp9Ow0KDQoNCg0KDQp2 +YXIgYWRtaW5CbG9nUGVvcGxlRm9ybUNsYXNzID0gZnVuY3Rpb24oKXsNCglhZG1p +bkJsb2dQZW9wbGVGb3JtQ2xhc3Muc3VwZXJDbGFzcy5hcHBseSh0aGlzLCBhcmd1 +bWVudHMpOw0KDQoJdGhpcy5hamF4VXJscyA9IHsNCgkJc2F2ZTogIi9hamF4L2Js +b2dzL21lbWJlcnNoaXAvc2V0X2dyb3VwLyINCgl9Ow0KCQ0KCU9iamVjdC5leHRl +bmRPYmplY3QoDQoJCXRoaXMueG1sUmVzcG9uc2UsIHsNCgkJDQoJCW1lc3NhZ2U6 +IHsNCgkJCW5vZGU6ICdtZXNzYWdlJywNCgkJCWhhbmRsZXI6ICd4bWxSZXNwb25z +ZUhhbmRsZXJfbWVzc2FnZScNCgkJfQ0KCQkNCgl9KTsNCg0KfTsNCg0KYWRtaW5C +bG9nUGVvcGxlRm9ybUNsYXNzLmluaGVyaXRzRnJvbShhamF4Rm9ybUNsYXNzKTsN +Cg0KT2JqZWN0LmV4dGVuZE9iamVjdCgNCglhZG1pbkJsb2dQZW9wbGVGb3JtQ2xh +c3MucHJvdG90eXBlLCB7DQoJDQoJc2VyaWFsaXplRm9ybTogZnVuY3Rpb24oZm9y +bSl7DQoJCQl2YXIgZGF0YSA9ICcnOw0KCQkJDQoJCQl2YXIgZGF0YXMgPSAkKGZv +cm0pLmdldEVsZW1lbnRzKCcuJyArIHRoaXMuY2xhc3NOYW1lcy5maWVsZERhdGEp +Ow0KCQkJZm9yICh2YXIgaT0wLCBsZW5ndGg9ZGF0YXMubGVuZ3RoOyBpPGxlbmd0 +aDsgaSsrKXsNCgkJCQl2YXIgdHlwZSA9IGRhdGFzW2ldLmdldEF0dHJpYnV0ZSgn +dHlwZScpOw0KCQkJCXZhciBwYXJhbSA9IGRhdGFzW2ldLmdldEF0dHJpYnV0ZSgn +bmFtZScpOw0KCQkJCXZhciB2YWx1ZSA9IGRhdGFzW2ldLnZhbHVlOw0KDQoJCQkJ +aWYodHlwZSA9PSAncmFkaW8nICYmICFkYXRhc1tpXS5jaGVja2VkKXsNCgkJCQkJ +Y29udGludWU7DQoJCQkJfQ0KDQoJCQkJaWYodHlwZSA9PSAnY2hlY2tib3gnICYm +ICFkYXRhc1tpXS5jaGVja2VkKXsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0KCQkJ +CWRhdGEgKz0gKGRhdGEhPScnID8gJyYnIDogJycpICsgcGFyYW0gKyAnPScgKyBl +bmNvZGVVUklDb21wb25lbnQodmFsdWUpOw0KCQkJfQ0KCQkJcmV0dXJuIGRhdGE7 +DQoJfSwNCglzZW5kRGF0YU9ubG9hZDogZnVuY3Rpb24gKGFqYXhPYmosIHBhcmFt +cyl7DQoJCQlpZihhamF4T2JqICYmIGFqYXhPYmoucmVzcG9uc2VYTUwpew0KCQkJ +CXZhciB4bWxPYmogPSBhamF4T2JqLnJlc3BvbnNlWE1MOw0KCQkJCXZhciB4bWxO +b2RlcyA9IHRoaXMucGFyc2VYTUwoeG1sT2JqKTsNCg0KCQkJCWZvciAocHJvcCBp +biB4bWxOb2Rlcyl7DQoJCQkJCWlmKHRoaXNbdGhpcy54bWxSZXNwb25zZVtwcm9w +XS5oYW5kbGVyXSkgew0KCQkJCQkJdGhpc1t0aGlzLnhtbFJlc3BvbnNlW3Byb3Bd +LmhhbmRsZXJdKHhtbE5vZGVzLCBwYXJhbXMpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJ +fQ0KCQkJJChwYXJhbXMuZm9ybSkucmVtb3ZlQ2xhc3MoJ3NhdmUtbG9hZGluZycp +Ow0KCX0sDQoJeG1sUmVzcG9uc2VIYW5kbGVyX21lc3NhZ2U6IGZ1bmN0aW9uICh4 +bWxOb2RlcywgcGFyYW1zKSB7DQoJCWlmICh4bWxOb2Rlcy5tZXNzYWdlICYmIHht +bE5vZGVzLm1lc3NhZ2UubGVuZ3RoICYmIHhtbE5vZGVzLm1lc3NhZ2VbMF0uZmly +c3RDaGlsZC5kYXRhID09ICdvaycpIHsNCgkJCWZ1dHVfYWxlcnQoRkFULmJsb2dz +LmhlYWRlciwgJ9Cf0YDQsNCy0LAg0YHQvtGF0YDQsNC90LXQvdGLJywgZmFsc2Us +ICdtZXNzYWdlJyk7DQoJCX0NCgl9DQp9KTsNCg0KDQp2YXIgYWRtaW5CbG9nUGVv +cGxlRm9ybSA9IG5ldyBhZG1pbkJsb2dQZW9wbGVGb3JtQ2xhc3MoKTsNCg0KDQov +Kg0KdG0uaW5pdC5hZGQoZnVuY3Rpb24oKXsNCgkNCgl2YXIgYmxvZ0luZm9CbG9j +ayA9ICQoZG9jdW1lbnQpLmdldEVsZW1lbnQoIi5ibG9nLWFib3V0LXRleHQiKTsN +CglpZiAoYmxvZ0luZm9CbG9jaykgew0KCQl2YXIgYmxvZ2luZm9CbG9ja0Nsb3Nl +QnV0dG9uID0gYmxvZ0luZm9CbG9jay5nZXRFbGVtZW50KCJhLmNsb3NlLWJsb2ct +aW5mbyIpOw0KCQlpZiAoYmxvZ2luZm9CbG9ja0Nsb3NlQnV0dG9uKSB7DQoJCQli +bG9naW5mb0Jsb2NrQ2xvc2VCdXR0b24uYWRkRXZlbnQoImNsaWNrIixmdW5jdGlv +bigpew0KCQkJCWJsb2dJbmZvQmxvY2suYWRkQ2xhc3MoImhpZGRlbiIpOw0KCQkJ +CXJldHVybiBmYWxzZQ0KCQkJfSkNCgkJfQ0KCQl2YXIgYmxvZ0luZm9CbG9ja0No +aWxkcyA9IGJsb2dJbmZvQmxvY2suZ2V0RWxlbWVudHMoIioiKTsNCgkJZm9yICh2 +YXIgaT0wLGw9YmxvZ0luZm9CbG9ja0NoaWxkcy5sZW5ndGg7IGkgPCBsIDsgaSsr +KSB7DQoJCQlibG9nSW5mb0Jsb2NrQ2hpbGRzW2ldLmNsaWNrZXIgPSAiYmxvZ0lu +Zm9CbG9ja0NoaWxkcyI7DQoJCX07DQoJCXZhciB3aG9pcyA9JChkb2N1bWVudCku +Z2V0RWxlbWVudCgiLmJsb2ctd2hvaXMiKTsNCgkJaWYod2hvaXMpIHsNCgkJCXdo +b2lzLmNsaWNrZXIgPSAiYmxvZ0luZm9CbG9ja0NoaWxkcyI7DQoJCX0NCgkJJChk +b2N1bWVudCkuYWRkRXZlbnQoImNsaWNrIixmdW5jdGlvbihlKXsNCgkJCWlmICgh +ZS50YXJnZXQuY2xpY2tlciB8fCAhZS50YXJnZXQuY2xpY2tlciA9PSAiYmxvZ0lu +Zm9CbG9ja0NoaWxkcyIpIHsNCgkJCQlibG9nSW5mb0Jsb2NrLmFkZENsYXNzKCJo +aWRkZW4iKTsNCgkJCX0NCgkJfSkNCgl9DQp9KTsNCiovCgoK + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline; filename=validation.js +Content-Type: application/x-javascript; charset=utf-8; name=validation.js +Content-Location: http://habrahabr.ru/js/1307631427/tm/validation.js +Content-Transfer-Encoding: Base64 + +dmFyIHRtID0gKHR5cGVvZih0bSkgIT0gJ3VuZGVmaW5lZCcpID8gdG0gOiB7fTsK +Ci8qKgogKiDQmtC70LDRgdGBINC/0YDQvtCy0LXRgNC60Lgg0LfQvdCw0YfQtdC9 +0LjQuSDQv9C+0LvQtdC5INCy0L4g0LLRgdGP0LrQuNGFINGE0L7RgNC80LDRhQog +KiBAcGFyYW0g0KTQvtGA0LzQsCwg0LrQvtGC0L7RgNGD0Y4g0L3Rg9C20L3QviDQ +v9GA0L7QstC10YDRj9GC0YwKICogQGF1dGhvciBiZWJvcGtpZCwgbWRldmlscwog +Ki8KdG0uVmFsaWRhdG9yID0gQ2xhc3MoewoKCWluaXRpYWxpemU6IGZ1bmN0aW9u +ICgpIHsKCQkvKioKCQkgKiDQodC/0LjRgdC+0Log0Y3Qu9C10LzQtdC90YLQvtCy +INC00LvRjyDQstCw0LvQuNC00LDRhtC40LgKCQkgKi8KCQl0aGlzLl9lbGVtZW50 +cyA9IFtdOwoJfSwKCgkvKioKCSAqINCd0LXQv9C+0YHRgNC10LTRgdGC0LLQtdC9 +0L3QviDRhNGD0L3QutGG0LjQuCDQtNC70Y8g0LLQsNC70LjQtNCw0YbQuNC4INC3 +0L3QsNGH0LXQvdC40LksINC40Lwg0L/QtdGA0LXQtNCw0LXRgtGB0Y8g0YLRgNC4 +INC/0LDRgNCw0LzQtdGC0YDQsAoJICogQHBhcmFtIHtTdHJpbmd9INGB0YLRgNC+ +0LrQsCDQtNC70Y8g0LLQsNC70LjQtNCw0YbQuNC4CgkgKiBAcGFyYW0ge09iamVj +dH0g0L/RgNC+0LjQt9Cy0L7Qu9GM0L3Ri9C5INC/0LDRgNCw0LzQtdGC0YAKCSAq +IEBwYXJhbSB7RWxlbWVudH0g0L/QvtC70LUsINC60L7RgtC+0YDQvtC1INC80Ysg +0LLQsNC70LjQtNC40YDRg9C10LwKCSAqLwoJaGFuZGxlcnM6IHsKCQlyZXF1aXJl +ZDogZnVuY3Rpb24odmFsdWUpIHsKCQkJcmV0dXJuIHZhbHVlICYmICgodmFsdWUu +bGVuZ3RoID4gMCkgPyB0cnVlIDogZmFsc2UpOwoJCX0sCgkJbWlubGVuOiBmdW5j +dGlvbih2YWx1ZSwgbWluTGVuZ3RoKSB7CgkJCXJldHVybiB2YWx1ZSAmJiAoKHZh +bHVlLmxlbmd0aCA+PSBtaW5MZW5ndGgpID8gdHJ1ZSA6IGZhbHNlKTsKCQl9LAoJ +CW1heGxlbjogZnVuY3Rpb24odmFsdWUsIG1heExlbmd0aCkgewoJCQlyZXR1cm4g +dmFsdWUgJiYgKCh2YWx1ZS5sZW5ndGggPD0gbWF4TGVuZ3RoKSA/IHRydWUgOiBm +YWxzZSk7CgkJfSwKCQlsb2dpbjogZnVuY3Rpb24odmFsdWUpIHsKCQkJcmV0dXJu +IHZhbHVlICYmIC9eW2EtekEtWjAtOVwtX10qJC8udGVzdCh2YWx1ZSk7CgkJfSwK +CQllbWFpbDogZnVuY3Rpb24odmFsdWUpIHsKCQkJcmV0dXJuIHZhbHVlICYmIC9e +KFthLXpBLVowLTlfXC5cLVwrXSkrXEAoKFthLXpBLVowLTlcLV0pK1wuKSsoW2Et +ekEtWjAtOV17Miw0fSkrJC8udGVzdCh2YWx1ZSk7CgkJfSwKCQlyYWRpb1JlcXVp +cmVkOiBmdW5jdGlvbiAodmFsdWUpIHsKCQkgICAgdmFyIG9rPWZhbHNlOwoJCSAg +ICBpZiAodHlwZW9mKHZhbHVlKSA9PSAnb2JqZWN0JykgewoJCSAgICAgICAgZm9y +KHZhciBpIGluIHZhbHVlKSB7CgkJICAgICAgICAgICAgb2s9dHJ1ZTsKCQkgICAg +ICAgICAgICBicmVhazsKCQkgICAgICAgIH0KCQkgICAgfQoJCSAgICAKCQkgICAg +cmV0dXJuIG9rOwoJCX0sCgkJaGFicmFjdXRtZTogZnVuY3Rpb24odmFsdWUpewoJ +CQlpZiAoYXJndW1lbnRzLmNhbGxlZS5kb25lIHx8ICh2YWx1ZS5sZW5ndGggPCAx +NzAwKSB8fCAodmFsdWUuaW5kZXhPZignXDxoYWJyYWN1dCcpICE9IC0xKSkgewkJ +CQkKCQkJICByZXR1cm4gdHJ1ZQkJCQoJCQl9IGVsc2UgewkJCQkKCQkJCS8vYXJn +dW1lbnRzLmNhbGxlZS5kb25lID0gdHJ1ZTsKCQkJCXJldHVybiBmYWxzZQoJCQl9 +OwoJCX0KCX0sCgkKCS8qKgoJICog0J7Rh9C40YnQsNC10YIg0YHQvtGB0YLQvtGP +0L3QuNC1INCy0LDQu9C40LTQsNGC0L7RgNCwCgkgKi8KCWNsZWFyOiBmdW5jdGlv +bigpIHsKCQl0aGlzLl9lbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pewoJ +CQlpdGVtLmVsZW1lbnQuX3ZhbGlkYXRvciA9IGZhbHNlOyAKCQl9KTsKCQl0aGlz +Ll9lbGVtZW50cyA9IFtdOwoJfSwKCQoJLyoqCgkgKiDQlNC+0LHQsNCy0LvRj9C1 +0YIg0Y3Qu9C10LzQtdC90YLRiyDQtNC70Y8g0LHRg9C00YPRidC10Lkg0LLQsNC7 +0LjQtNCw0YbQuNC4CgkgKiBAcGFyYW0ge0VsZW1lbnR9IHBhcmVudAoJICovCglh +ZGRFbGVtZW50czogZnVuY3Rpb24ocGFyZW50KSB7CgkJdG0uZ2V0RWxlbWVudHNG +b3JWYWxpZGF0aW9uKHBhcmVudCkuZm9yRWFjaChmdW5jdGlvbihmaWVsZCl7CgkJ +CXRoaXMuX2FkZEVsZW1lbnQoZmllbGQpOwoJCX0sIHRoaXMpOwoJfSwKCQoJLyoq +CgkgKiDQlNC10LDQutGC0LjQstC40YDRg9C10YIg0Y3Qu9C10LzQtdC90YLRiyDQ +uNC3INCx0YPQtNGD0YnQtdC5INCy0LDQu9C40LTQsNGG0LjQuAoJICogQHBhcmFt +IHtFbGVtZW50fSBwYXJlbnQKCSAqLwoJZGlzYWJsZUVsZW1lbnRzOiBmdW5jdGlv +bihwYXJlbnQpIHsKCQl0bS5nZXRFbGVtZW50c0ZvclZhbGlkYXRpb24ocGFyZW50 +KS5mb3JFYWNoKGZ1bmN0aW9uKGZpZWxkKXsKCQkJZmllbGQuX3ZhbGlkYXRpb25F +bmFibGVkID0gZmFsc2U7CgkJfSwgdGhpcyk7Cgl9LAoKCS8qKgoJICog0JTQtdCw +0LrRgtC40LLQuNGA0YPQtdGCINGN0LvQtdC80LXQvdGC0Ysg0LjQtyDQsdGD0LTR +g9GJ0LXQuSDQstCw0LvQuNC00LDRhtC40LgKCSAqIEBwYXJhbSB7RWxlbWVudH0g +cGFyZW50CgkgKi8KCWVuYWJsZUVsZW1lbnRzOiBmdW5jdGlvbihwYXJlbnQpIHsK +CQl0bS5nZXRFbGVtZW50c0ZvclZhbGlkYXRpb24ocGFyZW50KS5mb3JFYWNoKGZ1 +bmN0aW9uKGZpZWxkKXsKCQkJZmllbGQuX3ZhbGlkYXRpb25FbmFibGVkID0gdHJ1 +ZTsKCQl9LCB0aGlzKTsKCX0sCgoJLyoqCgkgKiDQlNC+0LHQsNCy0LvRj9C10YIg +0Y3Qu9C10LzQtdC90YLRiyDQtNC70Y8g0LHRg9C00YPRidC10Lkg0LLQsNC70LjQ +tNCw0YbQuNC4CgkgKiBAcGFyYW0ge0VsZW1lbnR9IHBhcmVudAoJICovCglyZW1v +dmVFbGVtZW50czogZnVuY3Rpb24ocGFyZW50KSB7CgkJdG0uZ2V0RWxlbWVudHNG +b3JWYWxpZGF0aW9uKHBhcmVudCkuZm9yRWFjaChmdW5jdGlvbihmaWVsZCl7CgkJ +CXRoaXMuX3JlbW92ZUVsZW1lbnQoZmllbGQpOwoJCX0sIHRoaXMpOwoJfSwKCgkv +KioKCSAqINCU0L7QsdCw0LLQu9GP0LXRgiDRjdC70LXQvNC10L3RgiDQtNC70Y8g +0LHRg9C00YPRidC10Lkg0LLQsNC70LjQtNCw0YbQuNC4CgkgKiBAcGFyYW0ge0Vs +ZW1lbnR9IGVsZW1lbnQKCSAqLwoJX2FkZEVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1l +bnQpIHsKCQlpZiAoIWVsZW1lbnQuX3ZhbGlkYXRvcikgewoJCQllbGVtZW50Ll92 +YWxpZGF0b3IgPSB0aGlzOwoJCQllbGVtZW50Ll92YWxpZGF0aW9uRW5hYmxlZCA9 +IHRydWU7CgkJCXRoaXMuX2VsZW1lbnRzLnB1c2godGhpcy5fZ2V0RWxlbWVudE9i +amVjdChlbGVtZW50KSk7CgkJfQoJfSwKCgkvKioKCSAqINCf0LDRgNGB0LjRgiDQ +uNC90YTQvtGA0LzQsNGG0LjRjiDQvtCxINGN0LvQtdC80LXQvdGC0LUg0Lgg0LLQ +vtC30LLRgNCw0YnQsNC10YIg0L7QsdGK0LXQutGCINGN0LvQtdC80LXQvdGC0LAK +CSAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudAoJICovCglfZ2V0RWxlbWVudE9i +amVjdDogZnVuY3Rpb24oZWxlbWVudCkgewoJCXZhciB2YWxpZGF0aW9uU3RyaW5n +Qml0cyA9IGVsZW1lbnQuZ2V0KCd2YWxpZGF0ZScpLnNwbGl0KCcgJyk7IAoJCXZh +ciBlbGVtZW50T2JqZWN0ID0gewoJCQknZWxlbWVudCc6IGVsZW1lbnQsCgkJCSd2 +YWxpZGF0aW9ucyc6IFtdCgkJfTsKCQlmb3IgKHZhciBpPTA7IGk8dmFsaWRhdGlv +blN0cmluZ0JpdHMubGVuZ3RoOyBpKyspIHsKCQkJdmFyIHZhbGlkYXRpb25FeHBy +ZXNzaW9uID0gdmFsaWRhdGlvblN0cmluZ0JpdHNbaV07CgkJCXZhciBjb2xvbiA9 +IHZhbGlkYXRpb25FeHByZXNzaW9uLmluZGV4T2YoJzonKTsKCQkJdmFyIHBhcmFt +ID0gbnVsbDsKCQkJaWYgKGNvbG9uICE9IC0xKSB7CgkJCQl2YXIgaGFuZGxlciA9 +IHZhbGlkYXRpb25FeHByZXNzaW9uLnN1YnN0cigwLCBjb2xvbik7CgkJCQlwYXJh +bSA9IHZhbGlkYXRpb25FeHByZXNzaW9uLnN1YnN0cihjb2xvbisxKTsKCQkJfSBl +bHNlIHsKCQkJCXZhciBoYW5kbGVyID0gdmFsaWRhdGlvbkV4cHJlc3Npb247CgkJ +CX0KCQkJZWxlbWVudE9iamVjdC52YWxpZGF0aW9ucy5wdXNoKHsKCQkJCSdoYW5k +bGVyJzogaGFuZGxlciwKCQkJCSdwYXJhbSc6IHBhcmFtCgkJCX0pOwoJCX0KCQly +ZXR1cm4gZWxlbWVudE9iamVjdDsKCX0sCgoJLyoqCgkgKiDQo9C00LDQu9GP0LXR +giDRjdC70LXQvNC10L3RgtGLINC40Lcg0LLQsNC70LjQtNCw0YbQuNC4CgkgKiBA +cGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQKCSAqLwoJX3JlbW92ZUVsZW1lbnQ6IGZ1 +bmN0aW9uKGVsZW1lbnQpIHsKCQlmb3IgKHZhciBpPTA7IGk8dGhpcy5fZWxlbWVu +dHMubGVuZ3RoOyBpKyspIHsKCQkJaWYgKHRoaXMuX2VsZW1lbnRzW2ldLmVsZW1l +bnQgPT0gZWxlbWVudCkgewoJCQkJZWxlbWVudC5fdmFsaWRhdG9yID0gZmFsc2U7 +CgkJCQl0aGlzLl9lbGVtZW50cy5zcGxpY2UoaSwgMSk7CgkJCQlyZXR1cm47CgkJ +CX0KCQl9Cgl9LAoKCS8qKgoJICog0JLQvtC30LLRgNCw0YnQsNC10YIg0LfQvdCw +0YfQtdC90LjQtSDRjdC70LXQvNC10L3RgtCwCgkgKiBAcGFyYW0ge0VsZW1lbnR9 +IGVsZW1lbnQKCSAqLwoJX2dldFZhbHVlOiBmdW5jdGlvbihlbGVtZW50KSB7CgkJ +c3dpdGNoICgkKGVsZW1lbnQpLmdldCgndGFnJykpIHsKCQkJY2FzZSAnaW5wdXQn +OgoJCQkJc3dpdGNoIChlbGVtZW50LmdldCgidHlwZSIpKSB7CgkJCQkJY2FzZSAn +dGV4dCc6CgkJCQkJY2FzZSAncGFzc3dvcmQnOgoJCQkJCWNhc2UgJ2ZpbGUnOgoJ +CQkJCQlyZXR1cm4gZWxlbWVudC52YWx1ZTsKCQkJCQljYXNlICdjaGVja2JveCc6 +CgkJCQkJY2FzZSAncmFkaW8nOgoJCQkJCQlyZXR1cm4gZWxlbWVudC5nZXQoImNo +ZWNrZWQiKSA/IGVsZW1lbnQudmFsdWUgOiBudWxsOwoJCQkJCQoJCQkJfQoJCQkJ +YnJlYWs7CgkJCWNhc2UgJ3RleHRhcmVhJzoKCQkJCXJldHVybiBlbGVtZW50LnZh +bHVlOwoJCQljYXNlICdzZWxlY3QnOgoJCQkJcmV0dXJuIGVsZW1lbnQuZ2V0KCJ2 +YWx1ZSIpOwoJCQljYXNlICdmaWVsZHNldCc6CiAgICAgICAgICAgICAgICB2YXIg +ZmllbGRzID0gZWxlbWVudC5nZXRFbGVtZW50cygnaW5wdXQsc2VsZWN0LHRleHRh +cmVhLGZpZWxkc2V0Jyk7CiAgICAJCSAgICB2YXIgcmV0ID0ge307CiAgICAJCQlm +b3IgKHZhciBpID0gMCwgbCA9IGZpZWxkcy5sZW5ndGg7IGk8bDsgaSsrKSB7CiAg +ICAJCQkgICAgdmFyIGZpZWxkID0gZmllbGRzW2ldOwogICAgCQkJICAgIHZhciBu +YW1lID0gZmllbGQubmFtZTsKICAgIAkJCSAgICB2YXIgdmFsdWUgPSB0aGlzLl9n +ZXRWYWx1ZShmaWVsZCk7CiAgICAJCQkgICAgaWYodHlwZW9mKHZhbHVlKSAhPT0g +J3VuZGVmaW5lZCcgJiYgdmFsdWUgIT09IG51bGwpIHsKICAgIAkJCSAgICAgICAg +IXJldFtuYW1lXSA/CiAgICAJCQkgICAgICAgICAgICByZXRbbmFtZV0gPSB2YWx1 +ZSA6CiAgICAJCQkgICAgICAgICAgICByZXRbbmFtZV0uZm9yRWFjaCA/CiAgICAJ +CQkgICAgICAgICAgICAgICAgcmV0W25hbWVdLnB1c2godmFsdWUpIDoKICAgIAkJ +CSAgICAgICAgICAgICAgICAocmV0W25hbWVdID0gWyByZXRbbmFtZV0sIHZhbHVl +IF0pOwogICAgCQkJICAgIH0KICAgIAkJCX0KICAgIAkJCXJldHVybiByZXQ7CgkJ +CQlicmVhazsKCQl9Cgl9LAoKCS8qKgoJICog0J/RgNC+0LjQt9Cy0L7QtNC40YIg +0LLQsNC70LjQtNCw0YbQuNGOINC+0LHRitC10LrRgtCwINCy0LDQu9C40LTQsNGG +0LjQuAoJICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnQKCSAqLwoJX3ZhbGlkYXRl +RWxlbWVudE9iamVjdDogZnVuY3Rpb24oZWxlbWVudE9iamVjdCkgewoJCXZhciBl +bGVtZW50ID0gZWxlbWVudE9iamVjdC5lbGVtZW50OwoJCXZhciB2YWx1ZSA9IHRo +aXMuX2dldFZhbHVlKGVsZW1lbnQpOwoJCWZvciAodmFyIGk9MDsgaTxlbGVtZW50 +T2JqZWN0LnZhbGlkYXRpb25zLmxlbmd0aDsgaSsrKSB7CgkJCWlmIChlbGVtZW50 +T2JqZWN0LmVsZW1lbnQuX3ZhbGlkYXRpb25FbmFibGVkKSB7CgkJCQl2YXIgaGFu +ZGxlciA9IGVsZW1lbnRPYmplY3QudmFsaWRhdGlvbnNbaV0uaGFuZGxlcjsKCQkJ +CXZhciBwYXJhbSA9IGVsZW1lbnRPYmplY3QudmFsaWRhdGlvbnNbaV0ucGFyYW07 +CgkJCQlpZiAoIXRoaXMuaGFuZGxlcnNbaGFuZGxlcl0odmFsdWUsIHBhcmFtKSkg +CgkJCQkJcmV0dXJuIGhhbmRsZXI7CgkJCX0KCQl9CgkJcmV0dXJuIGZhbHNlOwoJ +fSwKCgkvKioKCSAqINCf0YDQvtC40LfQstC+0LTQuNGCINCy0LDQu9C40LTQsNGG +0LjRjiDQvtCx0YrQtdC60YLQsCDQstCw0LvQuNC00LDRhtC40LgKCSAqIEBwYXJh +bSB7RWxlbWVudH0gZWxlbWVudAoJICovCgl2YWxpZGF0ZUVsZW1lbnQ6IGZ1bmN0 +aW9uKGVsZW1lbnQpIHsKCQlyZXR1cm4gX3ZhbGlkYXRlRWxlbWVudE9iamVjdCh0 +aGlzLl9nZXRFbGVtZW50T2JqZWN0KGVsZW1lbnQpKTsKCX0sCgoJLyoqCgkgKiDQ +n9GA0L7QuNC30LLQvtC00LjRgiDQstCw0LvQuNC00LDRhtC40Y4g0LLRgdC10YUg +0L7QsdGK0LXQutGC0L7QsgoJICovCgl2YWxpZGF0ZTogZnVuY3Rpb24oKSB7CgkJ +dmFyIHJlc3VsdCA9IFtdOwoJCWZvciAodmFyIGk9MDsgaTx0aGlzLl9lbGVtZW50 +cy5sZW5ndGg7IGkrKykgewoJCQl2YXIgZXJyb3IgPSB0aGlzLl92YWxpZGF0ZUVs +ZW1lbnRPYmplY3QodGhpcy5fZWxlbWVudHNbaV0pOwoJCQlpZiAoZXJyb3IpIHsK +CQkJCXJlc3VsdC5wdXNoKHsKCQkJCQknZWxlbWVudCc6IHRoaXMuX2VsZW1lbnRz +W2ldLmVsZW1lbnQsCgkJCQkJJ2Vycm9yVHlwZSc6IGVycm9yCgkJCQl9KTsKCQkJ +fQoJCX0KCQlyZXR1cm4gcmVzdWx0OwoJfQp9KTsKCnRtLmdldEVsZW1lbnRzRm9y +VmFsaWRhdGlvbiA9IGZ1bmN0aW9uKGNvbnRhaW5lcikgewoJdmFyIGVsZW1lbnRz +ID0gW107CglpZiAoIWNvbnRhaW5lcikgeyByZXR1cm4gW107IH07CgkkKGNvbnRh +aW5lcikuZ2V0RWxlbWVudHMoJ2lucHV0LHNlbGVjdCx0ZXh0YXJlYSxmaWVsZHNl +dCcpLmZvckVhY2goCgkJZnVuY3Rpb24gKGZpZWxkKSB7CgkJCWlmICghdG0uYmFk +VGFncy5jb250YWlucyhmaWVsZC50YWdOYW1lKSAmJiBmaWVsZC5nZXQoJ3ZhbGlk +YXRlJykgIT0gbnVsbCkgewoJCQkJZWxlbWVudHMucHVzaChmaWVsZCk7CgkJCX07 +Cgl9LCB0aGlzKTsKCXJldHVybiBlbGVtZW50czsKfTs= + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline; filename=xmlhandler.js +Content-Type: application/x-javascript; charset=utf-8; name=xmlhandler.js +Content-Location: http://habrahabr.ru/js/1307631427/tm/xmlhandler.js +Content-Transfer-Encoding: Base64 + +dmFyIHRtID0gKHR5cGVvZih0bSkgIT0gJ3VuZGVmaW5lZCcpID8gdG0gOiB7fTsK +IAovKioKICog0J7QsdGA0LDQsdC+0YLRh9C40Log0L7RgtCy0LXRgtC+0LIg0L7R +giDRgdC10YDQstC10YDQsAogKiBAYXV0aG9yIG1kZXZpbHMKICogQGNvbnN0cnVj +dG9yCiAqLwp0bS5IYW5kbGVyID0gZnVuY3Rpb24oKXsKCQoJdGhpcy5oYW5kbGVy +cyA9IHsKCQkKCQkncmVkaXJlY3RfdXJsJyA6IGZ1bmN0aW9uKG5vZGVzLCByLCBq +c29uKSB7CgkJCWZvciAodmFyIGk9MDsgaTxub2Rlcy5sZW5ndGg7IGkrKykgewoJ +CQkgICAgaWYgKCEkKCdkZWJ1ZycpKSB7CgkJCSAgICAgICAgd2luZG93LmxvY2F0 +aW9uLmhyZWYgPSBqc29uID8gbm9kZXNbaV0gOiBub2Rlc1tpXS5maXJzdENoaWxk +LmRhdGE7CgkJCSAgICB9IGVsc2UgewoJCQkgICAgICAgIHRtLmxvZygncmVkaXJl +Y3Q6ICcsIGpzb24gPyBub2Rlc1tpXSA6IG5vZGVzW2ldLmZpcnN0Q2hpbGQuZGF0 +YSk7CgkJCSAgICB9CgkJCQkKCQkJfQoJCX0sCgkJCgkJCgkJJ3JlZGlyZWN0JyA6 +IGZ1bmN0aW9uKG5vZGVzLCByLCBqc29uKSB7CgkJCWZvciAodmFyIGk9MDsgaTxu +b2Rlcy5sZW5ndGg7IGkrKykgewoJCQkgICAgaWYgKCEkKCdkZWJ1ZycpKSB7CgkJ +CSAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBqc29uID8gbm9kZXNbaV0g +OiBub2Rlc1tpXS5maXJzdENoaWxkLmRhdGE7CgkJCSAgICB9IGVsc2UgewoJCQkg +ICAgICAgIHRtLmxvZygncmVkaXJlY3Q6ICcsIGpzb24gPyBub2Rlc1tpXSA6IG5v +ZGVzW2ldLmZpcnN0Q2hpbGQuZGF0YSk7CgkJCSAgICB9CgkJCX0KCQl9LAoJCQoJ +CSdodG1sJzogZnVuY3Rpb24obm9kZXMpIHsKCQkJZm9yICh2YXIgaT0wOyBpPG5v +ZGVzLmxlbmd0aDsgaSsrKSB7CgkJCQlpZiAobm9kZXNbaV0uZ2V0QXR0cmlidXRl +KCdmb3InKSkgewoJCQkJCXZhciBlbGVtZW50ID0gJChub2Rlc1tpXS5nZXRBdHRy +aWJ1dGUoJ2ZvcicpKTsKCQkJCQlpZiAoZWxlbWVudCkgewoJCQkJCQllbGVtZW50 +LmlubmVySFRNTCA9IG5vZGVzW2ldLmZpcnN0Q2hpbGQuZGF0YTsKCQkJCQl9CgkJ +CQl9CgkJCX0JCQkKCQl9LAoJCQoJCSdyZW1vdmUnOiBmdW5jdGlvbihub2Rlcykg +ewoJCQlmb3IgKHZhciBpPTA7IGk8bm9kZXMubGVuZ3RoOyBpKyspIHsKCQkJCWlm +IChub2Rlc1tpXS5nZXRBdHRyaWJ1dGUoJ2VsZW1lbnQnKSkgewoJCQkJCXZhciBl +bGVtZW50ID0gJChub2Rlc1tpXS5nZXRBdHRyaWJ1dGUoJ2VsZW1lbnQnKSk7CgkJ +CQkJaWYgKGVsZW1lbnQpIHsKCQkJCQkJZWxlbWVudC5wYXJlbnROb2RlLnJlbW92 +ZUNoaWxkKGVsZW1lbnQpOwoJCQkJCX0KCQkJCX0KCQkJfQkJCgkJfSwKCgkJJ3No +b3cnOiBmdW5jdGlvbihub2RlcykgewoJCQlmb3IgKHZhciBpPTA7IGk8bm9kZXMu +bGVuZ3RoOyBpKyspIHsKCQkJCWlmIChub2Rlc1tpXS5nZXRBdHRyaWJ1dGUoJ2Vs +ZW1lbnQnKSkgewoJCQkJCXZhciBlbGVtZW50ID0gJChub2Rlc1tpXS5nZXRBdHRy +aWJ1dGUoJ2VsZW1lbnQnKSk7CgkJCQkJaWYgKGVsZW1lbnQpIHsKCQkJCQkJZWxl +bWVudC5yZW1vdmVDbGFzcygnaGlkZGVuJyk7CgkJCQkJfQoJCQkJfQoJCQl9CQkK +CQl9LAoJCQkJCgkJJ2hpZGUnOiBmdW5jdGlvbihub2RlcykgewoJCQlmb3IgKHZh +ciBpPTA7IGk8bm9kZXMubGVuZ3RoOyBpKyspIHsKCQkJCWlmIChub2Rlc1tpXS5n +ZXRBdHRyaWJ1dGUoJ2VsZW1lbnQnKSkgewoJCQkJCXZhciBlbGVtZW50ID0gJChu +b2Rlc1tpXS5nZXRBdHRyaWJ1dGUoJ2VsZW1lbnQnKSk7CgkJCQkJaWYgKGVsZW1l +bnQpIHsKCQkJCQkJZWxlbWVudC5hZGRDbGFzcygnaGlkZGVuJyk7CgkJCQkJfQoJ +CQkJfQoJCQl9CQkKCQl9LAoJCQoJCQoJCQoJCSdzZXR2YWx1ZSc6IGZ1bmN0aW9u +KG5vZGVzKSB7CgkJCWZvciAodmFyIGk9MDsgaTxub2Rlcy5sZW5ndGg7IGkrKykg +ewoJCQkJaWYgKG5vZGVzW2ldLmdldEF0dHJpYnV0ZSgnZWxlbWVudCcpKSB7CgkJ +CQkJdmFyIGVsZW1lbnQgPSAkKG5vZGVzW2ldLmdldEF0dHJpYnV0ZSgnZWxlbWVu +dCcpKTsKCQkJCQlpZiAoZWxlbWVudCkgewoJCQkJCQllbGVtZW50LnNldCgidmFs +dWUiLCBub2Rlc1tpXS5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpOwoJCQkJCX0KCQkJ +CX0KCQkJfQkJCgkJfSwKCgkJJ2FsZXJ0JzogZnVuY3Rpb24obm9kZXMpIHsKCQkJ +Zm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykgewoJCQkJZnV0 +dV9hbGVydChGQVQucHJvZmlsZV9oZWFkZXIsIG5vZGVzW2ldLmZpcnN0Q2hpbGQu +ZGF0YSwgZmFsc2UsICdtZXNzYWdlJyk7CgkJCX0KCQl9CgoJfTsKfTsKCnRtLkhh +bmRsZXIucHJvdG90eXBlID0gewoJCQoJLyoqCgkgKiDQoNCw0YHRiNC40YDQtdC9 +0LjQtSDRgdC/0LjRgdC60LAg0L7QsdGA0LDQsdC+0YLRh9C40LrQvtCyCgkgKiBA +cGFyYW0ge09iamVjdH0gb2JqZWN0CgkgKi8KCWV4dGVuZDogZnVuY3Rpb24ob2Jq +ZWN0KSB7CgkJJGV4dGVuZCh0aGlzLmhhbmRsZXJzLCBvYmplY3QpOwoJfSwKCgkv +KioKCSAqIAoJICogQHBhcmFtIHtFbGVtZW50fSB4bWxPYmplY3QKCSAqIEBwYXJh +bSB7T2JqZWN0fSB0aGlzT2JqZWN0CgkgKi8KCXByb2Nlc3M6IGZ1bmN0aW9uKHJl +c3BvbnNlLCB0aGlzT2JqZWN0KSB7CgkgICAgdmFyIGpzb24gPSAhcmVzcG9uc2Uu +Y2hpbGROb2RlczsKCgkgICAgaWYgKGpzb24pIHsKICAgIAkJZm9yICh2YXIgdGFn +IGluIHRoaXMuaGFuZGxlcnMpIHsKICAgIAkJICAgIGlmIChyZXNwb25zZVt0YWdd +KSB7CiAgICAJCSAgICAgICAgdGhpcy5oYW5kbGVyc1t0YWddLmNhbGwoCiAgICAJ +CSAgICAgICAgICAgIHRoaXNPYmplY3QsCgkJICAgICAgICAgICAgICAgIHJlc3Bv +bnNlW3RhZ10uZm9yRWFjaCA/CgkJICAgICAgICAgICAgICAgICAgICByZXNwb25z +ZVt0YWddIDoKCQkgICAgICAgICAgICAgICAgICAgIFtyZXNwb25zZVt0YWddXSwK +CQkgICAgICAgICAgICAgICAgcmVzcG9uc2UsCgkJICAgICAgICAgICAgICAgIHRy +dWUKICAgIAkJICAgICAgICApOwogICAgCQkgICAgfQogICAgCQl9CgkgICAgfSBl +bHNlIHsKICAgICAgICAgICAgZm9yICh2YXIgdGFnIGluIHRoaXMuaGFuZGxlcnMp +IHsKICAgIAkJCXZhciBub2RlcyA9IHJlc3BvbnNlLmdldEVsZW1lbnRzQnlUYWdO +YW1lKHRhZyk7CiAgICAJCQlpZiAobm9kZXMubGVuZ3RoID4gMCkgewogICAgCQkJ +CXRoaXMuaGFuZGxlcnNbdGFnXS5jYWxsKHRoaXNPYmplY3QsIG5vZGVzLCByZXNw +b25zZSk7CiAgICAJCQl9CiAgICAJCX0KCSAgICB9Cgl9CgkKfTsKCnRtLkFqYXgg +PSAodHlwZW9mKHRtLkFqYXgpICE9ICd1bmRlZmluZWQnKSA/IHRtLkFqYXggOiB7 +fTsKdG0uQWpheC5RdWljayA9IHsKCWdldDogZnVuY3Rpb24odXJsLCBkYXRhICxv +cHRpb25zKSB7CgkJdmFyIG9wcyA9IHsKCQkJJ2hhbmRsZXInOiBuZXcgdG0uSGFu +ZGxlcigpLAoJCQknZmFpbHR1cmUnOiBmdW5jdGlvbigpewoJCQkJZnV0dV9hbGVy +dChGQVQucHJvZmlsZV9oZWFkZXIsICfQntGI0LjQsdC60LAg0L/QtdGA0LXQtNCw +0YfQuCDQtNCw0L3QvdGL0YUnLCBmYWxzZSwgJ21lc3NhZ2UnKTsKCQkJfSwKCQkJ +J3RoaXNPYmplY3QnOiB0aGlzLAoJCQknYWZ0ZXInOiBudWxsLAoJCQknYmVmb3Jl +JzogbnVsbAoJCX07CgkJb3B0aW9ucyAmJiAkZXh0ZW5kKG9wcywgb3B0aW9ucyk7 +CgkJdmFyIHJlcXVlc3QgPSBuZXcgUmVxdWVzdCh7CgkJCSdtZXRob2QnOiAnZ2V0 +JywKCQkJJ3VybCc6IHVybCwKCQkJJ29uQ29tcGxldGUnOiAoZnVuY3Rpb24ocmVz +cG9uc2VUZXh0LCByZXNwb25zZVhtbCl7CgkJCQlvcHMuYmVmb3JlICYmIG9wcy5i +ZWZvcmUoKTsKCQkJCW9wcy5oYW5kbGVyLnByb2Nlc3MocmVzcG9uc2VYbWwsIG9w +cy50aGlzT2JqZWN0KTsKCQkJCW9wcy5hZnRlciAmJiBvcHMuYWZ0ZXIoKTsKCQkJ +fSkuYmluZCh0aGlzKSwKCQkJJ29uRmFpbHVyZSc6IGZ1bmN0aW9uKCl7CgkJCQlv +cHMuZmFpbHR1cmUgJiYgb3BzLmZhaWx0dXJlKCk7CgkJCX0KCQl9KS5zZW5kKCk7 +Cgl9LAoJCglwb3N0OiBmdW5jdGlvbih1cmwsIGRhdGEsIG9wdGlvbnMpIHsKCQl2 +YXIgb3BzID0gewoJCQknaGFuZGxlcic6IG5ldyB0bS5IYW5kbGVyKCksCgkJCSdm +YWlsdHVyZSc6IGZ1bmN0aW9uKCl7CgkJCQlmdXR1X2FsZXJ0KEZBVC5wcm9maWxl +X2hlYWRlciwgJ9Ce0YjQuNCx0LrQsCDQv9C10YDQtdC00LDRh9C4INC00LDQvdC9 +0YvRhScsIGZhbHNlLCAnbWVzc2FnZScpOwoJCQl9LAoJCQkndGhpc09iamVjdCc6 +IHRoaXMsCgkJCSdhZnRlcic6IG51bGwsCgkJCSdiZWZvcmUnOiBudWxsCgkJfTsK +CQlvcHRpb25zICYmICRleHRlbmQob3BzLCBvcHRpb25zKTsKCQl2YXIgcmVxdWVz +dCA9IG5ldyBSZXF1ZXN0KHsKCQkJJ21ldGhvZCc6ICdwb3N0JywKCQkJJ3VybCc6 +IHVybCwKCQkJJ2RhdGEnOiBkYXRhLAoJCQknb25Db21wbGV0ZSc6IChmdW5jdGlv +bihyZXNwb25zZVRleHQsIHJlc3BvbnNlWG1sKXsKCQkJCW9wcy5iZWZvcmUgJiYg +b3BzLmJlZm9yZSgpOwoJCQkJb3BzLmhhbmRsZXIucHJvY2VzcyhyZXNwb25zZVht +bCwgb3BzLnRoaXNPYmplY3QpOwoJCQkJb3BzLmFmdGVyICYmIG9wcy5hZnRlcigp +OwoJCQl9KS5iaW5kKHRoaXMpLAoJCQknb25GYWlsdXJlJzogZnVuY3Rpb24oKXsK +CQkJCW9wcy5mYWlsdHVyZSAmJiBvcHMuZmFpbHR1cmUoKTsKCQkJfQoJCX0pLnNl +bmQoKTsKCX0KfTs= + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline; filename=control.js +Content-Type: application/x-javascript; charset=utf-8; name=control.js +Content-Location: http://habrahabr.ru/js/1307631427/tm/controls/control.js +Content-Transfer-Encoding: Base64 + +dmFyIHRtID0gKHR5cGVvZih0bSkgIT0gJ3VuZGVmaW5lZCcpID8gdG0gOiB7fTsK +dG0uQ29udHJvbHMgPSAodHlwZW9mKHRtLkNvbnRyb2xzKSAhPSAndW5kZWZpbmVk +JykgPyB0bS5Db250cm9scyA6IHt9OwoKdG0uQ29udHJvbHMuYXR0YWNoRWxlbWVu +dHMgPSBmdW5jdGlvbihwYXJlbnQpIHsKCSQocGFyZW50KS5nZXRFbGVtZW50cygn +KicpLmZvckVhY2goCgkJZnVuY3Rpb24gKGZpZWxkKSB7CgkJICAgIGlmIChmaWVs +ZCAmJiAhdG0uYmFkVGFncy5jb250YWlucyhmaWVsZC50YWdOYW1lKSAmJiAoICgo +ZmllbGQuY2xhc3NOYW1lLmluZGV4T2YoInRtLWNvbnRyb2wiKSAhPSAtMSkgJiYg +ZmllbGQuZ2V0QXR0cmlidXRlKCdyZXYnKSkgfHwgZmllbGQuZ2V0QXR0cmlidXRl +KCdjb250cm9sJykgKSkgewoJCQkJdmFyIGNuYW1lID0gZmllbGQuZ2V0QXR0cmli +dXRlKCdyZXYnKTsKCQkJCWlmICghY25hbWUpIHsKCQkJCQljbmFtZSA9IGZpZWxk +LmdldEF0dHJpYnV0ZSgnY29udHJvbCcpOwoJCQkJfQoJCQkJaWYgKHRtLkNvbnRy +b2xzW2NuYW1lXSkgewoJCQkJCXZhciBjbCA9IHRtLkNvbnRyb2xzW2NuYW1lXTsK +CQkJCQl2YXIgY29udHJvbCA9IG5ldyBjbChmaWVsZCk7CgkJCQl9IGVsc2UgewoJ +CQkJCXRtLkNvbnRyb2xzLmxvYWQoY25hbWUsIGZ1bmN0aW9uKCl7CgkJCQkJCWlm +IChhcmd1bWVudHMuY2FsbGVlLmRvbmUpIHJldHVybjsKCQkJCQkJdmFyIGNsID0g +dG0uQ29udHJvbHNbY25hbWVdOwoJCQkJCQl2YXIgY29udHJvbCA9IG5ldyBjbChm +aWVsZCk7CgkJCQkJCWFyZ3VtZW50cy5jYWxsZWUuZG9uZSA9IHRydWU7CgkJCQkJ +fSk7CgkJCQl9CgkJCX07Cgl9LCB0aGlzKTsKfQoKdG0uQ29udHJvbHMuX3dhaXRp +bmdGb3JMb2FkID0ge307Cgp0bS5Db250cm9scy5sb2FkID0gZnVuY3Rpb24obmFt +ZSwgY29tcGxldGUpIHsKCXZhciBzaXRlYmFzZSA9ICIiCglpZiAodGVtcC5iYXNl +X3Nob3J0KSB7c2l0ZWJhc2UgPSAiaHR0cDovLyIgKyB0ZW1wLmJhc2Vfc2hvcnR9 +CglpZiAodG0uQ29udHJvbHNbbmFtZV0pIHsKCQljb21wbGV0ZSgpOwoJfSBlbHNl +IHsKCQlpZiAodG0uQ29udHJvbHMuX3dhaXRpbmdGb3JMb2FkW25hbWVdKSB7CgkJ +CXRtLkNvbnRyb2xzLl93YWl0aW5nRm9yTG9hZFtuYW1lXS5wdXNoKGNvbXBsZXRl +KTsKCQkJCgkJfSBlbHNlIHsKCQkJdG0uQ29udHJvbHMuX3dhaXRpbmdGb3JMb2Fk +W25hbWVdID0gW2NvbXBsZXRlXTsKCQkJdmFyIHVybCA9IHNpdGViYXNlICsgJy9q +cy90bS9jb250cm9scy8nICsgbmFtZSArICcuanMnOwoJCQl2YXIgbXlTY3JpcHQg +PSBuZXcgQXNzZXQuamF2YXNjcmlwdCh1cmwsIHsKCQkJCW9ubG9hZDogKGZ1bmN0 +aW9uKCl7CgkJCQkJZm9yICh2YXIgaT0wO2k8dG0uQ29udHJvbHMuX3dhaXRpbmdG +b3JMb2FkW25hbWVdLmxlbmd0aDtpKyspIHsKCQkJCQkJdG0uQ29udHJvbHMuX3dh +aXRpbmdGb3JMb2FkW25hbWVdW2ldKCk7CgkJCQkJfQoJCQkJfSkKCQkJfSk7CgkJ +fQoJfQp9OwoKdG0uQ29udHJvbHMuYmFzZSA9IENsYXNzKHsKCQoJaW5pdGlhbGl6 +ZTogZnVuY3Rpb24oZWxlbWVudCwgb3B0aW9ucykgewoJCSRleHRlbmQodGhpcywg +b3B0aW9ucyk7CgkJdGhpcy5fZWxlbWVudCA9ICQoZWxlbWVudCk7Cgl9LAoJCgln +ZXRGb3JtOiBmdW5jdGlvbigpIHsKCQl2YXIgZm9ybVRhZyA9IHRoaXMuX2VsZW1l +bnQuZ2V0UGFyZW50KCdmb3JtJyk7CgkJcmV0dXJuIGZvcm1UYWcgJiYgZm9ybVRh +Zy5hdHRhY2hlZDsKCX0KCQp9KTsKCgp0bS5pbml0LmFkZChmdW5jdGlvbigpewoK +CXRtLkNvbnRyb2xzLmF0dGFjaEVsZW1lbnRzKGRvY3VtZW50KTsKCn0pOwo= + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline; filename=favourites_add.js +Content-Type: application/x-javascript; charset=utf-8; name=favourites_add.js +Content-Location: http://habrahabr.ru/js/1307631427/tm/forms/favourites_add.js +Content-Transfer-Encoding: Base64 + +dG09dG18fHt9Owp0bS5Gb3Jtcz10bS5Gb3Jtc3x8e307Cgp0bS5Gb3Jtcy5mYXZv +dXJpdGVzX2FkZCA9IGZ1bmN0aW9uICgpIHsKCXRoaXMuX2hhbmRsZXIuZXh0ZW5k +KHsKCQknbWVzc2FnZSc6IGZ1bmN0aW9uKG5vZGVzKSB7CgkJCWlmICh0ZW1wLmZh +dm91cml0ZXNfYWRkLmNvbnRhaW5lcikgewoJCQkJdmFyIGZhdiA9IHRlbXAuZmF2 +b3VyaXRlc19hZGQuY29udGFpbmVyLmdldEVsZW1lbnQoJ2Rpdi5qcy10b19mYXZz +X2hvbGRlcicpOwoJCQkJZmF2ICYmIGZhdi5yZW1vdmVDbGFzcygndG8tZmF2cycp +LmFkZENsYXNzKCdmYXZfYWRkZWQnKTsKCQkJCXRlbXAuZmF2b3VyaXRlc19hZGQu +c2V0VGFncyh0ZW1wLmZhdm91cml0ZXNfYWRkLnRhZ3MudmFsdWUpOwoJCQl9OwoJ +CQl0ZW1wLmZhdm91cml0ZXNfYWRkLmhpZGUoKTsKCQl9Cgl9KTsKfTs= + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline; filename=button.js +Content-Type: application/x-javascript; charset=utf-8; name=button.js +Content-Location: http://habrahabr.ru/js/1307631427/tm/controls/button.js +Content-Transfer-Encoding: Base64 + +dG0uQ29udHJvbHMuYnV0dG9uID0gbmV3IENsYXNzKHsKCUV4dGVuZHM6IHRtLkNv +bnRyb2xzLmJhc2UsCglpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50KSB7CgkJ +dGhpcy5fZWxlbWVudCA9ICQoZWxlbWVudCk7CgkJLyoKCQkgKiB1cmwKCQkgKiBk +ZWYKCQkgKi8KCQl2YXIgbz17fTsKCQkKCQlpZiAoZWxlbWVudC5nZXQoInJlbCIp +KSB7CgkJCXRoaXMuX3BhcmFtcyA9IGV2YWwoJ289JyArIGVsZW1lbnQuZ2V0KCJy +ZWwiKSk7CgkJCQoJCX0KCQl0aGlzLl9lbGVtZW50LmFkZEV2ZW50KCdjbGljaycs +IHRoaXMuY2xpY2suYmluZCh0aGlzKSk7CgkJdGhpcy5faGFuZGxlciA9IG5ldyB0 +bS5IYW5kbGVyKCk7CgkJCgkJaWYgKHRoaXMuX3BhcmFtcy5kZWYucXVpY2tfdm90 +ZSkgewoJCQl0aGlzLl9oYW5kbGVyLmV4dGVuZCh7CgkJCQkic2NvcmUiOiBmdW5j +dGlvbihub2Rlcyl7CgkJCQkJdmFyIG5ld1VzZXJzY29yZSwgbWludXNNYXJrID0g +IiI7CgkJCQkJZm9yICh2YXIgaT0wOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHsK +CQkJCQkJaWYgKG5vZGVzW2ldLnRhZ05hbWUgPT0gInNjb3JlIil7CgkJCQkJCQlu +ZXdVc2Vyc2NvcmUgPSBub2Rlc1tpXS5maXJzdENoaWxkLmRhdGE7CgkJCQkJCQl2 +YXIgcGFyc2VkTmV3VXNlcnNjb3JlID0gbmV3VXNlcnNjb3JlICsgIiI7Ly9jb252 +ZXJ0cyBOb2RlTGlzdCB0byBzdHJpbmcKCQkJCQkJCWlmIChwYXJzZWROZXdVc2Vy +c2NvcmUuY2hhckF0KDApID09ICLigJMiKSB7IG1pbnVzTWFyayA9ICIgY2xhc3M9 +J21pbnVzJyJ9OwoJCQkJCQl9CgkJCQkJfTsKCQkJCQllbGVtZW50LnBhcmVudE5v +ZGUuc2V0KCJodG1sIiwiPHNwYW4iK21pbnVzTWFyaysiPiIrIG5ld1VzZXJzY29y +ZSArIjwvc3Bhbj4iKTsKCQkJCX0sCgkJCQkiZXJyb3IiOiBmdW5jdGlvbihub2Rl +cyl7CgkJCQkJdmFyIGVycm9ydGV4dCA9ICIiOwoJCQkJCWZvciAodmFyIGk9MDsg +aSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7CgkJCQkJCWlmIChub2Rlc1tpXS50YWdO +YW1lID09ICJlcnJvciIpewoJCQkJCQkJZXJyb3J0ZXh0ICs9IG5vZGVzW2ldLmZp +cnN0Q2hpbGQuZGF0YSArICI8YnIvPiI7CgkJCQkJCX0KCQkJCQl9OwoJCQkJCWZ1 +dHVfYWxlcnQoItCe0Lkt0L7QuS3QvtC5INGBINC60L7Qu9Cx0LDRgdC+0LkhIiwg +ZXJyb3J0ZXh0LCBmYWxzZSwgJ2Vycm9yJyk7CgkJCQl9CgkJCX0pCgkJfQoJfSwK +CWNsaWNrOiBmdW5jdGlvbihlKSB7CgkJZS5zdG9wKCk7CgkJdmFyIHVybCA9IHRo +aXMuX3BhcmFtcy51cmw7CgkJdmFyIHBhcmFtcyA9ICRtZXJnZSh0aGlzLl9wYXJh +bXMuZGVmKTsKCQl2YXIgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHsKCQkJJ21ldGhv +ZCc6ICdwb3N0JywKCQkJJ3VybCc6IHVybCwKCQkJJ2RhdGEnOiBwYXJhbXMsCgkJ +CSdvbkNvbXBsZXRlJzogKGZ1bmN0aW9uKHJlc3BvbnNlVGV4dCwgcmVzcG9uc2VY +bWwpewoJCQkJdGhpcy5faGFuZGxlci5wcm9jZXNzKHJlc3BvbnNlWG1sLCB0aGlz +KTsKCQkJfSkuYmluZCh0aGlzKQoJCX0pLnNlbmQoKTsKCX0KfSk7 + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline; filename=form.js +Content-Type: application/x-javascript; charset=utf-8; name=form.js +Content-Location: http://habrahabr.ru/js/1307631427/tm/form.js +Content-Transfer-Encoding: Base64 + +dmFyIHRtID0gKHR5cGVvZih0bSkgIT0gJ3VuZGVmaW5lZCcpID8gdG0gOiB7fTsK +CnRtLkZvcm1zID0gKHR5cGVvZih0bS5Gb3JtcykgIT0gJ3VuZGVmaW5lZCcpID8g +dG0uRm9ybXMgOiB7fTsKCnRtLkZvcm1zLl93YWl0aW5nRm9yTG9hZCA9IHt9OwoK +dG0uRm9ybXMubG9hZCA9IGZ1bmN0aW9uKG5hbWUsIGNvbXBsZXRlKSB7CglpZiAo +dG0uRm9ybXNbbmFtZV0pIHsKCQljb21wbGV0ZSgpOwoJfSBlbHNlIHsKCQlpZiAo +dG0uRm9ybXMuX3dhaXRpbmdGb3JMb2FkW25hbWVdKSB7CgkJCXRtLkZvcm1zLl93 +YWl0aW5nRm9yTG9hZFtuYW1lXS5wdXNoKGNvbXBsZXRlKTsKCQl9IGVsc2UgewoJ +CQl0bS5Gb3Jtcy5fd2FpdGluZ0ZvckxvYWRbbmFtZV0gPSBbY29tcGxldGVdOwoJ +CQl2YXIgdXJsID0gJy9qcy90bS9mb3Jtcy8nICsgbmFtZSArICcuanMnOwoJCQl2 +YXIgbXlTY3JpcHQgPSBuZXcgQXNzZXQuamF2YXNjcmlwdCh1cmwsIHsKCQkJCW9u +bG9hZDogKGZ1bmN0aW9uKCl7CgkJCQkJZm9yICh2YXIgaT0wO2k8dG0uRm9ybXMu +X3dhaXRpbmdGb3JMb2FkW25hbWVdLmxlbmd0aDtpKyspCgkJCQkJCXRtLkZvcm1z +Ll93YWl0aW5nRm9yTG9hZFtuYW1lXVtpXSgpOwoJCQkJfSkKCQkJfSk7CgkJfQoJ +fQp9OwoKLyoqCiAqINCa0LvQsNGB0YEg0LDQstGC0L7QvNCw0YLQuNC30LDRhtC4 +0LggQWpheCDQtNC70Y8g0YTQvtGA0LwKICogQGF1dGhvciBtZGV2aWxzCiAqLwp0 +bS5Gb3JtID0gQ2xhc3MoewoJCglhZGRFdmVudDogZnVuY3Rpb24obmFtZSwgY2Fs +bGJhY2spIHsKCQl0aGlzLl9mb3JtLmFkZEV2ZW50KG5hbWUsIGNhbGxiYWNrKTsK +CX0sCgkKCWZpcmVFdmVudDogZnVuY3Rpb24obmFtZSkgewoJCXRoaXMuX2Zvcm0u +ZmlyZUV2ZW50KG5hbWUpOwoJfSwKCQoJc3VibWl0Q2FuY2VsZWQ6IGZhbHNlLAoJ +Cglpbml0aWFsaXplOiBmdW5jdGlvbihmb3JtKSB7CgkJdmFyIHNlbGYgPSB0aGlz +OwoJCQoJCXRoaXMuX2Zvcm0gPSAkKGZvcm0pOwoJCXRoaXMuX2Zvcm0uYXR0YWNo +ZWQgPSB0aGlzOwoJCXRoaXMuX3ZhbGlkYXRvciA9IG5ldyB0bS5WYWxpZGF0b3Io +KTsKCQkKCQl0aGlzLnJlc2V0VmFsaWRhdGlvbigpOwoKCQl0aGlzLmFqYXggPSBm +YWxzZTsKCQlpZiAodGhpcy5fZm9ybS5oYXNDbGFzcygnYWpheCcpKSB7CgkJCXRo +aXMuZW5hYmxlQWpheCgpOwoJCX0KCQkKCQl0aGlzLmNhcHRjaGEgPSBmYWxzZTsK +CQlpZiAodGhpcy5fZm9ybS5oYXNDbGFzcygnY2FwdGNoYScpKSB7CgkJCXRoaXMu +Y2FwdGNoYSA9IHRydWU7CgkJfQoJCQoJCWlmICh0aGlzLl9mb3JtLmhhc0NsYXNz +KCdpZnJhbWUtYWpheCcpKSB7CgkJICAgIHRoaXMuaWZyYW1lQWpheCA9IHRydWU7 +CgkJfQoJCQoJCXZhciBvblN1Ym1pdEZ1bmN0aW9uID0gZnVuY3Rpb24oZXZlbnQp +ewogICAgCQlpZiAoJChldmVudC50YXJnZXQpLmhhc0NsYXNzKCdsb2FkaW5nJykp +IHsKICAgIAkJCWV2ZW50LnN0b3AoKTsKICAgIAkJCXJldHVybiBmYWxzZTsKICAg +IAkJfQogICAgCQl2YXIgbyA9IG51bGw7CiAgICAJCWlmIChzZWxmLnN1Ym1pdChl +dmVudC50YXJnZXQubmFtZSwgZXZlbnQudGFyZ2V0LmdldCgicmVsIikgJiYgKGV2 +YWwoJ289JyArIGV2ZW50LnRhcmdldC5nZXQoInJlbCIpKSkpKQogICAgCQkJZXZl +bnQuc3RvcCgpOwogICAgCX0KCQkKCQlmb3IgKHZhciBpPTA7IGk8Zm9ybS5lbGVt +ZW50cy5sZW5ndGg7IGkrKykgewoJCQlpZiAodGhpcy5fZm9ybS5lbGVtZW50c1tp +XS50eXBlID09ICdzdWJtaXQnKSB7CgkJCQkkKHRoaXMuX2Zvcm0uZWxlbWVudHNb +aV0pLmFkZEV2ZW50KCdjbGljaycsIG9uU3VibWl0RnVuY3Rpb24pOwoJCQl9CgkJ +fQoJCQoJCWZvcm0uYWRkRXZlbnQoJ3N1Ym1pdCcsIG9uU3VibWl0RnVuY3Rpb24p +OwoJCQoJCQoJCXZhciBleHRlbmRlciA9IHRoaXMuX2Zvcm0uZ2V0RWxlbWVudCgi +YS5mb3JtLWV4dGVuZGVyIiksIAoJCWV4dHM7CgkJCgkJaWYgKGV4dGVuZGVyKSB7 +CgkJCWV4dHMgPSAkKGV4dGVuZGVyKS5nZXRBdHRyaWJ1dGUoInJldiIpOwoJCX07 +CgkJIAoJCWlmICghZXh0cykgeyBleHRzID0gdGhpcy5fZm9ybS5nZXRBdHRyaWJ1 +dGUoImV4dGVuZCIpO30KCQlpZiAoZXh0cykgewoJCQl2YXIgZXh0ZW5kaW5ncyA9 +IGV4dHMuc3BsaXQoJywnKTsKCQkJZm9yICh2YXIgaT0wO2k8ZXh0ZW5kaW5ncy5s +ZW5ndGg7aSsrKSB7CgkJCQl2YXIgZXhuYW1lID0gZXh0ZW5kaW5nc1tpXTsKCQkJ +CWlmICh0bS5Gb3Jtc1tleG5hbWVdKSB7CgkJCQkJdG0uRm9ybXNbZXhuYW1lXS5j +YWxsKHRoaXMpOwoJCQkJfSBlbHNlIHsKCQkJCQkoZnVuY3Rpb24obm0pewoJCQkJ +CQl0bS5Gb3Jtcy5sb2FkKG5tLCAoZnVuY3Rpb24oKXsKCQkJCQkJCWlmICh0bS5G +b3Jtc1tubV0pCgkJCQkJCQkJdG0uRm9ybXNbbm1dLmNhbGwodGhpcyk7CgkJCQkJ +CX0pLmJpbmQodGhpcykpOwoJCQkJCX0pLmJpbmQodGhpcykoZXhuYW1lKTsKCQkJ +CX0KCQkJfQoJCX0KCX0sCgoJcmVzZXRWYWxpZGF0aW9uOiBmdW5jdGlvbigpIHsK +CQl0aGlzLl92YWxpZGF0b3IuY2xlYXIoKTsKCQl0aGlzLl92YWxpZGF0b3IuYWRk +RWxlbWVudHModGhpcy5fZm9ybSk7CgkJdGhpcy5fZm9ybS5nZXRFbGVtZW50cygn +Lm5vLXZhbGlkYXRlJykuZm9yRWFjaCgoZnVuY3Rpb24oaXRlbSl7CgkJCXRoaXMu +X3ZhbGlkYXRvci5yZW1vdmVFbGVtZW50cyhpdGVtKTsKCQl9KS5iaW5kKHRoaXMp +KTsKCX0sCgoJZXJyb3JEZXNjcmlwdGlvbnM6IHsKCQkncmVxdWlyZWQnOiAn0KHQ +u9C10LTRg9C10YIg0LfQsNC/0L7Qu9C90LjRgtGMINC/0L7Qu9C1JywKCQknbWlu +bGVuJzogJ9Ci0LXQutGB0YIg0YHQu9C40YjQutC+0Lwg0LrQvtGA0L7RgtC60LjQ +uScsCgkJJ21heGxlbic6ICfQotC10LrRgdGCINGB0LvQuNGI0LrQvtC8INC00LvQ +uNC90L3Ri9C5JywKCQknbG9naW4nOiAn0J3QtdCy0LXRgNC90L4g0YPQutCw0LfQ +sNC9INC70L7Qs9C40L0nLAoJCSdlbWFpbCc6ICfQndC10LLQtdGA0L3QviDRg9C6 +0LDQt9Cw0L0g0LDQtNGA0LXRgSDRjdC70LXQutGC0YDQvtC90L3QvtC5INC/0L7R +h9GC0YsnLAoJCSdoYWJyYWN1dG1lJyA6ICfQmNGB0L/QvtC70YzQt9GD0LnRgtC1 +INGF0LDQsdGA0LDQutCw0YIsINGH0YLQviDQsdGLINGB0LrRgNGL0YLRjCDQsdC+ +0LvRjNGI0L7QuSDRgtC10LrRgdGCINC30LAg0YHRgdGL0LvQutC+0LkgwqvRh9C4 +0YLQsNGC0Ywg0LTQsNC70YzRiNC1wrsnLAoJCSdyYWRpb1JlcXVpcmVkJzogJ9Ch +0LvQtdC00YPQtdGCINC30LDQv9C+0LvQvdC40YLRjCDQv9C+0LvQtScKCX0sCgkK +CS8qKgoJICog0JLQsNC70LjQtNCw0YbQuNGPINCy0YHQtdC5INGE0L7RgNC80Ysg +0Lgg0LLRi9Cy0L7QtCDQvtGI0LjQsdC+0Log0YDRj9C00L7QvCDRgSDQv9C+0LvR +j9C80LgKCSAqLwoJdmFsaWRhdGU6IGZ1bmN0aW9uKCkgewoJCQoJCXZhciBpbnZh +bGlkRmllbGRzID0gdGhpcy5fZm9ybS5nZXRFbGVtZW50cygnLmludmFsaWQnKS5m +b3JFYWNoKGZ1bmN0aW9uKGRsKXsKCQkJZGwucmVtb3ZlQ2xhc3MoJ2ludmFsaWQn +KTsKCQl9KTsKCQl0aGlzLnNob3dVbmtub3duRXJyb3IoJycpOwoJCQoJCXZhciBl +cnJvcnMgPSB0aGlzLl92YWxpZGF0b3IudmFsaWRhdGUoKTsKCQkKCQkvLyBDQVBU +Q0hBCgkJaWYodGhpcy5jYXB0Y2hhICYmICQoJ2NhcHRjaGFfd3JhcHBlcicpLmhh +c0NsYXNzKCdoaWRkZW4nKSAmJiBlcnJvcnMubGVuZ3RoID4gMCl7CgkJICBmb3Ig +KHZhciBpPTA7IGk8ZXJyb3JzLmxlbmd0aDsgaSsrKSB7CgkJICAgIC8vYWxlcnQo +J2ExOiAnK2Vycm9yc1tpXS5lbGVtZW50Lm5hbWUpOwoJCSAgICBpZihlcnJvcnNb +aV0uZWxlbWVudC5uYW1lID09ICdjYXB0Y2hhJyl7CgkJICAgICAgZXJyb3JzLnNw +bGljZShpLDEpOyAKCQkgICAgfQoJCSAgfQoJCX0KCQkJICAJICAgIAoJCQoJCQoJ +CWlmIChlcnJvcnMubGVuZ3RoID4gMCkgewoJCQlmb3IgKHZhciBpPTA7IGk8ZXJy +b3JzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgLy9hbGVydCgnYTI6ICcrZXJyb3Jz +W2ldLmVsZW1lbnQubmFtZSk7CgkJCQl2YXIgZmllbGRIb2xkZXIgPSAkKGVycm9y +c1tpXS5lbGVtZW50KS5nZXRQYXJlbnQoJ2RsJyk7CgkJCQl2YXIgZXJyb3JGaWVs +ZEhvbGRlciA9IGZpZWxkSG9sZGVyLmdldEVsZW1lbnQoJy5lcnJvcicpOwoJCQkJ +dmFyIGVycm9yRmllbGQgPSBlcnJvckZpZWxkSG9sZGVyLmdldEVsZW1lbnQoJ3Nw +YW4nKTsKCQkJCXZhciBlcnJvckxpc3QgPSBlcnJvckZpZWxkSG9sZGVyLmdldEVs +ZW1lbnQoJ3VsJyk7CgkJCQkKCQkJCXZhciBlcnJvclRleHQgPSB0aGlzLmVycm9y +RGVzY3JpcHRpb25zW2Vycm9yc1tpXS5lcnJvclR5cGVdOwoJCQkJCgkJCQlpZiAo +ZXJyb3JMaXN0KSB7CgkJCQkJdmFyIGVycm9yTGkgPSBlcnJvckxpc3QuZ2V0RWxl +bWVudCgnLicgKyBlcnJvcnNbaV0uZXJyb3JUeXBlKTsKCQkJCQlpZiAoZXJyb3JM +aSkgewoJCQkJCQllcnJvclRleHQgPSBlcnJvckxpLmdldCgnaHRtbCcpOwoJCQkJ +CX0KCQkJCX0KCQkJCQoJCQkJdGhpcy5zaG93RXJyb3IoZXJyb3JzW2ldLmVsZW1l +bnQsIGVycm9yVGV4dCk7CgoJCQl9CgkJCXJldHVybiBmYWxzZTsKCQl9IGVsc2Ug +ewoJCQlyZXR1cm4gdHJ1ZTsKCQl9CgkJCgl9LAoJCgkvKioKCSAqINCf0L7QutCw +0Lcg0YHQvtC+0LHRidC10L3QuNGPINC+0LEg0L7RiNC40LHQutC1CgkgKiBAcGFy +YW0ge0VsZW1lbnR9IGVsZW1lbnQKCSAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0Cgkg +Ki8KCXNob3dFcnJvcjogZnVuY3Rpb24oZWxlbWVudCwgdGV4dCkgewoKCQl2YXIg +ZmllbGRIb2xkZXIgPSAkKGVsZW1lbnQpLmdldFBhcmVudCgnZGwnKTsKCQlpZiAo +IWZpZWxkSG9sZGVyKSB7IHRoaXMuc2hvd1Vua25vd25FcnJvcih0ZXh0KTsgcmV0 +dXJuOyB9CgkJdmFyIGVycm9yRmllbGRIb2xkZXIgPSBmaWVsZEhvbGRlci5nZXRF +bGVtZW50KCcuZXJyb3InKTsKCQlpZiAoIWVycm9yRmllbGRIb2xkZXIpIHsgdGhp +cy5zaG93VW5rbm93bkVycm9yKHRleHQpOyByZXR1cm47IH0KCQl2YXIgZXJyb3JG +aWVsZCA9IGVycm9yRmllbGRIb2xkZXIuZ2V0RWxlbWVudCgnc3BhbicpOwoJCWlm +ICghZXJyb3JGaWVsZCkgeyB0aGlzLnNob3dVbmtub3duRXJyb3IodGV4dCk7IHJl +dHVybjsgfQoJCWVycm9yRmllbGQuc2V0KCdodG1sJywgdGV4dCk7CgkJZmllbGRI +b2xkZXIuYWRkQ2xhc3MoJ2ludmFsaWQnKTsKCgl9LAoJCgkvKioKCSAqINCf0L7Q +utCw0Lcg0L3QtdC40LfQstC10YHRgtC90L7QuSDQvtGI0LjQsdC60LgKCSAqIEBw +YXJhbSB7T2JqZWN0fSB0ZXh0CgkgKi8KCXNob3dVbmtub3duRXJyb3I6IGZ1bmN0 +aW9uKHRleHQpIHsKCQkKCQl2YXIgZWxlbWVudCA9IHRoaXMuX2Zvcm0uZ2V0RWxl +bWVudCgnLnVua25vd24tZXJyb3InKTsKCQlpZiAoZWxlbWVudCkgewoJCQllbGVt +ZW50LmlubmVySFRNTCA9IHRleHQ7CgkJfQoJCQoJfSwKCgkvKioKCSAqINCY0L3Q +uNGG0LjQsNGG0LjRjyDQstCw0LvQuNC00LDRhtC40Lgg0Lgg0L7RgtC/0YDQsNCy +0LrQuCDRhNC+0YDQvNGLCgkgKiBAcGFyYW0ge1N0cmluZ30gYWN0aW9uCgkgKi8K +CXN1Ym1pdDogZnVuY3Rpb24oYWN0aW9uLCBwYXJhbXMpIHsKCQlwYXJhbXMgJiYg +cGFyYW1zLnJlc2V0VmFsaWRhdGlvbiAmJiB0aGlzLnJlc2V0VmFsaWRhdGlvbigp +OwoJCQoJCWlmKGFjdGlvbikgewoJCSAgICB2YXIgaW5wdXQgPSB0aGlzLl9mb3Jt +LmdldEVsZW1lbnQoJ2lucHV0W25hbWU9YWN0aW9uXScpOwoJCSAgICBpZiAoaW5w +dXQpIHsKCQkgICAgICAgIGlucHV0LnZhbHVlID0gYWN0aW9uOwoJCSAgICB9CgkJ +fQoJCQoJCWlmICh0aGlzLnZhbGlkYXRlKCkpCgkJCWlmICh0aGlzLmFqYXgpIHsK +CQkJCXRoaXMuc3VibWl0Q2FuY2VsZWQgPSBmYWxzZTsKCQkJCXRoaXMuZmlyZUV2 +ZW50KCJ0bTpiZWZvcmUtc2VuZCIpOwoJCQkJaWYgKCF0aGlzLnN1Ym1pdENhbmNl +bGVkKSB7CgkJCQkJdGhpcy5zZW5kQWpheChhY3Rpb24sIHBhcmFtcyk7CgkJCQkJ +dGhpcy5maXJlRXZlbnQoInRtOmFmdGVyLXNlbmQiKTsKCQkJCX0gZWxzZQoJCQkJ +CXJldHVybiBmYWxzZTsKCQkJfQoJCQllbHNlIAoJCQkJcmV0dXJuIGZhbHNlOwoJ +CXJldHVybiB0cnVlOwoJfSwKCQoJc2V0TG9hZGluZzogZnVuY3Rpb24obCkgewoJ +CWlmIChsKSB7CgkJCXRoaXMuZmlyZUV2ZW50KCdmb3JtOmRpc2FibGVkJyk7CgkJ +CWZvciAodmFyIGk9MDtpPHRoaXMuX2Zvcm0uZWxlbWVudHMubGVuZ3RoO2krKykg +ewoJCQkJaWYgKHRoaXMuX2Zvcm0uZWxlbWVudHNbaV0udHlwZSA9PSAnc3VibWl0 +JykgewoJCQkJCSQodGhpcy5fZm9ybS5lbGVtZW50c1tpXSkuYWRkQ2xhc3MoJ2xv +YWRpbmcnKTsKCQkJCQkkKHRoaXMuX2Zvcm0uZWxlbWVudHNbaV0pLmRpc2FibGVk +ID0gdHJ1ZTsKCQkJCX0KCQkJfQoJCX0gZWxzZSB7CgkJCXRoaXMuZmlyZUV2ZW50 +KCdmb3JtOmVuYWJsZWQnKTsKCQkJZm9yICh2YXIgaT0wO2k8dGhpcy5fZm9ybS5l +bGVtZW50cy5sZW5ndGg7aSsrKSB7CgkJCQlpZiAodGhpcy5fZm9ybS5lbGVtZW50 +c1tpXS50eXBlID09ICdzdWJtaXQnKSB7CgkJCQkJJCh0aGlzLl9mb3JtLmVsZW1l +bnRzW2ldKS5yZW1vdmVDbGFzcygnbG9hZGluZycpOwoJCQkJCSQodGhpcy5fZm9y +bS5lbGVtZW50c1tpXSkuZGlzYWJsZWQgPSBmYWxzZTsKCQkJCX0KCQkJfQoJCX0K +CX0sCgkKCS8qKgoJICog0J7RgtC/0YDQsNCy0LrQuCDRhNC+0YDQvNGLINGH0LXR +gNC10LcgQWpheAoJICogQHBhcmFtIHtTdHJpbmd9IGFjdGlvbgoJICovCglzZW5k +QWpheDogZnVuY3Rpb24oYWN0aW9uLCBwYXJhbXMpIHsJCgkJdGhpcy5zZXRMb2Fk +aW5nKHRydWUpOwoKCQl2YXIgc2VsZiA9IHRoaXMsCgkJICAgIG9uU3VjY2VzcyA9 +IGZ1bmN0aW9uIChyZXNwb25zZVRleHQsIHJlc3BvbnNlWE1MKSB7CgkJICAgIHNl +bGYuX2hhbmRsZXIucHJvY2VzcyhyZXNwb25zZVhNTHx8cmVzcG9uc2VUZXh0LCBz +ZWxmKTsKCQl9LAoJCSAgICBvbkNvbXBsZXRlID0gZnVuY3Rpb24gKCkgewoJCSAg +ICBzZWxmLnNldExvYWRpbmcoZmFsc2UpOwoJCX0KCQkKCQlpZiAodGhpcy5pZnJh +bWVBamF4KSB7CgkJICAgIHRtLnNlbmRGb3JtVmlhSWZyYW1lKHsKCQkgICAgICAg +ICdmb3JtJzogdGhpcy5fZm9ybSwKCQkgICAgICAgICdvblN1Y2Nlc3MnOiBvblN1 +Y2Nlc3MsCgkJICAgICAgICAnb25Db21wbGV0ZSc6IG9uQ29tcGxldGUKCQkgICAg +fSk7CgkJfSBlbHNlIHsKCQkgICAgdmFyIGV4dGVuZERhdGEgPSB7fTsKICAgIAkJ +ZXh0ZW5kRGF0YVthY3Rpb25dID0gJ3RydWUnOwogICAgCQl2YXIgZGF0YSA9IHRo +aXMudG9PYmplY3QoZXh0ZW5kRGF0YSk7CgogICAgCQlpZiAodGhpcy5fZm9ybS5n +ZXRBdHRyaWJ1dGVOb2RlKSB7CiAgICAJCQl2YXIgeHVybCA9IHRoaXMuX2Zvcm0u +Z2V0QXR0cmlidXRlTm9kZSgnYWN0aW9uJykudmFsdWU7CiAgICAJCX0gZWxzZSB7 +CiAgICAJCQl2YXIgeHVybCA9IHRoaXMuX2Zvcm0uZ2V0KCdhY3Rpb24nKTsgCiAg +ICAJCX0KCiAgICAJCXBhcmFtcyAmJiBwYXJhbXMudXJsICYmICh4dXJsID0gcGFy +YW1zLnVybCk7CgogICAgCQl2YXIgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHsKICAg +IAkJCSdtZXRob2QnOiAncG9zdCcsCiAgICAJCQkndXJsJzogeHVybCwKICAgIAkJ +CSdkYXRhJzogZGF0YSwKICAgIAkJCSdvblN1Y2Nlc3MnOiBvblN1Y2Nlc3MsCiAg +ICAJCQknb25Db21wbGV0ZSc6IG9uQ29tcGxldGUKICAgIAkJfSkuc2VuZCgpOwoJ +CX0KCX0sCgkKCS8qKgoJICog0JfQsNC/0LjRgdGMINC00LDQvdC90YvRhSDRhNC+ +0YDQvNGLINCyINC+0LHRitC10LrRggoJICogQHBhcmFtIHtPYmplY3R9IGV4dGVu +ZAoJICovCgl0b09iamVjdDogZnVuY3Rpb24oZXh0ZW5kKSB7CgkJdmFyIHJlc3Vs +dCA9IHt9OwoKCQl2YXIgZWxlbWVudHMgPSB0aGlzLl9mb3JtLmVsZW1lbnRzOwoJ +CWZvciAodmFyIGk9MCwgbGVuZ3RoPWVsZW1lbnRzLmxlbmd0aDsgaTxsZW5ndGg7 +IGkrKykgewoJCQkKCQkJdmFyIGVsZW1lbnQgPSAkKGVsZW1lbnRzW2ldKTsKCQkJ +CgkJCWlmIChlbGVtZW50LmdldFBhcmVudCgnLm5vLXNlbmQnKSkgY29udGludWU7 +CgoJCQl2YXIgdHlwZSAgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgndHlwZScpOwoJ +CQl2YXIgcGFyYW0gPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnbmFtZScpOwoJCQl2 +YXIgdmFsdWUgPSBlbGVtZW50LnZhbHVlOwoJCQkKCQkJaWYgKHBhcmFtKSB7CgkJ +CQoJCQkJaWYgKHR5cGUgPT0gJ3JhZGlvJyAmJiAhZWxlbWVudC5jaGVja2VkKSB7 +CgkJCQkJY29udGludWU7CgkJCQl9CgkJCQkKCQkJCWlmICh0eXBlID09ICdjaGVj +a2JveCcpIHsKCQkJCQlpZiAoIWVsZW1lbnQuY2hlY2tlZCkgCgkJCQkJCWNvbnRp +bnVlOwoJCQkJCWVsc2UgewoJCQkJCQlyZXN1bHRbcGFyYW1dID0gdmFsdWU9PSdv +bicgfHwgIXZhbHVlID8gJ3RydWUnIDogdmFsdWU7CgkJCQkJCWNvbnRpbnVlOwoJ +CQkJCX0KCQkJCX0KCQkJCQoJCQkJaWYgKHR5cGUgPT0gJ3N1Ym1pdCcgfHwgdHlw +ZSA9PSAncmVzZXQnKSB7CgkJCQkJY29udGludWU7CgkJCQl9CgkJCQkKCQkJCXJl +c3VsdFtwYXJhbV0gPSB2YWx1ZTsKCQkJfQoJCX0KCgkJaWYgKGV4dGVuZCkKCQkJ +JGV4dGVuZChyZXN1bHQsIGV4dGVuZCk7CgoJCXJldHVybiByZXN1bHQ7CgoJfSwK +CQoJLyoqCgkgKiDQktC60LvRjtGH0LDQtdGCINC/0L7QtNC00LXRgNC20LrRgyBB +amF4INC00LvRjyDRhNC+0YDQvNGLCgkgKi8KCWVuYWJsZUFqYXg6IGZ1bmN0aW9u +KCkgewoJCQoJCWlmICghdGhpcy5faGFuZGxlcikgewoJCQl0aGlzLl9oYW5kbGVy +ID0gbmV3IHRtLkhhbmRsZXIoKTsKCQkJdGhpcy5faGFuZGxlci5leHRlbmQoewoJ +CQkJJ2Vycm9yJzogZnVuY3Rpb24obm9kZXMsIGpzb24pIHsKCQkJCQkKCQkJCQlm +b3IgKHZhciBpPTA7IGk8bm9kZXMubGVuZ3RoOyBpKyspIHsKCQkJCQkJdmFyIG5v +ZGUgPSBub2Rlc1tpXTsKCQkJCQkJaWYgKG5vZGUuZ2V0QXR0cmlidXRlKCJmaWVs +ZCIpKSB7CgkJCQkJCQlmb3IgKHZhciBlPTA7IGU8dGhpcy5fZm9ybS5lbGVtZW50 +cy5sZW5ndGg7IGUrKykgewoJCQkJCQkJCXZhciBpdGVtID0gdGhpcy5fZm9ybS5l +bGVtZW50c1tlXTsKCQkJCQkJCQlpZiAoJChpdGVtKS5nZXQoIm5hbWUiKSA9PSBu +b2RlLmdldEF0dHJpYnV0ZSgiZmllbGQiKSkgewoJCQkJCQkJCQl0aGlzLnNob3dF +cnJvcihpdGVtLCBub2RlLmZpcnN0Q2hpbGQuZGF0YSk7CQkJCQkJCQkJCgkJCQkJ +CQkJfQoJCQkJCQkJfQoJCQkJCQl9IGVsc2UgewoJCQkJCQkJaWYgKHRoaXMuX2Zv +cm0uZ2V0RWxlbWVudCgnLnVua25vd24tZXJyb3InKSkgewoJCQkJCQkJCXRoaXMu +c2hvd1Vua25vd25FcnJvcihub2RlLmZpcnN0Q2hpbGQuZGF0YSk7CgkJCQkJCQl9 +IGVsc2UgewoJCQkJCQkJCWZ1dHVfYWxlcnQoRkFULnZvdGluZ3NfaGVhZGVyLCBu +b2RlLmZpcnN0Q2hpbGQuZGF0YSwgdHJ1ZSwgJ2Vycm9yJyk7CgkJCQkJCQl9CgkJ +CQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0pOwoJCX0KCQkKCQl0aGlzLmFqYXggPSB0 +cnVlOwoJCQoJfSwKCgkvKioKCSAqINCS0YvQutC70Y7Rh9Cw0LXRgiDQv9C+0LTQ +tNC10YDQttC60YMgQWpheCDQtNC70Y8g0YTQvtGA0LzRiwoJICovCglkaXNhYmxl +QWpheDogZnVuY3Rpb24oKSB7CgoJCXRoaXMuYWpheCA9IGZhbHNlOwoKCX0KCn0p +OwoKLyoqCiAqINCf0YDQuNGB0L7QtdC00LjQvdC10L3QuNC1INC90LDRiNC10Lkg +0YTQvtGA0LzRiyDQutC+INCy0YHQtdC8INC90YPQttC90YvQvCDRhNC+0YDQvNCw +0LwKICog0LIg0LTQvtC60YPQvNC10L3RgtC1LgogKi8KdG0uRm9ybS5hdHRhY2gg +PSBmdW5jdGlvbigpIHsKCQoJZm9yICh2YXIgaT0wOyBpPGRvY3VtZW50LmZvcm1z +Lmxlbmd0aDsgaSsrKSB7CgkJdmFyIGZvcm0gPSAkKGRvY3VtZW50LmZvcm1zW2ld +KTsKCQlpZiAoIWZvcm0uYXR0YWNoZWQpIHsKCQkJaWYgKGZvcm0uaGFzQ2xhc3Mo +InRtLWZvcm0iKSkgewoJCQkJdmFyIHRtRm9ybSA9IG5ldyB0bS5Gb3JtKGRvY3Vt +ZW50LmZvcm1zW2ldKTsKCQkJCS8vIC4uLgoJCQl9CgkJfQoJfQoKfTsKCnRtLmlu +aXQuYWRkKGZ1bmN0aW9uKCl7CgkKCXRtLkZvcm0uYXR0YWNoKCk7CgkKfSk7 + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline; filename=autosuggest.js +Content-Type: application/x-javascript; charset=utf-8; name=autosuggest.js +Content-Location: http://habrahabr.ru/js/1307631427/autosuggest.js +Content-Transfer-Encoding: Base64 + +dmFyIGF1dG9zdWdnZXN0Q2xhc3MgPSBmdW5jdGlvbihmaWVsZCwgc3VibWl0VHlw +ZSwgaXNNdWx0aXBseVN1Z2dlc3Rpb25zT24sIHN5bWJvbCkgew0KDQoJZmllbGQu +c2V0QXR0cmlidXRlKCdhdXRvY29tcGxldGUnLCAnb2ZmJyk7DQoJDQoJaWYoaXNN +dWx0aXBseVN1Z2dlc3Rpb25zT24gJiYgIXN5bWJvbCkgew0KCQl0aGlzLmlzTXVs +dGlwbHlTdWdnZXN0aW9uc09uID0gaXNNdWx0aXBseVN1Z2dlc3Rpb25zT247DQoJ +CXRoaXMuc3ltYm9sID0gWycsJ107DQoJfQ0KCWVsc2UgaWYgKCFpc011bHRpcGx5 +U3VnZ2VzdGlvbnNPbikgewkNCgkJdGhpcy5pc011bHRpcGx5U3VnZ2VzdGlvbnNP +biA9IGZhbHNlOw0KCQl0aGlzLnN5bWJvbCA9ICcnOw0KCX0NCgllbHNlIGlmKGlz +TXVsdGlwbHlTdWdnZXN0aW9uc09uICYmIHN5bWJvbCkgew0KCQl0aGlzLmlzTXVs +dGlwbHlTdWdnZXN0aW9uc09uID0gdHJ1ZTsNCgkJdGhpcy5zeW1ib2wgPSBzeW1i +b2w7DQoJfQ0KCWlmKCFzdWJtaXRUeXBlKSB7DQoJCXZhciBzdWJtaXRUeXBlID0g +J3NlYXJjaCc7DQoJfQ0KCQ0KCXZhciBfdGhpcyA9IHRoaXM7DQoJdGhpcy5wb3Np +dGlvbiA9IDA7DQoJdGhpcy5jdXJyVmFsdWVzID0gW107DQoJDQoJdGhpcy5sYXN0 +VmFsdWUgPSAnJzsNCgl0aGlzLm5ld1ZhbHVlID0gJyc7DQoJDQoJdGhpcy5wYXJh +bXMgPSB7fTsNCgkNCgl0aGlzLmFqYXhVcmwgPSAnL2FqYXgvc3VnZ2VzdC8nOw0K +CQ0KCS8vINCY0YHQv9C+0LvRjNC30YPQtdC80YvQtSDQsiDRhNC+0YDQvNC1IGNs +YXNzTmFtZXMNCgl0aGlzLmNsYXNzTmFtZXMgPSB7DQoJCWhvbGRlciA6ICdqcy1h +dXRvc3VnZ2VzdC1ob2xkZXInLCAJLy/RgNC+0LTQuNGC0LXQu9GMINC/0L7Qu9GP +INCy0LLQvtC00LAg0Lgg0L/QvtC70Y8g0LLRi9Cy0L7QtNCwINGA0LXQt9GD0LvR +jNGC0LDRgtC+0LIg0L/QvtC40YHQutCwDQoJCWZpZWxkIDogJ2pzLWF1dG9zdWdn +ZXN0LWZpZWxkJywgCS8v0L/QvtC70LUg0LLQstC+0LTQsA0KCQlvdXRwdXQgOiAn +anMtYXV0b3N1Z2dlc3Qtb3V0cHV0JywJLy/RgNC+0LTQuNGC0LXQu9GMINC/0L7Q +u9C10Lkg0LLRi9Cy0L7QtNCwINGA0LXRg9C30LvRjNGC0LDRgtC+0LINCgkJaXNM +b2FkaW5nIDogJ2pzLWF1dG9zdWdnZXN0LWxvYWRpbmcnCS8v0L/RgNC10LvQvtCw +0LTQtdGADQoJfTsNCgkNCgkvLyDQmNC80LXQvdCwIHhtbCDQvdC+0LTQvtCyINC4 +INGB0L7QvtGC0LLQtdGB0YLQstGD0Y7RidC40LUg0LjQvCDQuNC80LXQvdCwINGE +0YPQvdC60YbQuNC5LdC+0LHRgNCw0LHQvtGC0YfQuNC60L7Qsg0KCXRoaXMueG1s +UmVzcG9uc2UgPSB7DQoJCW5vZGF0YTogew0KCQkJbm9kZTogJ25vZGF0YScsDQoJ +CQloYW5kbGVyOiBudWxsDQoJCX0sDQoNCgkJZXJyb3I6IHsNCgkJCW5vZGU6ICdl +cnJvcicsDQoJCQloYW5kbGVyOiAneG1sUmVzcG9uc2VIYW5kbGVyX2Vycm9yJw0K +CQl9LA0KDQoJCWl0ZW06IHsNCgkJCW5vZGU6ICdpdGVtJywNCgkJCWhhbmRsZXI6 +ICd4bWxSZXNwb25zZUhhbmRsZXJfb3V0cHV0Jw0KCQl9DQoJfTsNCgkNCgkNCgkv +LyDQktGL0LLQvtC00LjQvNGL0LkgaHRtbCANCgl0aGlzLmh0bWxSZXNwb25zZSA9 +IHsNCgkJaXRlbTogJ2RpdicsDQoJCXZhbHVlOiAnZW0nDQoJfTsNCgkNCglpZiAo +aXNPcGVyYSB8fCB3aW5kb3cud2Via2l0KSB7DQoJCWZpZWxkLm9ua2V5cHJlc3Mg +PSBmdW5jdGlvbihldikgew0KCQkJdmFyIHRhcmcgPSBudWxsOw0KCQkJaWYgKGV2 +LnRhcmdldCkgdGFyZyA9IGV2LnRhcmdldDsNCgkJCWVsc2UgaWYgKGV2LnNyY0Vs +ZW1lbnQpIHRhcmcgPSBldi5zcmNFbGVtZW50Ow0KCQkJaWYgKHRhcmcubm9kZVR5 +cGUgPT0gMykgLy8gZGVmZWF0IFNhZmFyaSBidWcNCgkJCQl0YXJnID0gdGFyZy5w +YXJlbnROb2RlOw0KCQkJc2V0VGltZW91dChmdW5jdGlvbigpeyBfdGhpcy5vbkNo +YW5nZSh0YXJnLCBzdWJtaXRUeXBlKTsgfSwgMzApOw0KCQl9DQoJfQ0KCQ0KCWZp +ZWxkLm9ua2V5ZG93biA9IGZ1bmN0aW9uKGV2KXsNCgkJZXYgPSBldiB8fCB3aW5k +b3cuZXZlbnQ7DQoJCWlmIChfdGhpcy5pc0FjdGlvbktleShldikpIHsNCgkJCV90 +aGlzLm9uS2V5VXAoZXYpOw0KCQl9DQoJfTsNCgkNCglmaWVsZC5vbmtleXVwID0g +ZnVuY3Rpb24oZXYpew0KCQlldiA9IGV2IHx8IHdpbmRvdy5ldmVudDsNCgkJaWYg +KF90aGlzLmlzQWN0aW9uS2V5KGV2KSkgcmV0dXJuOw0KCQlpZiAoIWlzT3BlcmEg +JiYgIXdpbmRvdy53ZWJraXQpIHsNCgkJCXZhciB0YXJnID0gbnVsbDsNCgkJCWlm +IChldi50YXJnZXQpIHRhcmcgPSBldi50YXJnZXQ7DQoJCQllbHNlIGlmIChldi5z +cmNFbGVtZW50KSB0YXJnID0gZXYuc3JjRWxlbWVudDsNCgkJCWlmICh0YXJnLm5v +ZGVUeXBlID09IDMpIC8vIGRlZmVhdCBTYWZhcmkgYnVnDQoJCQkJdGFyZyA9IHRh +cmcucGFyZW50Tm9kZTsNCgkJCXNldFRpbWVvdXQoZnVuY3Rpb24oKXsgX3RoaXMu +b25DaGFuZ2UodGFyZywgc3VibWl0VHlwZSk7IH0sIDMwKTsNCgkJfQ0KCX07DQoJ +DQp9Ow0KDQovLyDQn9C10YDQtdCy0L7QtNC40LwgeG1sINC00LXRgNC10LLQviDQ +siDQvtCx0YrQtdC60YINCmF1dG9zdWdnZXN0Q2xhc3MucHJvdG90eXBlLnBhcnNl +WE1MID0gZnVuY3Rpb24oeG1sT2JqKXsNCgkJdmFyIHhtbE5vZGVzID0ge307DQoN +CgkJZm9yIChwcm9wIGluIHRoaXMueG1sUmVzcG9uc2Upew0KCQkJeG1sTm9kZXNb +cHJvcF0gPSB4bWxPYmouZ2V0RWxlbWVudHNCeVRhZ05hbWUodGhpcy54bWxSZXNw +b25zZVtwcm9wXS5ub2RlKTsNCgkJfQ0KCQlyZXR1cm4geG1sTm9kZXM7DQp9Ow0K +DQphdXRvc3VnZ2VzdENsYXNzLnByb3RvdHlwZS5vbktleVVwID0gZnVuY3Rpb24o +ZXYpIHsNCglldiA9IGV2IHx8IHdpbmRvdy5ldmVudDsNCglyZXR1cm4gdGhpcy5h +Y3Rpb24oZXYpOw0KfTsNCg0KYXV0b3N1Z2dlc3RDbGFzcy5wcm90b3R5cGUub25D +aGFuZ2UgPSBmdW5jdGlvbihmaWVsZCwgc3VibWl0VHlwZSkgew0KCWlmICghZmll +bGQuZmFrZUNoYW5nZSkgew0KCQl0aGlzLnByb2Nlc3NRdW90ZXMoZmllbGQpOw0K +CQl0aGlzLnJlcXVlc3RTdWdnZXN0cyhmaWVsZCwgc3VibWl0VHlwZSk7DQoJfQ0K +CQ0KfTsNCg0KYXV0b3N1Z2dlc3RDbGFzcy5wcm90b3R5cGUuaXNBY3Rpb25LZXkg +PSBmdW5jdGlvbihldikgew0KCXN3aXRjaCAoZ2V0Q2hhckNvZGUoZXYpKSB7DQoJ +CWNhc2UgMTM6IC8vIEVudGVyDQoJCWNhc2UgMjc6IC8vIEVzY2FwZQ0KCQljYXNl +IDQwOiAvLyBEb3duDQoJCWNhc2UgMzg6IC8vIFVwDQoJCQlyZXR1cm4gdHJ1ZTsN +CgkJYnJlYWs7DQoJfQ0KfQ0KDQphdXRvc3VnZ2VzdENsYXNzLnByb3RvdHlwZS5h +Y3Rpb24gPSBmdW5jdGlvbihldikgew0KCXN3aXRjaCAoZ2V0Q2hhckNvZGUoZXYp +KSB7DQoJCWNhc2UgMTM6CS8v0LXRgdC70Lgg0L3QsNC20LDRgtCwINC60LvQsNCy +0LjRiNCwIEVudGVyDQoJCQlpZih0eXBlb2YodGhpcy5vdXRwdXQpICE9ICd1bmRl +ZmluZWQnICYmICEkKHRoaXMub3V0cHV0KS5oYXNDbGFzcygnaGlkZGVuJykpIHsg +Ly8gZml4ZWQgIzExMTcNCgkJCQlpZiAodGhpcy5zZXRWYWx1ZSgpKSB7DQoJCQkJ +CWlmICghZG9jdW1lbnQuYWxsKQ0KCQkJCQkJZXYucHJldmVudERlZmF1bHQoKTsN +CgkJCQkJZWxzZQ0KCQkJCQkJZXYucmV0dXJuVmFsdWUgPSBmYWxzZTsNCgkJCQl9 +DQoJCQl9DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJCWJyZWFrOw0KCQljYXNlIDI3OiAv +LyBFc2NhcGUNCgkJCWlmICghJCh0aGlzLm91dHB1dCkuaGFzQ2xhc3MoJ2hpZGRl +bicpKSB7DQoJCQkJJCh0aGlzLm91dHB1dCkuYWRkQ2xhc3MoJ2hpZGRlbicpOw0K +CQkJfQ0KCQkJcmV0dXJuIHRydWU7DQoJCQlicmVhazsNCgkJY2FzZSA0MDoJLy/Q +tdGB0LvQuCDQvdCw0LbQsNGC0LAg0LrQu9Cw0LLQuNGI0LAgItCS0L3QuNC3Ig0K +CQkJdGhpcy5tYWtlU3RlcHMoJ2Rvd24nKTsNCgkJCXJldHVybiB0cnVlOw0KCQli +cmVhazsNCgkJY2FzZSAzODoJLy/QtdGB0LvQuCDQvdCw0LbQsNGC0LAg0LrQu9Cw +0LLQuNGI0LAgItCS0LLQtdGA0YUiDQoJCQl0aGlzLm1ha2VTdGVwcygndXAnKTsN +CgkJCXJldHVybiB0cnVlOw0KCQlicmVhazsNCgl9DQoJcmV0dXJuIGZhbHNlOw0K +fQ0KDQphdXRvc3VnZ2VzdENsYXNzLnByb3RvdHlwZS5wcm9jZXNzUXVvdGVzID0g +ZnVuY3Rpb24oZmllbGQpIHsNCgl0aGlzLmlzUXVvdGVPcGVuZWQgPSBmYWxzZTsN +Cgl0aGlzLmlzUXVvdGVDbG9zZWRQcmV2aW91c2x5ID0gZmFsc2U7DQoJdGhpcy5u +b0luZGV4ZWRTdHJpbmcgPScnOw0KCWlmKGZpZWxkLnZhbHVlLmluZGV4T2YoJyIn +KSAhPSAtMSkgew0KCQl2YXIgcXVvdGVzUmVzdWx0cyA9IGZpZWxkLnZhbHVlLm1h +dGNoKC8iL2cpOw0KCX0NCglpZihxdW90ZXNSZXN1bHRzICYmIHF1b3Rlc1Jlc3Vs +dHMubGVuZ3RoJTI9PTApIHsNCgkJdGhpcy5pc1F1b3RlT3BlbmVkID0gZmFsc2U7 +DQoJCWlmKGZpZWxkLnZhbHVlLm1hdGNoKC8iJHwiXG58IlxyXG4vKSkgew0KCQkJ +dGhpcy5pc1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9IHRydWU7DQoJCX0NCgkJZWxz +ZSB7DQoJCQl0aGlzLmlzUXVvdGVDbG9zZWRQcmV2aW91c2x5ID0gZmFsc2U7DQoJ +CX0NCgl9DQoJZWxzZSBpZiAocXVvdGVzUmVzdWx0cyAmJiBxdW90ZXNSZXN1bHRz +Lmxlbmd0aCUyIT0wKSB7IHRoaXMuaXNRdW90ZU9wZW5lZCA9IHRydWU7IH0NCgkN +CglpZiAodGhpcy5pc011bHRpcGx5U3VnZ2VzdGlvbnNPbiA9PSB0cnVlKSB7IC8v +0LXRgdC70Lgg0LLQutC70Y7Rh9C10L3QsCDQvtC/0YbQuNGPINC80L3QvtC20LXR +gdGC0LLQtdC90L3Ri9GFINC/0L7QtNGB0LrQsNC30L7QuiANCgkJaWYodGhpcy5p +c1F1b3RlT3BlbmVkID09IHRydWUgfHwgdGhpcy5pc1F1b3RlQ2xvc2VkUHJldmlv +dXNseSA9PSB0cnVlKSB7IC8v0LXRgdC70Lgg0L7RgtC60YDRi9GC0LAg0LrQsNCy +0YvRh9C60LANCgkJCXZhciB3b3Jkc19xdW90ZXMgPSBmaWVsZC52YWx1ZS5zcGxp +dCgnIicpOw0KCQkJdGhpcy5pc1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9PSB0cnVl +PyB0aGlzLm5ld1ZhbHVlID0gd29yZHNfcXVvdGVzW3dvcmRzX3F1b3Rlcy5sZW5n +dGgtMl0gOiB0aGlzLm5ld1ZhbHVlID0gd29yZHNfcXVvdGVzW3dvcmRzX3F1b3Rl +cy5sZW5ndGgtMV0NCgkJCXRoaXMubmV3VmFsdWUgPSB0aGlzLm5ld1ZhbHVlLnJl +cGxhY2UoLyheXHMrKXwoXG4pL2csICcnKTsNCgkJCXZhciB3b3JkcyA9IGZpZWxk +LnZhbHVlLnNwbGl0KHRoaXMuc3ltYm9sKTsNCgkJCXZhciB3b3Jkc19sZW5ndGg9 +d29yZHMubGVuZ3RoLTE7DQoJCQlmb3IodmFyIGs9MDsgazx3b3Jkc19sZW5ndGg7 +IGsrKykgew0KCQkJCWlmKGs9PTApIHsNCgkJCQkJdGhpcy5ub0luZGV4ZWRTdHJp +bmcgKz0gd29yZHNba107DQoJCQkJfQ0KCQkJCWVsc2Ugew0KCQkJCQl0aGlzLm5v +SW5kZXhlZFN0cmluZyArPSB0aGlzLnN5bWJvbCArIHdvcmRzW2tdOw0KCQkJCX0N +CgkJCX0NCgkJfSBlbHNlIHsNCgkJCXZhciB3b3JkcyA9IGZpZWxkLnZhbHVlLnNw +bGl0KHRoaXMuc3ltYm9sKTsNCgkJCXRoaXMubmV3VmFsdWUgPSB3b3Jkc1t3b3Jk +cy5sZW5ndGgtMV0ucmVwbGFjZSgvKF5ccyspfChcbikvZywgJycpOw0KCQkJdmFy +IHdvcmRzX2xlbmd0aD13b3Jkcy5sZW5ndGgtMTsNCgkJCWZvcih2YXIgaz0wOyBr +PHdvcmRzX2xlbmd0aDsgaysrKSB7DQoJCQkJaWYoaz09MCkgew0KCQkJCQl0aGlz +Lm5vSW5kZXhlZFN0cmluZyArPSB3b3Jkc1trXTsNCgkJCQl9DQoJCQkJZWxzZSB7 +DQoJCQkJCXRoaXMubm9JbmRleGVkU3RyaW5nICs9IHRoaXMuc3ltYm9sICsgd29y +ZHNba107DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KCWVsc2Ugew0KCQlpZih0aGlz +LmlzUXVvdGVPcGVuZWQgPT0gdHJ1ZSkgew0KCQkJdmFyIHdvcmRzX3F1b3RlcyA9 +IGZpZWxkLnZhbHVlLnNwbGl0KCciJyk7DQoJCQl0aGlzLm5ld1ZhbHVlID0gd29y +ZHNfcXVvdGVzW3dvcmRzX3F1b3Rlcy5sZW5ndGgtMV0ucmVwbGFjZSgvKF5ccysp +fChcbikvZywgJycpOw0KCQl9DQoJCWVsc2Ugew0KCQkJdGhpcy5uZXdWYWx1ZSA9 +IGZpZWxkLnZhbHVlOw0KCQl9DQoJfQ0KfQ0KDQphdXRvc3VnZ2VzdENsYXNzLnBy +b3RvdHlwZS5yZXF1ZXN0U3VnZ2VzdHMgPSBmdW5jdGlvbihmaWVsZCwgc3VibWl0 +VHlwZSkgew0KCQkJdGhpcy5ob2xkZXIgPSB0aGlzLmhvbGRlciB8fCAkKGZpZWxk +KS5nZXRQYXJlbnQoJy4nICsgdGhpcy5jbGFzc05hbWVzLmhvbGRlcik7DQoJCQl0 +aGlzLm91dHB1dCA9IHRoaXMub3V0cHV0IHx8ICQodGhpcy5ob2xkZXIpLmdldEVs +ZW1lbnQoJy4nICsgdGhpcy5jbGFzc05hbWVzLm91dHB1dCk7DQoJCQlpZiAodGhp +cy5uZXdWYWx1ZSA9PSAnJykgew0KCQkJCSQodGhpcy5vdXRwdXQpLmFkZENsYXNz +KCdoaWRkZW4nKTsNCgkJCQl0aGlzLm91dHB1dC5pbm5lckhUTUwgPScnOw0KCQkJ +CXRoaXMubGFzdFZhbHVlID0gdGhpcy5uZXdWYWx1ZTsNCgkJCQlyZXR1cm4gZmFs +c2U7DQoJCQl9DQoJCQllbHNlIHsNCgkJCQkkKHRoaXMub3V0cHV0KS5yZW1vdmVD +bGFzcygnaGlkZGVuJyk7DQoJCQl9DQoJCQlpZiAoJCh0aGlzLmhvbGRlcikuaGFz +Q2xhc3ModGhpcy5jbGFzc05hbWVzLmlzTG9hZGluZykgfHwgdGhpcy5sYXN0VmFs +dWUgPT0gdGhpcy5uZXdWYWx1ZSkgew0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0N +CgkJCXZhciBkYXRhID0gJ2xldHRlcnM9JyArIHRoaXMubmV3VmFsdWUgKyAnJnR5 +cGU9JyArIHN1Ym1pdFR5cGU7DQoJCQl0aGlzLnBhcmFtcyA9IHsNCgkJCQlob2xk +ZXIgOiB0aGlzLmhvbGRlciwNCgkJCQlmaWVsZCA6IGZpZWxkLA0KCQkJCXN0cmlu +ZyA6IHRoaXMubmV3VmFsdWUsDQoJCQkJb3V0cHV0IDogdGhpcy5vdXRwdXQsDQoJ +CQkJbm9JbmRleGVkU3RyaW5nIDogdGhpcy5ub0luZGV4ZWRTdHJpbmcNCgkJCX07 +DQoJCQlhamF4TG9hZFBvc3QodGhpcy5hamF4VXJsLCBkYXRhLCB0aGlzLnNlbmRE +YXRhT25sb2FkLCB0aGlzLCB0aGlzLnBhcmFtcyk7DQoJCQkkKHRoaXMuaG9sZGVy +KS5hZGRDbGFzcyh0aGlzLmNsYXNzTmFtZXMuaXNMb2FkaW5nKTsNCgkJCXRoaXMu +bGFzdFZhbHVlID0gdGhpcy5uZXdWYWx1ZTsNCn0NCg0KLy8g0KfRgtC10L3QuNC1 +INC+0YLQstC10YLQsCDRgdC10YDQstC10YDQsCDQvdCwINC/0LXRgNC10YHRi9C7 +0LrRgyAg0LLRgdC10YUg0LTQsNC90L3Ri9GFINGE0L7RgNC80Ysg0Lgg0L7QsdGA +0LDQsdC+0YLQutCwINCy0YvQtNCw0L3QvdGL0YUg0L7RiNC40LHQvtC6DQphdXRv +c3VnZ2VzdENsYXNzLnByb3RvdHlwZS5zZW5kRGF0YU9ubG9hZCA9IGZ1bmN0aW9u +KGFqYXhPYmosIHBhcmFtcykgew0KCSQocGFyYW1zLmhvbGRlcikucmVtb3ZlQ2xh +c3ModGhpcy5jbGFzc05hbWVzLmlzTG9hZGluZyk7DQoJaWYoYWpheE9iaiAmJiBh +amF4T2JqLnJlc3BvbnNlWE1MKXsNCgkJdmFyIHhtbE9iaiA9IGFqYXhPYmoucmVz +cG9uc2VYTUw7DQoJCXZhciB4bWxOb2RlcyA9IHRoaXMucGFyc2VYTUwoeG1sT2Jq +KTsNCg0KCQlmb3IgKHByb3AgaW4geG1sTm9kZXMpew0KCQkJaWYodGhpc1t0aGlz +LnhtbFJlc3BvbnNlW3Byb3BdLmhhbmRsZXJdKSB7DQoJCQkJdGhpc1t0aGlzLnht +bFJlc3BvbnNlW3Byb3BdLmhhbmRsZXJdKHhtbE5vZGVzLCBwYXJhbXMpOw0KCQkJ +fQ0KCQl9DQoJfQ0KfTsNCg0KLy8g0JLRi9Cy0L7QtCDQtNCw0L3QvdGL0YUNCmF1 +dG9zdWdnZXN0Q2xhc3MucHJvdG90eXBlLnhtbFJlc3BvbnNlSGFuZGxlcl9vdXRw +dXQgPSBmdW5jdGlvbih4bWxOb2RlcywgcGFyYW1zKSB7DQoJdmFyIF90aGlzID0g +dGhpczsNCgkkKHBhcmFtcy5vdXRwdXQpLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTsN +Cgl0aGlzLnBvc2l0aW9uID0gMDsNCgl0aGlzLnBhcmFtcy5vdXRwdXQuaW5uZXJI +VE1MID0gJyc7DQoJaWYoeG1sTm9kZXMuaXRlbSAmJiB4bWxOb2Rlcy5pdGVtLmxl +bmd0aCkgew0KCQlmb3IodmFyIGk9MDsgaTx4bWxOb2Rlcy5pdGVtLmxlbmd0aDsg +aSsrKSB7DQoJCQl2YXIgaXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhp +cy5odG1sUmVzcG9uc2UuaXRlbSk7DQoJCQl2YXIgaHRtbCA9IHhtbE5vZGVzLml0 +ZW1baV0uZmlyc3RDaGlsZC5kYXRhOw0KCQkJdGhpcy5jdXJyVmFsdWVzW2ldID0g +eG1sTm9kZXMuaXRlbVtpXS5maXJzdENoaWxkLmRhdGE7DQoJCQl2YXIgc2VhcmNo +U3RyaW5nID0gbmV3IFJlZ0V4cCgnKCcgKyBwYXJhbXMuc3RyaW5nICsgJyknLCAn +Z2knKTsNCgkJCXZhciByZXBsYWNlU3RyaW5nID0gJzwnICt0aGlzLmh0bWxSZXNw +b25zZS52YWx1ZSArICc+JyArICckMScgKyAnPC8nICsgdGhpcy5odG1sUmVzcG9u +c2UudmFsdWUgKyAnPic7DQoJCQl2YXIgaHRtbCA9IGh0bWwucmVwbGFjZShzZWFy +Y2hTdHJpbmcsIHJlcGxhY2VTdHJpbmcpOw0KCQkJcGFyYW1zLm91dHB1dC5hcHBl +bmRDaGlsZChpdGVtKTsNCgkJCWl0ZW0uaW5uZXJIVE1MID0gaHRtbDsNCgkJfQ0K +DQoJCXBhcmFtcy5maWVsZC5vbmZvY3VzID0gZnVuY3Rpb24oKSB7DQoJCQkkKHBh +cmFtcy5vdXRwdXQpLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTsNCgkJfQkNCgkJDQoJ +CXBhcmFtcy5maWVsZC5vbmJsdXIgPSBmdW5jdGlvbihldikgew0KDQoJCQlpZigh +ZXYpIHsgZXYgPSB3aW5kb3cuZXZlbnQ7IH0NCg0KCQkJdmFyIHRhcmc7DQoJCQkJ +aWYgKCFldikgdmFyIGV2ID0gd2luZG93LmV2ZW50Ow0KCQkJCWlmIChldi50YXJn +ZXQpIHRhcmcgPSBldi50YXJnZXQ7DQoJCQkJZWxzZSBpZiAoZXYuc3JjRWxlbWVu +dCkgdGFyZyA9IGV2LnNyY0VsZW1lbnQ7DQoJCQkJaWYgKHRhcmcubm9kZVR5cGUg +PT0gMykgLy8gZGVmZWF0IFNhZmFyaSBidWcNCgkJCQkJdGFyZyA9IHRhcmcucGFy +ZW50Tm9kZTsNCgkJCQ0KCQkJaWYodGFyZyE9cGFyYW1zLmZpZWxkICYmIHRhcmcu +cGFyZW50Tm9kZSE9cGFyYW1zLm91dHB1dCkgew0KCQkJCSQocGFyYW1zLm91dHB1 +dCkuYWRkQ2xhc3MoJ2hpZGRlbicpOw0KCQkJfQ0KCQl9DQoJCQ0KCQlkb2N1bWVu +dC5hZGRFdmVudCgnY2xpY2snLCBmdW5jdGlvbiAoZSkgew0KCQkgICAgdmFyIHQg +PSBlLnRhcmdldDsNCgkJICAgIGlmICh0IT1wYXJhbXMuZmllbGQgJiYgdCE9cGFy +YW1zLm91dHB1dCkgew0KCQkgICAgICAgICQocGFyYW1zLm91dHB1dCkuYWRkQ2xh +c3MoJ2hpZGRlbicpOw0KCQkgICAgfQ0KCQl9KTsNCg0KCQl0aGlzLm1vdXNlSGFu +ZGxlcigpOw0KCX0NCn07DQoNCi8vINGD0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdC8 +INC30L3QsNGH0LXQvdC40LUNCmF1dG9zdWdnZXN0Q2xhc3MucHJvdG90eXBlLnNl +dFZhbHVlID0gZnVuY3Rpb24oKSB7DQoJdmFyIHJlc3VsdCA9IGZhbHNlOw0KCWlm +KHRoaXMucGFyYW1zLm91dHB1dCAmJiB0aGlzLnBhcmFtcy5vdXRwdXQuZ2V0RWxl +bWVudHNCeVRhZ05hbWUodGhpcy5odG1sUmVzcG9uc2UuaXRlbSlbMF0pIHsNCgkJ +dmFyIHJlc3VsdF9pdGVtcyA9IHRoaXMucGFyYW1zLm91dHB1dC5nZXRFbGVtZW50 +c0J5VGFnTmFtZSh0aGlzLmh0bWxSZXNwb25zZS5pdGVtKTsNCgkJdmFyIHJlc3Vs +dF9pdGVtc19sZW5ndGggPSByZXN1bHRfaXRlbXMubGVuZ3RoOw0KCQlmb3IgKHZh +ciBpPTA7IGk8cmVzdWx0X2l0ZW1zLmxlbmd0aDsgaSsrKSB7DQoJCQlpZihyZXN1 +bHRfaXRlbXNbaV0uY2xhc3NOYW1lID09ICdhY3RpdmUnKSB7DQoJCQkJaWYodGhp +cy5pc011bHRpcGx5U3VnZ2VzdGlvbnNPbiA9PSB0cnVlKSB7DQoJCQkJCWlmKHRo +aXMuaXNRdW90ZU9wZW5lZCA9PSB0cnVlIHx8IHRoaXMuaXNRdW90ZUNsb3NlZFBy +ZXZpb3VzbHkgPT0gdHJ1ZSkgew0KCQkJCQkJdmFyIHJlcGxhY2VkVmFsdWUgPSB0 +aGlzLnBhcmFtcy5zdHJpbmcucmVwbGFjZSh0aGlzLnBhcmFtcy5zdHJpbmcsIHRo +aXMuY3VyclZhbHVlc1t0aGlzLnBvc2l0aW9uLTFdKTsNCgkJCQkJCWlmKHRoaXMu +cGFyYW1zLm5vSW5kZXhlZFN0cmluZyE9JycpIHsNCgkJCQkJCQl0aGlzLnBhcmFt +cy5maWVsZC52YWx1ZSA9IHRoaXMucGFyYW1zLm5vSW5kZXhlZFN0cmluZyArIHRo +aXMuc3ltYm9sICsgdGhpcy5zcGFjZXIgKyAnIicgKyByZXBsYWNlZFZhbHVlOw0K +CQkJCQkJCWlmKHRoaXMuaXNRdW90ZUNsb3NlZFByZXZpb3VzbHkgPT0gdHJ1ZSkg +ew0KCQkJCQkJCQl0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSArPSAnIic7DQoJCQkJ +CQkJCXJlc3VsdCA9IHRydWU7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQkJZWxz +ZSB7DQoJCQkJCQkJdGhpcy5wYXJhbXMuZmllbGQudmFsdWUgPSAnIicgKyByZXBs +YWNlZFZhbHVlOw0KCQkJCQkJCXJlc3VsdCA9IHRydWU7DQoJCQkJCQkJaWYodGhp +cy5pc1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9PSB0cnVlKSB7IHRoaXMucGFyYW1z +LmZpZWxkLnZhbHVlICs9ICciJzsgfQ0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCWVs +c2Ugew0KCQkJCQkJdmFyIHJlcGxhY2VkVmFsdWUgPSB0aGlzLnBhcmFtcy5zdHJp +bmcucmVwbGFjZSh0aGlzLnBhcmFtcy5zdHJpbmcsIHRoaXMuY3VyclZhbHVlc1t0 +aGlzLnBvc2l0aW9uLTFdKTsNCgkJCQkJCWlmKHRoaXMucGFyYW1zLm5vSW5kZXhl +ZFN0cmluZyE9JycpIHsNCgkJCQkJCQl0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSA9 +IHRoaXMucGFyYW1zLm5vSW5kZXhlZFN0cmluZyArIHRoaXMuc3ltYm9sICsgdGhp +cy5zcGFjZXIgKyByZXBsYWNlZFZhbHVlOw0KCQkJCQkJCXJlc3VsdCA9IHRydWU7 +DQoJCQkJCQl9DQoJCQkJCQllbHNlIHsNCgkJCQkJCQl0aGlzLnBhcmFtcy5maWVs +ZC52YWx1ZSA9IHJlcGxhY2VkVmFsdWU7DQoJCQkJCQkJcmVzdWx0ID0gdHJ1ZTsN +CgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQllbHNlIHsNCgkJCQkJaWYodGhp +cy5pc1F1b3RlT3BlbmVkID09IHRydWUgfHwgdGhpcy5pc1F1b3RlQ2xvc2VkUHJl +dmlvdXNseSA9PSB0cnVlKSB7DQoJCQkJCQkNCgkJCQkJCXRoaXMucGFyYW1zLmZp +ZWxkLnZhbHVlID0gJyInICsgdGhpcy5jdXJyVmFsdWVzW3RoaXMucG9zaXRpb24t +MV07DQoJCQkJCQlyZXN1bHQgPSB0cnVlOw0KCQkJCQl9DQoJCQkJCWVsc2Ugew0K +CQkJCQkJdGhpcy5wYXJhbXMuZmllbGQudmFsdWUgPSB0aGlzLmN1cnJWYWx1ZXNb +dGhpcy5wb3NpdGlvbi0xXTsNCgkJCQkJCXJlc3VsdCA9IHRydWU7DQoJCQkJCX0N +CgkJCQl9DQoJCQkJDQoJCQkJJCh0aGlzLnBhcmFtcy5vdXRwdXQpLmFkZENsYXNz +KCdoaWRkZW4nKTsNCgkJCQkNCgkJCQl0aGlzLnBhcmFtcy5vdXRwdXQuaW5uZXJI +VE1MID0gJyc7DQoJCQkJDQoJCQkJaWYodGhpcy5wYXJhbXMuZmllbGQudmFsdWUg +JiYgdGhpcy5wYXJhbXMuZmllbGQudmFsdWUubWF0Y2goL1xyXG4kLykpIHsNCgkJ +CQkJdGhpcy5wYXJhbXMuZmllbGQudmFsdWUgPSB0aGlzLnBhcmFtcy5maWVsZC52 +YWx1ZS5yZXBsYWNlKC9cclxuJC8sICcnKTsNCgkJCQl9DQoJCQkJDQoJCQkJZWxz +ZSB7DQoJCQkJCXRoaXMucGFyYW1zLmZpZWxkID0gdGhpcy5jdXJyVmFsdWVzW2ld +Ow0KCQkJCQkkKHRoaXMucGFyYW1zLm91dHB1dCkuYWRkQ2xhc3MoJ2hpZGRlbicp +Ow0KCQkJCQl0aGlzLnBhcmFtcy5vdXRwdXQuaW5uZXJIVE1MID0gJyc7DQoJCQkJ +fQ0KCQkJfQ0KCQl9DQoJfQ0KCXJldHVybiByZXN1bHQ7DQp9Ow0KDQovLyDQvdCw +0LLQuNCz0LDRhtC40Y8g0L/QviDRgNC10LfRg9C70YzRgtCw0YLQsNC8INC30LDQ +v9GA0L7RgdCwINGBINC/0L7QvNC+0YnRjNGOINC60LvQsNCy0LjQsNGC0YPRgNGL +DQphdXRvc3VnZ2VzdENsYXNzLnByb3RvdHlwZS5tYWtlU3RlcHMgPSBmdW5jdGlv +bihkaXJlY3Rpb24pIHsNCglfdGhpcyA9IHRoaXMNCglpZih0aGlzLnBhcmFtcy5v +dXRwdXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGhpcy5odG1sUmVzcG9uc2UuaXRl +bSlbMF0pIHsNCgkJdGhpcy5wYXJhbXMuZmllbGQuZmFrZUNoYW5nZSA9IHRydWU7 +DQoJCQ0KCQl2YXIgcmVzdWx0X2l0ZW1zID0gdGhpcy5wYXJhbXMub3V0cHV0Lmdl +dEVsZW1lbnRzQnlUYWdOYW1lKHRoaXMuaHRtbFJlc3BvbnNlLml0ZW0pOw0KCQl2 +YXIgcmVzdWx0X2l0ZW1zX2xlbmd0aCA9IHJlc3VsdF9pdGVtcy5sZW5ndGg7DQoJ +CWZvciAodmFyIGk9MDsgaTxyZXN1bHRfaXRlbXMubGVuZ3RoOyBpKyspIHsNCgkJ +CXJlc3VsdF9pdGVtc1tpXS5jbGFzc05hbWUgPSAnJzsNCgkJfQ0KCQl0aGlzLnNw +YWNlciA9ICcnOw0KCQl0aGlzLnN5bWJvbCA9PSAnLCcgPyB0aGlzLnNwYWNlciA9 +ICcgJyA6IHRoaXMuc3BhY2VyID0gJyc7DQoJCWlmKGRpcmVjdGlvbiA9PSAnZG93 +bicgJiYgdGhpcy5wb3NpdGlvbjw9cmVzdWx0X2l0ZW1zX2xlbmd0aC0xKSB7DQoJ +CQlyZXN1bHRfaXRlbXNbdGhpcy5wb3NpdGlvbl0uY2xhc3NOYW1lID0gJ2FjdGl2 +ZSc7DQoJCQlpZih0aGlzLmlzTXVsdGlwbHlTdWdnZXN0aW9uc09uID09IHRydWUp +IHsNCgkJCQlpZih0aGlzLmlzUXVvdGVPcGVuZWQgPT0gdHJ1ZSB8fCB0aGlzLmlz +UXVvdGVDbG9zZWRQcmV2aW91c2x5ID09IHRydWUpIHsNCgkJCQkJdmFyIHJlcGxh +Y2VkVmFsdWUgPSB0aGlzLnBhcmFtcy5zdHJpbmcucmVwbGFjZSh0aGlzLnBhcmFt +cy5zdHJpbmcsIHRoaXMuY3VyclZhbHVlc1t0aGlzLnBvc2l0aW9uXSk7DQoJCQkJ +CWlmKHRoaXMucGFyYW1zLm5vSW5kZXhlZFN0cmluZyE9JycpIHsNCgkJCQkJCXRo +aXMucGFyYW1zLmZpZWxkLnZhbHVlID0gdGhpcy5wYXJhbXMubm9JbmRleGVkU3Ry +aW5nICsgdGhpcy5zeW1ib2wgKyB0aGlzLnNwYWNlciArICciJyArIHJlcGxhY2Vk +VmFsdWU7DQoJCQkJCQlpZih0aGlzLmlzUXVvdGVDbG9zZWRQcmV2aW91c2x5ID09 +IHRydWUpIHsgdGhpcy5wYXJhbXMuZmllbGQudmFsdWUgKz0gJyInOyB9DQoJCQkJ +CX0NCgkJCQkJZWxzZSB7DQoJCQkJCQl0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSA9 +ICciJyArIHJlcGxhY2VkVmFsdWU7DQoJCQkJCQlpZih0aGlzLmlzUXVvdGVDbG9z +ZWRQcmV2aW91c2x5ID09IHRydWUpIHsgdGhpcy5wYXJhbXMuZmllbGQudmFsdWUg +Kz0gJyInOyB9DQoJCQkJCX0NCgkJCQl9DQoJCQkJZWxzZSB7DQoJCQkJCXZhciBy +ZXBsYWNlZFZhbHVlID0gdGhpcy5wYXJhbXMuc3RyaW5nLnJlcGxhY2UodGhpcy5w +YXJhbXMuc3RyaW5nLCB0aGlzLmN1cnJWYWx1ZXNbdGhpcy5wb3NpdGlvbl0pOw0K +CQkJCQlpZih0aGlzLnBhcmFtcy5ub0luZGV4ZWRTdHJpbmchPScnKSB7DQoJCQkJ +CQl0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSA9IHRoaXMucGFyYW1zLm5vSW5kZXhl +ZFN0cmluZyArIHRoaXMuc3ltYm9sICsgdGhpcy5zcGFjZXIgKyByZXBsYWNlZFZh +bHVlOw0KCQkJCQl9DQoJCQkJCWVsc2Ugew0KCQkJCQkJdGhpcy5wYXJhbXMuZmll +bGQudmFsdWUgPSByZXBsYWNlZFZhbHVlOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0K +CQkJZWxzZSB7DQoJCQkJaWYodGhpcy5pc1F1b3RlT3BlbmVkID09IHRydWUgfHwg +dGhpcy5pc1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9PSB0cnVlKSB7DQoJCQkJCXRo +aXMucGFyYW1zLmZpZWxkLnZhbHVlID0gJyInICsgdGhpcy5jdXJyVmFsdWVzW3Ro +aXMucG9zaXRpb25dOw0KCQkJCQlpZih0aGlzLmlzUXVvdGVDbG9zZWRQcmV2aW91 +c2x5ID09IHRydWUpIHsgdGhpcy5wYXJhbXMuZmllbGQudmFsdWUgKz0gJyInOyB9 +DQoJCQkJfQ0KCQkJCWVsc2Ugew0KCQkJCQl0aGlzLnBhcmFtcy5maWVsZC52YWx1 +ZSA9IHRoaXMuY3VyclZhbHVlc1t0aGlzLnBvc2l0aW9uXTsNCgkJCQl9DQoJCQl9 +DQoJCQl0aGlzLnBvc2l0aW9uKys7DQoJCX0NCgkJZWxzZSBpZihkaXJlY3Rpb24g +PT0gJ3VwJyAmJiB0aGlzLnBvc2l0aW9uPjEpIHsNCgkJCXJlc3VsdF9pdGVtc1t0 +aGlzLnBvc2l0aW9uLTJdLmNsYXNzTmFtZSA9ICdhY3RpdmUnOw0KCQkJaWYodGhp +cy5pc011bHRpcGx5U3VnZ2VzdGlvbnNPbiA9PSB0cnVlKSB7DQoJCQkJaWYodGhp +cy5pc1F1b3RlT3BlbmVkID09IHRydWUgfHwgdGhpcy5pc1F1b3RlQ2xvc2VkUHJl +dmlvdXNseSA9PSB0cnVlKSB7DQoJCQkJCXZhciByZXBsYWNlZFZhbHVlID0gdGhp +cy5wYXJhbXMuc3RyaW5nLnJlcGxhY2UodGhpcy5wYXJhbXMuc3RyaW5nLCB0aGlz +LmN1cnJWYWx1ZXNbdGhpcy5wb3NpdGlvbi0yXSk7DQoJCQkJCWlmKHRoaXMucGFy +YW1zLm5vSW5kZXhlZFN0cmluZyE9JycpIHsNCgkJCQkJCXRoaXMucGFyYW1zLmZp +ZWxkLnZhbHVlID0gdGhpcy5wYXJhbXMubm9JbmRleGVkU3RyaW5nICsgdGhpcy5z +eW1ib2wgKyB0aGlzLnNwYWNlciArICciJyArIHJlcGxhY2VkVmFsdWU7DQoJCQkJ +CQlpZih0aGlzLmlzUXVvdGVDbG9zZWRQcmV2aW91c2x5ID09IHRydWUpIHsgdGhp +cy5wYXJhbXMuZmllbGQudmFsdWUgKz0gJyInOyB9DQoJCQkJCX0NCgkJCQkJZWxz +ZSB7DQoJCQkJCQl0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSA9ICciJyArIHJlcGxh +Y2VkVmFsdWU7DQoJCQkJCQlpZih0aGlzLmlzUXVvdGVDbG9zZWRQcmV2aW91c2x5 +ID09IHRydWUpIHsgdGhpcy5wYXJhbXMuZmllbGQudmFsdWUgKz0gJyInOyB9DQoJ +CQkJCX0NCgkJCQl9DQoJCQkJZWxzZSB7DQoJCQkJCXZhciByZXBsYWNlZFZhbHVl +ID0gdGhpcy5wYXJhbXMuc3RyaW5nLnJlcGxhY2UodGhpcy5wYXJhbXMuc3RyaW5n +LCB0aGlzLmN1cnJWYWx1ZXNbdGhpcy5wb3NpdGlvbi0yXSk7DQoJCQkJCWlmKHRo +aXMucGFyYW1zLm5vSW5kZXhlZFN0cmluZyE9JycpIHsNCgkJCQkJCXRoaXMucGFy +YW1zLmZpZWxkLnZhbHVlID0gdGhpcy5wYXJhbXMubm9JbmRleGVkU3RyaW5nICsg +dGhpcy5zeW1ib2wgKyB0aGlzLnNwYWNlciArIHJlcGxhY2VkVmFsdWU7DQoJCQkJ +CX0NCgkJCQkJZWxzZSB7DQoJCQkJCQl0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSA9 +IHJlcGxhY2VkVmFsdWU7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQllbHNlIHsN +CgkJCQlpZih0aGlzLmlzUXVvdGVPcGVuZWQgPT0gdHJ1ZSB8fCB0aGlzLmlzUXVv +dGVDbG9zZWRQcmV2aW91c2x5ID09IHRydWUpIHsNCgkJCQkJdGhpcy5wYXJhbXMu +ZmllbGQudmFsdWUgPSAnIicgKyB0aGlzLmN1cnJWYWx1ZXNbdGhpcy5wb3NpdGlv +bi0yXTsNCgkJCQkJaWYodGhpcy5pc1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9PSB0 +cnVlKSB7IHRoaXMucGFyYW1zLmZpZWxkLnZhbHVlICs9ICciJzsgfQ0KCQkJCX0N +CgkJCQllbHNlIHsNCgkJCQkJdGhpcy5wYXJhbXMuZmllbGQudmFsdWUgPSB0aGlz +LmN1cnJWYWx1ZXNbdGhpcy5wb3NpdGlvbi0yXTsNCgkJCQl9DQoJCQl9DQoJCQl0 +aGlzLnBvc2l0aW9uLS07DQoJCX0NCgkJZWxzZSBpZiAodGhpcy5wb3NpdGlvbj5y +ZXN1bHRfaXRlbXNfbGVuZ3RoLTEpIHsNCgkJCXRoaXMucG9zaXRpb249MDsNCgkJ +CXJlc3VsdF9pdGVtc1t0aGlzLnBvc2l0aW9uXS5jbGFzc05hbWUgPSAnYWN0aXZl +JzsNCgkJCWlmKHRoaXMuaXNNdWx0aXBseVN1Z2dlc3Rpb25zT24gPT0gdHJ1ZSkg +ew0KCQkJCWlmKHRoaXMuaXNRdW90ZU9wZW5lZCA9PSB0cnVlIHx8IHRoaXMuaXNR +dW90ZUNsb3NlZFByZXZpb3VzbHkgPT0gdHJ1ZSkgew0KCQkJCQl2YXIgcmVwbGFj +ZWRWYWx1ZSA9IHRoaXMucGFyYW1zLnN0cmluZy5yZXBsYWNlKHRoaXMucGFyYW1z +LnN0cmluZywgdGhpcy5jdXJyVmFsdWVzW3RoaXMucG9zaXRpb25dKTsNCgkJCQkJ +aWYodGhpcy5wYXJhbXMubm9JbmRleGVkU3RyaW5nIT0nJykgew0KCQkJCQkJdGhp +cy5wYXJhbXMuZmllbGQudmFsdWUgPSB0aGlzLnBhcmFtcy5ub0luZGV4ZWRTdHJp +bmcgKyB0aGlzLnN5bWJvbCArIHRoaXMuc3BhY2VyICsgJyInICsgcmVwbGFjZWRW +YWx1ZTsNCgkJCQkJCWlmKHRoaXMuaXNRdW90ZUNsb3NlZFByZXZpb3VzbHkgPT0g +dHJ1ZSkgeyB0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSArPSAnIic7IH0NCgkJCQkJ +fQ0KCQkJCQllbHNlIHsNCgkJCQkJCXRoaXMucGFyYW1zLmZpZWxkLnZhbHVlID0g +JyInICsgcmVwbGFjZWRWYWx1ZTsNCgkJCQkJCWlmKHRoaXMuaXNRdW90ZUNsb3Nl +ZFByZXZpb3VzbHkgPT0gdHJ1ZSkgeyB0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSAr +PSAnIic7IH0NCgkJCQkJfQ0KCQkJCX0NCgkJCQllbHNlIHsNCgkJCQkJdmFyIHJl +cGxhY2VkVmFsdWUgPSB0aGlzLnBhcmFtcy5zdHJpbmcucmVwbGFjZSh0aGlzLnBh +cmFtcy5zdHJpbmcsIHRoaXMuY3VyclZhbHVlc1t0aGlzLnBvc2l0aW9uXSk7DQoJ +CQkJCWlmKHRoaXMucGFyYW1zLm5vSW5kZXhlZFN0cmluZyE9JycpIHsNCgkJCQkJ +CXRoaXMucGFyYW1zLmZpZWxkLnZhbHVlID0gdGhpcy5wYXJhbXMubm9JbmRleGVk +U3RyaW5nICsgdGhpcy5zeW1ib2wgKyB0aGlzLnNwYWNlciArIHJlcGxhY2VkVmFs +dWU7DQoJCQkJCX0NCgkJCQkJZWxzZSB7DQoJCQkJCQl0aGlzLnBhcmFtcy5maWVs +ZC52YWx1ZSA9IHJlcGxhY2VkVmFsdWU7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJ +CQllbHNlIHsNCgkJCQlpZih0aGlzLmlzUXVvdGVPcGVuZWQgPT0gdHJ1ZSB8fCB0 +aGlzLmlzUXVvdGVDbG9zZWRQcmV2aW91c2x5ID09IHRydWUpIHsNCgkJCQkJdGhp +cy5wYXJhbXMuZmllbGQudmFsdWUgPSAnIicgKyB0aGlzLmN1cnJWYWx1ZXNbdGhp +cy5wb3NpdGlvbl07DQoJCQkJCWlmKHRoaXMuaXNRdW90ZUNsb3NlZFByZXZpb3Vz +bHkgPT0gdHJ1ZSkgeyB0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSArPSAnIic7IH0N +CgkJCQl9DQoJCQkJZWxzZSB7DQoJCQkJCXRoaXMucGFyYW1zLmZpZWxkLnZhbHVl +ID0gdGhpcy5jdXJyVmFsdWVzW3RoaXMucG9zaXRpb25dOw0KCQkJCX0NCgkJCX0N +CgkJCXRoaXMucG9zaXRpb24rKzsNCgkJfQ0KCQllbHNlIGlmKGRpcmVjdGlvbiA9 +PSAndXAnICYmIHRoaXMucG9zaXRpb248PTEpIHsNCgkJCXRoaXMucG9zaXRpb249 +cmVzdWx0X2l0ZW1zX2xlbmd0aC0xOw0KCQkJcmVzdWx0X2l0ZW1zW3RoaXMucG9z +aXRpb25dLmNsYXNzTmFtZSA9ICdhY3RpdmUnOw0KCQkJaWYodGhpcy5pc011bHRp +cGx5U3VnZ2VzdGlvbnNPbiA9PSB0cnVlKSB7DQoJCQkJaWYodGhpcy5pc1F1b3Rl +T3BlbmVkID09IHRydWUgfHwgdGhpcy5pc1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9 +PSB0cnVlKSB7DQoJCQkJCXZhciByZXBsYWNlZFZhbHVlID0gdGhpcy5wYXJhbXMu +c3RyaW5nLnJlcGxhY2UodGhpcy5wYXJhbXMuc3RyaW5nLCB0aGlzLmN1cnJWYWx1 +ZXNbdGhpcy5wb3NpdGlvbl0pOw0KCQkJCQlpZih0aGlzLnBhcmFtcy5ub0luZGV4 +ZWRTdHJpbmchPScnKSB7DQoJCQkJCQl0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSA9 +IHRoaXMucGFyYW1zLm5vSW5kZXhlZFN0cmluZyArIHRoaXMuc3ltYm9sICsgdGhp +cy5zcGFjZXIgKyAnIicgKyByZXBsYWNlZFZhbHVlOw0KCQkJCQkJaWYodGhpcy5p +c1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9PSB0cnVlKSB7IHRoaXMucGFyYW1zLmZp +ZWxkLnZhbHVlICs9ICciJzsgfQ0KCQkJCQl9DQoJCQkJCWVsc2Ugew0KCQkJCQkJ +dGhpcy5wYXJhbXMuZmllbGQudmFsdWUgPSAnIicgKyByZXBsYWNlZFZhbHVlOw0K +CQkJCQkJaWYodGhpcy5pc1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9PSB0cnVlKSB7 +IHRoaXMucGFyYW1zLmZpZWxkLnZhbHVlICs9ICciJzsgfQ0KCQkJCQl9DQoJCQkJ +fQ0KCQkJCWVsc2Ugew0KCQkJCQl2YXIgcmVwbGFjZWRWYWx1ZSA9IHRoaXMucGFy +YW1zLnN0cmluZy5yZXBsYWNlKHRoaXMucGFyYW1zLnN0cmluZywgdGhpcy5jdXJy +VmFsdWVzW3RoaXMucG9zaXRpb25dKTsNCgkJCQkJaWYodGhpcy5wYXJhbXMubm9J +bmRleGVkU3RyaW5nIT0nJykgew0KCQkJCQkJdGhpcy5wYXJhbXMuZmllbGQudmFs +dWUgPSB0aGlzLnBhcmFtcy5ub0luZGV4ZWRTdHJpbmcgKyB0aGlzLnN5bWJvbCAr +IHRoaXMuc3BhY2VyICsgcmVwbGFjZWRWYWx1ZTsNCgkJCQkJfQ0KCQkJCQllbHNl +IHsNCgkJCQkJCXRoaXMucGFyYW1zLmZpZWxkLnZhbHVlID0gcmVwbGFjZWRWYWx1 +ZTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCWVsc2Ugew0KCQkJCWlmKHRoaXMu +aXNRdW90ZU9wZW5lZCA9PSB0cnVlIHx8IHRoaXMuaXNRdW90ZUNsb3NlZFByZXZp +b3VzbHkgPT0gdHJ1ZSkgew0KCQkJCQl0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSA9 +ICciJyArIHRoaXMuY3VyclZhbHVlc1t0aGlzLnBvc2l0aW9uXTsNCgkJCQkJaWYo +dGhpcy5pc1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9PSB0cnVlKSB7IHRoaXMucGFy +YW1zLmZpZWxkLnZhbHVlICs9ICciJzsgfQ0KCQkJCX0NCgkJCQllbHNlIHsNCgkJ +CQkJdGhpcy5wYXJhbXMuZmllbGQudmFsdWUgPSB0aGlzLmN1cnJWYWx1ZXNbdGhp +cy5wb3NpdGlvbl07DQoJCQkJfQ0KCQkJfQ0KCQkJdGhpcy5wb3NpdGlvbisrOw0K +CQl9DQoJCXNldFRpbWVvdXQoZnVuY3Rpb24oKXsNCgkJCV90aGlzLnBhcmFtcy5m +aWVsZC5mYWtlQ2hhbmdlID0gZmFsc2U7DQoJCX0sNTApDQoJCQ0KCQkNCgl9DQp9 +Ow0KDQovL9C90LDQstC40LPQsNGG0LjRjyDQv9C+INGA0LXQt9GD0LvRjNGC0LDR +gtCw0Lwg0LfQsNC/0YDQvtGB0LAg0YEg0L/QvtC80L7RidGM0Y4g0LzRi9GI0LrQ +uA0KYXV0b3N1Z2dlc3RDbGFzcy5wcm90b3R5cGUubW91c2VIYW5kbGVyID0gZnVu +Y3Rpb24oKSB7DQoJdmFyIF90aGlzID0gdGhpczsNCgl2YXIgaXRlbXMgPSB0aGlz +LnBhcmFtcy5vdXRwdXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGhpcy5odG1sUmVz +cG9uc2UuaXRlbSk7DQoJdmFyIGl0ZW1zX2xlbmd0aCA9IGl0ZW1zLmxlbmd0aDsN +CgkNCg0KDQoNCglmb3IgKHZhciBpPTA7IGk8aXRlbXNfbGVuZ3RoOyBpKyspIHsN +CgkJaXRlbXNbaV0ub25tb3VzZW92ZXIgPSBmdW5jdGlvbihpXykgew0KCQkJcmV0 +dXJuIGZ1bmN0aW9uICgpIHsNCgkJCQlmb3IgKHZhciBrPTA7IGs8aXRlbXNfbGVu +Z3RoOyBrKyspIHsNCgkJCQkJaXRlbXNba10uY2xhc3NOYW1lID0gJyc7DQoJCQkJ +fQ0KCQkJCXRoaXMuY2xhc3NOYW1lID0gJ2FjdGl2ZSc7DQoJCQkJX3RoaXMucG9z +aXRpb24gPSBpXysxOw0KCQkJfQ0KCQl9KGkpOw0KCQlpdGVtc1tpXS5vbm1vdXNl +b3V0ID0gZnVuY3Rpb24oKSB7DQoJCQl0aGlzLmNsYXNzTmFtZSA9ICcnOw0KCQkJ +LyogX3RoaXMucG9zaXRpb24gPSAwOyAqLw0KCQl9DQoJCWl0ZW1zW2ldLm9uY2xp +Y2sgPSBmdW5jdGlvbihpXykgew0KCQkJcmV0dXJuIGZ1bmN0aW9uKCkgew0KCQkJ +CXZhciBob2xkZXIgPSAkKHRoaXMpLmdldFBhcmVudCgnLicgKyBfdGhpcy5jbGFz +c05hbWVzLmhvbGRlcik7DQoJCQkJdmFyIGZpZWxkID0gJChob2xkZXIpLmdldEVs +ZW1lbnQoJy4nICsgX3RoaXMuY2xhc3NOYW1lcy5maWVsZCk7DQoJCQkJaWYoX3Ro +aXMuaXNNdWx0aXBseVN1Z2dlc3Rpb25zT24gPT0gdHJ1ZSkgew0KCQkJCQlpZihf +dGhpcy5pc1F1b3RlT3BlbmVkID09IHRydWUpIHsNCgkJCQkJCXZhciByZXBsYWNl +ZFZhbHVlID0gX3RoaXMucGFyYW1zLnN0cmluZy5yZXBsYWNlKF90aGlzLnBhcmFt +cy5zdHJpbmcsIF90aGlzLmN1cnJWYWx1ZXNbaV9dKTsNCgkJCQkJCV90aGlzLnNw +YWNlciA9Jyc7DQoJCQkJCQlfdGhpcy5zeW1ib2wgPT0gJywnID8gX3RoaXMuc3Bh +Y2VyID0gJyAnIDogX3RoaXMuc3BhY2VyID0gJyc7DQoJCQkJCQlpZihfdGhpcy5w +YXJhbXMubm9JbmRleGVkU3RyaW5nIT0nJykgew0KCQkJCQkJCV90aGlzLnBhcmFt +cy5maWVsZC52YWx1ZSA9IF90aGlzLnBhcmFtcy5ub0luZGV4ZWRTdHJpbmcgKyBf +dGhpcy5zeW1ib2wgKyBfdGhpcy5zcGFjZXIgKyAnIicgKyByZXBsYWNlZFZhbHVl +Ow0KCQkJCQkJfQ0KCQkJCQkJZWxzZSB7DQoJCQkJCQkJX3RoaXMucGFyYW1zLmZp +ZWxkLnZhbHVlID0gJyInICsgcmVwbGFjZWRWYWx1ZTsNCgkJCQkJCX0NCgkJCQkJ +fQ0KCQkJCQllbHNlIHsNCgkJCQkJCXZhciByZXBsYWNlZFZhbHVlID0gX3RoaXMu +cGFyYW1zLnN0cmluZy5yZXBsYWNlKF90aGlzLnBhcmFtcy5zdHJpbmcsIF90aGlz +LmN1cnJWYWx1ZXNbaV9dKTsNCgkJCQkJCV90aGlzLnNwYWNlciA9Jyc7DQoJCQkJ +CQlfdGhpcy5zeW1ib2wgPT0gJywnID8gX3RoaXMuc3BhY2VyID0gJyAnIDogX3Ro +aXMuc3BhY2VyID0gJyc7DQoJCQkJCQlpZihfdGhpcy5wYXJhbXMubm9JbmRleGVk +U3RyaW5nIT0nJykgew0KCQkJCQkJCV90aGlzLnBhcmFtcy5maWVsZC52YWx1ZSA9 +IF90aGlzLnBhcmFtcy5ub0luZGV4ZWRTdHJpbmcgKyBfdGhpcy5zeW1ib2wgKyBf +dGhpcy5zcGFjZXIgKyByZXBsYWNlZFZhbHVlOw0KCQkJCQkJfQ0KCQkJCQkJZWxz +ZSB7DQoJCQkJCQkJX3RoaXMucGFyYW1zLmZpZWxkLnZhbHVlID0gcmVwbGFjZWRW +YWx1ZTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCQkkKF90aGlzLnBhcmFtcy5vdXRw +dXQpLmFkZENsYXNzKCdoaWRkZW4nKTsNCgkJCQl9DQoJCQkJZWxzZSB7DQoJCQkJ +CWlmKF90aGlzLmlzUXVvdGVPcGVuZWQgPT0gdHJ1ZSkgew0KCQkJCQkJZmllbGQu +dmFsdWUgPSAnIicgKyBfdGhpcy5jdXJyVmFsdWVzW2lfXTsNCgkJCQkJfQ0KCQkJ +CQllbHNlIHsNCgkJCQkJCWZpZWxkLnZhbHVlID0gX3RoaXMuY3VyclZhbHVlc1tp +X107DQoJCQkJCX0NCgkJCQl9DQoJCQkJCQ0KCQkJCSQoX3RoaXMucGFyYW1zLm91 +dHB1dCkuYWRkQ2xhc3MoJ2hpZGRlbicpOw0KCQkJCQ0KCQkJCV90aGlzLnBhcmFt +cy5vdXRwdXQuaW5uZXJIVE1MID0gJyc7DQoJCQkJDQoJCQkJZmllbGQuZm9jdXMo +KTsNCgkJCX0NCgkJfShpKTsNCgl9DQp9Ow0KDQoNCg0Kd2luZG93LmFkZEV2ZW50 +KCdsb2FkJywgZnVuY3Rpb24oKSB7DQoJaWYgKCQoJ3RvcGljLXRhZ3MnKSkgew0K +CQl2YXIgQXV0b3N1Z2dlc3QwMSA9IG5ldyBhdXRvc3VnZ2VzdENsYXNzKCQoJ3Rv +cGljLXRhZ3MnKSwgJ3RhZ3MnLCB0cnVlLCAnLCcpOw0KCX0NCglpZiAoJCgnc2Vh +cmNoJykpIHsNCgkJdmFyIEF1dG9zdWdnZXN0MDIgPSBuZXcgYXV0b3N1Z2dlc3RD +bGFzcygkKCdzZWFyY2gnKSwgJ3NlYXJjaCcsIGZhbHNlLCAnJyk7DQoJfQ0KICAv +KmlmICgkKCd0bycpKSB7DQoJCXZhciBBdXRvc3VnZ2VzdDAzID0gbmV3IGF1dG9z +dWdnZXN0Q2xhc3MoJCgndG8nKSwgJ3VzZXInLCB0cnVlLCAnLCcpOw0KCX0qLw0K +CWlmICgkKCd0YWctc2VhcmNoLWZpZWxkJykpIHsNCgkJdmFyIEF1dG9zdWdnZXN0 +MDQgPSBuZXcgYXV0b3N1Z2dlc3RDbGFzcygkKCd0YWctc2VhcmNoLWZpZWxkJyks +ICd0YWdzJywgZmFsc2UsICcnKTsNCgl9DQoJaWYgKCQoJ21haW4tc2VhcmNoLWZp +ZWxkJykpIHsNCgkJdmFyIEF1dG9zdWdnZXN0MDUgPSBuZXcgYXV0b3N1Z2dlc3RD +bGFzcygkKCdtYWluLXNlYXJjaC1maWVsZCcpLCAnc2VhcmNoJywgZmFsc2UsICcn +KTsNCgl9DQoJaWYgKCQoJ2Zhdm91cml0ZXNfYWRkX3RhZ3MnKSkgew0KCSAgICB2 +YXIgQXV0b3N1Z2dlc3QwNiA9IG5ldyBhdXRvc3VnZ2VzdENsYXNzKCQoJ2Zhdm91 +cml0ZXNfYWRkX3RhZ3MnKSwgJ3RhZ3MnLCB0cnVlLCAnLCcpOw0KCX0NCn0pOw0K + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline; filename=highlight.js +Content-Type: application/x-javascript; charset=utf-8; name=highlight.js +Content-Location: http://habrahabr.ru/js/1307631427/highlight.js +Content-Transfer-Encoding: Base64 + +dmFyIGhsanM9bmV3IGZ1bmN0aW9uKCl7dmFyIHE9e307dmFyIGE9e307ZnVuY3Rp +b24gbyhjKXtyZXR1cm4gYy5yZXBsYWNlKC8mL2dtLCImYW1wOyIpLnJlcGxhY2Uo +LzwvZ20sIiZsdDsiKS5yZXBsYWNlKC8+L2dtLCImZ3Q7Iil9ZnVuY3Rpb24gbCh0 +LHMpe2lmKCF0KXtyZXR1cm4gZmFsc2V9Zm9yKHZhciBjPTA7Yzx0Lmxlbmd0aDtj +Kyspe2lmKHRbY109PXMpe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9ZnVuY3Rp +b24gZSh0LHMsYyl7dmFyIHU9Im0iKyh0LmNJPyJpIjoiIikrKGM/ImciOiIiKTty +ZXR1cm4gbmV3IFJlZ0V4cChzLHUpfWZ1bmN0aW9uIGsocyl7Zm9yKHZhciBjPTA7 +YzxzLmNoaWxkTm9kZXMubGVuZ3RoO2MrKyl7bm9kZT1zLmNoaWxkTm9kZXNbY107 +aWYobm9kZS5ub2RlTmFtZT09IkNPREUiKXtyZXR1cm4gbm9kZX1pZighKG5vZGUu +bm9kZVR5cGU9PTMmJm5vZGUubm9kZVZhbHVlLm1hdGNoKC9ccysvKSkpe3JldHVy +biBudWxsfX19ZnVuY3Rpb24gaSh0KXt2YXIgcz0iIjtmb3IodmFyIGM9MDtjPHQu +Y2hpbGROb2Rlcy5sZW5ndGg7YysrKXtpZih0LmNoaWxkTm9kZXNbY10ubm9kZVR5 +cGU9PTMpe3MrPXQuY2hpbGROb2Rlc1tjXS5ub2RlVmFsdWV9ZWxzZXtpZih0LmNo +aWxkTm9kZXNbY10ubm9kZU5hbWU9PSJCUiIpe3MrPSJcbiJ9ZWxzZXtzKz1pKHQu +Y2hpbGROb2Rlc1tjXSl9fX1yZXR1cm4gc31mdW5jdGlvbiBiKHUpe3ZhciBzPXUu +Y2xhc3NOYW1lLnNwbGl0KC9ccysvKTtzPXMuY29uY2F0KHUucGFyZW50Tm9kZS5j +bGFzc05hbWUuc3BsaXQoL1xzKy8pKTtmb3IodmFyIGM9MDtjPHMubGVuZ3RoO2Mr +Kyl7dmFyIHQ9c1tjXS5yZXBsYWNlKC9ebGFuZ3VhZ2UtLywiIik7aWYodD09Im5v +LWhpZ2hsaWdodCIpe3Rocm93Ik5vIGhpZ2hsaWdodCJ9aWYocVt0XSl7cmV0dXJu +IHR9fX1mdW5jdGlvbiBkKGMpe3ZhciBzPVtdOyhmdW5jdGlvbih1LHYpe2Zvcih2 +YXIgdD0wO3Q8dS5jaGlsZE5vZGVzLmxlbmd0aDt0Kyspe2lmKHUuY2hpbGROb2Rl +c1t0XS5ub2RlVHlwZT09Myl7dis9dS5jaGlsZE5vZGVzW3RdLm5vZGVWYWx1ZS5s +ZW5ndGh9ZWxzZXtpZih1LmNoaWxkTm9kZXNbdF0ubm9kZU5hbWU9PSJCUiIpe3Yr +PTF9ZWxzZXtzLnB1c2goe2V2ZW50OiJzdGFydCIsb2Zmc2V0OnYsbm9kZTp1LmNo +aWxkTm9kZXNbdF19KTt2PWFyZ3VtZW50cy5jYWxsZWUodS5jaGlsZE5vZGVzW3Rd +LHYpO3MucHVzaCh7ZXZlbnQ6InN0b3AiLG9mZnNldDp2LG5vZGU6dS5jaGlsZE5v +ZGVzW3RdfSl9fX1yZXR1cm4gdn0pKGMsMCk7cmV0dXJuIHN9ZnVuY3Rpb24gbihB +LEIseil7dmFyIHQ9MDt2YXIgeT0iIjt2YXIgdj1bXTtmdW5jdGlvbiB3KCl7aWYo +QS5sZW5ndGgmJkIubGVuZ3RoKXtpZihBWzBdLm9mZnNldCE9QlswXS5vZmZzZXQp +e3JldHVybihBWzBdLm9mZnNldDxCWzBdLm9mZnNldCk/QTpCfWVsc2V7cmV0dXJu +KEFbMF0uZXZlbnQ9PSJzdGFydCImJkJbMF0uZXZlbnQ9PSJzdG9wIik/QjpBfX1l +bHNle3JldHVybiBBLmxlbmd0aD9BOkJ9fWZ1bmN0aW9uIHUoRil7dmFyIEc9Ijwi +K0Yubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtmb3IodmFyIEQ9MDtEPEYuYXR0cmli +dXRlcy5sZW5ndGg7RCsrKXt2YXIgRT1GLmF0dHJpYnV0ZXNbRF07Rys9IiAiK0Uu +bm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZihFLm5vZGVWYWx1ZSE9dW5kZWZpbmVk +KXtHKz0nPSInK28oRS5ub2RlVmFsdWUpKyciJ319cmV0dXJuIEcrIj4ifWZ1bmN0 +aW9uIEMoRCl7cmV0dXJuIjwvIitELm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkrIj4i +fXdoaWxlKEEubGVuZ3RofHxCLmxlbmd0aCl7dmFyIHg9dygpLnNwbGljZSgwLDEp +WzBdO3krPW8oei5zdWJzdHIodCx4Lm9mZnNldC10KSk7dD14Lm9mZnNldDtpZih4 +LmV2ZW50PT0ic3RhcnQiKXt5Kz11KHgubm9kZSk7di5wdXNoKHgubm9kZSl9ZWxz +ZXtpZih4LmV2ZW50PT0ic3RvcCIpe3ZhciBzPXYubGVuZ3RoO2Rve3MtLTt2YXIg +Yz12W3NdO3krPUMoYyl9d2hpbGUoYyE9eC5ub2RlKTt2LnNwbGljZShzLDEpO3do +aWxlKHM8di5sZW5ndGgpe3krPXUodltzXSk7cysrfX19fXkrPXouc3Vic3RyKHQp +O3JldHVybiB5fWZ1bmN0aW9uIGgoSyxFKXtmdW5jdGlvbiBMKFEsUCl7US5zbT1b +XTtmb3IodmFyIE89MDtPPFEuYy5sZW5ndGg7TysrKXtmb3IodmFyIE49MDtOPFAu +bS5sZW5ndGg7TisrKXtpZihQLm1bTl0uY049PVEuY1tPXSl7US5zbVtRLnNtLmxl +bmd0aF09UC5tW05dfX19fWZ1bmN0aW9uIEEoTixQKXtpZighUC5jKXtyZXR1cm4g +bnVsbH1pZighUC5zbSl7TChQLEkpfWZvcih2YXIgTz0wO088UC5zbS5sZW5ndGg7 +TysrKXtpZihQLnNtW09dLmJSLnRlc3QoTikpe3JldHVybiBQLnNtW09dfX1yZXR1 +cm4gbnVsbH1mdW5jdGlvbiB4KE8sTil7aWYoRFtPXS5lJiZEW09dLmVSLnRlc3Qo +Tikpe3JldHVybiAxfWlmKERbT10uZVcpe3ZhciBQPXgoTy0xLE4pO3JldHVybiBQ +P1ArMTowfXJldHVybiAwfWZ1bmN0aW9uIHkoTixPKXtyZXR1cm4gTy5pUiYmTy5p +Ui50ZXN0KE4pfWZ1bmN0aW9uIEIoVCxSKXt2YXIgUD1bXTtmdW5jdGlvbiBTKFUp +e2lmKCFsKFAsVSkpe1BbUC5sZW5ndGhdPVV9fWlmKFQuYyl7Zm9yKHZhciBPPTA7 +TzxSLm0ubGVuZ3RoO08rKyl7aWYobChULmMsUi5tW09dLmNOKSl7UyhSLm1bT10u +Yil9fX12YXIgTj1ELmxlbmd0aC0xO2Rve2lmKERbTl0uZSl7UyhEW05dLmUpfU4t +LX13aGlsZShEW04rMV0uZVcpO2lmKFQuaSl7UyhULmkpfXZhciBRPSIoIitQWzBd +O2Zvcih2YXIgTz0wO088UC5sZW5ndGg7TysrKXtRKz0ifCIrUFtPXX1RKz0iKSI7 +cmV0dXJuIGUoUixRKX1mdW5jdGlvbiB0KFAsTyl7dmFyIFE9RFtELmxlbmd0aC0x +XTtpZighUS50KXtRLnQ9QihRLEkpfVA9UC5zdWJzdHIoTyk7dmFyIE49US50LmV4 +ZWMoUCk7aWYoIU4pe3JldHVybltQLCIiLHRydWVdfWlmKE4uaW5kZXg9PTApe3Jl +dHVyblsiIixOWzBdLGZhbHNlXX1lbHNle3JldHVybltQLnN1YnN0cigwLE4uaW5k +ZXgpLE5bMF0sZmFsc2VdfX1mdW5jdGlvbiBzKFIsTil7dmFyIE89SS5jST9OWzBd +LnRvTG93ZXJDYXNlKCk6TlswXTtmb3IodmFyIFEgaW4gUi5rZXl3b3JkR3JvdXBz +KXtpZighUi5rZXl3b3JkR3JvdXBzLmhhc093blByb3BlcnR5KFEpKXtjb250aW51 +ZX12YXIgUD1SLmtleXdvcmRHcm91cHNbUV0uaGFzT3duUHJvcGVydHkoTyk7aWYo +UCl7cmV0dXJuW1EsUF19fXJldHVybiBmYWxzZX1mdW5jdGlvbiBHKFEsVCl7aWYo +IVQua3x8IVQubCl7cmV0dXJuIG8oUSl9aWYoIVQubFIpe3ZhciBTPSIoIitULmxb +MF07Zm9yKHZhciBQPTE7UDxULmwubGVuZ3RoO1ArKyl7Uys9InwiK1QubFtQXX1T +Kz0iKSI7VC5sUj1lKEksUyx0cnVlKX12YXIgUj0iIjt2YXIgVT0wO1QubFIubGFz +dEluZGV4PTA7dmFyIE89VC5sUi5leGVjKFEpO3doaWxlKE8pe1IrPW8oUS5zdWJz +dHIoVSxPLmluZGV4LVUpKTt2YXIgTj1zKFQsTyk7aWYoTil7dSs9TlsxXTtSKz0n +PHNwYW4gY2xhc3M9IicrTlswXSsnIj4nK28oT1swXSkrIjwvc3Bhbj4ifWVsc2V7 +Uis9byhPWzBdKX1VPVQubFIubGFzdEluZGV4O089VC5sUi5leGVjKFEpfVIrPW8o +US5zdWJzdHIoVSxRLmxlbmd0aC1VKSk7cmV0dXJuIFJ9ZnVuY3Rpb24gTShOLFAp +e2lmKFAuc3ViTGFuZ3VhZ2UmJmFbUC5zdWJMYW5ndWFnZV0pe3ZhciBPPWgoUC5z +dWJMYW5ndWFnZSxOKTt1Kz1PLmtleXdvcmRfY291bnQ7Qys9Ty5yO3JldHVybiBP +LnZhbHVlfWVsc2V7cmV0dXJuIEcoTixQKX19ZnVuY3Rpb24gSihQLE4pe3ZhciBP +PVAubk0/IiI6JzxzcGFuIGNsYXNzPSInK1AuZGlzcGxheUNsYXNzTmFtZSsnIj4n +O2lmKFAuckIpe2MrPU87UC5idWZmZXI9IiJ9ZWxzZXtpZihQLmVCKXtjKz1vKE4p +K087UC5idWZmZXI9IiJ9ZWxzZXtjKz1PO1AuYnVmZmVyPU59fURbRC5sZW5ndGhd +PVB9ZnVuY3Rpb24gRihTLE8sVCl7dmFyIFU9RFtELmxlbmd0aC0xXTtpZihUKXtj +Kz1NKFUuYnVmZmVyK1MsVSk7cmV0dXJuIGZhbHNlfXZhciBQPUEoTyxVKTtpZihQ +KXtjKz1NKFUuYnVmZmVyK1MsVSk7SihQLE8pO0MrPVAucjtyZXR1cm4gUC5yQn12 +YXIgTj14KEQubGVuZ3RoLTEsTyk7aWYoTil7dmFyIFI9VS5uTT8iIjoiPC9zcGFu +PiI7aWYoVS5yRSl7Yys9TShVLmJ1ZmZlcitTLFUpK1J9ZWxzZXtpZihVLmVFKXtj +Kz1NKFUuYnVmZmVyK1MsVSkrUitvKE8pfWVsc2V7Yys9TShVLmJ1ZmZlcitTK08s +VSkrUn19d2hpbGUoTj4xKXtSPURbRC5sZW5ndGgtMl0ubk0/IiI6Ijwvc3Bhbj4i +O2MrPVI7Ti0tO0QubGVuZ3RoLS19RC5sZW5ndGgtLTtEW0QubGVuZ3RoLTFdLmJ1 +ZmZlcj0iIjtpZihVLnN0YXJ0cyl7Zm9yKHZhciBRPTA7UTxJLm0ubGVuZ3RoO1Er +Kyl7aWYoSS5tW1FdLmNOPT1VLnN0YXJ0cyl7SihJLm1bUV0sIiIpO2JyZWFrfX19 +cmV0dXJuIFUuckV9aWYoeShPLFUpKXt0aHJvdyJJbGxlZ2FsIn19dmFyIEk9cVtL +XTt2YXIgRD1bSS5kTV07dmFyIEM9MDt2YXIgdT0wO3ZhciBjPSIiO3RyeXt2YXIg +dz0wO0kuZE0uYnVmZmVyPSIiO2Rve3ZhciB6PXQoRSx3KTt2YXIgdj1GKHpbMF0s +elsxXSx6WzJdKTt3Kz16WzBdLmxlbmd0aDtpZighdil7dys9elsxXS5sZW5ndGh9 +fXdoaWxlKCF6WzJdKTtpZihELmxlbmd0aD4xKXt0aHJvdyJJbGxlZ2FsIn1yZXR1 +cm57cjpDLGtleXdvcmRfY291bnQ6dSx2YWx1ZTpjfX1jYXRjaChIKXtpZihIPT0i +SWxsZWdhbCIpe3JldHVybntyOjAsa2V5d29yZF9jb3VudDowLHZhbHVlOm8oRSl9 +fWVsc2V7dGhyb3cgSH19fWZ1bmN0aW9uIGooKXtmb3IodmFyIHMgaW4gcSl7aWYo +IXEuaGFzT3duUHJvcGVydHkocykpe2NvbnRpbnVlfXZhciB0PXFbc107Zm9yKHZh +ciBjPTA7Yzx0Lm0ubGVuZ3RoO2MrKyl7dmFyIHU9dC5tW2NdO2lmKHUuYil7dS5i +Uj1lKHQsIl4iK3UuYil9aWYodS5lKXt1LmVSPWUodCwiXiIrdS5lKX1pZih1Lmkp +e3UuaVI9ZSh0LCJeKD86Iit1LmkrIikiKX10LmRNLmlSPWUodCwiXig/OiIrdC5k +TS5pKyIpIik7aWYodS5yPT11bmRlZmluZWQpe3Uucj0xfWlmKCF1LmRpc3BsYXlD +bGFzc05hbWUpe3UuZGlzcGxheUNsYXNzTmFtZT11LmNOfX19fWZ1bmN0aW9uIGco +KXtmdW5jdGlvbiB0KHcpe2lmKCF3LmtleXdvcmRHcm91cHMpe2Zvcih2YXIgdiBp +biB3Lmspe2lmKCF3LmsuaGFzT3duUHJvcGVydHkodikpe2NvbnRpbnVlfWlmKHcu +a1t2XSBpbnN0YW5jZW9mIE9iamVjdCl7dy5rZXl3b3JkR3JvdXBzPXcua31lbHNl +e3cua2V5d29yZEdyb3Vwcz17a2V5d29yZDp3Lmt9fWJyZWFrfX19Zm9yKHZhciBz +IGluIHEpe2lmKCFxLmhhc093blByb3BlcnR5KHMpKXtjb250aW51ZX12YXIgdT1x +W3NdO3QodS5kTSk7Zm9yKHZhciBjPTA7Yzx1Lm0ubGVuZ3RoO2MrKyl7dCh1Lm1b +Y10pfX19ZnVuY3Rpb24gZigpe2lmKGYuY2FsbGVkKXtyZXR1cm59Zi5jYWxsZWQ9 +dHJ1ZTtqKCk7ZygpO2E9cX1mdW5jdGlvbiByKHksQyl7ZigpO3RyeXt2YXIgRj1p +KHkpO3ZhciB2PWIoeSl9Y2F0Y2goeil7aWYoej09Ik5vIGhpZ2hsaWdodCIpe3Jl +dHVybn19aWYodil7dmFyIEI9aCh2LEYpLnZhbHVlfWVsc2V7dmFyIEQ9MDtmb3Io +dmFyIEUgaW4gYSl7aWYoIWEuaGFzT3duUHJvcGVydHkoRSkpe2NvbnRpbnVlfXZh +ciB0PWgoRSxGKTt2YXIgYz10LmtleXdvcmRfY291bnQrdC5yO2lmKGM+RCl7RD1j +O3ZhciBCPXQudmFsdWU7dj1FfX19aWYoQil7dmFyIHg9eS5jbGFzc05hbWU7aWYo +IXgubWF0Y2godikpe3grPSIgIit2fXZhciBzPWQoeSk7aWYocy5sZW5ndGgpe3Zh +ciB1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInByZSIpO3UuaW5uZXJIVE1MPUI7 +Qj1uKHMsZCh1KSxGKX1pZihDKXtCPUIucmVwbGFjZSgvXigoPFtePl0rPnxcdCkr +KS9nbSxmdW5jdGlvbihHLEosSSxIKXtyZXR1cm4gSi5yZXBsYWNlKC9cdC9nLEMp +fSl9dmFyIEE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7QS5pbm5lckhU +TUw9JzxwcmU+PGNvZGUgY2xhc3M9IicreCsnIj4nK0IrIjwvY29kZT48L3ByZT4i +O3ZhciB3PXkucGFyZW50Tm9kZS5wYXJlbnROb2RlO3cucmVwbGFjZUNoaWxkKEEu +Zmlyc3RDaGlsZCx5LnBhcmVudE5vZGUpfX1mdW5jdGlvbiBtKCl7aWYobS5jYWxs +ZWQpe3JldHVybn1tLmNhbGxlZD10cnVlO2YoKTtpZihhcmd1bWVudHMubGVuZ3Ro +KXtmb3IodmFyIGM9MDtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKXtpZihxW2FyZ3Vt +ZW50c1tjXV0pe2FbYXJndW1lbnRzW2NdXT1xW2FyZ3VtZW50c1tjXV19fX12YXIg +dD1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicHJlIik7Zm9yKHZhciBj +PTA7Yzx0Lmxlbmd0aDtjKyspe3ZhciBzPWsodFtjXSk7aWYocyl7cihzLGhsanMu +dGFiUmVwbGFjZSl9fX1mdW5jdGlvbiBwKCl7dmFyIGM9YXJndW1lbnRzO3ZhciBz +PWZ1bmN0aW9uKCl7bS5hcHBseShudWxsLGMpfTtpZih3aW5kb3cuYWRkRXZlbnRM +aXN0ZW5lcil7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2Fk +ZWQiLHMsZmFsc2UpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixzLGZh +bHNlKX1lbHNle2lmKHdpbmRvdy5hdHRhY2hFdmVudCl7d2luZG93LmF0dGFjaEV2 +ZW50KCJvbmxvYWQiLHMpfWVsc2V7d2luZG93Lm9ubG9hZD1zfX19dGhpcy5MQU5H +VUFHRVM9cTt0aGlzLmluaXRIaWdobGlnaHRpbmdPbkxvYWQ9cDt0aGlzLmhpZ2hs +aWdodEJsb2NrPXI7dGhpcy5pbml0SGlnaGxpZ2h0aW5nPW07dGhpcy5JUj0iW2Et +ekEtWl1bYS16QS1aMC05X10qIjt0aGlzLlVJUj0iW2EtekEtWl9dW2EtekEtWjAt +OV9dKiI7dGhpcy5OUj0iXFxiXFxkKyhcXC5cXGQrKT8iO3RoaXMuQ05SPSJcXGIo +MHhbQS1aYS16MC05XSt8XFxkKyhcXC5cXGQrKT8pIjt0aGlzLlJTUj0iIXwhPXwh +PT18JXwlPXwmfCYmfCY9fFxcKnxcXCo9fFxcK3xcXCs9fCx8XFwufC18LT18L3wv +PXw6fDt8PHw8PHw8PD18PD18PXw9PXw9PT18Pnw+PXw+Pnw+Pj18Pj4+fD4+Pj18 +XFw/fFxcW3xcXHt8XFwofFxcXnxcXF49fFxcfHxcXHw9fFxcfFxcfHx+Ijt0aGlz +LkFTTT17Y046InN0cmluZyIsYjoiJyIsZToiJyIsaToiXFxuIixjOlsiZXNjYXBl +Il0scjowfTt0aGlzLlFTTT17Y046InN0cmluZyIsYjonIicsZTonIicsaToiXFxu +IixjOlsiZXNjYXBlIl0scjowfTt0aGlzLkJFPXtjTjoiZXNjYXBlIixiOiJcXFxc +LiIsZToiXiIsbk06dHJ1ZSxyOjB9O3RoaXMuQ0xDTT17Y046ImNvbW1lbnQiLGI6 +Ii8vIixlOiIkIixyOjB9O3RoaXMuQ0JMQ0xNPXtjTjoiY29tbWVudCIsYjoiL1xc +KiIsZToiXFwqLyJ9O3RoaXMuSENNPXtjTjoiY29tbWVudCIsYjoiIyIsZToiJCJ9 +O3RoaXMuQ05NPXtjTjoibnVtYmVyIixiOnRoaXMuQ05SLGU6Il4iLHI6MH19KCk7 +dmFyIGluaXRIaWdobGlnaHRpbmdPbkxvYWQ9aGxqcy5pbml0SGlnaGxpZ2h0aW5n +T25Mb2FkO2hsanMuTEFOR1VBR0VTLmJhc2g9ZnVuY3Rpb24oKXt2YXIgYT17InRy +dWUiOjEsImZhbHNlIjoxfTtyZXR1cm57ZE06e2w6W2hsanMuSVJdLGM6WyJzdHJp +bmciLCJzaGViYW5nIiwiY29tbWVudCIsIm51bWJlciIsInRlc3RfY29uZGl0aW9u +Iiwic3RyaW5nIiwidmFyaWFibGUiXSxrOntrZXl3b3JkOnsiaWYiOjEsdGhlbjox +LCJlbHNlIjoxLGZpOjEsImZvciI6MSwiYnJlYWsiOjEsImNvbnRpbnVlIjoxLCJ3 +aGlsZSI6MSwiaW4iOjEsImRvIjoxLGRvbmU6MSxlY2hvOjEsZXhpdDoxLCJyZXR1 +cm4iOjEsc2V0OjEsZGVjbGFyZToxfSxsaXRlcmFsOmF9fSxjSTpmYWxzZSxtOlt7 +Y046InNoZWJhbmciLGI6IigjIVxcL2JpblxcL2Jhc2gpfCgjIVxcL2JpblxcL3No +KSIsZToiXiIscjoxMH0saGxqcy5IQ00se2NOOiJ0ZXN0X2NvbmRpdGlvbiIsYjoi +XFxbICIsZToiIFxcXSIsYzpbInN0cmluZyIsInZhcmlhYmxlIiwibnVtYmVyIl0s +bDpbaGxqcy5JUl0sazp7bGl0ZXJhbDphfSxyOjB9LHtjTjoidGVzdF9jb25kaXRp +b24iLGI6IlxcW1xcWyAiLGU6IiBcXF1cXF0iLGM6WyJzdHJpbmciLCJ2YXJpYWJs +ZSIsIm51bWJlciJdLGw6W2hsanMuSVJdLGs6e2xpdGVyYWw6YX19LHtjTjoidmFy +aWFibGUiLGI6IlxcJChbYS16QS1aMC05X10rKVxcYiIsZToiXiJ9LHtjTjoidmFy +aWFibGUiLGI6IlxcJFxceygoW159XSl8KFxcXFx9KSkrXFx9IixlOiJeIixjOlsi +bnVtYmVyIl19LHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxpOiJcXG4iLGM6WyJl +c2NhcGUiLCJ2YXJpYWJsZSJdLHI6MH0se2NOOiJzdHJpbmciLGI6JyInLGU6JyIn +LGk6IlxcbiIsYzpbImVzY2FwZSIsInZhcmlhYmxlIl0scjowfSxobGpzLkJFLGhs +anMuQ05NLHtjTjoiY29tbWVudCIsYjoiXFwvXFwvIixlOiIkIixpOiIuIn1dfX0o +KTtobGpzLkxBTkdVQUdFUy5jcz17ZE06e2w6W2hsanMuVUlSXSxjOlsiY29tbWVu +dCIsInN0cmluZyIsIm51bWJlciJdLGs6eyJhYnN0cmFjdCI6MSxhczoxLGJhc2U6 +MSxib29sOjEsImJyZWFrIjoxLCJieXRlIjoxLCJjYXNlIjoxLCJjYXRjaCI6MSwi +Y2hhciI6MSxjaGVja2VkOjEsImNsYXNzIjoxLCJjb25zdCI6MSwiY29udGludWUi +OjEsZGVjaW1hbDoxLCJkZWZhdWx0IjoxLGRlbGVnYXRlOjEsImRvIjoxLCJkbyI6 +MSwiZG91YmxlIjoxLCJlbHNlIjoxLCJlbnVtIjoxLGV2ZW50OjEsZXhwbGljaXQ6 +MSxleHRlcm46MSwiZmFsc2UiOjEsImZpbmFsbHkiOjEsZml4ZWQ6MSwiZmxvYXQi +OjEsImZvciI6MSxmb3JlYWNoOjEsImdvdG8iOjEsImlmIjoxLGltcGxpY2l0OjEs +ImluIjoxLCJpbnQiOjEsImludGVyZmFjZSI6MSxpbnRlcm5hbDoxLGlzOjEsbG9j +azoxLCJsb25nIjoxLG5hbWVzcGFjZToxLCJuZXciOjEsIm51bGwiOjEsb2JqZWN0 +OjEsb3BlcmF0b3I6MSxvdXQ6MSxvdmVycmlkZToxLHBhcmFtczoxLCJwcml2YXRl +IjoxLCJwcm90ZWN0ZWQiOjEsInB1YmxpYyI6MSxyZWFkb25seToxLHJlZjoxLCJy +ZXR1cm4iOjEsc2J5dGU6MSxzZWFsZWQ6MSwic2hvcnQiOjEsc2l6ZW9mOjEsc3Rh +Y2thbGxvYzoxLCJzdGF0aWMiOjEsc3RyaW5nOjEsc3RydWN0OjEsInN3aXRjaCI6 +MSwidGhpcyI6MSwidGhyb3ciOjEsInRydWUiOjEsInRyeSI6MSwidHlwZW9mIjox +LHVpbnQ6MSx1bG9uZzoxLHVuY2hlY2tlZDoxLHVuc2FmZToxLHVzaG9ydDoxLHVz +aW5nOjEsdmlydHVhbDoxLCJ2b2xhdGlsZSI6MSwidm9pZCI6MSwid2hpbGUiOjEs +YXNjZW5kaW5nOjEsZGVzY2VuZGluZzoxLGZyb206MSxnZXQ6MSxncm91cDoxLGlu +dG86MSxqb2luOjEsbGV0OjEsb3JkZXJieToxLHBhcnRpYWw6MSxzZWxlY3Q6MSxz +ZXQ6MSx2YWx1ZToxLCJ2YXIiOjEsd2hlcmU6MSx5aWVsZDoxfX0sbTpbe2NOOiJj +b21tZW50IixiOiIvLy8iLGU6IiQiLHJCOnRydWUsYzpbInhtbERvY1RhZyJdfSx7 +Y046InhtbERvY1RhZyIsYjoiLy8vfDwhLS18LS0+IixlOiJeIn0se2NOOiJ4bWxE +b2NUYWciLGI6IjwvPyIsZToiPiJ9LHtjTjoic3RyaW5nIixiOidAIicsZTonIics +YzpbInF1b3RlUXVvdGUiXX0se2NOOiJxdW90ZVF1b3RlIixiOiciIicsZToiXiJ9 +LGhsanMuQ0xDTSxobGpzLkNCTENMTSxobGpzLkFTTSxobGpzLlFTTSxobGpzLkJF +LGhsanMuQ05NXX07aGxqcy5MQU5HVUFHRVMucnVieT1mdW5jdGlvbigpe3ZhciBh +PSJbYS16QS1aX11bYS16QS1aMC05X10qKFxcIXxcXD8pPyI7dmFyIGM9IlthLXpB +LVpfXVxcdypbIT89XT98Wy0rfl1cXEB8PDx8Pj58PX58PT09P3w8PT58Wzw+XT0/ +fFxcKlxcKnxbLS8rJV4mKn5gfF18XFxbXFxdPT8iO3ZhciBiPVsiY29tbWVudCIs +InN0cmluZyIsImNoYXIiLCJjbGFzcyIsImZ1bmN0aW9uIiwiY29uc3RhbnQiLCJz +eW1ib2wiLCJudW1iZXIiLCJ2YXJpYWJsZSIsImlkZW50aWZpZXIiLCJyZWdleHBf +Y29udGFpbmVyIl07dmFyIGQ9e2tleXdvcmQ6e2FuZDoxLCJmYWxzZSI6MSx0aGVu +OjEsZGVmaW5lZDoxLG1vZHVsZToxLCJpbiI6MSwicmV0dXJuIjoxLHJlZG86MSwi +aWYiOjEsQkVHSU46MSxyZXRyeToxLGVuZDoxLCJmb3IiOjEsInRydWUiOjEsc2Vs +ZjoxLHdoZW46MSxuZXh0OjEsdW50aWw6MSwiZG8iOjEsYmVnaW46MSx1bmxlc3M6 +MSxFTkQ6MSxyZXNjdWU6MSxuaWw6MSwiZWxzZSI6MSwiYnJlYWsiOjEsdW5kZWY6 +MSxub3Q6MSwic3VwZXIiOjEsImNsYXNzIjoxLCJjYXNlIjoxLHJlcXVpcmU6MSx5 +aWVsZDoxLGFsaWFzOjEsIndoaWxlIjoxLGVuc3VyZToxLGVsc2lmOjEsb3I6MSxk +ZWY6MX0sa2V5bWV0aG9kczp7X19pZF9fOjEsX19zZW5kX186MSxhYm9ydDoxLGFi +czoxLCJhbGw/IjoxLGFsbG9jYXRlOjEsYW5jZXN0b3JzOjEsImFueT8iOjEsYXJp +dHk6MSxhc3NvYzoxLGF0OjEsYXRfZXhpdDoxLGF1dG9sb2FkOjEsImF1dG9sb2Fk +PyI6MSwiYmV0d2Vlbj8iOjEsYmluZGluZzoxLGJpbm1vZGU6MSwiYmxvY2tfZ2l2 +ZW4/IjoxLGNhbGw6MSxjYWxsY2M6MSxjYWxsZXI6MSxjYXBpdGFsaXplOjEsImNh +cGl0YWxpemUhIjoxLGNhc2VjbXA6MSwiY2F0Y2giOjEsY2VpbDoxLGNlbnRlcjox +LGNob21wOjEsImNob21wISI6MSxjaG9wOjEsImNob3AhIjoxLGNocjoxLCJjbGFz +cyI6MSxjbGFzc19ldmFsOjEsImNsYXNzX3ZhcmlhYmxlX2RlZmluZWQ/IjoxLGNs +YXNzX3ZhcmlhYmxlczoxLGNsZWFyOjEsY2xvbmU6MSxjbG9zZToxLGNsb3NlX3Jl +YWQ6MSxjbG9zZV93cml0ZToxLCJjbG9zZWQ/IjoxLGNvZXJjZToxLGNvbGxlY3Q6 +MSwiY29sbGVjdCEiOjEsY29tcGFjdDoxLCJjb21wYWN0ISI6MSxjb25jYXQ6MSwi +Y29uc3RfZGVmaW5lZD8iOjEsY29uc3RfZ2V0OjEsY29uc3RfbWlzc2luZzoxLGNv +bnN0X3NldDoxLGNvbnN0YW50czoxLGNvdW50OjEsY3J5cHQ6MSwiZGVmYXVsdCI6 +MSxkZWZhdWx0X3Byb2M6MSwiZGVsZXRlIjoxLCJkZWxldGUhIjoxLGRlbGV0ZV9h +dDoxLGRlbGV0ZV9pZjoxLGRldGVjdDoxLGRpc3BsYXk6MSxkaXY6MSxkaXZtb2Q6 +MSxkb3duY2FzZToxLCJkb3duY2FzZSEiOjEsZG93bnRvOjEsZHVtcDoxLGR1cDox +LGVhY2g6MSxlYWNoX2J5dGU6MSxlYWNoX2luZGV4OjEsZWFjaF9rZXk6MSxlYWNo +X2xpbmU6MSxlYWNoX3BhaXI6MSxlYWNoX3ZhbHVlOjEsZWFjaF93aXRoX2luZGV4 +OjEsImVtcHR5PyI6MSxlbnRyaWVzOjEsZW9mOjEsImVvZj8iOjEsImVxbD8iOjEs +ImVxdWFsPyI6MSwiZXZhbCI6MSxleGVjOjEsZXhpdDoxLCJleGl0ISI6MSxleHRl +bmQ6MSxmYWlsOjEsZmNudGw6MSxmZXRjaDoxLGZpbGVubzoxLGZpbGw6MSxmaW5k +OjEsZmluZF9hbGw6MSxmaXJzdDoxLGZsYXR0ZW46MSwiZmxhdHRlbiEiOjEsZmxv +b3I6MSxmbHVzaDoxLGZvcl9mZDoxLGZvcmVhY2g6MSxmb3JrOjEsZm9ybWF0OjEs +ZnJlZXplOjEsImZyb3plbj8iOjEsZnN5bmM6MSxnZXRjOjEsZ2V0czoxLGdsb2Jh +bF92YXJpYWJsZXM6MSxncmVwOjEsZ3N1YjoxLCJnc3ViISI6MSwiaGFzX2tleT8i +OjEsImhhc192YWx1ZT8iOjEsaGFzaDoxLGhleDoxLGlkOjEsaW5jbHVkZToxLCJp +bmNsdWRlPyI6MSxpbmNsdWRlZF9tb2R1bGVzOjEsaW5kZXg6MSxpbmRleGVzOjEs +aW5kaWNlczoxLGluZHVjZWRfZnJvbToxLGluamVjdDoxLGluc2VydDoxLGluc3Bl +Y3Q6MSxpbnN0YW5jZV9ldmFsOjEsaW5zdGFuY2VfbWV0aG9kOjEsaW5zdGFuY2Vf +bWV0aG9kczoxLCJpbnN0YW5jZV9vZj8iOjEsImluc3RhbmNlX3ZhcmlhYmxlX2Rl +ZmluZWQ/IjoxLGluc3RhbmNlX3ZhcmlhYmxlX2dldDoxLGluc3RhbmNlX3Zhcmlh +YmxlX3NldDoxLGluc3RhbmNlX3ZhcmlhYmxlczoxLCJpbnRlZ2VyPyI6MSxpbnRl +cm46MSxpbnZlcnQ6MSxpb2N0bDoxLCJpc19hPyI6MSxpc2F0dHk6MSwiaXRlcmF0 +b3I/IjoxLGpvaW46MSwia2V5PyI6MSxrZXlzOjEsImtpbmRfb2Y/IjoxLGxhbWJk +YToxLGxhc3Q6MSxsZW5ndGg6MSxsaW5lbm86MSxsanVzdDoxLGxvYWQ6MSxsb2Nh +bF92YXJpYWJsZXM6MSxsb29wOjEsbHN0cmlwOjEsImxzdHJpcCEiOjEsbWFwOjEs +Im1hcCEiOjEsbWF0Y2g6MSxtYXg6MSwibWVtYmVyPyI6MSxtZXJnZToxLCJtZXJn +ZSEiOjEsbWV0aG9kOjEsIm1ldGhvZF9kZWZpbmVkPyI6MSxtZXRob2RfbWlzc2lu +ZzoxLG1ldGhvZHM6MSxtaW46MSxtb2R1bGVfZXZhbDoxLG1vZHVsbzoxLG5hbWU6 +MSxuZXN0aW5nOjEsIm5ldyI6MSxuZXh0OjEsIm5leHQhIjoxLCJuaWw/IjoxLG5p +dGVtczoxLCJub256ZXJvPyI6MSxvYmplY3RfaWQ6MSxvY3Q6MSxvcGVuOjEscGFj +azoxLHBhcnRpdGlvbjoxLHBpZDoxLHBpcGU6MSxwb3A6MSxwb3BlbjoxLHBvczox +LHByZWM6MSxwcmVjX2Y6MSxwcmVjX2k6MSxwcmludDoxLHByaW50ZjoxLHByaXZh +dGVfY2xhc3NfbWV0aG9kOjEscHJpdmF0ZV9pbnN0YW5jZV9tZXRob2RzOjEsInBy +aXZhdGVfbWV0aG9kX2RlZmluZWQ/IjoxLHByaXZhdGVfbWV0aG9kczoxLHByb2M6 +MSxwcm90ZWN0ZWRfaW5zdGFuY2VfbWV0aG9kczoxLCJwcm90ZWN0ZWRfbWV0aG9k +X2RlZmluZWQ/IjoxLHByb3RlY3RlZF9tZXRob2RzOjEscHVibGljX2NsYXNzX21l +dGhvZDoxLHB1YmxpY19pbnN0YW5jZV9tZXRob2RzOjEsInB1YmxpY19tZXRob2Rf +ZGVmaW5lZD8iOjEscHVibGljX21ldGhvZHM6MSxwdXNoOjEscHV0YzoxLHB1dHM6 +MSxxdW86MSxyYWlzZToxLHJhbmQ6MSxyYXNzb2M6MSxyZWFkOjEscmVhZF9ub25i +bG9jazoxLHJlYWRjaGFyOjEscmVhZGxpbmU6MSxyZWFkbGluZXM6MSxyZWFkcGFy +dGlhbDoxLHJlaGFzaDoxLHJlamVjdDoxLCJyZWplY3QhIjoxLHJlbWFpbmRlcjox +LHJlb3BlbjoxLHJlcGxhY2U6MSxyZXF1aXJlOjEsInJlc3BvbmRfdG8/IjoxLHJl +dmVyc2U6MSwicmV2ZXJzZSEiOjEscmV2ZXJzZV9lYWNoOjEscmV3aW5kOjEscmlu +ZGV4OjEscmp1c3Q6MSxyb3VuZDoxLHJzdHJpcDoxLCJyc3RyaXAhIjoxLHNjYW46 +MSxzZWVrOjEsc2VsZWN0OjEsc2VuZDoxLHNldF90cmFjZV9mdW5jOjEsc2hpZnQ6 +MSxzaW5nbGV0b25fbWV0aG9kX2FkZGVkOjEsc2luZ2xldG9uX21ldGhvZHM6MSxz +aXplOjEsc2xlZXA6MSxzbGljZToxLCJzbGljZSEiOjEsc29ydDoxLCJzb3J0ISI6 +MSxzb3J0X2J5OjEsc3BsaXQ6MSxzcHJpbnRmOjEsc3F1ZWV6ZToxLCJzcXVlZXpl +ISI6MSxzcmFuZDoxLHN0YXQ6MSxzdGVwOjEsc3RvcmU6MSxzdHJpcDoxLCJzdHJp +cCEiOjEsc3ViOjEsInN1YiEiOjEsc3VjYzoxLCJzdWNjISI6MSxzdW06MSxzdXBl +cmNsYXNzOjEsc3dhcGNhc2U6MSwic3dhcGNhc2UhIjoxLHN5bmM6MSxzeXNjYWxs +OjEsc3lzb3BlbjoxLHN5c3JlYWQ6MSxzeXNzZWVrOjEsc3lzdGVtOjEsc3lzd3Jp +dGU6MSx0YWludDoxLCJ0YWludGVkPyI6MSx0ZWxsOjEsdGVzdDoxLCJ0aHJvdyI6 +MSx0aW1lczoxLHRvX2E6MSx0b19hcnk6MSx0b19mOjEsdG9faGFzaDoxLHRvX2k6 +MSx0b19pbnQ6MSx0b19pbzoxLHRvX3Byb2M6MSx0b19zOjEsdG9fc3RyOjEsdG9f +c3ltOjEsdHI6MSwidHIhIjoxLHRyX3M6MSwidHJfcyEiOjEsdHJhY2VfdmFyOjEs +dHJhbnNwb3NlOjEsdHJhcDoxLHRydW5jYXRlOjEsInR0eT8iOjEsdHlwZToxLHVu +Z2V0YzoxLHVuaXE6MSwidW5pcSEiOjEsdW5wYWNrOjEsdW5zaGlmdDoxLHVudGFp +bnQ6MSx1bnRyYWNlX3ZhcjoxLHVwY2FzZToxLCJ1cGNhc2UhIjoxLHVwZGF0ZTox +LHVwdG86MSwidmFsdWU/IjoxLHZhbHVlczoxLHZhbHVlc19hdDoxLHdhcm46MSx3 +cml0ZToxLHdyaXRlX25vbmJsb2NrOjEsInplcm8/IjoxLHppcDoxfX07cmV0dXJu +e2RNOntsOlthXSxjOmIsazpkfSxtOlt7Y046ImNvbW1lbnQiLGI6IiMiLGU6IiQi +LGM6WyJ5YXJkb2N0YWciXX0se2NOOiJ5YXJkb2N0YWciLGI6IkBbQS1aYS16XSsi +LGU6Il4ifSx7Y046ImNvbW1lbnQiLGI6Il5cXD1iZWdpbiIsZToiXlxcPWVuZCIs +YzpbInlhcmRvY3RhZyJdLHI6MTB9LHtjTjoiY29tbWVudCIsYjoiXl9fRU5EX18i +LGU6IlxcbiQifSx7Y046InBhcmFtcyIsYjoiXFwoIixlOiJcXCkiLGw6W2FdLGs6 +ZCxjOmJ9LHtjTjoiZnVuY3Rpb24iLGI6IlxcYmRlZlxccysiLGU6IiB8JHw7Iixs +OlthXSxrOmQsYzpbImZ0aXRsZSIsInBhcmFtcyIsImNvbW1lbnQiXX0se2NOOiJm +dGl0bGUiLGRpc3BsYXlDbGFzc05hbWU6InRpdGxlIixiOmMsZToiXiIsbDpbYV0s +azpkfSx7Y046ImNsYXNzIixiOiJcXGIoY2xhc3N8bW9kdWxlKVxcYiIsZToiJHw7 +IixsOltobGpzLlVJUl0sazpkLGM6WyJ0aXRsZSIsImluaGVyaXRhbmNlIiwiY29t +bWVudCJdLGs6eyJjbGFzcyI6MSxtb2R1bGU6MX19LHtjTjoidGl0bGUiLGI6IltB +LVphLXpfXVxcdyooOjpcXHcrKSooXFw/fFxcISk/IixlOiJeIixyOjB9LHtjTjoi +aW5oZXJpdGFuY2UiLGI6IjxcXHMqIixlOiJeIixjOlsicGFyZW50Il19LHtjTjoi +cGFyZW50IixiOiIoIitobGpzLklSKyI6Oik/IitobGpzLklSLGU6Il4ifSx7Y046 +Im51bWJlciIsYjoiKFxcYjBbMC03X10rKXwoXFxiMHhbMC05YS1mQS1GX10rKXwo +XFxiWzEtOV1bMC05X10qKFxcLlswLTlfXSspPyl8WzBfXVxcYiIsZToiXiIscjow +fSx7Y046Im51bWJlciIsYjoiXFw/XFx3IixlOiJeIn0se2NOOiJzdHJpbmciLGI6 +IiciLGU6IiciLGM6WyJlc2NhcGUiLCJzdWJzdCJdLHI6MH0se2NOOiJzdHJpbmci +LGI6JyInLGU6JyInLGM6WyJlc2NhcGUiLCJzdWJzdCJdLHI6MH0se2NOOiJzdHJp +bmciLGI6IiVbcXddP1xcKCIsZToiXFwpIixjOlsiZXNjYXBlIiwic3Vic3QiXSxy +OjEwfSx7Y046InN0cmluZyIsYjoiJVtxd10/XFxbIixlOiJcXF0iLGM6WyJlc2Nh +cGUiLCJzdWJzdCJdLHI6MTB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT97IixlOiJ9 +IixjOlsiZXNjYXBlIiwic3Vic3QiXSxyOjEwfSx7Y046InN0cmluZyIsYjoiJVtx +d10/PCIsZToiPiIsYzpbImVzY2FwZSIsInN1YnN0Il0scjoxMH0se2NOOiJzdHJp +bmciLGI6IiVbcXddPy8iLGU6Ii8iLGM6WyJlc2NhcGUiLCJzdWJzdCJdLHI6MTB9 +LHtjTjoic3RyaW5nIixiOiIlW3F3XT8lIixlOiIlIixjOlsiZXNjYXBlIiwic3Vi +c3QiXSxyOjEwfSx7Y046InN0cmluZyIsYjoiJVtxd10/LSIsZToiLSIsYzpbImVz +Y2FwZSIsInN1YnN0Il0scjoxMH0se2NOOiJzdHJpbmciLGI6IiVbcXddP1xcfCIs +ZToiXFx8IixjOlsiZXNjYXBlIiwic3Vic3QiXSxyOjEwfSx7Y046ImNvbnN0YW50 +IixiOiIoOjopPyhbQS1aXVxcdyooOjopPykrIixlOiJeIixyOjB9LHtjTjoic3lt +Ym9sIixiOiI6IixlOiJeIixjOlsic3RyaW5nIiwiaWRlbnRpZmllciJdfSx7Y046 +ImlkZW50aWZpZXIiLGI6YSxlOiJeIixsOlthXSxrOmQscjowfSxobGpzLkJFLHtj +Tjoic3Vic3QiLGI6IiNcXHsiLGU6In0iLGw6W2FdLGs6ZCxjOmJ9LHtjTjoicmVn +ZXhwX2NvbnRhaW5lciIsYjoiKCIraGxqcy5SU1IrIilcXHMqIixlOiJeIixuTTp0 +cnVlLGM6WyJjb21tZW50IiwicmVnZXhwIl0scjowfSx7Y046InJlZ2V4cCIsYjoi +LyIsZToiL1thLXpdKiIsaToiXFxuIixjOlsiZXNjYXBlIl19LHtjTjoidmFyaWFi +bGUiLGI6IihcXCRcXFcpfCgoXFwkfFxcQFxcQD8pKFxcdyspKSIsZToiXiJ9XX19 +KCk7aGxqcy5YTUxfQ09NTUVOVD17Y046ImNvbW1lbnQiLGI6IjwhLS0iLGU6Ii0t +PiJ9O2hsanMuWE1MX0FUVFI9e2NOOiJhdHRyaWJ1dGUiLGI6Ilxcc1tBLVphLXow +LTlcXC5fOi1dKz0iLGU6Il4iLGM6WyJ2YWx1ZSJdfTtobGpzLlhNTF9WQUxVRV9R +VU9UPXtjTjoidmFsdWUiLGI6JyInLGU6JyInfTtobGpzLlhNTF9WQUxVRV9BUE9T +PXtjTjoidmFsdWUiLGI6IiciLGU6IicifTtobGpzLkxBTkdVQUdFUy54bWw9e2RN +OntjOlsicGkiLCJjb21tZW50IiwiY2RhdGEiLCJ0YWciXX0sY0k6dHJ1ZSxtOlt7 +Y046InBpIixiOiI8XFw/IixlOiJcXD8+IixyOjEwfSxobGpzLlhNTF9DT01NRU5U +LHtjTjoiY2RhdGEiLGI6IjxcXCFcXFtDREFUQVxcWyIsZToiXFxdXFxdPiJ9LHtj +TjoidGFnIixiOiI8Lz8iLGU6Ij4iLGM6WyJ0aXRsZSIsInRhZ19pbnRlcm5hbCJd +LHI6MS41fSx7Y046InRpdGxlIixiOiJbQS1aYS16MC05XFwuXzotXSsiLGU6Il4i +LHI6MH0se2NOOiJ0YWdfaW50ZXJuYWwiLGI6Il4iLGVXOnRydWUsbk06dHJ1ZSxj +OlsiYXR0cmlidXRlIl0scjowLGk6IltcXCtcXC5dIn0saGxqcy5YTUxfQVRUUixo +bGpzLlhNTF9WQUxVRV9RVU9ULGhsanMuWE1MX1ZBTFVFX0FQT1NdfTtobGpzLkhU +TUxfVEFHUz17Y29kZToxLGtiZDoxLGZvbnQ6MSxub3NjcmlwdDoxLHN0eWxlOjEs +aW1nOjEsdGl0bGU6MSxtZW51OjEsdHQ6MSx0cjoxLHBhcmFtOjEsbGk6MSx0Zm9v +dDoxLHRoOjEsaW5wdXQ6MSx0ZDoxLGRsOjEsYmxvY2txdW90ZToxLGZpZWxkc2V0 +OjEsYmlnOjEsZGQ6MSxhYmJyOjEsb3B0Z3JvdXA6MSxkdDoxLGJ1dHRvbjoxLGlz +aW5kZXg6MSxwOjEsc21hbGw6MSxkaXY6MSxkaXI6MSxlbToxLGZyYW1lOjEsbWV0 +YToxLHN1YjoxLGJkbzoxLGxhYmVsOjEsYWNyb255bToxLHN1cDoxLGJvZHk6MSx4 +bWw6MSxiYXNlZm9udDoxLGJhc2U6MSxicjoxLGFkZHJlc3M6MSxzdHJvbmc6MSxs +ZWdlbmQ6MSxvbDoxLHNjcmlwdDoxLGNhcHRpb246MSxzOjEsY29sOjEsaDI6MSxo +MzoxLGgxOjEsaDY6MSxoNDoxLGg1OjEsdGFibGU6MSxzZWxlY3Q6MSxub2ZyYW1l +czoxLHNwYW46MSxhcmVhOjEsZGZuOjEsc3RyaWtlOjEsY2l0ZToxLHRoZWFkOjEs +aGVhZDoxLG9wdGlvbjoxLGZvcm06MSxocjoxLCJ2YXIiOjEsbGluazoxLGI6MSxj +b2xncm91cDoxLHVsOjEsYXBwbGV0OjEsZGVsOjEsaWZyYW1lOjEscHJlOjEsZnJh +bWVzZXQ6MSxpbnM6MSx0Ym9keToxLGh0bWw6MSxzYW1wOjEsbWFwOjEsb2JqZWN0 +OjEsYToxLHhtbG5zOjEsY2VudGVyOjEsdGV4dGFyZWE6MSxpOjEscToxLHU6MX07 +aGxqcy5IVE1MX0RPQ1RZUEU9e2NOOiJkb2N0eXBlIixiOiI8IURPQ1RZUEUiLGU6 +Ij4iLHI6MTB9O2hsanMuSFRNTF9BVFRSPXtjTjoiYXR0cmlidXRlIixiOiJcXHNb +YS16QS1aXFw6Xy1dKz0iLGU6Il4iLGM6WyJ2YWx1ZSJdfTtobGpzLkhUTUxfU0hP +UlRfQVRUUj17Y046ImF0dHJpYnV0ZSIsYjoiIFthLXpBLVpdKyIsZToiXiJ9O2hs +anMuSFRNTF9WQUxVRT17Y046InZhbHVlIixiOiJbYS16QS1aMC05XSsiLGU6Il4i +fTtobGpzLkxBTkdVQUdFUy5odG1sPXtkTTp7YzpbInRhZyIsImNvbW1lbnQiLCJk +b2N0eXBlIiwidmJzY3JpcHQiXX0sY0k6dHJ1ZSxtOltobGpzLlhNTF9DT01NRU5U +LGhsanMuSFRNTF9ET0NUWVBFLHtjTjoidGFnIixsOltobGpzLklSXSxrOmhsanMu +SFRNTF9UQUdTLGI6IjxzdHlsZSIsZToiPiIsYzpbImF0dHJpYnV0ZSJdLGk6Iltc +XCtcXC5dIixzdGFydHM6ImNzcyJ9LHtjTjoidGFnIixsOltobGpzLklSXSxrOmhs +anMuSFRNTF9UQUdTLGI6IjxzY3JpcHQiLGU6Ij4iLGM6WyJhdHRyaWJ1dGUiXSxp +OiJbXFwrXFwuXSIsc3RhcnRzOiJqYXZhc2NyaXB0In0se2NOOiJ0YWciLGw6W2hs +anMuSVJdLGs6aGxqcy5IVE1MX1RBR1MsYjoiPFtBLVphLXovXSIsZToiPiIsYzpb +ImF0dHJpYnV0ZSJdLGk6IltcXCtcXC5dIn0se2NOOiJjc3MiLGU6Ijwvc3R5bGU+ +IixyRTp0cnVlLHN1Ykxhbmd1YWdlOiJjc3MifSx7Y046ImphdmFzY3JpcHQiLGU6 +IjxcL3NjcmlwdD4iLHJFOnRydWUsc3ViTGFuZ3VhZ2U6ImphdmFzY3JpcHQifSxo +bGpzLkhUTUxfQVRUUixobGpzLkhUTUxfU0hPUlRfQVRUUixobGpzLlhNTF9WQUxV +RV9RVU9ULGhsanMuWE1MX1ZBTFVFX0FQT1MsaGxqcy5IVE1MX1ZBTFVFLHtjTjoi +dmJzY3JpcHQiLGI6IjwlIixlOiIlPiIsc3ViTGFuZ3VhZ2U6InZic2NyaXB0In1d +fTtobGpzLkxBTkdVQUdFUy5qYXZhc2NyaXB0PXtkTTp7bDpbaGxqcy5VSVJdLGM6 +WyJzdHJpbmciLCJjb21tZW50IiwibnVtYmVyIiwicmVnZXhwX2NvbnRhaW5lciIs +ImZ1bmN0aW9uIl0sazp7a2V5d29yZDp7ImluIjoxLCJpZiI6MSwiZm9yIjoxLCJ3 +aGlsZSI6MSwiZmluYWxseSI6MSwidmFyIjoxLCJuZXciOjEsImZ1bmN0aW9uIjox +LCJkbyI6MSwicmV0dXJuIjoxLCJ2b2lkIjoxLCJlbHNlIjoxLCJicmVhayI6MSwi +Y2F0Y2giOjEsImluc3RhbmNlb2YiOjEsIndpdGgiOjEsInRocm93IjoxLCJjYXNl +IjoxLCJkZWZhdWx0IjoxLCJ0cnkiOjEsInRoaXMiOjEsInN3aXRjaCI6MSwiY29u +dGludWUiOjEsInR5cGVvZiI6MSwiZGVsZXRlIjoxfSxsaXRlcmFsOnsidHJ1ZSI6 +MSwiZmFsc2UiOjEsIm51bGwiOjF9fX0sbTpbaGxqcy5DTENNLGhsanMuQ0JMQ0xN +LGhsanMuQ05NLGhsanMuQVNNLGhsanMuUVNNLGhsanMuQkUse2NOOiJyZWdleHBf +Y29udGFpbmVyIixiOiIoIitobGpzLlJTUisifGNhc2V8cmV0dXJufHRocm93KVxc +cyoiLGU6Il4iLG5NOnRydWUsbDpbaGxqcy5JUl0sazp7InJldHVybiI6MSwidGhy +b3ciOjEsImNhc2UiOjF9LGM6WyJjb21tZW50IiwicmVnZXhwIl0scjowfSx7Y046 +InJlZ2V4cCIsYjoiLy4qP1teXFxcXC9dL1tnaW1dKiIsZToiXiJ9LHtjTjoiZnVu +Y3Rpb24iLGI6IlxcYmZ1bmN0aW9uXFxiIixlOiJ7IixsOltobGpzLlVJUl0sazp7 +ImZ1bmN0aW9uIjoxfSxjOlsidGl0bGUiLCJwYXJhbXMiXX0se2NOOiJ0aXRsZSIs +YjoiW0EtWmEteiRfXVswLTlBLVphLXokX10qIixlOiJeIn0se2NOOiJwYXJhbXMi +LGI6IlxcKCIsZToiXFwpIixjOlsic3RyaW5nIiwiY29tbWVudCJdfV19O2hsanMu +TEFOR1VBR0VTLmx1YT1mdW5jdGlvbigpe3ZhciBhPSJcXFs9KlxcWyIsYj0iXFxd +PSpcXF0iO3JldHVybntkTTp7bDpbaGxqcy5VSVJdLGs6e2tleXdvcmQ6e2FuZDox +LCJicmVhayI6MSwiZG8iOjEsImVsc2UiOjEsZWxzZWlmOjEsZW5kOjEsImZhbHNl +IjoxLCJmb3IiOjEsImlmIjoxLCJpbiI6MSxsb2NhbDoxLG5pbDoxLG5vdDoxLG9y +OjEscmVwZWF0OjEsInJldHVybiI6MSx0aGVuOjEsInRydWUiOjEsdW50aWw6MSwi +d2hpbGUiOjF9LGJ1aWx0X2luOntfRzoxLF9WRVJTSU9OOjEsYXNzZXJ0OjEsY29s +bGVjdGdhcmJhZ2U6MSxkb2ZpbGU6MSxlcnJvcjoxLGdldGZlbnY6MSxnZXRtZXRh +dGFibGU6MSxpcGFpcnM6MSxsb2FkOjEsbG9hZGZpbGU6MSxsb2Fkc3RyaW5nOjEs +bW9kdWxlOjEsbmV4dDoxLHBhaXJzOjEscGNhbGw6MSxwcmludDoxLHJhd2VxdWFs +OjEscmF3Z2V0OjEscmF3c2V0OjEscmVxdWlyZToxLHNlbGVjdDoxLHNldGZlbnY6 +MSxzZXRtZXRhdGFibGU6MSx0b251bWJlcjoxLHRvc3RyaW5nOjEsdHlwZToxLHVu +cGFjazoxLHhwY2FsbDoxLGNvcm91dGluZToxLGRlYnVnOjEsaW86MSxtYXRoOjEs +b3M6MSwicGFja2FnZSI6MSxzdHJpbmc6MSx0YWJsZToxfX0sYzpbImNvbW1lbnQi +LCJmdW5jdGlvbiIsIm51bWJlciIsInN0cmluZyJdfSxtOlt7Y046ImNvbW1lbnQi +LGI6Ii0tKD8hIithKyIpIixlOiIkIn0se2NOOiJjb21tZW50IixiOiItLSIrYSxl +OmIsYzpbImxvbmdfYnJhY2tldHMiXSxyOjEwfSx7Y046ImxvbmdfYnJhY2tldHMi +LGI6YSxlOmIsYzpbImxvbmdfYnJhY2tldHMiXSxuTTp0cnVlfSx7Y046ImZ1bmN0 +aW9uIixiOiJcXGJmdW5jdGlvblxcYiIsZToiXFwpIixsOltobGpzLlVJUl0sazp7 +ImZ1bmN0aW9uIjoxfSxjOlsidGl0bGUiLCJwYXJhbXMiLCJjb21tZW50Il19LHtj +TjoidGl0bGUiLGI6IihbX2EtekEtWl1cXHcqXFwuKSooW19hLXpBLVpdXFx3Kjop +P1tfYS16QS1aXVxcdyoiLGU6Il4ifSx7Y046InBhcmFtcyIsYjoiXFwoIixlVzp0 +cnVlLGM6WyJjb21tZW50Il19LGhsanMuQ05NLGhsanMuQVNNLGhsanMuUVNNLHtj +Tjoic3RyaW5nIixiOmEsZTpiLGM6WyJsb25nX2JyYWNrZXRzIl0scjoxMH0saGxq +cy5CRV19fSgpO2hsanMuTEFOR1VBR0VTLmxpc3A9ZnVuY3Rpb24oKXt2YXIgYT0i +W2EtekEtWl9cXC1cXCtcXCpcXC9cXDxcXD1cXD5cXCZcXCNdW2EtekEtWjAtOV9c +XC1cXCtcXCpcXC9cXDxcXD1cXD5cXCZcXCNdKiI7dmFyIGI9IihcXC18XFwrKT9c +XGQrKFxcLlxcZCt8XFwvXFxkKyk/KChkfGV8ZnxsfHMpKFxcK3xcXC0pP1xcZCsp +PyI7cmV0dXJue2NJOnRydWUsZE06e2w6W2FdLGM6WyJsaXRlcmFsIiwibnVtYmVy +Iiwic3RyaW5nIiwiY29tbWVudCIsInF1b3RlZCIsImxpc3QiXSxpOiJbXlxcc10i +fSxtOlt7Y046InN0cmluZyIsYjonIicsZTonIicsYzpbImVzY2FwZSJdLHI6MH0s +aGxqcy5CRSx7Y046Im51bWJlciIsYjpiLGU6Il4ifSx7Y046Im51bWJlciIsYjoi +I2JbMC0xXSsoL1swLTFdKyk/IixlOiJeIn0se2NOOiJudW1iZXIiLGI6IiNvWzAt +N10rKC9bMC03XSspPyIsZToiXiJ9LHtjTjoibnVtYmVyIixiOiIjeFswLTlhLWZd +KygvWzAtOWEtZl0rKT8iLGU6Il4ifSx7Y046Im51bWJlciIsYjoiI2NcXCgiK2Ir +IiArIitiLGU6IlxcKSJ9LHtjTjoiY29tbWVudCIsYjoiOyIsZToiJCJ9LHtjTjoi +cXVvdGVkIixiOiJbJ2BdXFwoIixlOiJcXCkiLGM6WyJudW1iZXIiLCJzdHJpbmci +LCJ2YXJpYWJsZSIsImtleXdvcmQiLCJxdW90ZWRfbGlzdCJdfSx7Y046InF1b3Rl +ZCIsYjoiXFwocXVvdGUgIixlOiJcXCkiLGM6WyJudW1iZXIiLCJzdHJpbmciLCJ2 +YXJpYWJsZSIsImtleXdvcmQiLCJxdW90ZWRfbGlzdCJdLGw6W2FdLGs6e3RpdGxl +OntxdW90ZToxfX19LHtjTjoicXVvdGVkX2xpc3QiLGI6IlxcKCIsZToiXFwpIixj +OlsicXVvdGVkX2xpc3QiLCJsaXRlcmFsIiwibnVtYmVyIiwic3RyaW5nIl19LHtj +TjoibGlzdCIsYjoiXFwoIixlOiJcXCkiLGM6WyJ0aXRsZSIsImJvZHkiXX0se2NO +OiJ0aXRsZSIsYjphLGU6Il4iLGVXOnRydWV9LHtjTjoiYm9keSIsYjoiXiIsZVc6 +dHJ1ZSxlRTp0cnVlLGM6WyJxdW90ZWQiLCJsaXN0IiwibGl0ZXJhbCIsIm51bWJl +ciIsInN0cmluZyIsImNvbW1lbnQiLCJ2YXJpYWJsZSIsImtleXdvcmQiXX0se2NO +OiJrZXl3b3JkIixiOiJbOiZdIithLGU6Il4ifSx7Y046InZhcmlhYmxlIixiOiJc +XCoiLGU6IlxcKiJ9LHtjTjoibGl0ZXJhbCIsYjoiXFxiKHR7MX18bmlsKVxcYiIs +ZToiXiJ9XX19KCk7aGxqcy5MQU5HVUFHRVMuamF2YT17ZE06e2w6W2hsanMuVUlS +XSxjOlsiamF2YWRvYyIsImNvbW1lbnQiLCJzdHJpbmciLCJjbGFzcyIsIm51bWJl +ciIsImFubm90YXRpb24iXSxrOnsiZmFsc2UiOjEsInN5bmNocm9uaXplZCI6MSwi +aW50IjoxLCJhYnN0cmFjdCI6MSwiZmxvYXQiOjEsInByaXZhdGUiOjEsImNoYXIi +OjEsImludGVyZmFjZSI6MSwiYm9vbGVhbiI6MSwic3RhdGljIjoxLCJudWxsIjox +LCJpZiI6MSwiY29uc3QiOjEsImZvciI6MSwidHJ1ZSI6MSwid2hpbGUiOjEsImxv +bmciOjEsInRocm93IjoxLHN0cmljdGZwOjEsImZpbmFsbHkiOjEsInByb3RlY3Rl +ZCI6MSwiZXh0ZW5kcyI6MSwiaW1wb3J0IjoxLCJuYXRpdmUiOjEsImZpbmFsIjox +LCJpbXBsZW1lbnRzIjoxLCJyZXR1cm4iOjEsInZvaWQiOjEsImVudW0iOjEsImVs +c2UiOjEsImJyZWFrIjoxLCJ0cmFuc2llbnQiOjEsIm5ldyI6MSwiY2F0Y2giOjEs +Imluc3RhbmNlb2YiOjEsImJ5dGUiOjEsInN1cGVyIjoxLCJjbGFzcyI6MSwidm9s +YXRpbGUiOjEsImNhc2UiOjEsYXNzZXJ0OjEsInNob3J0IjoxLCJwYWNrYWdlIjox +LCJkZWZhdWx0IjoxLCJkb3VibGUiOjEsInB1YmxpYyI6MSwidHJ5IjoxLCJ0aGlz +IjoxLCJzd2l0Y2giOjEsImNvbnRpbnVlIjoxLCJ0aHJvd3MiOjF9fSxtOlt7Y046 +ImNsYXNzIixsOltobGpzLlVJUl0sYjoiKGNsYXNzIHxpbnRlcmZhY2UgKSIsZToi +eyIsaToiOiIsazp7ImNsYXNzIjoxLCJpbnRlcmZhY2UiOjF9LGM6WyJpbmhlcml0 +YW5jZSIsInRpdGxlIl19LHtjTjoiaW5oZXJpdGFuY2UiLGI6IihpbXBsZW1lbnRz +fGV4dGVuZHMpIixlOiJeIixuTTp0cnVlLGw6W2hsanMuSVJdLGs6eyJleHRlbmRz +IjoxLCJpbXBsZW1lbnRzIjoxfSxyOjEwfSx7Y046InRpdGxlIixiOmhsanMuVUlS +LGU6Il4ifSx7Y046InBhcmFtcyIsYjoiXFwoIixlOiJcXCkiLGM6WyJzdHJpbmci +LCJhbm5vdGF0aW9uIl19LGhsanMuQ05NLGhsanMuQVNNLGhsanMuUVNNLGhsanMu +QkUsaGxqcy5DTENNLHtjTjoiamF2YWRvYyIsYjoiL1xcKlxcKiIsZToiXFwqLyIs +YzpbImphdmFkb2N0YWciXSxyOjEwfSx7Y046ImphdmFkb2N0YWciLGI6IkBbQS1a +YS16XSsiLGU6Il4ifSxobGpzLkNCTENMTSx7Y046ImFubm90YXRpb24iLGI6IkBb +QS1aYS16XSsiLGU6Il4ifV19O2hsanMuTEFOR1VBR0VTLnBocD17ZE06e2w6W2hs +anMuSVJdLGM6WyJjb21tZW50IiwibnVtYmVyIiwic3RyaW5nIiwidmFyaWFibGUi +LCJwcmVwcm9jZXNzb3IiXSxrOnthbmQ6MSxpbmNsdWRlX29uY2U6MSxsaXN0OjEs +ImFic3RyYWN0IjoxLGdsb2JhbDoxLCJwcml2YXRlIjoxLGVjaG86MSwiaW50ZXJm +YWNlIjoxLGFzOjEsInN0YXRpYyI6MSxlbmRzd2l0Y2g6MSxhcnJheToxLCJudWxs +IjoxLCJpZiI6MSxlbmR3aGlsZToxLG9yOjEsImNvbnN0IjoxLCJmb3IiOjEsZW5k +Zm9yZWFjaDoxLHNlbGY6MSwidmFyIjoxLCJ3aGlsZSI6MSxpc3NldDoxLCJwdWJs +aWMiOjEsInByb3RlY3RlZCI6MSxleGl0OjEsZm9yZWFjaDoxLCJ0aHJvdyI6MSxl +bHNlaWY6MSwiZXh0ZW5kcyI6MSxpbmNsdWRlOjEsX19GSUxFX186MSxlbXB0eTox +LHJlcXVpcmVfb25jZToxLCJmdW5jdGlvbiI6MSwiZG8iOjEseG9yOjEsInJldHVy +biI6MSwiaW1wbGVtZW50cyI6MSxwYXJlbnQ6MSxjbG9uZToxLHVzZToxLF9fQ0xB +U1NfXzoxLF9fTElORV9fOjEsImVsc2UiOjEsImJyZWFrIjoxLHByaW50OjEsImV2 +YWwiOjEsIm5ldyI6MSwiY2F0Y2giOjEsX19NRVRIT0RfXzoxLCJjbGFzcyI6MSwi +Y2FzZSI6MSxleGNlcHRpb246MSxwaHBfdXNlcl9maWx0ZXI6MSwiZGVmYXVsdCI6 +MSxkaWU6MSxyZXF1aXJlOjEsX19GVU5DVElPTl9fOjEsZW5kZGVjbGFyZToxLCJm +aW5hbCI6MSwidHJ5IjoxLCJ0aGlzIjoxLCJzd2l0Y2giOjEsImNvbnRpbnVlIjox +LGVuZGZvcjoxLGVuZGlmOjEsZGVjbGFyZToxLHVuc2V0OjF9fSxjSTp0cnVlLG06 +W2hsanMuQ0xDTSxobGpzLkhDTSx7Y046ImNvbW1lbnQiLGI6Ii9cXCoiLGU6Ilxc +Ki8iLGM6WyJwaHBkb2MiXX0se2NOOiJwaHBkb2MiLGI6Ilxcc0BbQS1aYS16XSsi +LGU6Il4iLHI6MTB9LGhsanMuQ05NLHtjTjoic3RyaW5nIixiOiInIixlOiInIixj +OlsiZXNjYXBlIl0scjowfSx7Y046InN0cmluZyIsYjonIicsZTonIicsYzpbImVz +Y2FwZSJdLHI6MH0saGxqcy5CRSx7Y046InZhcmlhYmxlIixiOiJcXCRbYS16QS1a +X1x4N2YtXHhmZl1bYS16QS1aMC05X1x4N2YtXHhmZl0qIixlOiJeIn0se2NOOiJw +cmVwcm9jZXNzb3IiLGI6IjxcXD9waHAiLGU6Il4iLHI6MTB9LHtjTjoicHJlcHJv +Y2Vzc29yIixiOiJcXD8+IixlOiJeIn1dfTtobGpzLkxBTkdVQUdFUy5weXRob249 +e2RNOntsOltobGpzLlVJUl0saToiKDwvfC0+KSIsYzpbImNvbW1lbnQiLCJzdHJp +bmciLCJmdW5jdGlvbiIsImNsYXNzIiwibnVtYmVyIiwiZGVjb3JhdG9yIl0sazp7 +a2V5d29yZDp7YW5kOjEsZWxpZjoxLGlzOjEsZ2xvYmFsOjEsYXM6MSwiaW4iOjEs +ImlmIjoxLGZyb206MSxyYWlzZToxLCJmb3IiOjEsZXhjZXB0OjEsImZpbmFsbHki +OjEscHJpbnQ6MSwiaW1wb3J0IjoxLHBhc3M6MSwicmV0dXJuIjoxLGV4ZWM6MSwi +ZWxzZSI6MSwiYnJlYWsiOjEsbm90OjEsIndpdGgiOjEsImNsYXNzIjoxLGFzc2Vy +dDoxLHlpZWxkOjEsInRyeSI6MSwid2hpbGUiOjEsImNvbnRpbnVlIjoxLGRlbDox +LG9yOjEsZGVmOjEsbGFtYmRhOjEsbm9ubG9jYWw6MTB9LGJ1aWx0X2luOntOb25l +OjEsVHJ1ZToxLEZhbHNlOjEsRWxsaXBzaXM6MSxOb3RJbXBsZW1lbnRlZDoxfX19 +LG06W3tjTjoiZnVuY3Rpb24iLGw6W2hsanMuVUlSXSxiOiJcXGJkZWYgIixlOiI6 +IixpOiIkIixrOntkZWY6MX0sYzpbInRpdGxlIiwicGFyYW1zIl0scjoxMH0se2NO +OiJjbGFzcyIsbDpbaGxqcy5VSVJdLGI6IlxcYmNsYXNzICIsZToiOiIsaToiWyR7 +XSIsazp7ImNsYXNzIjoxfSxjOlsidGl0bGUiLCJwYXJhbXMiXSxyOjEwfSx7Y046 +InRpdGxlIixiOmhsanMuVUlSLGU6Il4ifSx7Y046InBhcmFtcyIsYjoiXFwoIixl +OiJcXCkiLGM6WyJzdHJpbmciXX0saGxqcy5IQ00saGxqcy5DTk0se2NOOiJzdHJp +bmciLGI6InU/cj8nJyciLGU6IicnJyIscjoxMH0se2NOOiJzdHJpbmciLGI6J3U/ +cj8iIiInLGU6JyIiIicscjoxMH0saGxqcy5BU00saGxqcy5RU00saGxqcy5CRSx7 +Y046InN0cmluZyIsYjoiKHV8cnx1ciknIixlOiInIixjOlsiZXNjYXBlIl0scjox +MH0se2NOOiJzdHJpbmciLGI6Jyh1fHJ8dXIpIicsZTonIicsYzpbImVzY2FwZSJd +LHI6MTB9LHtjTjoiZGVjb3JhdG9yIixiOiJAIixlOiIkIn1dfTtobGpzLkxBTkdV +QUdFUy50ZXg9e2RNOntjOlsicGFyYW1ldGVyIiwiY29tbWFuZCIsInNwZWNpYWwi +LCJmb3JtdWxhIiwiY29tbWVudCJdfSxtOlt7Y046InBhcmFtZXRlciIsYjoiXFxc +XFthLXpBLVrQsC3Rj9CQLdGPXStbXFwqXT8gKj0gKi0/XFxkKlxcLj9cXGQrKHB0 +fHBjfG1tfGNtfGlufGRkfGNjfGV4fGVtKT8iLGU6Il4iLHJCOnRydWUsYzpbImNv +bW1hbmQiLCJudW1iZXIiXSxuTTp0cnVlLHI6MTB9LHtjTjoiY29tbWFuZCIsYjoi +XFxcXFthLXpBLVrQsC3Rj9CQLdGPXStbXFwqXT8iLGU6Il4iLHI6MTB9LHtjTjoi +Y29tbWFuZCIsYjoiXFxcXFteYS16QS1a0LAt0Y/QkC3RjzAtOV0iLGU6Il4iLHI6 +MH0se2NOOiJjb21tZW50IixiOiIlIixlOiIkIixyOjB9LHtjTjoic3BlY2lhbCIs +YjoiW3t9XFxbXFxdXFwmI35dIixlOiJeIixyOjB9LHtjTjoiZm9ybXVsYSIsYjoi +XFwkXFwkIixlOiJcXCRcXCQiLGM6WyJjb21tYW5kIiwic3BlY2lhbCJdLHI6MH0s +e2NOOiJmb3JtdWxhIixiOiJcXCQiLGU6IlxcJCIsYzpbImNvbW1hbmQiLCJzcGVj +aWFsIl0scjowfSx7Y046Im51bWJlciIsYjoiICo9IixlOiItP1xcZCpcXC4/XFxk +KyhwdHxwY3xtbXxjbXxpbnxkZHxjY3xleHxlbSk/IixlQjp0cnVlfV19O2hsanMu +TEFOR1VBR0VTLnNxbD17Y0k6dHJ1ZSxkTTp7YzpbIm9wZXJhdG9yIiwiY29tbWVu +dCJdLGk6IlteXFxzXSJ9LG06W3tjTjoib3BlcmF0b3IiLGI6IihifHN0YXJ0fGNv +bW1pdHxyb2xsYmFja3xzYXZlcG9pbnR8bG9ja3xhbHRlcnxjcmVhdGV8ZHJvcHxy +ZW5hbWV8Y2FsbHxkZWxldGV8ZG98aGFuZGxlcnxpbnNlcnR8bG9hZHxyZXBsYWNl +fHNlbGVjdHx0cnVuY2F0ZXx1cGRhdGV8c2V0fHNob3d8cHJhZ21hKVxcYiIsZToi +O3wkIixjOlsic3RyaW5nIiwibnVtYmVyIiwibmV3bGluZSJdLGw6WyJbYS16QS1a +XVthLXpBLVowLTlfXFwuXSoiXSxrOntrZXl3b3JkOnthbGw6MSxwYXJ0aWFsOjEs +Z2xvYmFsOjEsbW9udGg6MSxjdXJyZW50X3RpbWVzdGFtcDoxLHVzaW5nOjEsZ286 +MSxyZXZva2U6MSxzbWFsbGludDoxLGluZGljYXRvcjoxLCJlbmQtZXhlYyI6MSxk +aXNjb25uZWN0OjEsem9uZToxLCJ3aXRoIjoxLGNoYXJhY3RlcjoxLGFzc2VydGlv +bjoxLHRvOjEsYWRkOjEsY3VycmVudF91c2VyOjEsdXNhZ2U6MSxpbnB1dDoxLGxv +Y2FsOjEsYWx0ZXI6MSxtYXRjaDoxLGNvbGxhdGU6MSxyZWFsOjEsdGhlbjoxLHJv +bGxiYWNrOjEsZ2V0OjEscmVhZDoxLHRpbWVzdGFtcDoxLHNlc3Npb25fdXNlcjox +LG5vdDoxLGludGVnZXI6MSxiaXQ6MSx1bmlxdWU6MSxkYXk6MSxtaW51dGU6MSxk +ZXNjOjEsaW5zZXJ0OjEsZXhlY3V0ZToxLGxpa2U6MSxpbGlrZToyLGxldmVsOjEs +ZGVjaW1hbDoxLGRyb3A6MSwiY29udGludWUiOjEsaXNvbGF0aW9uOjEsZm91bmQ6 +MSx3aGVyZToxLGNvbnN0cmFpbnRzOjEsZG9tYWluOjEscmlnaHQ6MSxuYXRpb25h +bDoxLHNvbWU6MSxtb2R1bGU6MSx0cmFuc2FjdGlvbjoxLHJlbGF0aXZlOjEsc2Vj +b25kOjEsY29ubmVjdDoxLGVzY2FwZToxLGNsb3NlOjEsc3lzdGVtX3VzZXI6MSwi +Zm9yIjoxLGRlZmVycmVkOjEsc2VjdGlvbjoxLGNhc3Q6MSxjdXJyZW50OjEsc3Fs +c3RhdGU6MSxhbGxvY2F0ZToxLGludGVyc2VjdDoxLGRlYWxsb2NhdGU6MSxudW1l +cmljOjEsInB1YmxpYyI6MSxwcmVzZXJ2ZToxLGZ1bGw6MSwiZ290byI6MSxpbml0 +aWFsbHk6MSxhc2M6MSxubzoxLGtleToxLG91dHB1dDoxLGNvbGxhdGlvbjoxLGdy +b3VwOjEsYnk6MSx1bmlvbjoxLHNlc3Npb246MSxib3RoOjEsbGFzdDoxLGxhbmd1 +YWdlOjEsY29uc3RyYWludDoxLGNvbHVtbjoxLG9mOjEsc3BhY2U6MSxmb3JlaWdu +OjEsZGVmZXJyYWJsZToxLHByaW9yOjEsY29ubmVjdGlvbjoxLHVua25vd246MSxh +Y3Rpb246MSxjb21taXQ6MSx2aWV3OjEsb3I6MSxmaXJzdDoxLGludG86MSwiZmxv +YXQiOjEseWVhcjoxLHByaW1hcnk6MSxjYXNjYWRlZDoxLGV4Y2VwdDoxLHJlc3Ry +aWN0OjEsc2V0OjEscmVmZXJlbmNlczoxLG5hbWVzOjEsdGFibGU6MSxvdXRlcjox +LG9wZW46MSxzZWxlY3Q6MSxzaXplOjEsYXJlOjEscm93czoxLGZyb206MSxwcmVw +YXJlOjEsZGlzdGluY3Q6MSxsZWFkaW5nOjEsY3JlYXRlOjEsb25seToxLG5leHQ6 +MSxpbm5lcjoxLGF1dGhvcml6YXRpb246MSxzY2hlbWE6MSxjb3JyZXNwb25kaW5n +OjEsb3B0aW9uOjEsZGVjbGFyZToxLHByZWNpc2lvbjoxLGltbWVkaWF0ZToxLCJl +bHNlIjoxLHRpbWV6b25lX21pbnV0ZToxLGV4dGVybmFsOjEsdmFyeWluZzoxLHRy +YW5zbGF0aW9uOjEsInRydWUiOjEsImNhc2UiOjEsZXhjZXB0aW9uOjEsam9pbjox +LGhvdXI6MSwiZGVmYXVsdCI6MSwiZG91YmxlIjoxLHNjcm9sbDoxLHZhbHVlOjEs +Y3Vyc29yOjEsZGVzY3JpcHRvcjoxLHZhbHVlczoxLGRlYzoxLGZldGNoOjEscHJv +Y2VkdXJlOjEsImRlbGV0ZSI6MSxhbmQ6MSwiZmFsc2UiOjEsImludCI6MSxpczox +LGRlc2NyaWJlOjEsImNoYXIiOjEsYXM6MSxhdDoxLCJpbiI6MSx2YXJjaGFyOjEs +Im51bGwiOjEsdHJhaWxpbmc6MSxhbnk6MSxhYnNvbHV0ZToxLGN1cnJlbnRfdGlt +ZToxLGVuZDoxLGdyYW50OjEscHJpdmlsZWdlczoxLHdoZW46MSxjcm9zczoxLGNo +ZWNrOjEsd3JpdGU6MSxjdXJyZW50X2RhdGU6MSxwYWQ6MSxiZWdpbjoxLHRlbXBv +cmFyeToxLGV4ZWM6MSx0aW1lOjEsdXBkYXRlOjEsY2F0YWxvZzoxLHVzZXI6MSxz +cWw6MSxkYXRlOjEsb246MSxpZGVudGl0eToxLHRpbWV6b25lX2hvdXI6MSxuYXR1 +cmFsOjEsd2hlbmV2ZXI6MSxpbnRlcnZhbDoxLHdvcms6MSxvcmRlcjoxLGNhc2Nh +ZGU6MSxkaWFnbm9zdGljczoxLG5jaGFyOjEsaGF2aW5nOjEsbGVmdDoxLGNhbGw6 +MSwiZG8iOjEsaGFuZGxlcjoxLGxvYWQ6MSxyZXBsYWNlOjEsdHJ1bmNhdGU6MSxz +dGFydDoxLGxvY2s6MSxzaG93OjEscHJhZ21hOjF9LGFnZ3JlZ2F0ZTp7Y291bnQ6 +MSxzdW06MSxtaW46MSxtYXg6MSxhdmc6MX19fSx7Y046Im5ld2xpbmUiLGI6Ilxc +biIsZToiXiIsbk06dHJ1ZX0saGxqcy5DTk0saGxqcy5DQkxDTE0se2NOOiJjb21t +ZW50IixiOiItLSIsZToiJCJ9LHtjTjoic3RyaW5nIixiOiInIixlOiInIixjOlsi +ZXNjYXBlIiwic3F1b3RlIl0scjowfSx7Y046InNxdW90ZSIsYjoiJyciLGU6Il4i +LG5NOnRydWV9LHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxjOlsiZXNjYXBlIiwi +ZHF1b3RlIl0scjowfSx7Y046ImRxdW90ZSIsYjonIiInLGU6Il4iLG5NOnRydWV9 +LHtjTjoic3RyaW5nIixiOiJgIixlOiJgIixjOlsiZXNjYXBlIl19LGhsanMuQkVd +fTtobGpzLkxBTkdVQUdFUy5wZXJsPWZ1bmN0aW9uKCl7dmFyIGI9WyJjb21tZW50 +Iiwic3RyaW5nIiwibnVtYmVyIiwicmVnZXhwIiwic3ViIiwidmFyaWFibGUiLCJv +cGVyYXRvciIsInBvZCJdO3ZhciBhPXtnZXRwd2VudDoxLGdldHNlcnZlbnQ6MSxx +dW90ZW1ldGE6MSxtc2dyY3Y6MSxzY2FsYXI6MSxraWxsOjEsZGJtY2xvc2U6MSx1 +bmRlZjoxLGxjOjEsbWE6MSxzeXN3cml0ZToxLHRyOjEsc2VuZDoxLHVtYXNrOjEs +c3lzb3BlbjoxLHNobXdyaXRlOjEsdmVjOjEscXg6MSx1dGltZToxLGxvY2FsOjEs +b2N0OjEsc2VtY3RsOjEsbG9jYWx0aW1lOjEscmVhZHBpcGU6MSwiZG8iOjEsInJl +dHVybiI6MSxmb3JtYXQ6MSxyZWFkOjEsc3ByaW50ZjoxLGRibW9wZW46MSxwb3A6 +MSxnZXRwZ3JwOjEsbm90OjEsZ2V0cHduYW06MSxyZXdpbmRkaXI6MSxxcToxLGZp +bGVubzoxLHF3OjEsZW5kcHJvdG9lbnQ6MSx3YWl0OjEsc2V0aG9zdGVudDoxLGJs +ZXNzOjEsczoxLG9wZW5kaXI6MSwiY29udGludWUiOjEsZWFjaDoxLHNsZWVwOjEs +ZW5kZ3JlbnQ6MSxzaHV0ZG93bjoxLGR1bXA6MSxjaG9tcDoxLGNvbm5lY3Q6MSxn +ZXRzb2NrbmFtZToxLGRpZToxLHNvY2tldHBhaXI6MSxjbG9zZToxLGZsb2NrOjEs +ZXhpc3RzOjEsaW5kZXg6MSxzaG1nZXQ6MSxzdWI6MSwiZm9yIjoxLGVuZHB3ZW50 +OjEscmVkbzoxLGxzdGF0OjEsbXNnY3RsOjEsc2V0cGdycDoxLGFiczoxLGV4aXQ6 +MSxzZWxlY3Q6MSxwcmludDoxLHJlZjoxLGdldGhvc3RieWFkZHI6MSx1bnNoaWZ0 +OjEsZmNudGw6MSxzeXNjYWxsOjEsImdvdG8iOjEsZ2V0bmV0YnlhZGRyOjEsam9p +bjoxLGdtdGltZToxLHN5bWxpbms6MSxzZW1nZXQ6MSxzcGxpY2U6MSx4OjEsZ2V0 +cGVlcm5hbWU6MSxyZWN2OjEsbG9nOjEsc2V0c29ja29wdDoxLGNvczoxLGxhc3Q6 +MSxyZXZlcnNlOjEsZ2V0aG9zdGJ5bmFtZToxLGdldGdybmFtOjEsc3R1ZHk6MSxm +b3JtbGluZToxLGVuZGhvc3RlbnQ6MSx0aW1lczoxLGNob3A6MSxsZW5ndGg6MSxn +ZXRob3N0ZW50OjEsZ2V0bmV0ZW50OjEscGFjazoxLGdldHByb3RvZW50OjEsZ2V0 +c2VydmJ5bmFtZToxLHJhbmQ6MSxta2RpcjoxLHBvczoxLGNobW9kOjEseToxLHN1 +YnN0cjoxLGVuZG5ldGVudDoxLHByaW50ZjoxLG5leHQ6MSxvcGVuOjEsbXNnc25k +OjEscmVhZGRpcjoxLHVzZToxLHVubGluazoxLGdldHNvY2tvcHQ6MSxnZXRwcmlv +cml0eToxLHJpbmRleDoxLHdhbnRhcnJheToxLGhleDoxLHN5c3RlbToxLGdldHNl +cnZieXBvcnQ6MSxlbmRzZXJ2ZW50OjEsImludCI6MSxjaHI6MSx1bnRpZToxLHJt +ZGlyOjEscHJvdG90eXBlOjEsdGVsbDoxLGxpc3RlbjoxLGZvcms6MSxzaG1yZWFk +OjEsdWNmaXJzdDoxLHNldHByb3RvZW50OjEsImVsc2UiOjEsc3lzc2VlazoxLGxp +bms6MSxnZXRncmdpZDoxLHNobWN0bDoxLHdhaXRwaWQ6MSx1bnBhY2s6MSxnZXRu +ZXRieW5hbWU6MSxyZXNldDoxLGNoZGlyOjEsZ3JlcDoxLHNwbGl0OjEscmVxdWly +ZToxLGNhbGxlcjoxLGxjZmlyc3Q6MSx1bnRpbDoxLHdhcm46MSwid2hpbGUiOjEs +dmFsdWVzOjEsc2hpZnQ6MSx0ZWxsZGlyOjEsZ2V0cHd1aWQ6MSxteToxLGdldHBy +b3RvYnludW1iZXI6MSwiZGVsZXRlIjoxLGFuZDoxLHNvcnQ6MSx1YzoxLGRlZmlu +ZWQ6MSxzcmFuZDoxLGFjY2VwdDoxLCJwYWNrYWdlIjoxLHNlZWtkaXI6MSxnZXRw +cm90b2J5bmFtZToxLHNlbW9wOjEsb3VyOjEscmVuYW1lOjEsc2VlazoxLCJpZiI6 +MSxxOjEsY2hyb290OjEsc3lzcmVhZDoxLHNldHB3ZW50OjEsbm86MSxjcnlwdDox +LGdldGM6MSxjaG93bjoxLHNxcnQ6MSx3cml0ZToxLHNldG5ldGVudDoxLHNldHBy +aW9yaXR5OjEsZm9yZWFjaDoxLHRpZToxLHNpbjoxLG1zZ2dldDoxLG1hcDoxLHN0 +YXQ6MSxnZXRsb2dpbjoxLHVubGVzczoxLGVsc2lmOjEsdHJ1bmNhdGU6MSxleGVj +OjEsa2V5czoxLGdsb2I6MSx0aWVkOjEsY2xvc2VkaXI6MSxpb2N0bDoxLHNvY2tl +dDoxLHJlYWRsaW5rOjEsImV2YWwiOjEseG9yOjEscmVhZGxpbmU6MSxiaW5tb2Rl +OjEsc2V0c2VydmVudDoxLGVvZjoxLG9yZDoxLGJpbmQ6MSxhbGFybToxLHBpcGU6 +MSxhdGFuMjoxLGdldGdyZW50OjEsZXhwOjEsdGltZToxLHB1c2g6MSxzZXRncmVu +dDoxLGd0OjEsbHQ6MSxvcjoxLG5lOjEsbToxfTtyZXR1cm57ZE06e2w6W2hsanMu +SVJdLGM6YixrOmF9LG06W3tjTjoidmFyaWFibGUiLGI6IlxcJFxcZCIsZToiXiJ9 +LHtjTjoidmFyaWFibGUiLGI6IltcXCRcXCVcXEBcXCpdKFxcXlxcd1xcYnwjXFx3 +KyhcXDpcXDpcXHcrKSp8W15cXHNcXHd7XXx7XFx3K318XFx3KyhcXDpcXDpcXHcq +KSopIixlOiJeIn0se2NOOiJzdWJzdCIsYjoiWyRAXVxceyIsZToifSIsbDpbaGxq +cy5JUl0sazphLGM6YixyOjEwfSx7Y046Im51bWJlciIsYjoiKFxcYjBbMC03X10r +KXwoXFxiMHhbMC05YS1mQS1GX10rKXwoXFxiWzEtOV1bMC05X10qKFxcLlswLTlf +XSspPyl8WzBfXVxcYiIsZToiXiIscjowfSx7Y046InN0cmluZyIsYjoicVtxd3hy +XT9cXHMqXFwoIixlOiJcXCkiLGM6WyJlc2NhcGUiLCJzdWJzdCIsInZhcmlhYmxl +Il0scjo1fSx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMqXFxbIixlOiJcXF0i +LGM6WyJlc2NhcGUiLCJzdWJzdCIsInZhcmlhYmxlIl0scjo1fSx7Y046InN0cmlu +ZyIsYjoicVtxd3hyXT9cXHMqXFx7IixlOiJcXH0iLGM6WyJlc2NhcGUiLCJzdWJz +dCIsInZhcmlhYmxlIl0scjo1fSx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMq +XFx8IixlOiJcXHwiLGM6WyJlc2NhcGUiLCJzdWJzdCIsInZhcmlhYmxlIl0scjo1 +fSx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMqXFw8IixlOiJcXD4iLGM6WyJl +c2NhcGUiLCJzdWJzdCIsInZhcmlhYmxlIl0scjo1fSx7Y046InN0cmluZyIsYjoi +cXdcXHMrcSIsZToicSIsYzpbImVzY2FwZSIsInN1YnN0IiwidmFyaWFibGUiXSxy +OjV9LHtjTjoic3RyaW5nIixiOiInIixlOiInIixjOlsiZXNjYXBlIl0scjowfSx7 +Y046InN0cmluZyIsYjonIicsZTonIicsYzpbImVzY2FwZSIsInN1YnN0IiwidmFy +aWFibGUiXSxyOjB9LGhsanMuQkUse2NOOiJzdHJpbmciLGI6ImAiLGU6ImAiLGM6 +WyJlc2NhcGUiXX0se2NOOiJyZWdleHAiLGI6IihzfHRyfHkpLyhcXFxcLnxbXi9d +KSovKFxcXFwufFteL10pKi9bYS16XSoiLGU6Il4iLHI6MTB9LHtjTjoicmVnZXhw +IixiOiIobXxxcik/LyIsZToiL1thLXpdKiIsYzpbImVzY2FwZSJdLHI6MH0se2NO +OiJzdHJpbmciLGI6IntcXHcrfSIsZToiXiIscjowfSx7Y046InN0cmluZyIsYjoi +LT9cXHcrXFxzKlxcPVxcPiIsZToiXiIscjowfSx7Y046InN1YiIsYjoiXFxic3Vi +XFxiIixlOiIoXFxzKlxcKC4qP1xcKSk/Wzt7XSIsbDpbaGxqcy5JUl0sazp7c3Vi +OjF9LHI6NX0se2NOOiJvcGVyYXRvciIsYjoiLVxcd1xcYiIsZToiXiIscjowfSxo +bGpzLkhDTSx7Y046ImNvbW1lbnQiLGI6Il4oX19FTkRfX3xfX0RBVEFfXykiLGU6 +IlxcbiQiLHI6NX0se2NOOiJwb2QiLGI6IlxcPVxcdyIsZToiXFw9Y3V0In1dfX0o +KTtobGpzLkxBTkdVQUdFUy5zY2FsYT17ZE06e2w6W2hsanMuVUlSXSxjOlsiamF2 +YWRvYyIsImNvbW1lbnQiLCJzdHJpbmciLCJjbGFzcyIsIm51bWJlciIsImFubm90 +YXRpb24iXSxrOnt0eXBlOjEseWllbGQ6MSxsYXp5OjEsb3ZlcnJpZGU6MSxkZWY6 +MSwid2l0aCI6MSx2YWw6MSwidmFyIjoxLCJmYWxzZSI6MSwidHJ1ZSI6MSxzZWFs +ZWQ6MSwiYWJzdHJhY3QiOjEsInByaXZhdGUiOjEsdHJhaXQ6MSxvYmplY3Q6MSwi +bnVsbCI6MSwiaWYiOjEsImZvciI6MSwid2hpbGUiOjEsInRocm93IjoxLCJmaW5h +bGx5IjoxLCJwcm90ZWN0ZWQiOjEsImV4dGVuZHMiOjEsImltcG9ydCI6MSwiZmlu +YWwiOjEsInJldHVybiI6MSwiZWxzZSI6MSwiYnJlYWsiOjEsIm5ldyI6MSwiY2F0 +Y2giOjEsInN1cGVyIjoxLCJjbGFzcyI6MSwiY2FzZSI6MSwicGFja2FnZSI6MSwi +ZGVmYXVsdCI6MSwidHJ5IjoxLCJ0aGlzIjoxLG1hdGNoOjEsImNvbnRpbnVlIjox +LCJ0aHJvd3MiOjF9fSxtOlt7Y046ImNsYXNzIixsOltobGpzLlVJUl0sYjoiKChj +YXNlICk/Y2xhc3MgfG9iamVjdCB8dHJhaXQgKSIsZToiKHt8JCkiLGk6IjoiLGs6 +eyJjYXNlIjoxLCJjbGFzcyI6MSx0cmFpdDoxLG9iamVjdDoxfSxjOlsiaW5oZXJp +dGFuY2UiLCJ0aXRsZSIsInBhcmFtcyJdfSx7Y046ImluaGVyaXRhbmNlIixiOiIo +ZXh0ZW5kc3x3aXRoKSIsZToiXiIsbk06dHJ1ZSxsOltobGpzLklSXSxrOnsiZXh0 +ZW5kcyI6MSwid2l0aCI6MX0scjoxMH0se2NOOiJ0aXRsZSIsYjpobGpzLlVJUixl +OiJeIn0se2NOOiJwYXJhbXMiLGI6IlxcKCIsZToiXFwpIixjOlsic3RyaW5nIiwi +YW5ub3RhdGlvbiJdfSxobGpzLkNOTSxobGpzLkFTTSxobGpzLlFTTSxobGpzLkJF +LGhsanMuQ0xDTSx7Y046ImphdmFkb2MiLGI6Ii9cXCpcXCoiLGU6IlxcKi8iLGM6 +WyJqYXZhZG9jdGFnIl0scjoxMH0se2NOOiJqYXZhZG9jdGFnIixiOiJAW0EtWmEt +el0rIixlOiJeIn0saGxqcy5DQkxDTE0se2NOOiJhbm5vdGF0aW9uIixiOiJAW0Et +WmEtel0rIixlOiJeIn0se2NOOiJzdHJpbmciLGI6J3U/cj8iIiInLGU6JyIiIics +cjoxMH1dfTtobGpzLkxBTkdVQUdFUy5jcHA9ZnVuY3Rpb24oKXt2YXIgYT17a2V5 +d29yZDp7ImZhbHNlIjoxLCJpbnQiOjEsImZsb2F0IjoxLCJ3aGlsZSI6MSwicHJp +dmF0ZSI6MSwiY2hhciI6MSwiY2F0Y2giOjEsImV4cG9ydCI6MSx2aXJ0dWFsOjEs +b3BlcmF0b3I6MixzaXplb2Y6MixkeW5hbWljX2Nhc3Q6Mix0eXBlZGVmOjIsY29u +c3RfY2FzdDoyLCJjb25zdCI6MSxzdHJ1Y3Q6MSwiZm9yIjoxLHN0YXRpY19jYXN0 +OjIsdW5pb246MSxuYW1lc3BhY2U6MSx1bnNpZ25lZDoxLCJsb25nIjoxLCJ0aHJv +dyI6MSwidm9sYXRpbGUiOjIsInN0YXRpYyI6MSwicHJvdGVjdGVkIjoxLGJvb2w6 +MSx0ZW1wbGF0ZToxLG11dGFibGU6MSwiaWYiOjEsInB1YmxpYyI6MSxmcmllbmQ6 +MiwiZG8iOjEsInJldHVybiI6MSwiZ290byI6MSxhdXRvOjEsInZvaWQiOjIsImVu +dW0iOjEsImVsc2UiOjEsImJyZWFrIjoxLCJuZXciOjEsZXh0ZXJuOjEsdXNpbmc6 +MSwidHJ1ZSI6MSwiY2xhc3MiOjEsYXNtOjEsImNhc2UiOjEsdHlwZWlkOjEsInNo +b3J0IjoxLHJlaW50ZXJwcmV0X2Nhc3Q6MiwiZGVmYXVsdCI6MSwiZG91YmxlIjox +LHJlZ2lzdGVyOjEsZXhwbGljaXQ6MSxzaWduZWQ6MSx0eXBlbmFtZToxLCJ0cnki +OjEsInRoaXMiOjEsInN3aXRjaCI6MSwiY29udGludWUiOjEsd2NoYXJfdDoxLGlu +bGluZToxLCJkZWxldGUiOjF9LGJ1aWx0X2luOntzdGQ6MSxzdHJpbmc6MSxjaW46 +MSxjb3V0OjEsY2VycjoxLGNsb2c6MSxzdHJpbmdzdHJlYW06MSxpc3RyaW5nc3Ry +ZWFtOjEsb3N0cmluZ3N0cmVhbToxLGF1dG9fcHRyOjEsZGVxdWU6MSxsaXN0OjEs +cXVldWU6MSxzdGFjazoxLHZlY3RvcjoxLG1hcDoxLHNldDoxLGJpdHNldDoxLG11 +bHRpc2V0OjEsbXVsdGltYXA6MX19O3JldHVybntkTTp7bDpbaGxqcy5VSVJdLGk6 +IjwvIixjOlsiY29tbWVudCIsInN0cmluZyIsIm51bWJlciIsInByZXByb2Nlc3Nv +ciIsInN0bF9jb250YWluZXIiXSxrOmF9LG06W2hsanMuQ0xDTSxobGpzLkNCTENM +TSxobGpzLkNOTSxobGpzLlFTTSxobGpzLkJFLHtjTjoic3RyaW5nIixiOiInIixl +OiJbXlxcXFxdJyIsaToiW15cXFxcXVteJ10ifSx7Y046InByZXByb2Nlc3NvciIs +YjoiIyIsZToiJCJ9LHtjTjoic3RsX2NvbnRhaW5lciIsYjoiXFxiKGRlcXVlfGxp +c3R8cXVldWV8c3RhY2t8dmVjdG9yfG1hcHxzZXR8Yml0c2V0fG11bHRpc2V0fG11 +bHRpbWFwKVxccyo8IixlOiI+IixjOlsic3RsX2NvbnRhaW5lciJdLGw6W2hsanMu +VUlSXSxrOmEscjoxMH1dfX0oKTs= + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline; filename=commentForm.js +Content-Type: application/x-javascript; charset=utf-8; name=commentForm.js +Content-Location: http://habrahabr.ru/js/1307631427/commentForm.js +Content-Transfer-Encoding: Base64 + +LyoNCgljb21tZW50Rm9ybUNsYXNzDQoJ0YDQsNCx0L7RgtCw0LXRgiDQv9C+INC/ +0YDQuNC90YbQuNC/0YMg0YHRgtCw0YLQuNGH0LXRgdC60L7Qs9C+INC60LvQsNGB +0YHQsDoNCgnQtNC70Y8g0YDQsNCx0L7RgtGLINGC0YDQtdCx0YPQtdGCINGB0L7Q +t9C00LDQvdC40Y8g0L7QtNC90L7Qs9C+INC+0LHRitC10LrRgtCwDQoJdmFyIGNv +bW1lbnRGb3JtDQoqLw0KDQp2YXIgY29tbWVudEZvcm1DbGFzcyA9IGZ1bmN0aW9u +KCl7DQoJY29tbWVudEZvcm1DbGFzcy5zdXBlckNsYXNzLmFwcGx5KHRoaXMsIGFy +Z3VtZW50cyk7DQoJDQoJJGV4dGVuZCh0aGlzLCB0bS5jdXN0b21FdmVudE1hbmFn +ZXIpOw0KCQ0KCXRoaXMubmV3X3JlcGxpZXNfaSA9IC0xOw0KCQ0KCU9iamVjdC5l +eHRlbmRPYmplY3QoDQoJCXRoaXMuYWpheFVybHMsIHsNCgkJCXNhdmU6ICh3aW5k +b3cuYmFzZVVSTCB8fCAnJykgKyAnL2FqYXgvY29tbWVudHMvYWRkLycsDQoJCQlw +cmV2aWV3OiAod2luZG93LmJhc2VVUkwgfHwgJycpICsgJy9hamF4L2NvbW1lbnRz +L3ByZXZpZXcvJywNCgkJCWZlZWRiYWNrOiAod2luZG93LmJhc2VVUkwgfHwgJycp +ICsgJy9hamF4L2NvbW1lbnRzL2FkZF9mZWVkYmFjay8nDQoJfSk7DQoJDQoJLy8g +0JjRgdC/0L7Qu9GM0LfRg9C10LzRi9C1INCyINGE0L7RgNC80LUgY2xhc3NOYW1l +cw0KCXRoaXMuY2xhc3NOYW1lcyA9IHsNCgkJZmllbGRIb2xkZXI6ICdqcy1maWVs +ZC1ob2xkZXInLCAvLyDQutC+0L3RgtC10LnQvdC10YAt0YDQvtC00LjRgtC10LvR +jCDQv9C+0LvRjyDRhNC+0YDQvNGLINC4INC+0YjQuNCx0LrQuA0KCQlmaWVsZERh +dGE6ICdqcy1maWVsZC1kYXRhJywgLy8g0L/QvtC70LUg0YTQvtGA0LzRiywg0LrQ +vtGC0L7RgNC+0LUg0L3Rg9C20L3QviDRgdC10YDQuNCw0LvQuNC30L7QstCw0YLR +jA0KCQlmaWVsZEVycm9yTXNnQm94OiAnanMtZmllbGQtZXJyb3ItbXNnJywgLy8g +0LrQvtC90YLQtdC50L3QtdGAINC00LvRjyDQstGL0LLQvtC00LAg0YHQvtC+0LHR +idC10L3QuNGPINC+0LEg0L7RiNC40LHQutC1DQoJCWZpZWxkTWFya2VkRXJyb3I6 +ICdqcy1tYXJrZWQtZXJyb3InLCAvLyDQv9C+0LzQtdGH0LDQtdC8INC60L7QvdGC +0LXQudC90LXRgCwg0LXRgdC70Lgg0LIg0L/QvtC70LUgLSDQvtGI0LjQsdC60LAN +CgkJZmllbGRNYXJrZWRDaGVja2VkOiAnanMtbWFya2VkLWNoZWNrZWQnLCAvLyDQ +v9C+0LzQtdGH0LDQtdC8INC60L7QvdGC0LXQudC90LXRgCwg0LXRgdC70Lgg0L/Q +vtC70LUg0L/RgNC+0YjQu9C+INC/0YDQvtCy0LXRgNC60YMNCgkJZmllbGRJc1Jl +cXVpcmVkOiAnanMtcmVxdWlyZWQnLCAvLyDQv9C+0LvQtSwg0L7QsdGP0LfQsNGC +0LXQu9GM0L3QvtC1INC00LvRjyDQt9Cw0L/QvtC70L3QtdC90LjRjyANCgkJZmll +bGRQYXNzXzE6ICdqcy1wYXNzLWZpZWxkLW1haW4nLCAvLyDQv9C+0LvQtSDRgSDQ +vtGB0L3QvtCy0L3Ri9C8INC/0LDRgNC+0LvQtdC8DQoJCWZpZWxkUGFzc18yOiAn +anMtcGFzcy1maWVsZC1yZXBlYXQnLCAvLyDQv9C+0LvQtSDRgSDQv9C+0LLRgtC+ +0YDQvtC8INC/0LDRgNC+0LvRjw0KCQlpc0xvYWRpbmc6ICdsb2FkaW5nJywgLy8g +0L/RgNC10LvQvtCw0LTQtdGADQoJCXVua25vd25FcnJvckhvbGRlcjogJ2pzLXVu +a25vd24tZXJyb3ItaG9sZGVyJywgLy8g0LTQtdGA0LbQsNGC0LXQu9GMINCy0YvQ +stC+0LTQsCDQvdC10L7Qv9C+0LfQvdCw0L3QvdC+0Lkg0L7RiNC40LHQutC4DQoJ +CXVua25vd25FcnJvck1zZzogJ2pzLXVua25vd24tZXJyb3ItbXNnJywgLy8g0YHQ +sNC80L4g0L/QvtC70LUg0L3QtdC+0L/QvtC30L3QsNC90L3QvtC5INC+0YjQuNCx +0LrQuA0KCQljb21tZW50c0NvdW50OiAnanMtY29tbWVudHMtY291bnQnLCAvL9C6 +0L7Qu9C40YfQtdGB0YLQstC+INC60L7QvNC80LXQvdGC0LDRgNC40LXQsg0KCQlw +cmV2aWV3SG9sZGVyOiAnY29tbWVudC1wcmV2aWV3JywgLy/Qv9GA0LXQtNC/0YDQ +vtGB0LzQvtGC0YANCgkJdGhyZWFkOiAnaGVudHJ5JywgLy8g0LLQtdGC0LrQsCDQ +utC+0LzQvNC10L3RgtCw0YDQuNC10LINCgkJY29tbWVudEl0ZW06ICdjb21tZW50 +X2hvbGRlciB2b3RlX2hvbGRlcicgLy/QutC+0LzQvNC10L3RgtCw0YDQuNC5DQoJ +fTsNCgkNCglPYmplY3QuZXh0ZW5kT2JqZWN0KA0KCQl0aGlzLnhtbFJlc3BvbnNl +LCB7DQoJCXRpbWVmaWVsZDogew0KCQkJbm9kZTogJ3RpbWVmaWVsZCcsDQoJCQlo +YW5kbGVyOiBudWxsDQoJCX0sDQoJCWNvbW1lbnQ6IHsNCgkJCW5vZGU6ICdjb21t +ZW50JywNCgkJCWhhbmRsZXI6ICd4bWxSZXNwb25zZUhhbmRsZXJfY29tbWVudCcN +CgkJfSwNCgkJY29tcGFueV9jb21tZW50OiB7DQoJCQlub2RlOiAnY29tcGFueV9j +b21tZW50JywNCgkJCWhhbmRsZXI6ICd4bWxSZXNwb25zZUhhbmRsZXJfY29tcGFu +eV9jb21tZW50Jw0KCQl9LA0KCQlwcmV2aWV3OiB7DQoJCQlub2RlOiAncHJldmll +dycsDQoJCQloYW5kbGVyOiAneG1sUmVzcG9uc2VIYW5kbGVyX3ByZXZpZXcnDQoJ +CX0sDQoJCWVycm9yOiB7DQoJCQlub2RlOiAnZXJyb3InLA0KCQkJaGFuZGxlcjog +J3htbFJlc3BvbnNlSGFuZGxlcl9lcnJvcicNCgkJfQ0KCX0pOw0KfTsNCmNvbW1l +bnRGb3JtQ2xhc3MuaW5oZXJpdHNGcm9tKGFqYXhGb3JtQ2xhc3MpOw0KDQpPYmpl +Y3QuZXh0ZW5kT2JqZWN0KA0KCWNvbW1lbnRGb3JtQ2xhc3MucHJvdG90eXBlLCB7 +DQoJDQoJYnVpbGQ6IHsNCgkJY29tbWVudDogZnVuY3Rpb24oaWQsIHRleHQpew0K +CQkJdmFyIGVudHJ5X3JlcGx5X2l0ZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50 +KCdsaScpOw0KCQkJZW50cnlfcmVwbHlfaXRlbS5pZCA9ICdjb21tZW50XycgKyBp +ZDsNCgkJCWVudHJ5X3JlcGx5X2l0ZW0uY2xhc3NOYW1lID0gY29tbWVudEZvcm0u +Y2xhc3NOYW1lcy5jb21tZW50SXRlbTsNCgkJCWVudHJ5X3JlcGx5X2l0ZW0uaW5u +ZXJIVE1MID0gdGV4dDsNCgkJCXRoaXMuX2hpZ2hsaWdodChlbnRyeV9yZXBseV9p +dGVtKTsNCgkJCXJldHVybiBlbnRyeV9yZXBseV9pdGVtOwkJCQ0KCQl9LA0KCQkN +CgkJdGhyZWFkOiBmdW5jdGlvbigpew0KCQkJdmFyIGVudHJ5X3JlcGx5X3RocmVh +ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3VsJyk7DQoJCQllbnRyeV9yZXBs +eV90aHJlYWQuY2xhc3NOYW1lID0gY29tbWVudEZvcm0uY2xhc3NOYW1lcy50aHJl +YWQ7DQoJCQlyZXR1cm4gZW50cnlfcmVwbHlfdGhyZWFkOw0KCQl9LA0KCQ0KCSAg +ICBfaGlnaGxpZ2h0OiBmdW5jdGlvbihub2RlKSB7DQoJICAgICAgICB2YXIgcHJl +cyA9IG5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3ByZScpOw0KCSAgICAgICAg +Zm9yICh2YXIgaSA9IDA7IGkgPCBwcmVzLmxlbmd0aDsgaSsrKSB7DQogICAgICAg +ICAgICAgIHZhciBjb2RlID0gcHJlc1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgn +Y29kZScpOw0KICAgICAgICAgICAgICBpZiAoY29kZS5sZW5ndGgpIGhsanMuaGln +aGxpZ2h0QmxvY2soY29kZVswXSwgaGxqcy50YWJSZXBsYWNlKTsNCiAgICAgICAg +ICAgIH0NCgkgICAgfQ0KCX0sDQoJDQoJX2FkZENvbW1lbnRzOiBmdW5jdGlvbih4 +bWxOb2RlcywgbWVzc19ib3gpew0KCQl2YXIgcmVwbGllcyA9IFtdOw0KCQl2YXIg +Y29tbWVudHNIb2xkZXIgPSAkKCdjb21tZW50cycpOw0KCQlmb3IodmFyIGk9MDsg +aTx4bWxOb2Rlcy5jb21tZW50Lmxlbmd0aDsgaSsrKSB7DQoJCQl2YXIgdGV4dCA9 +IHhtbE5vZGVzLmNvbW1lbnRbaV0uZmlyc3RDaGlsZC5kYXRhOw0KCQkJdmFyIGVu +dHJ5X3JlcGx5X2l0ZW0gPSB0aGlzLmJ1aWxkLmNvbW1lbnQoeG1sTm9kZXMuY29t +bWVudFtpXS5nZXRBdHRyaWJ1dGUoJ2NvbW1lbnRfaWQnKSwgdGV4dCk7DQoJCQly +ZXBsaWVzW3JlcGxpZXMubGVuZ3RoXSA9IGVudHJ5X3JlcGx5X2l0ZW07DQoJCQlp +Zih4bWxOb2Rlcy5jb21tZW50W2ldLmdldEF0dHJpYnV0ZSgncGFyZW50X2lkJykh +PTApIHsNCgkJCQl2YXIgZW50cnkgPSAkKCdjb21tZW50XycgKyB4bWxOb2Rlcy5j +b21tZW50W2ldLmdldEF0dHJpYnV0ZSgncGFyZW50X2lkJykpOw0KCQkJCXZhciBl +bnRyeV9yZXBseV90aHJlYWQgPSBlbnRyeS5nZXRFbGVtZW50KCcuJyArIHRoaXMu +Y2xhc3NOYW1lcy50aHJlYWQpOw0KCQkJCWlmKCFlbnRyeV9yZXBseV90aHJlYWQp +IHsNCgkJCQkJZW50cnlfcmVwbHlfdGhyZWFkID0gdGhpcy5idWlsZC50aHJlYWQo +KTsNCgkJCQkJZW50cnlfcmVwbHlfdGhyZWFkLmFwcGVuZENoaWxkKGVudHJ5X3Jl +cGx5X2l0ZW0pOw0KCQkJCQllbnRyeS5hcHBlbmRDaGlsZChlbnRyeV9yZXBseV90 +aHJlYWQpOw0KCQkJCX0NCgkJCQllbnRyeV9yZXBseV90aHJlYWQuYXBwZW5kQ2hp +bGQoZW50cnlfcmVwbHlfaXRlbSk7DQoJCQl9IGVsc2Ugew0KCQkJCXZhciByZXBs +eV9ob2xkZXIgPSAkKCdjb21tZW50cycpLmdldEVsZW1lbnQoJy4nICsgdGhpcy5j +bGFzc05hbWVzLnRocmVhZCkNCg0KCQkJCQ0KCQkJCQ0KCQkJCQ0KCQkJCQ0KCQkJ +CWlmKCFyZXBseV9ob2xkZXIpIHsNCgkJCQkJdmFyIHJlcGx5X2hvbGRlciA9IGRv +Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3VsJyk7DQoJCQkJCXJlcGx5X2hvbGRlci5j +bGFzc05hbWUgPSB0aGlzLmNsYXNzTmFtZXMudGhyZWFkOw0KCQkJCQljb21tZW50 +c0hvbGRlci5pbnNlcnRCZWZvcmUocmVwbHlfaG9sZGVyLCBjb21tZW50c0hvbGRl +ci5nZXRFbGVtZW50KCcuYWRkLWNvbW1lbnQnKSk7DQoJCQkJfQ0KCQkJCWlmICgh +bWVzc19ib3gpew0KCQkJCQlyZXBseV9ob2xkZXIuYXBwZW5kQ2hpbGQoZW50cnlf +cmVwbHlfaXRlbSk7DQoJCQkJfSBlbHNlew0KCQkJCQllbnRyeV9yZXBseV9pdGVt +LmdldEVsZW1lbnQoJ3AucmVwbHknKS5kaXNwb3NlKHRydWUpOw0KCQkJCQkkKHJl +cGx5X2hvbGRlcikuZ3JhYihlbnRyeV9yZXBseV9pdGVtLCAndG9wJykNCgkJCQl9 +DQoJCQkJDQoJCQl9DQoJCQlpZih4bWxOb2Rlcy5jb21tZW50W2ldLmdldEF0dHJp +YnV0ZSgndXNlcl9jb21tZW50Jyk9PTEpIHsgDQoJCQkJJCgnY29tbWVudF8nICsg +eG1sTm9kZXMuY29tbWVudFtpXS5nZXRBdHRyaWJ1dGUoJ2NvbW1lbnRfaWQnKSku +YWRkQ2xhc3MoJ2pzLW15LXJlcGx5Jyk7CQ0KCQkJfSBlbHNlIHsNCgkJCQkkKCdj +b21tZW50XycgKyB4bWxOb2Rlcy5jb21tZW50W2ldLmdldEF0dHJpYnV0ZSgnY29t +bWVudF9pZCcpKS5nZXRFbGVtZW50KCdkaXYubXNnLW1ldGEnKS5hZGRDbGFzcygn +bmV3LXJlcGx5Jyk7DQoJCQl9IA0KCQl9DQoJCWlmIChyZXBsaWVzLmxlbmd0aCA+ +IDApIHsNCgkJCXZhciBjb21tZW50c0hlYWRlciA9ICQoJ2NvbW1lbnRzJykuZ2V0 +RWxlbWVudCgnLmNvbW1lbnRzLWhlYWRlcicpOw0KCQkJaWYgKGNvbW1lbnRzSGVh +ZGVyICYmIGNvbW1lbnRzSGVhZGVyLmhhc0NsYXNzKCdoaWRkZW4nKSkgew0KCQkJ +CWNvbW1lbnRzSGVhZGVyLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTsNCgkJCX0NCgkJ +fQ0KDQoJCXJldHVybiByZXBsaWVzOw0KCX0sDQoJDQoJeG1sUmVzcG9uc2VIYW5k +bGVyX2NvbW1lbnQ6IGZ1bmN0aW9uKHhtbE5vZGVzLCBwYXJhbXMpew0KCQlpZih4 +bWxOb2Rlcy5tZXNzYWdlICYmIHhtbE5vZGVzLm1lc3NhZ2UubGVuZ3RoICYmIHht +bE5vZGVzLmNvbW1lbnQgJiYgeG1sTm9kZXMuY29tbWVudC5sZW5ndGgpIHsNCgkJ +CXBhcmFtcy5mb3JtLmVsZW1lbnRzWyd0aW1lZmllbGQnXS52YWx1ZSA9IHhtbE5v +ZGVzLnRpbWVmaWVsZFswXS5maXJzdENoaWxkLmRhdGE7DQoJCQl2YXIgY29tbWVu +dHNIb2xkZXIgPSAkKCdjb21tZW50cycpOw0KCQkJDQoJCQl2YXIganNmbGRobGQ7 +DQoJCQlqc2ZsZGhsZCA9ICQoJ2pzLWZpZWxkLWhvbGRlci13aXRoLWhlbHAnKTsN +CgkJCWlmICghanNmbGRobGQpIHsNCgkJCQlqc2ZsZGhsZCA9ICQoJ2pzLWZpZWxk +LWhvbGRlcicpOw0KCQkJfTsNCgkJCXZhciBwcmV2aWV3SG9sZGVyID0ganNmbGRo +bGQuZ2V0RWxlbWVudCgnLicgKyB0aGlzLmNsYXNzTmFtZXMucHJldmlld0hvbGRl +cik7DQoJCQlpZiAoIWpzZmxkaGxkLmNsYXNzTmFtZS5tYXRjaCgvbWVzc2FnZS1i +b3gtZm9ybS8pKXsNCgkJCQlqc2ZsZGhsZC5hZGRDbGFzcygnaGlkZGVuJyk7DQoJ +CQkJdGhpcy5fYWRkQ29tbWVudHMoeG1sTm9kZXMpOw0KCQkJfSBlbHNlew0KCQkJ +CXRoaXMuX2FkZENvbW1lbnRzKHhtbE5vZGVzLCB0cnVlKTsNCgkJCQkNCgkJCQlw +YXJhbXMuZm9ybVsnY29tbWVudFttZXNzYWdlXSddLnZhbHVlPSIiOw0KCQkJfQ0K +CQkJDQoJCQkkKHBhcmFtcy5mb3JtKS5yZW1vdmVDbGFzcyhwYXJhbXMubG9hZGlu +Z0NsYXNzTmFtZSk7DQoJCQl0aGlzLmFkZE5ld0NvbW1lbnRzVG9CYXIoKTsNCgkJ +CXZhciBjb21tZW50c19oZWFkZXIgPSAkKCdjb21tZW50cy1oZWFkZXInKTsNCgkJ +CWlmIChjb21tZW50c19oZWFkZXIpIHsNCgkJCQljb21tZW50c19oZWFkZXIuYWRk +Q2xhc3MoJ2NvbW1lbnRzLWhlYWRlci12aXNpYmxlJyk7DQoJCQl9DQoJCQlwYXJh +bXMuZm9ybS5sYXN0X3RleHQgPSBwYXJhbXMuZm9ybVsnY29tbWVudFttZXNzYWdl +XSddLnZhbHVlOw0KCQkJdmFyIGlucHV0c190b19ibHVyID0gJChwYXJhbXMuZm9y +bSkuZ2V0RWxlbWVudHMoJ2lucHV0Jyk7DQoJCQlmb3IgKHZhciBpPTAsIGwgPSBp +bnB1dHNfdG9fYmx1ci5sZW5ndGg7IGkgPCBsOyBpKyspIHsNCgkJCQlpbnB1dHNf +dG9fYmx1cltpXS5ibHVyKCk7DQoJCQl9Ow0KCQl9DQoJCWlmICh4bWxOb2Rlcy5j +b21tZW50ICYmIHhtbE5vZGVzLmNvbW1lbnQubGVuZ3RoKQ0KCQkJdGhpcy5maXJl +RXZlbnQoJ3RtOmxvYWRpbmctZmluaXNoZWQnKTsNCgkJdGhpcy51cGRhdGVBbGxD +b21tZW50c0NvdW50KCk7DQoJCSQocGFyYW1zLmZvcm0pLnJlbW92ZUNsYXNzKCds +b2FkaW5nJyk7DQoJCQ0KCX0sDQoNCgl4bWxSZXNwb25zZUhhbmRsZXJfY29tcGFu +eV9jb21tZW50OiBmdW5jdGlvbih4bWxOb2RlcywgcGFyYW1zKXsNCgkJaWYoeG1s +Tm9kZXMubWVzc2FnZSAmJiB4bWxOb2Rlcy5tZXNzYWdlLmxlbmd0aCAmJiB4bWxO +b2Rlcy5jb21wYW55X2NvbW1lbnQgJiYgeG1sTm9kZXMuY29tcGFueV9jb21tZW50 +Lmxlbmd0aCkgew0KCQkJcGFyYW1zLmZvcm0uZWxlbWVudHNbJ3RpbWVmaWVsZCdd +LnZhbHVlID0geG1sTm9kZXMudGltZWZpZWxkWzBdLmZpcnN0Q2hpbGQuZGF0YTsN +CgkJCXZhciBjb21tZW50c0hvbGRlciA9ICQoJ2NvbW1lbnRzJyk7DQoJCQl2YXIg +cmVwbHlfaG9sZGVyID0gY29tbWVudHNIb2xkZXIuZ2V0RWxlbWVudCgnLicgKyB0 +aGlzLmNsYXNzTmFtZXMudGhyZWFkKTsNCgkJCXZhciBlbnRyeV9yZXBsaWVzID0g +Y29tbWVudHNIb2xkZXIuZ2V0RWxlbWVudHMoJy4nICsgdGhpcy5jbGFzc05hbWVz +LmNvbW1lbnRJdGVtKTsNCgkJCWZvcih2YXIgaT0wLCB4bWxfbGVuZ3RoID0geG1s +Tm9kZXMuY29tcGFueV9jb21tZW50Lmxlbmd0aDsgaTx4bWxfbGVuZ3RoOyBpKysp +IHsNCgkJCQllbnRyeV9yZXBsaWVzLnNvcnQodGhpcy5zb3J0QXJyYXkpOw0KCQkJ +CXJlcGx5X2hvbGRlci5pbnNlcnRCZWZvcmUoZW50cnlfcmVwbHlfaXRlbSwgZW50 +cnlfcmVwbGllc1swXSk7DQoJCQkJdGhpcy5idWlsZC5jb21tZW50KHhtbE5vZGVz +LmNvbXBhbnlfY29tbWVudFtpXS5nZXRBdHRyaWJ1dGUoJ2NvbW1lbnRfaWQnKSwg +eG1sTm9kZXMuY29tcGFueV9jb21tZW50W2ldLmZpcnN0Q2hpbGQuZGF0YSk7DQoJ +CQkJIGlmKHhtbE5vZGVzLmNvbXBhbnlfY29tbWVudFtpXS5nZXRBdHRyaWJ1dGUo +J3VzZXJfY29tbWVudCcpPT0xKSB7IA0KCQkJCQkkKCdjb21tZW50XycgKyB4bWxO +b2Rlcy5jb21wYW55X2NvbW1lbnRbaV0uZ2V0QXR0cmlidXRlKCdjb21tZW50X2lk +JykpLmFkZENsYXNzKCdteS1yZXBseScpOw0KCQkJCX0gZWxzZSB7DQoJCQkJCSQo +J2NvbW1lbnRfJyArIHhtbE5vZGVzLmNvbXBhbnlfY29tbWVudFtpXS5nZXRBdHRy +aWJ1dGUoJ2NvbW1lbnRfaWQnKSkuYWRkQ2xhc3MoJ25ldy1yZXBseScpOw0KCQkJ +CX0NCgkJCX0NCgkJCXZhciBqc2ZsZGhsZCA9ICQoJ2pzLWZpZWxkLWhvbGRlcicp +Ow0KCQkJdmFyIHByZXZpZXdIb2xkZXIgPSBqc2ZsZGhsZC5nZXRFbGVtZW50KCcu +JyArIHRoaXMuY2xhc3NOYW1lcy5wcmV2aWV3SG9sZGVyKTsNCgkJCWpzZmxkaGxk +LmFkZENsYXNzKCdoaWRkZW4nKTsNCgkJCSQocGFyYW1zLmZvcm0pLnJlbW92ZUNs +YXNzKHBhcmFtcy5sb2FkaW5nQ2xhc3NOYW1lKTsNCgkJCXRoaXMuYWRkTmV3Q29t +bWVudHNUb0JhcigpOw0KCQl9DQoJCWlmICh4bWxOb2Rlcy5jb21wYW55X2NvbW1l +bnQgJiYgeG1sTm9kZXMuY29tcGFueV9jb21tZW50Lmxlbmd0aCkNCgkJCXRoaXMu +ZmlyZUV2ZW50KCd0bTpsb2FkaW5nLWZpbmlzaGVkJyk7DQoJCXRoaXMudXBkYXRl +QWxsQ29tbWVudHNDb3VudCgpOw0KCQkkKHBhcmFtcy5mb3JtKS5yZW1vdmVDbGFz +cygnbG9hZGluZycpOw0KCX0sDQoJDQoJeG1sUmVzcG9uc2VIYW5kbGVyX3ByZXZp +ZXc6IGZ1bmN0aW9uKHhtbE5vZGVzLCBwYXJhbXMpew0KCQlpZih4bWxOb2Rlcy5w +cmV2aWV3ICYmIHhtbE5vZGVzLnByZXZpZXcubGVuZ3RoKSB7DQoJCQl2YXIgcHJl +dmlld0hvbGRlciA9ICQoJ2pzLWZpZWxkLWhvbGRlcicpLmdldEVsZW1lbnQoJy4n +ICsgdGhpcy5jbGFzc05hbWVzLnByZXZpZXdIb2xkZXIpOw0KCQkJcHJldmlld0hv +bGRlci5yZW1vdmVDbGFzcygnaGlkZGVuJykNCgkJCXByZXZpZXdIb2xkZXIuaW5u +ZXJIVE1MID0geG1sTm9kZXMucHJldmlld1swXS5maXJzdENoaWxkLmRhdGE7DQoJ +CQkkKHBhcmFtcy5mb3JtKS5yZW1vdmVDbGFzcyhwYXJhbXMubG9hZGluZ0NsYXNz +TmFtZSk7DQoJCQkkKHBhcmFtcy5mb3JtKS5yZW1vdmVDbGFzcygnbG9hZGluZycp +Ow0KCQkJaWYgKHBhcmFtcy5mb3JtLmlucHV0X3ByZXZpZXcpew0KCQkJCSQocGFy +YW1zLmZvcm0uaW5wdXRfcHJldmlldykucmVtb3ZlQ2xhc3MoJ2xvYWRpbmcnKTsN +CgkJCX0NCgkJCXRoaXMuYnVpbGQuX2hpZ2hsaWdodChwcmV2aWV3SG9sZGVyKTsN +CgkJfQ0KCX0sDQoJDQoJeG1sUmVzcG9uc2VIYW5kbGVyX2Vycm9yOiBmdW5jdGlv +bih4bWxOb2RlcywgcGFyYW1zKXsNCgkJaWYoeG1sTm9kZXMuZXJyb3IgJiYgeG1s +Tm9kZXMuZXJyb3IubGVuZ3RoKSB7DQoJCQkkKHBhcmFtcy5mb3JtKS5yZW1vdmVD +bGFzcyhwYXJhbXMubG9hZGluZ0NsYXNzTmFtZSk7DQoJCQlmb3IgKHZhciBpPTA7 +IGk8eG1sTm9kZXMuZXJyb3IubGVuZ3RoOyBpKyspew0KCQkJCXZhciBlcnJvck1l +c3NhZ2UgPSB4bWxOb2Rlcy5lcnJvcltpXS5maXJzdENoaWxkID8geG1sTm9kZXMu +ZXJyb3JbaV0uZmlyc3RDaGlsZC5kYXRhIDogdGhpcy5lcnJvck1lc3NhZ2VzLnVu +a25vd25FcnJvcjsNCgkJCX0NCgkJCXRoaXMuc2hvd0Vycm9yKGVycm9yTWVzc2Fn +ZSk7DQoJCX0NCgkJJChwYXJhbXMuZm9ybSkucmVtb3ZlQ2xhc3MoJ2xvYWRpbmcn +KTsNCgkJaWYgKHBhcmFtcy5mb3JtLmlucHV0X3ByZXZpZXcpew0KCQkJJChwYXJh +bXMuZm9ybS5pbnB1dF9wcmV2aWV3KS5yZW1vdmVDbGFzcygnbG9hZGluZycpOw0K +CQl9DQoJfSwNCgkNCglzZW5kQ29tbWVudDogZnVuY3Rpb24oZm9ybSwgc3VibWl0 +VHlwZSwgbm9kZSkgew0KCQkkKCdqcy1maWVsZC1ob2xkZXInKS5yZW1vdmVDbGFz +cygnanMtbWFya2VkLWVycm9yJyk7DQoJCSQobm9kZSkuYWRkQ2xhc3MoJ2xvYWRp +bmcnKQ0KCQl0aGlzLnNlbmREYXRhKGZvcm0sIHN1Ym1pdFR5cGUpOw0KCQl0aGlz +LmZpcmVFdmVudCgndG06bG9hZGluZy1zdGFydGVkJyk7DQoJfSwNCgkNCglzZW5k +T25FbnRlcjogZnVuY3Rpb24odGV4dGFyZWEpIHsNCgkJdGV4dGFyZWEub25rZXl1 +cCA9IGZ1bmN0aW9uKGV2KSB7DQoJCQlpZighZXYpIHsNCgkJCQlldiA9IHdpbmRv +dy5ldmVudDsNCgkJCX0NCgkJCXZhciBrZXkgPSBnZXRDaGFyQ29kZShldik7DQoJ +CQlpZihrZXk9PTEzICYmIGV2LmN0cmxLZXkpIHsNCgkJCQljb21tZW50Rm9ybS5z +ZW5kQ29tbWVudCh0aGlzLmZvcm0sICdjb21tZW50JywgdGhpcy5mb3JtKTsNCgkJ +CX0NCgkJfQ0KCX0sDQoJDQoJbW92ZUZvcm06IGZ1bmN0aW9uKHJlcGx5X2Zvcm1f +aWQpIHsNCgkJdmFyIGZvcm1Ib2xkZXIgPSAkKHJlcGx5X2Zvcm1faWQpOw0KCQl2 +YXIgcGFyZW50X2lkID0gcmVwbHlfZm9ybV9pZC5tYXRjaCgvcmVwbHlfZm9ybV8o +LiopLylbMV07DQoJCXBhcmVudF9pZCA9IHBhcnNlSW50KHBhcmVudF9pZCk7DQoJ +CWlmICghYXJndW1lbnRzLmNhbGxlZS5hZGRjKSB7DQoJCQlhcmd1bWVudHMuY2Fs +bGVlLmFkZGMgPSAkKCd3cmFwcGVyJykuZ2V0RWxlbWVudCgnLmFkZC1jb21tZW50 +Jyk7DQoJCQkNCgkJfQ0KCQl2YXIgaW5mb2xpbmVIb2xkZXIgPSBhcmd1bWVudHMu +Y2FsbGVlLmFkZGM7DQoJCWlmIChpbmZvbGluZUhvbGRlcikgew0KCQkNCgkJCQ0K +CQkJaWYgKCFhcmd1bWVudHMuY2FsbGVlLmpzZmxkaGxkKSB7DQoJCQkJaWYgKCEo +YXJndW1lbnRzLmNhbGxlZS5qc2ZsZGhsZCA9ICQoJ2pzLWZpZWxkLWhvbGRlci13 +aXRoLWhlbHAnKSkpIHsNCgkJCQkJYXJndW1lbnRzLmNhbGxlZS5qc2ZsZGhsZCA9 +ICQoJ2pzLWZpZWxkLWhvbGRlcicpOw0KCQkJCX0gZWxzZXsNCgkJCQkJYXJndW1l +bnRzLmNhbGxlZS53aXRoaGVscCA9IHRydWU7DQoJCQkJfQ0KCQkJCWFyZ3VtZW50 +cy5jYWxsZWUuY29tbWhvbGRyID0gYXJndW1lbnRzLmNhbGxlZS5qc2ZsZGhsZC5n +ZXRFbGVtZW50KCcjanMtZmllbGQtY29tbWVudCcpOw0KCQkJCWFyZ3VtZW50cy5j +YWxsZWUucHJ3aGxkID0gYXJndW1lbnRzLmNhbGxlZS5qc2ZsZGhsZC5nZXRFbGVt +ZW50KCcuJyArIHRoaXMuY2xhc3NOYW1lcy5wcmV2aWV3SG9sZGVyKTsNCgkJCQlh +cmd1bWVudHMuY2FsbGVlLnRyZWVpbnB1dCA9ICBhcmd1bWVudHMuY2FsbGVlLmpz +ZmxkaGxkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdmb3JtJylbMF0uZWxlbWVudHNb +J2NvbW1lbnRbcGFyZW50X2lkXSddOw0KDQoJCQl9DQoJCQlpZiAoIWFyZ3VtZW50 +cy5jYWxsZWUud2l0aGhlbHApIHsNCgkJCQl2YXIgaW5mb2xpbmUgPSBpbmZvbGlu +ZUhvbGRlci5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGwnKVswXTsNCgkJCQlpZiAo +aW5mb2xpbmUpIHsNCgkJCQkJaWYocGFyZW50X2lkPT0wKSB7DQoJCQkJCQkkKGlu +Zm9saW5lKS5yZW1vdmVDbGFzcygnaGlkZGVuJyk7DQoJCQkJCX0NCgkJCQkJZWxz +ZSB7DQoJCQkJCQkkKGluZm9saW5lKS5hZGRDbGFzcygnaGlkZGVuJyk7DQoJCQkJ +CX0NCgkJCQl9DQoJCQl9DQoJCQkNCgkJCXZhciBqc2ZsZGhsZCA9IGFyZ3VtZW50 +cy5jYWxsZWUuanNmbGRobGQ7DQoJCQl2YXIgY29tbWVudEhvbGRlciA9IGFyZ3Vt +ZW50cy5jYWxsZWUuY29tbWhvbGRyOw0KCQkJdmFyIHByZXZpZXdIb2xkZXIgPSBh +cmd1bWVudHMuY2FsbGVlLnByd2hsZDsNCgkJCXZhciB0cmVlaW5wdXQgPSBhcmd1 +bWVudHMuY2FsbGVlLnRyZWVpbnB1dDsNCgkJCWlmKGpzZmxkaGxkKSB7DQoJCQkJ +Zm9ybUhvbGRlci5hcHBlbmRDaGlsZChqc2ZsZGhsZCk7DQoJCQkJdHJlZWlucHV0 +LnZhbHVlID0gcGFyZW50X2lkOw0KCQkJCSQocHJldmlld0hvbGRlcikuYWRkQ2xh +c3MoJ2hpZGRlbicpOw0KCQkJCXByZXZpZXdIb2xkZXIuaW5uZXJIVE1MID0gJyc7 +DQoJCQkJY29tbWVudEhvbGRlci52YWx1ZSA9ICcnOw0KCQkJCWpzZmxkaGxkLnJl +bW92ZUNsYXNzKCdoaWRkZW4nKTsNCgkJCQljb21tZW50SG9sZGVyLmZvY3VzKCk7 +DQoJCQl9DQoJCX0NCg0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0sDQoJDQoJc2Ny +b2xsVG9BbmNob3I6IGZ1bmN0aW9uKGFuY2hvcil7DQoJCXdpbmRvdy5sb2NhdGlv +bi5ocmVmID0gd2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoJyMnKVswXSArIGFu +Y2hvcjsgDQoJfSwNCgkNCglyZWxvYWRDb21tZW50czogZnVuY3Rpb24oKSB7DQoJ +CXZhciB1cmwgPSAnL2FqYXgvY29tbWVudHMvZ2V0X25ld19jb21tZW50cy8nOw0K +CQlpZihkb2N1bWVudC5mb3Jtc1snY29tbWVudF9mb3JtJ10pIHsNCgkJCXZhciB0 +aW1lZmllbGQgPSBkb2N1bWVudC5mb3Jtc1snY29tbWVudF9mb3JtJ10uZWxlbWVu +dHNbJ3RpbWVmaWVsZCddLnZhbHVlOw0KCQkJdmFyIGRhdGEgPSAndGFyZ2V0X2lk +PScrIHRoaXMudGFyZ2V0SWQgKycmdGFyZ2V0X3R5cGU9JyArIHRoaXMudGFyZ2V0 +VHlwZSArICcmdGltZWZpZWxkPScgKyB0aW1lZmllbGQ7DQoJCQlfdGhpcyA9IHRo +aXM7DQoJCQlhamF4UG9zdCgNCgkJCQkJdXJsLA0KCQkJCQlkYXRhLA0KCQkJCQl0 +aGlzLnJlbG9hZENvbW1lbnRzT25sb2FkLA0KCQkJCQlfdGhpcw0KCQkJCQkpOw0K +CQkJfQ0KCQl0aGlzLmZpcmVFdmVudCgndG06bG9hZGluZy1zdGFydGVkJyk7DQoJ +CXJldHVybiBmYWxzZTsNCgl9LA0KCQ0KCXJlbG9hZENvbW1lbnRzT25sb2FkOiBm +dW5jdGlvbihhamF4T2JqLCBfdGhpcykgew0KCQl2YXIgY29tbWVudHNIb2xkZXIg +PSAkKCdjb21tZW50cycpOw0KCQl2YXIgeG1sT2JqID0gYWpheE9iai5yZXNwb25z +ZVhNTDsNCgkJdmFyIHhtbE5vZGVzID0gX3RoaXMucGFyc2VYTUwoeG1sT2JqKTsN +CgkJY29tbWVudHNIb2xkZXIuZ2V0RWxlbWVudHMoJy5uZXctcmVwbHknKS5yZW1v +dmVDbGFzcygnbmV3LXJlcGx5Jyk7DQoJCWlmKHhtbE5vZGVzLm1lc3NhZ2UgJiYg +eG1sTm9kZXMubWVzc2FnZS5sZW5ndGggJiYgeG1sTm9kZXMuY29tbWVudCAmJiB4 +bWxOb2Rlcy5jb21tZW50Lmxlbmd0aCkgew0KCQkJZG9jdW1lbnQuZm9ybXNbJ2Nv +bW1lbnRfZm9ybSddLmVsZW1lbnRzWyd0aW1lZmllbGQnXS52YWx1ZSA9IHhtbE5v +ZGVzLnRpbWVmaWVsZFswXS5maXJzdENoaWxkLmRhdGE7DQoJCQlfdGhpcy5fYWRk +Q29tbWVudHMoeG1sTm9kZXMpOw0KCQl9DQoJCV90aGlzLmFkZE5ld0NvbW1lbnRz +VG9CYXIoKTsNCgkJY29tbWVudEZvcm0uZmlyZUV2ZW50KCd0bTpsb2FkaW5nLWZp +bmlzaGVkJyk7DQoJCV90aGlzLnVwZGF0ZUFsbENvbW1lbnRzQ291bnQoKTsNCgl9 +LA0KCQ0KCWFkZE5ld0NvbW1lbnRzVG9CYXI6IGZ1bmN0aW9uKCkgew0KCQl0aGlz +Lm5ld19yZXBsaWVzID0gJChkb2N1bWVudCkuZ2V0RWxlbWVudHMoJy5uZXctcmVw +bHknKTsNCgkJZm9yICh2YXIgaT10aGlzLm5ld19yZXBsaWVzLmxlbmd0aC0xO2k+ +PTA7aS0tKSB7DQoJCQlpZiAodGhpcy5uZXdfcmVwbGllc1tpXS5oYXNDbGFzcygn +bXktcmVwbHknKSkgew0KCQkJCXRoaXMubmV3X3JlcGxpZXMuc3BsaWNlKGksIDEp +Ow0KCQkJfSBlbHNlIGlmICh0aGlzLm5ld19yZXBsaWVzW2ldLmhhc0NsYXNzKCdz +ZWVuJykpIHsNCgkJCQl0aGlzLm5ld19yZXBsaWVzLnNwbGljZShpLCAxKTsNCgkJ +CX0NCgkJfQ0KCQl0aGlzLnVwZGF0ZU5ld0NvbW1lbnRzQ291bnQoKTsNCgl9LA0K +CQ0KCW5leHROZXdDb21tZW50OiBmdW5jdGlvbigpew0KCQlpZiAodGhpcy5uZXdf +cmVwbGllcyAmJiB0aGlzLm5ld19yZXBsaWVzLmxlbmd0aCkgew0KCQkJdmFyIGNv +bW1lbnQgPSB0aGlzLm5ld19yZXBsaWVzWzBdOw0KCQkJY29tbWVudC5hZGRDbGFz +cygnc2VlbicpOw0KCQkJdGhpcy5uZXdfcmVwbGllcy5zcGxpY2UoMCwgMSk7DQoJ +CQl0aGlzLmdvVG9Db21tZW50KGNvbW1lbnQpOw0KCQkJdGhpcy51cGRhdGVOZXdD +b21tZW50c0NvdW50KCk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0sDQoJDQoJ +dXBkYXRlQWxsQ29tbWVudHNDb3VudDogZnVuY3Rpb24oKSB7DQoJCWlmICgkKCdj +b21tZW50cycpLmdldEVsZW1lbnQoJy5jb21tZW50cy1oZWFkZXIgLmpzLWNvbW1l +bnRzLWNvdW50JykpDQoJCQkkKCdjb21tZW50cycpLmdldEVsZW1lbnQoJy5jb21t +ZW50cy1oZWFkZXIgLmpzLWNvbW1lbnRzLWNvdW50JykuaW5uZXJIVE1MID0gJCgn +Y29tbWVudHMnKS5nZXRFbGVtZW50cygnLm1zZy1tZXRhJykubGVuZ3RoLnRvU3Ry +aW5nKCk7DQoJfSwNCgkNCgl1cGRhdGVOZXdDb21tZW50c0NvdW50OiBmdW5jdGlv +bigpIHsNCgkJaWYgKHRoaXMubmV3X3JlcGxpZXMpIHsNCgkJCXZhciBjb3VudCA9 +IHRoaXMubmV3X3JlcGxpZXMubGVuZ3RoOw0KCQkJdGhpcy5maXJlRXZlbnQoJ3Rt +Om5ldy1jb21tZW50cy1jb3VudC1jaGFuZ2VkJywgdGhpcy5uZXdfcmVwbGllcy5s +ZW5ndGgpOw0KCQl9DQoJfSwNCgkNCglnb1RvQ29tbWVudDogZnVuY3Rpb24oY29t +bWVudCkgew0KCQl0aGlzLmZpcmVFdmVudCgidG06Z28tdG8tY29tbWVudCIsIGNv +bW1lbnQucGFyZW50Tm9kZSk7DQoJCXRoaXMuc2Nyb2xsZXIgPSAodGhpcy5zY3Jv +bGxlciB8fCBuZXcgRnguU2Nyb2xsKHdpbmRvdykpOw0KCQl0aGlzLnNjcm9sbGVy +LnRvRWxlbWVudChjb21tZW50KTsNCgkJcmV0dXJuIGZhbHNlOw0KCX0sDQoJDQoJ +cXVpY2tHb1RvQ29tbWVudDogZnVuY3Rpb24oY29tbWVudCkgew0KCQl0aGlzLmZp +cmVFdmVudCgidG06Z28tdG8tY29tbWVudCIsIGNvbW1lbnQucGFyZW50Tm9kZSk7 +DQoJCXdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIiMiICsgY29tbWVudC5wYXJlbnRO +b2RlLmlkOw0KCQlyZXR1cm4gZmFsc2U7DQoJfSwNCg0KCWdvVG9QYXJlbnRDb21t +ZW50OiBmdW5jdGlvbihsaW5rKSB7DQoJCXZhciBpZCA9IGxpbmsuaHJlZi5zdWJz +dHIobGluay5ocmVmLmluZGV4T2YoJyMnKSsxKTsNCgkJdmFyIGVsbSA9ICQoaWQp +Ow0KCQlsaW5rID0gJChsaW5rKTsNCgkJZWxtLmdldEVsZW1lbnQoJy5kb3duLXRv +LWNoaWxkJykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpOw0KCQllbG0uZ2V0RWxlbWVu +dCgnLmRvd24tdG8tY2hpbGQgYScpLmhyZWYgPSAnIycgKyBsaW5rLmdldFBhcmVu +dCgnLmNvbW1lbnRfaG9sZGVyJykuaWQ7DQoNCgkJdGhpcy5zY3JvbGxlciA9ICh0 +aGlzLnNjcm9sbGVyIHx8IG5ldyBGeC5TY3JvbGwod2luZG93KSk7DQoJCXRoaXMu +c2Nyb2xsZXIudG9FbGVtZW50KGVsbSk7DQoNCgkJcmV0dXJuIGZhbHNlOwkJDQoJ +fSwNCgkNCglnb1RvQ2hpbGRDb21tZW50OiBmdW5jdGlvbihsaW5rKSB7DQoJCXZh +ciBpZCA9IGxpbmsuaHJlZi5zdWJzdHIobGluay5ocmVmLmluZGV4T2YoJyMnKSsx +KTsNCgkJdmFyIGVsbSA9ICQoaWQpOw0KCQlsaW5rID0gJChsaW5rKTsNCgkJbGlu +ay5nZXRQYXJlbnQoJy5jb21tZW50X2hvbGRlcicpLmdldEVsZW1lbnQoJy5kb3du +LXRvLWNoaWxkJykuYWRkQ2xhc3MoJ2hpZGRlbicpOw0KDQoJCXRoaXMuc2Nyb2xs +ZXIgPSAodGhpcy5zY3JvbGxlciB8fCBuZXcgRnguU2Nyb2xsKHdpbmRvdykpOw0K +CQl0aGlzLnNjcm9sbGVyLnRvRWxlbWVudChlbG0pOw0KDQoJCXJldHVybiBmYWxz +ZTsJCQ0KCX0sDQoJCQ0KCWdvVG9JZDogZnVuY3Rpb24oaWQpIHsNCgkJdGhpcy5z +Y3JvbGxlciA9ICh0aGlzLnNjcm9sbGVyIHx8IG5ldyBGeC5TY3JvbGwod2luZG93 +KSk7DQoJCXRoaXMuc2Nyb2xsZXIudG9FbGVtZW50KCQoaWQpKTsNCgkJcmV0dXJu +IGZhbHNlOw0KCX0sDQoJDQoJc29ydEFycmF5OiBmdW5jdGlvbihhLCBiKSB7DQoJ +ICBpZiAoYS5vZmZzZXRUb3AgPCBiLm9mZnNldFRvcCkNCgkgICAgcmV0dXJuIC0x +Ow0KCSAgaWYgKGEub2Zmc2V0VG9wID4gYi5vZmZzZXRUb3ApDQoJICAgIHJldHVy +biAxOw0KCSAgcmV0dXJuIDA7CQkNCgl9LA0KCQ0KDQoJc2hvd0Vycm9yOiBmdW5j +dGlvbihlcnJvck1zZyl7DQoJCWlmICghZXJyb3JNc2cpIHsNCgkJCWVycm9yTXNn +ID0gRkFULnZvdGluZ3NfdW5rbm93bl9lcnJvcjsNCgkJfQ0KCQlmdXR1X2FsZXJ0 +KEZBVC52b3RpbmdzX2hlYWRlciwgZXJyb3JNc2csIHRydWUsICdlcnJvcicpOw0K +CX0NCgkNCn0pOw0KDQp2YXIgY29tbWVudEZvcm0gPSBuZXcgY29tbWVudEZvcm1D +bGFzcygpOw0KdG0uaW5pdC5hZGQoZnVuY3Rpb24oKXsNCgl2YXIgY19mb3JtX25v +ZGUgPSAkKCdjb21tZW50X2Zvcm0nKTsNCglpZiAoY19mb3JtX25vZGUpIHsNCgkJ +Y19mb3JtX25vZGUuaW5wdXRfcHJldmlldyA9IGNfZm9ybV9ub2RlLmdldEVsZW1l +bnQoJ2lucHV0LnByZXZpZXcnKTsNCgkJaWYgKGNfZm9ybV9ub2RlLmlucHV0X3By +ZXZpZXcpew0KCQkJDQoJCQljX2Zvcm1fbm9kZS5pbnB1dF9wcmV2aWV3LmFkZEV2 +ZW50KCdjbGljaycsZnVuY3Rpb24oKXsNCgkJCQljb21tZW50Rm9ybS5zZW5kQ29t +bWVudChjX2Zvcm1fbm9kZSwgJ3ByZXZpZXcnLCBjX2Zvcm1fbm9kZS5pbnB1dF9w +cmV2aWV3KQ0KCQkJfSk7DQoJCX0NCgkJDQoJCXZhciBjX2Zvcm1fc3VibWl0ID0g +ZnVuY3Rpb24oKXsNCgkJCWlmIChjX2Zvcm1fbm9kZS5sYXN0X3RleHQgPT0gY19m +b3JtX25vZGVbJ2NvbW1lbnRbbWVzc2FnZV0nXS52YWx1ZSl7DQoJCQkJDQoJCQl9 +IGVsc2Ugew0KCQkJCWNvbW1lbnRGb3JtLnNlbmRDb21tZW50KGNfZm9ybV9ub2Rl +LCBjb21tZW50X3R5cGUsIGNfZm9ybV9ub2RlKTsgDQoJCQkJDQoJCQl9DQoJCX0N +CgkJDQoJCXZhciBjb21tZW50X3R5cGUgPSBjX2Zvcm1fbm9kZS5nZXRFbGVtZW50 +KCcjY29tbWVudF90eXBlJykudGl0bGU7DQoJCWNfZm9ybV9ub2RlLmFkZEV2ZW50 +cyh7DQoJCQknc3VibWl0JzpmdW5jdGlvbigpew0KCQkJCWNfZm9ybV9zdWJtaXQo +KTsNCgkJCQlyZXR1cm4gZmFsc2U7CQ0KCQkJfSwNCgkJCSdrZXl1cCc6ZnVuY3Rp +b24oZSl7DQoJCQkJaWYoZS5jb250cm9sICYmIChlLmtleSA9PSAnZW50ZXInKSkg +ew0KCQkJCQljX2Zvcm1fc3VibWl0KCk7DQoJCQkJfQ0KCQkJfQ0KCQkJDQoJCX0p +DQoJCQ0KCQkNCgkJDQoJfQ0KfSkNCg== + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline; filename=voting.js +Content-Type: application/x-javascript; charset=utf-8; name=voting.js +Content-Location: http://habrahabr.ru/js/1307631427/voting.js +Content-Transfer-Encoding: Base64 + +LyoNCjxkaXYgaWQ9InVzZXJ7eyAkaWQgfX0iIGNsYXNzPSJ2b3RlX2hvbGRlciAo +bG9naW5faG9sZGVyKSI+DQoJCTxkaXYgY2xhc3M9InZvdGluZyAocG9zaXRpdmUg +fHwgbmVnYXRpdmUpIChtaW5lIHx8IHZvdGVkKSAocGx1cyB8fCBtaW51cykiPg0K +CQkJPHNwYW4gY2xhc3M9InZvdGVfdGl0bGUiPtCa0LDRgNC80LAg0L/QvtC70YzQ +t9C+0LLQsNGC0LXQu9GPPC9zcGFuPg0KCQkJPHNwYW4gY2xhc3M9InZvdGVfcG9p +bnRzIj4NCgkJCQk8ZW0+e3sgJHNjb3JlIH19PC9lbT4NCgkJCQk8c3Ryb25nPnt7 +ICRjb3VudCB9fSAgL3N0cm9uZz4NCgkJCTwvc3Bhbj4NCgkJCTxkaXYgY2xhc3M9 +InZvdGVfYnV0dG9ucyI+DQoJCQkJPGEgb25jbGljaz0icmV0dXJuIFZvdGVyLnZv +dGUoZXZlbnQsIHRoaXMsICd1c2VyIHx8IGNvbW1lbnQgfHwgcG9zdCcsICdwbHVz +Jyk7IiBjbGFzcz0idm90ZV9wbHVzIiBocmVmPSIiPjwvYT4NCgkJCQk8YSBvbmNs +aWNrPSJyZXR1cm4gVm90ZXIudm90ZShldmVudCwgdGhpcywgJ3VzZXIgfHwgY29t +bWVudCB8fCBwb3N0JywgJ21pbnVzJyk7IiBjbGFzcz0idm90ZV9taW51cyIgaHJl +Zj0iIj48L2E+DQoJCQk8L2Rpdj4NCgkJPC9kaXY+DQoJPC9kaXY+DQo8L2Rpdj4N +CiovDQoNCg0KDQpWb3RlciA9IHsNCgl2b3RlVHlwZTogew0KCQkJcG9zdDogew0K +CQkJCQl1cmw6ICh3aW5kb3cuYmFzZVVSTCB8fCAnJykgKyAnL2FqYXgvdm90aW5n +LycsDQoJCQkJCWREYXRhOiB7IC8vIGRlZmF1bHQgZGF0YQ0KCQkJCQkJYWN0aW9u +OiAndm90ZScsDQoJCQkJCQltb2RlOiAncG9zdHMnLA0KCQkJCQkJdGFyZ2V0X25h +bWU6ICdwb3N0JywNCgkJCQkJCWRibFZvdGU6IGZhbHNlIC8vIGRvdWJsZSB2b3Rp +bmcgaXMgYWxsb3dkZWQNCgkJCQkJfQ0KCQkJfSwNCg0KCQkJcG9zdF9jb21tZW50 +OiB7DQoJCQkJCXVybDogKHdpbmRvdy5iYXNlVVJMIHx8ICcnKSArICcvYWpheC92 +b3RpbmcvJywNCgkJCQkJZERhdGE6IHsNCgkJCQkJCWFjdGlvbjogJ3ZvdGUnLA0K +CQkJCQkJdGFyZ2V0X25hbWU6ICdwb3N0X2NvbW1lbnQnLA0KCQkJCQkJZGJsVm90 +ZTogZmFsc2UNCgkJCQkJfQ0KCQkJfSwNCg0KCQkJdXNlcjogew0KCQkJCQl1cmw6 +ICh3aW5kb3cuYmFzZVVSTCB8fCAnJykgKyAnL2FqYXgvdm90aW5nLycsDQoJCQkJ +CWREYXRhOiB7DQoJCQkJCQlhY3Rpb246ICd2b3RlJywNCgkJCQkJCW1vZGU6ICd1 +c2VycycsDQoJCQkJCQl0YXJnZXRfbmFtZTogJ3VzZXInLA0KCQkJCQkJZGJsVm90 +ZTogdHJ1ZQ0KCQkJCQl9DQoJCQl9LA0KDQoJCQljb21wYW55OiB7DQoJCQkJCXVy +bDogKHdpbmRvdy5iYXNlVVJMIHx8ICcnKSArICcvYWpheC92b3RpbmcvJywNCgkJ +CQkJZERhdGE6IHsNCgkJCQkJCWFjdGlvbjogJ3ZvdGUnLA0KCQkJCQkJbW9kZTog +J2NvbXBhbnknLA0KCQkJCQkJdGFyZ2V0X25hbWU6ICdjb21wYW55JywNCgkJCQkJ +CWRibFZvdGU6IHRydWUNCgkJCQkJfQ0KCQkJfSwNCg0KCQkJYmxvZzogew0KCQkJ +CQl1cmw6ICh3aW5kb3cuYmFzZVVSTCB8fCAnJykgKyAnL2FqYXgvdm90aW5nLycs +DQoJCQkJCWREYXRhOiB7DQoJCQkJCQlhY3Rpb246ICd2b3RlJywNCgkJCQkJCW1v +ZGU6ICdibG9nJywNCgkJCQkJCXRhcmdldF9uYW1lOiAnYmxvZycsDQoJCQkJCQlk +YmxWb3RlOiB0cnVlDQoJCQkJCX0NCgkJCX0sDQoNCgkJCWNvbXBhbnlfY29tbWVu +dDogew0KCQkJCQl1cmw6ICh3aW5kb3cuYmFzZVVSTCB8fCAnJykgKyAnL2FqYXgv +dm90aW5nLycsDQoJCQkJCWREYXRhOiB7DQoJCQkJCQlhY3Rpb246ICd2b3RlJywN +CgkJCQkJCXRhcmdldF9uYW1lOiAnY29tcGFueV9jb21tZW50JywNCgkJCQkJCWRi +bFZvdGU6IHRydWUNCgkJCQkJfQ0KCQkJfSwNCg0KCQkJcWFfcXVlc3Rpb246IHsN +CgkJCQkJdXJsOiAod2luZG93LmJhc2VVUkwgfHwgJycpICsgJy9hamF4L3ZvdGlu +Zy8nLA0KCQkJCQlkRGF0YTogeyAvLyBkZWZhdWx0IGRhdGENCgkJCQkJCWFjdGlv +bjogJ3ZvdGUnLA0KCQkJCQkJbW9kZTogJ3Bvc3RzJywNCgkJCQkJCXRhcmdldF9u +YW1lOiAncWFfcXVlc3Rpb24nLA0KCQkJCQkJZGJsVm90ZTogZmFsc2UgLy8gZG91 +YmxlIHZvdGluZyBpcyBhbGxvd2RlZA0KCQkJCQl9DQoJCQl9LA0KDQoJCQlxYV9h +bnN3ZXI6IHsNCgkJCQkJdXJsOiAod2luZG93LmJhc2VVUkwgfHwgJycpICsgJy9h +amF4L3ZvdGluZy8nLA0KCQkJCQlkRGF0YTogeyAvLyBkZWZhdWx0IGRhdGENCgkJ +CQkJCWFjdGlvbjogJ3ZvdGUnLA0KCQkJCQkJdGFyZ2V0X25hbWU6ICdxYV9hbnN3 +ZXInLA0KCQkJCQkJZGJsVm90ZTogZmFsc2UgLy8gZG91YmxlIHZvdGluZyBpcyBh +bGxvd2RlZA0KCQkJCQl9DQoJCQl9DQoJfSwNCg0KDQoJdm90ZU1hcms6IHsNCgkJ +CXBsdXM6IHsNCgkJCQkJc3RyaW5nOiAncGx1cycsDQoJCQkJCW51bWJlcjogMQ0K +CQkJfSwNCg0KCQkJbWludXM6IHsNCgkJCQkJc3RyaW5nOiAnbWludXMnLA0KCQkJ +CQludW1iZXI6IC0xDQoJCQl9LA0KDQoJCQlyZXN1bHRzOiB7DQoJCQkJCXN0cmlu +ZzogJ3Jlc3VsdHMnLA0KCQkJCQludW1iZXI6IDANCgkJCX0NCgl9LA0KDQoJaHRt +bE5vZGVOYW1lczogew0KCQkJc2NvcmU6ICdzcGFuJywNCgkJCWNvdW50OiAnZW0n +LA0KCQkJbWFyazogJ3N0cm9uZycNCgl9LA0KDQoJeG1sTm9kZU5hbWVzOiB7DQoJ +CQllcnJvcjogJ2Vycm9yJywNCgkJCXNjb3JlOiAnc2NvcmUnLA0KCQkJY291bnQ6 +ICdjb3VudCcsDQoJCQltYXJrOiAnbWFyaycsDQoJCQljaGFyZ2Vfc3RyaW5nOiAn +Y2hhcmdlX3N0cmluZycNCgl9LA0KDQoJY2xhc3NOYW1lczogew0KCQkJdm90ZUhv +bGRlcjogJ3ZvdGVfaG9sZGVyJywNCgkJCXZvdGluZ0Jsb2NrOiAndm90aW5nJywN +CgkJCXZvdGVQb2ludHM6ICdtYXJrJywNCgkJCXZvdGVDb3VudDogJ3RvdGFsJywN +CgkJCWxvZ2luSG9sZGVyOiAnbG9naW5faG9sZGVyJywNCg0KCQkJaW51c2U6ICdp +bnVzZScsIC8vIGRlcHJpY2F0ZWQgKG5vdCB1c2VkKQ0KCQkJc2hvd0Nob2ljZTog +J3Nob3dfY2hvaWNlJywNCg0KCQkJaXNNaW5lOiAnbWluZScsDQoJCQlpc0V4cGly +ZWQ6ICdleHBpcmVkJywNCgkJCW5vQWNjZXNzOiAnbm9fYXV0aCcsDQoJCQkvL25v +Vm90aW5nOiAnbm9fdm90aW5nJywNCg0KCQkJaXNQb3NpdGl2ZTogJ3Bvc2l0aXZl +JywNCgkJCWlzTmVnYXRpdmU6ICduZWdhdGl2ZScsDQoNCgkJCWlzVm90ZWQ6ICd2 +b3RlZCcsDQoJCQlpc1ZvdGVkUGx1czogJ3ZvdGVkX3BsdXMnLA0KCQkJaXNWb3Rl +ZE1pbnVzOiAndm90ZWRfbWludXMnLA0KDQoJCQlpc0xvYWRpbmc6ICdpc0xvYWRp +bmcnDQoJfSwNCg0KCWNob2ljZTogew0KCQkJc2hvdzogZnVuY3Rpb24obGluayl7 +DQoJCQkJCXZhciBsaW5rR2xvYmFsUGFyZW50ID0gJChsaW5rKS5nZXRQYXJlbnQo +Jy4nICsgVm90ZXIuY2xhc3NOYW1lcy52b3RlSG9sZGVyKTsNCgkJCQkJLy9hbGVy +dChsaW5rR2xvYmFsUGFyZW50KTsgcmV0dXJuOw0KCQkJCQl2YXIgbGlua0xvY2Fs +UGFyZW50ID0gbGluazsNCgkJCQkJaWYgKCEkKGxpbmtMb2NhbFBhcmVudCkuaGFz +Q2xhc3MoVm90ZXIuY2xhc3NOYW1lcy5pc01pbmUpICYmIC8vIGlmIG5vdCBtaW5l +DQoJCQkJCQkhJChsaW5rTG9jYWxQYXJlbnQpLmhhc0NsYXNzKFZvdGVyLmNsYXNz +TmFtZXMuaXNWb3RlZCkgJiYgLy8gaWYgbm90IHZvdGVkDQoJCQkJCQkhJChsaW5r +TG9jYWxQYXJlbnQpLmhhc0NsYXNzKFZvdGVyLmNsYXNzTmFtZXMuaXNFeHBpcmVk +KSkgeyAvLyDQstGA0LXQvNGPINCz0L7Qu9C+0YHQvtCy0LDQvdC40Y8g0L/RgNC+ +0YjQu9C+DQoJCQkJCQkkKGxpbmtHbG9iYWxQYXJlbnQpLmFkZENsYXNzKFZvdGVy +LmNsYXNzTmFtZXMuc2hvd0Nob2ljZSk7DQoJCQkJCX0NCgkJCX0sDQoNCgkJCWhp +ZGU6IGZ1bmN0aW9uKGV2ZW50LCBsaW5rKXsNCgkJCQkJaWYoIWV2ZW50KSBldmVu +dCA9IHdpbmRvdy5ldmVudDsNCgkJCQkJdmFyIGxpbmtDaGlsZHJlbiA9IGxpbmsu +Z2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKTsNCgkJCQkJdmFyIGxpbmtHbG9iYWxQ +YXJlbnQgPSAkKGxpbmspLmdldFBhcmVudCgnLicgKyBWb3Rlci5jbGFzc05hbWVz +LnZvdGVIb2xkZXIpOw0KDQoJCQkJCS8vINC10YHQu9C4INGN0LvQtdC80LXQvdGC +LCDQvdCwINC60L7RgtC+0YDRi9C5INC/0LXRgNC10LTQstC40LPQsNC10Lwg0LzR +i9GI0YwsINC70LXQttC40YIg0LLQvdGD0YLRgNC4INGH0L7QudGBINCx0LvQvtC6 +0LAsINCy0YvRhdC+0LTQuNC8DQoJCQkJCWlmIChldmVudC5yZWxhdGVkVGFyZ2V0 +KSB7DQoJCQkJCQl2YXIgd2hlcmUgPSBldmVudC5yZWxhdGVkVGFyZ2V0Ow0KCQkJ +CQkJaWYgKHdoZXJlID09IGxpbmspIHJldHVybjsNCgkJCQkJCWlmICh3aGVyZS5u +b2RlVHlwZSA9PSAzKSB3aGVyZSA9IHdoZXJlLnBhcmVudE5vZGU7DQoJCQkJCQlm +b3IodmFyIGk9MDsgaTxsaW5rQ2hpbGRyZW4ubGVuZ3RoOyBpKyspew0KCQkJCQkJ +CWlmICh3aGVyZSA9PSBsaW5rQ2hpbGRyZW5baV0pIHsNCgkJCQkJCQkJcmV0dXJu +Ow0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfSBlbHNlIGlmIChldmVudC50b0Vs +ZW1lbnQgJiYgbGluay5jb250YWlucyhldmVudC50b0VsZW1lbnQpKSB7DQoJCQkJ +CQlyZXR1cm47DQoJCQkJCX0NCg0KCQkJCQkkKGxpbmtHbG9iYWxQYXJlbnQpLnJl +bW92ZUNsYXNzKFZvdGVyLmNsYXNzTmFtZXMuc2hvd0Nob2ljZSk7DQoJCQl9DQoJ +fSwNCg0KCXZvdGU6IGZ1bmN0aW9uKGV2ZW50LCBsaW5rLCB2b3RlVHlwZSwgdm90 +ZU1hcmspew0KCQkJaWYoIShsaW5rICYmIHZvdGVUeXBlICYmIFZvdGVyLnZvdGVU +eXBlW3ZvdGVUeXBlXSAmJiB2b3RlTWFyaykpIHJldHVybiBmYWxzZTsgLy8gaWYg +cGFyYW1zIGFyZSBpbmNvbXBsZXRlZA0KDQoNCg0KCQkJdmFyIGxpbmtHbG9iYWxQ +YXJlbnQgPSAkKGxpbmspLmdldFBhcmVudCgnLicgKyBWb3Rlci5jbGFzc05hbWVz +LnZvdGVIb2xkZXIpOw0KCQkJdmFyIGxpbmtMb2NhbFBhcmVudCA9ICQobGluayku +Z2V0UGFyZW50KCcuJyArIFZvdGVyLmNsYXNzTmFtZXMudm90aW5nQmxvY2spOw0K +DQoJCQlpZiAoIWxpbmtHbG9iYWxQYXJlbnQgfHwgIWxpbmtMb2NhbFBhcmVudCB8 +fCAvLyBnbG9iYWwgb3IgbG9jYWwgcGFyZW50IHdhcyBub3QgZm91bmQNCgkJCQkk +KGxpbmtMb2NhbFBhcmVudCkuaGFzQ2xhc3MoVm90ZXIuY2xhc3NOYW1lcy5pc1Zv +dGVkKSAmJiAhVm90ZXIudm90ZVR5cGVbdm90ZVR5cGVdLmREYXRhLmRibFZvdGUg +fHwgLy8gd2FzIHZvdGVkIGFscmVhZHkgYW5kIGRvdWJsZSB2b3RlIGlzIG5vdCBh +bGxvd2RlZA0KCQkJCSQobGlua0xvY2FsUGFyZW50KS5oYXNDbGFzcyhWb3Rlci5j +bGFzc05hbWVzLmlzVm90ZWQpICYmIChWb3Rlci52b3RlVHlwZVt2b3RlVHlwZV0u +ZERhdGEuZGJsVm90ZSAmJiAkKGxpbmtMb2NhbFBhcmVudCkuaGFzQ2xhc3Modm90 +ZU1hcmspKSB8fCAvLyB3YXMgdm90ZWQgYWxyZWFkeSBhbmQgZG91YmxlIHZvdGUg +aXMgYWxsb3dkZWQgYW5kDQoJCQkJJChsaW5rTG9jYWxQYXJlbnQpLmhhc0NsYXNz +KFZvdGVyLmNsYXNzTmFtZXMuaXNMb2FkaW5nKSkgeyAvLyBpcyBsb2FkaW5nDQoJ +CQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0KCQkJaWYgKCQobGlua0xvY2FsUGFyZW50 +KS5oYXNDbGFzcyhWb3Rlci5jbGFzc05hbWVzLmlzTWluZSkpIHsNCgkJCQlmdXR1 +X2FsZXJ0KEZBVC52b3RpbmdzX2hlYWRlciwgRkFULnZvdGluZ3NfZXJyb3Jfc2Vs +ZiwgZmFsc2UsICdlcnJvcicpOw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0NCgkJ +CWlmICgkKGxpbmtMb2NhbFBhcmVudCkuaGFzQ2xhc3MoVm90ZXIuY2xhc3NOYW1l +cy5pc0V4cGlyZWQpKSB7DQoJCQkJZnV0dV9hbGVydChGQVQudm90aW5nc19oZWFk +ZXIsIEZBVC52b3RpbmdzX2Vycm9yX2lzX2V4cGlyZWQsIGZhbHNlLCAnZXJyb3In +KTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoNCg0KDQoJCQlpZiAoJChsaW5r +TG9jYWxQYXJlbnQpLmhhc0NsYXNzKFZvdGVyLmNsYXNzTmFtZXMubm9BY2Nlc3Mp +KSB7DQoJCQkJZnV0dV9hbGVydChGQVQudm90aW5nc19oZWFkZXIsIEZBVC52b3Rp +bmdzX2Vycm9yX25vX2FjY2VzcywgZmFsc2UsICdlcnJvcicpOw0KCQkJCXJldHVy +biBmYWxzZTsNCgkJCX0NCgkJCWlmICgkKGxpbmtMb2NhbFBhcmVudCkuaGFzQ2xh +c3MoVm90ZXIuY2xhc3NOYW1lcy5sb2dpbkhvbGRlcikgJiYgbG9naW5Gb3JtICYm +IGxvZ2luRm9ybS5zaG93KSB7IC8vIHRyeSB0byB2b3RlIGFzIGd1ZXN0DQoJCQkJ +aWYoIWxvZ2luRm9ybS5odG1sLmJsb2NrKXsgLy8gaWYgdGhlcmUgaXMgbm8gYW55 +IGh0bWwgb2YgbG9naW5fZm9ybSBvbiB0aGUgcGFnZSAodXNlciBpcyBub3QgYSBn +dWVzdCkNCgkJCQkJZnV0dV9hbGVydChGQVQudm90aW5nc19oZWFkZXIsIEZBVC52 +b3RpbmdzX2Vycm9yX3Byb2hpYml0ZWQsIHRydWUsICdlcnJvcicpOw0KCQkJCX0g +ZWxzZSB7DQoJCQkJCWxvZ2luRm9ybS5zaG93KGV2ZW50LCBsaW5rKTsNCgkJCQl9 +DQoNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoNCg0KDQoJCQlWb3Rlci5zZXJ2 +ZXIuc2VuZERhdGEobGlua0dsb2JhbFBhcmVudCwgbGlua0xvY2FsUGFyZW50LCB2 +b3RlVHlwZSwgdm90ZU1hcmspOw0KCQkJcmV0dXJuIGZhbHNlOw0KCX0sDQoNCglz +ZXJ2ZXI6IHsNCgkJCXNlbmREYXRhOiBmdW5jdGlvbihsaW5rR2xvYmFsUGFyZW50 +LCBsaW5rTG9jYWxQYXJlbnQsIHZvdGVUeXBlLCB2b3RlTWFyayl7DQoJCQkJCXZh +ciB1cmwgPSAgVm90ZXIudm90ZVR5cGVbdm90ZVR5cGVdLnVybDsNCg0KCQkJCQl2 +YXIgYWN0aW9uID0gVm90ZXIudm90ZVR5cGVbdm90ZVR5cGVdLmREYXRhLmFjdGlv +bjsNCgkJCQkJdmFyIHRhcmdldF9uYW1lID0gVm90ZXIudm90ZVR5cGVbdm90ZVR5 +cGVdLmREYXRhLnRhcmdldF9uYW1lOw0KCQkJCQl2YXIgbWFyayA9IFZvdGVyLnZv +dGVNYXJrW3ZvdGVNYXJrXSA/IFZvdGVyLnZvdGVNYXJrW3ZvdGVNYXJrXS5udW1i +ZXIgOiAnJzsNCgkJCQkJdmFyIHRhcmdldF9pZCA9IGxpbmtHbG9iYWxQYXJlbnQu +Z2V0QXR0cmlidXRlKCdpZCcpID8gbGlua0dsb2JhbFBhcmVudC5nZXRBdHRyaWJ1 +dGUoJ2lkJykubWF0Y2goL1xkKy9nKVswXSA6ICcnOw0KDQoJCQkJCXZhciBkYXRh +ID0gJ2FjdGlvbj0nICsgYWN0aW9uICsgJyZ0YXJnZXRfbmFtZT0nICsgdGFyZ2V0 +X25hbWUgKyAnJnRhcmdldF9pZD0nICsgdGFyZ2V0X2lkICsgJyZtYXJrPScgKyBt +YXJrOw0KCQkJCQl2YXIgcGFyYW1zID0gew0KCQkJCQkJbGlua0dsb2JhbFBhcmVu +dDogbGlua0dsb2JhbFBhcmVudCwNCgkJCQkJCWxpbmtMb2NhbFBhcmVudDogbGlu +a0xvY2FsUGFyZW50LA0KCQkJCQkJbWFyayA6IG1hcmssDQoJCQkJCQl2b3RlVHlw +ZSA6IHZvdGVUeXBlDQoJCQkJCX0NCgkJCQkJJChsaW5rTG9jYWxQYXJlbnQpLmFk +ZENsYXNzKFZvdGVyLmNsYXNzTmFtZXMuaXNMb2FkaW5nKTsNCgkJCQkJYWpheExv +YWRQb3N0KHVybCwgZGF0YSwgVm90ZXIuc2VydmVyLnNlbmREYXRhT25sb2FkLCB3 +aW5kb3csIHBhcmFtcyk7DQoJCQl9LA0KDQoJCQlzZW5kRGF0YU9ubG9hZDogZnVu +Y3Rpb24oYWpheE9iaiwgcGFyYW1zKXsNCgkJCQkJLyoNCgkJCQkJCXBhcmFtcyA9 +IHsNCgkJCQkJCQlsaW5rR2xvYmFsUGFyZW50DQoJCQkJCQkJbGlua0xvY2FsUGFy +ZW50DQoJCQkJCQkJbWFyaw0KCQkJCQkJCXZvdGVUeXBlDQoJCQkJCQl9DQoJCQkJ +CSovDQoJCQkJCWlmKGFqYXhPYmogJiYgYWpheE9iai5yZXNwb25zZVhNTCl7DQoJ +CQkJCQl2YXIgeG1sID0gYWpheE9iai5yZXNwb25zZVhNTDsNCgkJCQkJCXZhciBl +cnJvcnMgPSB4bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoVm90ZXIueG1sTm9kZU5h +bWVzLmVycm9yKTsNCgkJCQkJCWlmKGVycm9ycy5sZW5ndGggJiYgZXJyb3JzWzBd +ICYmIGVycm9yc1swXS5maXJzdENoaWxkLm5vZGVUeXBlID09IDMpIHsNCgkJCQkJ +CQlWb3Rlci5zaG93RXJyb3IoZXJyb3JzWzBdLmZpcnN0Q2hpbGQuZGF0YSk7DQoJ +CQkJCQkJJChwYXJhbXMubGlua0xvY2FsUGFyZW50KS5yZW1vdmVDbGFzcyhWb3Rl +ci5jbGFzc05hbWVzLmlzTG9hZGluZyk7DQoJCQkJCQkJcmV0dXJuOw0KCQkJCQkJ +fSBlbHNlIHsNCgkJCQkJCQl2YXIgc2NvcmVzID0geG1sLmdldEVsZW1lbnRzQnlU +YWdOYW1lKFZvdGVyLnhtbE5vZGVOYW1lcy5zY29yZSk7DQoJCQkJCQkJaWYoc2Nv +cmVzLmxlbmd0aCAmJiBzY29yZXNbMF0gJiYgc2NvcmVzWzBdLmZpcnN0Q2hpbGQu +bm9kZVR5cGUgPT0gMykgew0KCQkJCQkJCQlwYXJhbXMuc2NvcmUgPSBzY29yZXNb +MF0uZmlyc3RDaGlsZC5kYXRhOw0KCQkJCQkJCX0NCg0KCQkJCQkJCXZhciBjb3Vu +dCA9IHhtbC5nZXRFbGVtZW50c0J5VGFnTmFtZShWb3Rlci54bWxOb2RlTmFtZXMu +Y291bnQpOw0KCQkJCQkJCWlmKGNvdW50Lmxlbmd0aCAmJiBjb3VudFswXSAmJiBj +b3VudFswXS5maXJzdENoaWxkLm5vZGVUeXBlID09IDMpIHsNCgkJCQkJCQkJcGFy +YW1zLmNvdW50ID0gY291bnRbMF0uZmlyc3RDaGlsZC5kYXRhOw0KCQkJCQkJCX0N +Cg0KCQkJCQkJCXZhciBtYXJrID0geG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKFZv +dGVyLnhtbE5vZGVOYW1lcy5tYXJrKTsNCgkJCQkJCQlpZihtYXJrLmxlbmd0aCAm +JiBtYXJrWzBdICYmIG1hcmtbMF0uZmlyc3RDaGlsZC5ub2RlVHlwZSA9PSAzKSB7 +DQoJCQkJCQkJCXBhcmFtcy5tYXJrID0gbWFya1swXS5maXJzdENoaWxkLmRhdGE7 +DQoJCQkJCQkJfQ0KDQoJCQkJCQkJdmFyIGNoYXJnZV9zdHJpbmcgPSB4bWwuZ2V0 +RWxlbWVudHNCeVRhZ05hbWUoVm90ZXIueG1sTm9kZU5hbWVzLmNoYXJnZV9zdHJp +bmcpOw0KCQkJCQkJCWlmKGNoYXJnZV9zdHJpbmcubGVuZ3RoICYmIGNoYXJnZV9z +dHJpbmdbMF0pIHsNCgkJCQkJCQkJcGFyYW1zLmNoYXJnZV9zdHJpbmcgPSBjaGFy +Z2Vfc3RyaW5nWzBdLmZpcnN0Q2hpbGQuZGF0YTsNCgkJCQkJCQl9DQoNCgkJCQkJ +CQkkKHBhcmFtcy5saW5rTG9jYWxQYXJlbnQpLnJlbW92ZUNsYXNzKFZvdGVyLmNs +YXNzTmFtZXMuaXNMb2FkaW5nKTsNCgkJCQkJCQlWb3Rlci5zZXRTY29yZShwYXJh +bXMpOw0KCQkJCQkJfQ0KDQoNCgkJCQkJfQ0KDQoJCQl9DQoJfSwNCg0KCXNldFNj +b3JlOiBmdW5jdGlvbihwYXJhbXMpew0KCQkJLyoNCgkJCQlwYXJhbXN7DQoJCQkJ +CWxpbmtHbG9iYWxQYXJlbnQNCgkJCQkJbGlua0xvY2FsUGFyZW50DQoJCQkJCW1h +cmsNCgkJCQkJc2NvcmUNCgkJCQkJY291bnQNCgkJCQl9DQoJCQkqLw0KCQkJDQoJ +CQkkKHBhcmFtcy5saW5rTG9jYWxQYXJlbnQpLmFkZENsYXNzKFZvdGVyLmNsYXNz +TmFtZXMuaXNWb3RlZCk7DQoNCgkJCSQocGFyYW1zLmxpbmtMb2NhbFBhcmVudCku +cmVtb3ZlQ2xhc3MoVm90ZXIuY2xhc3NOYW1lcy5pc1ZvdGVkUGx1cyk7DQoJCQkk +KHBhcmFtcy5saW5rTG9jYWxQYXJlbnQpLnJlbW92ZUNsYXNzKFZvdGVyLmNsYXNz +TmFtZXMuaXNWb3RlZE1pbnVzKTsNCg0KCQkJJChwYXJhbXMubGlua0xvY2FsUGFy +ZW50KS5yZW1vdmVDbGFzcyhWb3Rlci5jbGFzc05hbWVzLmlzUG9zaXRpdmUpOw0K +CQkJJChwYXJhbXMubGlua0xvY2FsUGFyZW50KS5yZW1vdmVDbGFzcyhWb3Rlci5j +bGFzc05hbWVzLmlzTmVnYXRpdmUpOw0KDQoJCQkvL3JlbW92ZUNsYXNzKHBhcmFt +cy5saW5rR2xvYmFsUGFyZW50LCBWb3Rlci5jbGFzc05hbWVzLmludXNlKTsNCg0K +CQkJaWYocGFyYW1zLnNjb3JlICYmIHBhcmFtcy5zY29yZS5jaGFyQXQoMCkgPT0g +J+KAkycpIHsNCgkJCQkkKHBhcmFtcy5saW5rTG9jYWxQYXJlbnQpLmFkZENsYXNz +KFZvdGVyLmNsYXNzTmFtZXMuaXNOZWdhdGl2ZSk7DQoJCQl9IGVsc2UgaWYgKHBh +cmFtcy5zY29yZSAmJiBwYXJhbXMuc2NvcmUuY2hhckF0KDApICE9ICfigJMnKSB7 +DQoJCQkJJChwYXJhbXMubGlua0xvY2FsUGFyZW50KS5hZGRDbGFzcyhWb3Rlci5j +bGFzc05hbWVzLmlzUG9zaXRpdmUpOw0KCQkJfQ0KDQoJCQlpZihwYXJhbXMubWFy +ayAmJiBwYXJhbXMubWFyayA9PSAnKycpew0KCQkJCSQocGFyYW1zLmxpbmtMb2Nh +bFBhcmVudCkuYWRkQ2xhc3MoVm90ZXIuY2xhc3NOYW1lcy5pc1ZvdGVkUGx1cyk7 +DQoJCQl9IGVsc2UgaWYocGFyYW1zLm1hcmsgJiYgcGFyYW1zLm1hcmsgPT0gJ+KA +kycpIHsNCgkJCQkkKHBhcmFtcy5saW5rTG9jYWxQYXJlbnQpLmFkZENsYXNzKFZv +dGVyLmNsYXNzTmFtZXMuaXNWb3RlZE1pbnVzKTsNCgkJCX0NCg0KCQkJdmFyIHVz +ZXJjaGFyZ2UgPSAkKCd1c2VyY2hhcmdlJyk7DQoJCQl1c2VyY2hhcmdlICYmICh1 +c2VyY2hhcmdlLmlubmVySFRNTCA9IHBhcmFtcy5jaGFyZ2Vfc3RyaW5nKTsNCg0K +CQkJdHJ5IHsNCgkJCQl2YXIgdm90ZVBvaW50cyA9ICQocGFyYW1zLmxpbmtMb2Nh +bFBhcmVudCkuZ2V0RWxlbWVudCgnLicgKyBWb3Rlci5jbGFzc05hbWVzLnZvdGVQ +b2ludHMpOw0KDQoJCQkJdmFyIHNjb3JlQm94ID0gdm90ZVBvaW50cy5nZXRFbGVt +ZW50c0J5VGFnTmFtZShWb3Rlci5odG1sTm9kZU5hbWVzLnNjb3JlKVswXTsNCgkJ +CQl2YXIgbWFya0JveCA9IHZvdGVQb2ludHMuZ2V0RWxlbWVudHNCeVRhZ05hbWUo +Vm90ZXIuaHRtbE5vZGVOYW1lcy5tYXJrKVswXTsNCg0KCQkJCXNjb3JlQm94Lmlu +bmVySFRNTCA9IHBhcmFtcy5zY29yZTsNCgkJCQlzY29yZUJveC5zZXRBdHRyaWJ1 +dGUoJ3RpdGxlJywgcGFyYW1zLmNvdW50KTsNCgkJCQltYXJrQm94LmlubmVySFRN +TCA9ICcgKCcgKyBwYXJhbXMubWFyayArICcpJzsNCg0KLyoJCQkJdm90ZUNvdW50 +ID0gJChwYXJhbXMubGlua0xvY2FsUGFyZW50KS5nZXRFbGVtZW50cygnLicgKyBW +b3Rlci5jbGFzc05hbWVzLnZvdGVDb3VudClbMF07DQoJCQkJdmFyIGNvdW50Qm94 +ID0gdm90ZUNvdW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFZvdGVyLmh0bWxOb2Rl +TmFtZXMuY291bnQpWzBdOw0KCQkJCWNvdW50Qm94LmlubmVySFRNTCA9IHBhcmFt +cy5jb3VudDsqLw0KDQoJCQl9IGNhdGNoKGUpew0KCQkJCS8vYWxlcnQoZSk7DQoJ +CQl9DQoJfSwNCg0KCXNob3dFcnJvcjogZnVuY3Rpb24oZXJyb3JNc2cpew0KCQlp +ZiAoIWVycm9yTXNnKSB7DQoJCQllcnJvck1zZyA9IEZBVC52b3RpbmdzX3Vua25v +d25fZXJyb3I7DQoJCX0NCgkJZnV0dV9hbGVydChGQVQudm90aW5nc19oZWFkZXIs +IGVycm9yTXNnLCBmYWxzZSwgJ2Vycm9yJyk7DQoJfQ0KfTsNCnRtLmluaXQuYWRk +KGZ1bmN0aW9uKCl7DQoJdmFyIGNvbW1lbnRzQ29udGFpbmVyID0gJCgiY29tbWVu +dHMiKTsNCglpZiAoY29tbWVudHNDb250YWluZXIpIHsNCgkJdmFyIGluZm9wYW5l +bCA9ICQoY29tbWVudHNDb250YWluZXIucGFyZW50Tm9kZSkuZ2V0RWxlbWVudCgi +LmVudHJ5LWluZm8iKTsNCgkJaWYgKGluZm9wYW5lbCkgew0KCQkJdmFyIHBvc3RJ +ZCA9IHBhcnNlSW50KGluZm9wYW5lbC5pZC5yZXBsYWNlKCJpbmZvcGFuZWwiLCIi +KSksDQoJCQloYXNWb3RlTWFya05vZGUsc2NvcmVOb2RlOw0KDQoNCg0KCQkJdmFy +IHZvdGUgPSBmdW5jdGlvbihvKXsNCgkJCSAgDQoJCQkJCQ0KCQkJCWlmICh0ZW1w +LnVzZXIpIHsNCg0KCQkJCQlpZiAoby5pc19hbnN3ZXIgPT0gdHJ1ZSkNCgkJCQkJ +ew0KDQoJCQkJICAgICAgICAobmV3IFJlcXVlc3Qoew0KCQkJCSAgICAgICAgICAg +ICd1cmwnOiAnL2FqYXgvdm90aW5nLycsDQoJCQkJICAgICAgICAgICAgJ2RhdGEn +OiB7DQoJCQkJICAgICAgICAgICAgICAgICdhY3Rpb24nOiAndm90ZScsDQoJCQkJ +ICAgICAgICAgICAgICAgICdtYXJrJzogby50LA0KCQkJCSAgICAgICAgICAgICAg +ICAndGFyZ2V0X2lkJzogby50aWQsDQoJCQkJCQkJCSd0YXJnZXRfbmFtZScgOiAi +cWFfYW5zd2VyIg0KCQkJCSAgICAgICAgICAgIH0sDQoJCQkJCQkJIm9uUmVxdWVz +dCI6ZnVuY3Rpb24oKXsNCgkJCQkJCQkJZ2V0Tm9kZXNGb3JNYXJraW5nKG8udm90 +ZUJ1dHRvbikNCgkJCQkJCQl9LA0KCQkJCQkJCSJvbkNvbXBsZXRlIjogb25Db21w +bGV0ZQ0KCQkJCSAgICAgICAgfSkpLnNlbmQoKTsNCg0KCQkJCSAgICB9DQoJCQkg +ICAgICAgZWxzZQ0KCQkJICAgICAgIHsNCg0KCQkJICAgICAgIAkgKG5ldyBSZXF1 +ZXN0KHsNCgkJCQkgICAgICAgICAgICAndXJsJzogJy9hamF4L3ZvdGluZy8nLA0K +CQkJCSAgICAgICAgICAgICdkYXRhJzogew0KCQkJCSAgICAgICAgICAgICAgICAn +YWN0aW9uJzogJ3ZvdGUnLA0KCQkJCSAgICAgICAgICAgICAgICAnbWFyayc6IG8u +dCwNCgkJCQkgICAgICAgICAgICAgICAgJ3RhcmdldF9pZCc6IG8udGlkLA0KCQkJ +CQkJCQkndGFyZ2V0X25hbWUnIDogInBvc3RfY29tbWVudCIsDQoJCQkJCQkJCSdz +aWduZWRfaWQnIDogby5wb3N0aWQNCgkJCQkgICAgICAgICAgICB9LA0KCQkJCQkJ +CSJvblJlcXVlc3QiOmZ1bmN0aW9uKCl7DQoJCQkJCQkJCWdldE5vZGVzRm9yTWFy +a2luZyhvLnZvdGVCdXR0b24pDQoJCQkJCQkJfSwNCgkJCQkJCQkib25Db21wbGV0 +ZSI6IG9uQ29tcGxldGUNCgkJCQkgICAgICAgIH0pKS5zZW5kKCk7DQoNCgkJCSAg +ICAgICB9DQoNCgkJCQl9DQoJCQl9DQoJCQl2YXIgZ2V0Tm9kZXNGb3JNYXJraW5n +ID0gZnVuY3Rpb24odm90ZUJ1dHRvbikgew0KCQkJCWhhc1ZvdGVNYXJrTm9kZSA9 +ICQodm90ZUJ1dHRvbikuZ2V0UGFyZW50KCJ1bC52b3RlIik7DQoJCQkJc2NvcmVO +b2RlID0gaGFzVm90ZU1hcmtOb2RlLmdldEVsZW1lbnQoIi5tYXJrIHNwYW4iKTsN +CgkJCX0NCgkJCXZhciBvbkNvbXBsZXRlID0gZnVuY3Rpb24ocmVzcG9uc2VIVE1M +LCByZXNwb25zZVhNTCl7DQoNCgkJCQl2YXIgZXJyb3JzID0gcmVzcG9uc2VYTUwu +Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ2Vycm9yJyk7DQoJCQkJaWYgKGVycm9ycy5s +ZW5ndGgpIHsNCgkJCQkJdmFyIGVycm9ydGV4dCA9ICIiOw0KCQkJCQlmb3IgKHZh +ciBpPTAgLCBsID0gZXJyb3JzLmxlbmd0aDsgaSA8IGw7IGkrKykgew0KCQkJCQkJ +aWYgKGVycm9yc1tpXS50YWdOYW1lID09ICJlcnJvciIpew0KCQkJCQkJCWVycm9y +dGV4dCArPSBlcnJvcnNbaV0uZmlyc3RDaGlsZC5kYXRhICsgIjwvYnI+IjsNCgkJ +CQkJCX0NCgkJCQkJfTsNCgkJCQkJZnV0dV9hbGVydCgi0J/RgNC+0LjRgdGI0LXR +gdGC0LLQuNC1INCy0L4g0LLRgNC10LzRjyDQstGL0LHQvtGA0L7QsiIsIGVycm9y +dGV4dCwgZmFsc2UsICdlcnJvcicpOw0KCQkJCX0gZWxzZXsNCgkJCQkJdmFyIHNj +b3JlID0gcmVzcG9uc2VYTUwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3Njb3JlJylb +MF0uZmlyc3RDaGlsZC5kYXRhLA0KCQkJCQlzY29yZU51bSA9IHBhcnNlSW50KHNj +b3JlLnJlcGxhY2UoIuKAkyIsIi0iKSksDQoJCQkJCXZvdGVUeXBlID0gcmVzcG9u +c2VYTUwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ21hcmsnKVswXS5maXJzdENoaWxk +LmRhdGEgKyAiIjsNCgkJCQkJJCgndXNlcmNoYXJnZScpLmlubmVySFRNTCA9IHJl +c3BvbnNlWE1MLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjaGFyZ2Vfc3RyaW5nJylb +MF0uZmlyc3RDaGlsZC5kYXRhDQoJCQkJCXNjb3JlTm9kZS5zZXQoInRleHQiLHNj +b3JlKTsNCgkJCQkJaGFzVm90ZU1hcmtOb2RlLmFkZENsYXNzKCJ2b3RlZCIpLnJl +bW92ZUNsYXNzKCJ2b3RlZF9taW51cyIpLnJlbW92ZUNsYXNzKCJ2b3RlZF9wbHVz +IikucmVtb3ZlQ2xhc3MoInBvc2l0aXZlIikucmVtb3ZlQ2xhc3MoIm5lZ2F0aXZl +Iik7DQoJCQkJCQ0KCQkJCQlpZiAodm90ZVR5cGUgPT0gIuKAkyIpIHsNCgkJCQkJ +CWhhc1ZvdGVNYXJrTm9kZS5hZGRDbGFzcygidm90ZWRfbWludXMiKTsNCgkJCQkJ +fSBlbHNlIGlmICh2b3RlVHlwZSA9PSAiKyIpew0KCQkJCQkJaGFzVm90ZU1hcmtO +b2RlLmFkZENsYXNzKCJ2b3RlZF9wbHVzIik7DQoJCQkJCX0NCgkJCQkJaWYgKHNj +b3JlTnVtID4gMCkgew0KCQkJCQkJaGFzVm90ZU1hcmtOb2RlLmFkZENsYXNzKCJw +b3NpdGl2ZSIpDQoJCQkJCX0gZWxzZSBpZiAoc2NvcmVOdW0gPCAwKSB7DQoJCQkJ +CQloYXNWb3RlTWFya05vZGUuYWRkQ2xhc3MoIm5lZ2F0aXZlIikNCgkJCQkJfQ0K +DQoJCQkJfQ0KDQoJCQl9DQoJCQljb21tZW50c0NvbnRhaW5lci5hZGRFdmVudCgi +Y2xpY2siLGZ1bmN0aW9uKGUpew0KCQkJCXZhciBub2RlID0gZS50YXJnZXQsDQoJ +CQkJbm9kZUNsYXNzTmFtZSA9IG5vZGUuY2xhc3NOYW1lOw0KCQkJCS8vQ2hhbmdl +ZCBhdCAyMC8wNy8yMDEwDQoJCQkJaWYgKG5vZGVDbGFzc05hbWUuaW5kZXhPZigi +dm90ZS1mb3ItYW5zd2VyIikgIT0gLTEpIHsNCgkJCQkJLy9BbnN3ZXJzIHZvdGlu +Zw0KCQkJCQl2YXIgY29tbWVudElkID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlKCJy +ZXYiKS5yZXBsYWNlKCJ2b3Rlci1mb3ItYW5zd2VyOiIsIiIpLCB2b3RlVHlwZTsN +CgkJCQkJaWYgKG5vZGVDbGFzc05hbWUuaW5kZXhPZigidm90ZV9taW51cyIpICE9 +IC0xKSB7DQoJCQkJCQl2b3RlVHlwZSA9IC0xOw0KCQkJCQl9IGVsc2UgaWYgKG5v +ZGVDbGFzc05hbWUuaW5kZXhPZigidm90ZV9wbHVzIikgIT0gLTEpICB7DQoJCQkJ +CQl2b3RlVHlwZSA9IDE7DQoJCQkJCX0gZWxzZSB7DQoJCQkJCQlyZXR1cm4gZmFs +c2U7DQoJCQkJCX0NCg0KCQkJCQl2b3RlKHsNCgkJCQkJCSJ0aWQiOmNvbW1lbnRJ +ZCwNCgkJCQkJCSJ0Ijp2b3RlVHlwZSwNCgkJCQkJCSJwb3N0aWQiOnBvc3RJZCwN +CgkJCQkJCSJ2b3RlQnV0dG9uIjplLnRhcmdldCwNCgkJCQkJCSJpc19hbnN3ZXIi +OnRydWUNCgkJCQkJfSk7DQoJCQkJCXJldHVybiBmYWxzZQ0KCQkJCX0NCgkJCQlp +ZiAobm9kZUNsYXNzTmFtZS5pbmRleE9mKCJ2b3RlLWZvci1jb21tZW50IikgIT0g +LTEpIHsNCgkJCQkJdmFyIGNvbW1lbnRJZCA9IGUudGFyZ2V0LmdldEF0dHJpYnV0 +ZSgicmV2IikucmVwbGFjZSgidm90ZXItZm9yLWNvbW1lbnQ6IiwiIiksDQoJCQkJ +CXZvdGVUeXBlOw0KCQkJCQlpZiAobm9kZUNsYXNzTmFtZS5pbmRleE9mKCJ2b3Rl +X21pbnVzIikgIT0gLTEpIHsNCgkJCQkJCXZvdGVUeXBlID0gLTE7DQoJCQkJCX0g +ZWxzZSBpZiAobm9kZUNsYXNzTmFtZS5pbmRleE9mKCJ2b3RlX3BsdXMiKSAhPSAt +MSkgIHsNCgkJCQkJCXZvdGVUeXBlID0gMTsNCgkJCQkJfSBlbHNlIHsNCgkJCQkJ +CXJldHVybiBmYWxzZTsNCgkJCQkJfQ0KDQoJCQkJCXZvdGUoew0KCQkJCQkJInRp +ZCI6Y29tbWVudElkLA0KCQkJCQkJInQiOnZvdGVUeXBlLA0KCQkJCQkJInBvc3Rp +ZCI6cG9zdElkLA0KCQkJCQkJInZvdGVCdXR0b24iOmUudGFyZ2V0DQoJCQkJCX0p +Ow0KCQkJCQlyZXR1cm4gZmFsc2UNCgkJCQl9IGVsc2UgaWYgKG5vZGVDbGFzc05h +bWUuaW5kZXhPZignanMtc2luZ2xlLXRyZWUnKSAhPSAtMSkgew0KCQkJCQl2YXIg +bGFzdF9jb21tZW50X2xpID0gbm9kZS5wYXJlbnROb2RlLnBhcmVudE5vZGUucGFy +ZW50Tm9kZS5wYXJlbnROb2RlLA0KCQkJCQkJcGFyZW50X2xpOw0KCQkJCQlsYXN0 +X2NvbW1lbnRfbGkuc2luZ2xlX3RocmVhZF9ub2RlcyA9IFtdOw0KCQkJCQlmb3Ig +KHZhciBsaSA9IGxhc3RfY29tbWVudF9saS5wYXJlbnROb2RlLnBhcmVudE5vZGU7 +IGxpLm5vZGVOYW1lID09ICdMSSc7IGxpID0gbGkucGFyZW50Tm9kZS5wYXJlbnRO +b2RlKSB7DQoJCQkJCQkkKGxpKS5hZGRDbGFzcygnc2luZ2xlLXRyZWUtbm9kZScp +LnJlbW92ZUNsYXNzKCdzaW5nbGUtdHJlZS1ub2RlLWxhc3QnKTsNCgkJCQkJCWxh +c3RfY29tbWVudF9saS5zaW5nbGVfdGhyZWFkX25vZGVzLnB1c2gobGkpDQoJCQkJ +CQlsYXN0X2NvbW1lbnRfbGkuZmlyc3RfY29tbWVudF9saSA9IGxpOw0KCQkJCQl9 +Ow0KCQkJCQlpZiAobGFzdF9jb21tZW50X2xpLmZpcnN0X2NvbW1lbnRfbGkpIHsN +CgkJCQkJCWxhc3RfY29tbWVudF9saS5hZGRDbGFzcygnc2luZ2xlLXRyZWUtbm9k +ZS1sYXN0Jyk7DQoJCQkJCQlzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7DQoJCQkJCQkJ +bGFzdF9jb21tZW50X2xpLmZpcnN0X2NvbW1lbnRfbGkuc2Nyb2xsVG9NZSgpOw0K +CQkJCQkJfSwzMDApDQoJCQkJCQlzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7DQoJCQkJ +CQkJbGFzdF9jb21tZW50X2xpLmZpcnN0X2NvbW1lbnRfbGkucmVtb3ZlQ2xhc3Mo +J3NpbmdsZS10cmVlLW5vZGUnKS5hZGRDbGFzcygnc2luZ2xlLXRocmVhZGluZycp +Ow0KCQkJCQkJfSw3MDApDQoNCg0KDQoJCQkJCX0gZWxzZSB7DQoJCQkJCQlmb3Ig +KHZhciBpPTAsIGwgPSBsYXN0X2NvbW1lbnRfbGkuc2luZ2xlX3RocmVhZF9ub2Rl +cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsNCgkJCQkJCQlsYXN0X2NvbW1lbnRfbGku +c2luZ2xlX3RocmVhZF9ub2Rlc1tpXS5yZW1vdmVDbGFzcygnc2luZ2xlLXRyZWUt +bm9kZScpOw0KCQkJCQkJfTsNCgkJCQkJfTsNCgkJCQkJcmV0dXJuIGZhbHNlOw0K +CQkJCX0gZWxzZSBpZihub2RlQ2xhc3NOYW1lLmluZGV4T2YoJ2pzLW11bHRpcGxh +eS10cmVlJykgIT0gLTEpIHsNCgkJCQkJdmFyIGxhc3RfY29tbWVudF9saSA9IG5v +ZGUucGFyZW50Tm9kZS5wYXJlbnROb2RlLnBhcmVudE5vZGUucGFyZW50Tm9kZTsN +CgkJCQkJaWYgKGxhc3RfY29tbWVudF9saS5maXJzdF9jb21tZW50X2xpKSB7DQoN +CgkJCQkJCWxhc3RfY29tbWVudF9saS5maXJzdF9jb21tZW50X2xpLnJlbW92ZUNs +YXNzKCdzaW5nbGUtdGhyZWFkaW5nJyk7DQoNCgkJCQkJCWZvciAodmFyIGk9MCwg +bCA9IGxhc3RfY29tbWVudF9saS5zaW5nbGVfdGhyZWFkX25vZGVzLmxlbmd0aDsg +aSA8IGw7IGkrKykgew0KCQkJCQkJCWxhc3RfY29tbWVudF9saS5zaW5nbGVfdGhy +ZWFkX25vZGVzW2ldLnJlbW92ZUNsYXNzKCdzaW5nbGUtdHJlZS1ub2RlJyk7DQoJ +CQkJCQl9Ow0KDQoJCQkJCQkkKGxhc3RfY29tbWVudF9saSkuc2Nyb2xsVG9NZSgp +Ow0KCQkJCQkJc2V0VGltZW91dChmdW5jdGlvbigpew0KCQkJCQkJCWxhc3RfY29t +bWVudF9saS5yZW1vdmVDbGFzcygnc2luZ2xlLXRyZWUtbm9kZS1sYXN0Jyk7DQoJ +CQkJCQl9LDgwMCkNCgkJCQkJfQ0KDQoJCQkJfQ0KCQkJfSkNCgkJfQ0KDQoJfQ0K +fSk= + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline; filename=swfobject.js +Content-Type: application/x-javascript; charset=utf-8; name=swfobject.js +Content-Location: http://habrahabr.ru/js/1307631427/swfobject.js +Content-Transfer-Encoding: Base64 + +LyoqCiAqIFNXRk9iamVjdCB2MS40LjQ6IEZsYXNoIFBsYXllciBkZXRlY3Rpb24g +YW5kIGVtYmVkIC0gaHR0cDovL2Jsb2cuZGVjb25jZXB0LmNvbS9zd2ZvYmplY3Qv +CiAqCiAqIFNXRk9iamVjdCBpcyAoYykgMjAwNiBHZW9mZiBTdGVhcm5zIGFuZCBp +cyByZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2U6CiAqIGh0dHA6Ly93d3cu +b3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwCiAqCiAqICoq +U1dGT2JqZWN0IGlzIHRoZSBTV0YgZW1iZWQgc2NyaXB0IGZvcm1lcmx5IGtub3du +IGFzIEZsYXNoT2JqZWN0LiBUaGUgbmFtZSB3YXMgY2hhbmdlZCBmb3IKICogICBs +ZWdhbCByZWFzb25zLgogKi8KaWYodHlwZW9mIGRlY29uY2VwdD09InVuZGVmaW5l +ZCIpe3ZhciBkZWNvbmNlcHQ9bmV3IE9iamVjdCgpO30KaWYodHlwZW9mIGRlY29u +Y2VwdC51dGlsPT0idW5kZWZpbmVkIil7ZGVjb25jZXB0LnV0aWw9bmV3IE9iamVj +dCgpO30KaWYodHlwZW9mIGRlY29uY2VwdC5TV0ZPYmplY3RVdGlsPT0idW5kZWZp +bmVkIil7ZGVjb25jZXB0LlNXRk9iamVjdFV0aWw9bmV3IE9iamVjdCgpO30KZGVj +b25jZXB0LlNXRk9iamVjdD1mdW5jdGlvbihfMSxpZCx3LGgsXzUsYyxfNyxfOCxf +OSxfYSxfYil7aWYoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKXtyZXR1cm47fQp0 +aGlzLkRFVEVDVF9LRVk9X2I/X2I6ImRldGVjdGZsYXNoIjsKdGhpcy5za2lwRGV0 +ZWN0PWRlY29uY2VwdC51dGlsLmdldFJlcXVlc3RQYXJhbWV0ZXIodGhpcy5ERVRF +Q1RfS0VZKTsKdGhpcy5wYXJhbXM9bmV3IE9iamVjdCgpOwp0aGlzLnZhcmlhYmxl +cz1uZXcgT2JqZWN0KCk7CnRoaXMuYXR0cmlidXRlcz1uZXcgQXJyYXkoKTsKaWYo +XzEpe3RoaXMuc2V0QXR0cmlidXRlKCJzd2YiLF8xKTt9CmlmKGlkKXt0aGlzLnNl +dEF0dHJpYnV0ZSgiaWQiLGlkKTt9CmlmKHcpe3RoaXMuc2V0QXR0cmlidXRlKCJ3 +aWR0aCIsdyk7fQppZihoKXt0aGlzLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixoKTt9 +CmlmKF81KXt0aGlzLnNldEF0dHJpYnV0ZSgidmVyc2lvbiIsbmV3IGRlY29uY2Vw +dC5QbGF5ZXJWZXJzaW9uKF81LnRvU3RyaW5nKCkuc3BsaXQoIi4iKSkpO30KdGhp +cy5pbnN0YWxsZWRWZXI9ZGVjb25jZXB0LlNXRk9iamVjdFV0aWwuZ2V0UGxheWVy +VmVyc2lvbigpOwppZihjKXt0aGlzLmFkZFBhcmFtKCJiZ2NvbG9yIixjKTt9CnZh +ciBxPV84P184OiJoaWdoIjsKdGhpcy5hZGRQYXJhbSgicXVhbGl0eSIscSk7CnRo +aXMuc2V0QXR0cmlidXRlKCJ1c2VFeHByZXNzSW5zdGFsbCIsXzcpOwp0aGlzLnNl +dEF0dHJpYnV0ZSgiZG9FeHByZXNzSW5zdGFsbCIsZmFsc2UpOwp2YXIgX2Q9KF85 +KT9fOTp3aW5kb3cubG9jYXRpb247CnRoaXMuc2V0QXR0cmlidXRlKCJ4aVJlZGly +ZWN0VXJsIixfZCk7CnRoaXMuc2V0QXR0cmlidXRlKCJyZWRpcmVjdFVybCIsIiIp +OwppZihfYSl7dGhpcy5zZXRBdHRyaWJ1dGUoInJlZGlyZWN0VXJsIixfYSk7fX07 +CmRlY29uY2VwdC5TV0ZPYmplY3QucHJvdG90eXBlPXtzZXRBdHRyaWJ1dGU6ZnVu +Y3Rpb24oX2UsX2Ypewp0aGlzLmF0dHJpYnV0ZXNbX2VdPV9mOwp9LGdldEF0dHJp +YnV0ZTpmdW5jdGlvbihfMTApewpyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW18xMF07 +Cn0sYWRkUGFyYW06ZnVuY3Rpb24oXzExLF8xMil7CnRoaXMucGFyYW1zW18xMV09 +XzEyOwp9LGdldFBhcmFtczpmdW5jdGlvbigpewpyZXR1cm4gdGhpcy5wYXJhbXM7 +Cn0sYWRkVmFyaWFibGU6ZnVuY3Rpb24oXzEzLF8xNCl7CnRoaXMudmFyaWFibGVz +W18xM109XzE0Owp9LGdldFZhcmlhYmxlOmZ1bmN0aW9uKF8xNSl7CnJldHVybiB0 +aGlzLnZhcmlhYmxlc1tfMTVdOwp9LGdldFZhcmlhYmxlczpmdW5jdGlvbigpewpy +ZXR1cm4gdGhpcy52YXJpYWJsZXM7Cn0sZ2V0VmFyaWFibGVQYWlyczpmdW5jdGlv +bigpewp2YXIgXzE2PW5ldyBBcnJheSgpOwp2YXIga2V5Owp2YXIgXzE4PXRoaXMu +Z2V0VmFyaWFibGVzKCk7CmZvcihrZXkgaW4gXzE4KXtfMTYucHVzaChrZXkrIj0i +K18xOFtrZXldKTt9CnJldHVybiBfMTY7fSxnZXRTV0ZIVE1MOmZ1bmN0aW9uKCl7 +dmFyIF8xOT0iIjsKaWYobmF2aWdhdG9yLnBsdWdpbnMmJm5hdmlnYXRvci5taW1l +VHlwZXMmJm5hdmlnYXRvci5taW1lVHlwZXMubGVuZ3RoKXsKaWYodGhpcy5nZXRB +dHRyaWJ1dGUoImRvRXhwcmVzc0luc3RhbGwiKSl7CnRoaXMuYWRkVmFyaWFibGUo +Ik1NcGxheWVyVHlwZSIsIlBsdWdJbiIpO30KXzE5PSI8ZW1iZWQgdHlwZT1cImFw +cGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoXCIgc3JjPVwiIit0aGlzLmdldEF0 +dHJpYnV0ZSgic3dmIikrIlwiIHdpZHRoPVwiIit0aGlzLmdldEF0dHJpYnV0ZSgi +d2lkdGgiKSsiXCIgaGVpZ2h0PVwiIit0aGlzLmdldEF0dHJpYnV0ZSgiaGVpZ2h0 +IikrIlwiIjsKXzE5Kz0iIGlkPVwiIit0aGlzLmdldEF0dHJpYnV0ZSgiaWQiKSsi +XCIgbmFtZT1cIiIrdGhpcy5nZXRBdHRyaWJ1dGUoImlkIikrIlwiICI7CnZhciBf +MWE9dGhpcy5nZXRQYXJhbXMoKTsKZm9yKHZhciBrZXkgaW4gXzFhKXtfMTkrPVtr +ZXldKyI9XCIiK18xYVtrZXldKyJcIiAiO30KdmFyIF8xYz10aGlzLmdldFZhcmlh +YmxlUGFpcnMoKS5qb2luKCImIik7CmlmKF8xYy5sZW5ndGg+MCl7XzE5Kz0iZmxh +c2h2YXJzPVwiIitfMWMrIlwiIjt9XzE5Kz0iLz4iOwp9ZWxzZXtpZih0aGlzLmdl +dEF0dHJpYnV0ZSgiZG9FeHByZXNzSW5zdGFsbCIpKXt0aGlzLmFkZFZhcmlhYmxl +KCJNTXBsYXllclR5cGUiLCJBY3RpdmVYIik7fQpfMTk9IjxvYmplY3QgaWQ9XCIi +K3RoaXMuZ2V0QXR0cmlidXRlKCJpZCIpKyJcIiBjbGFzc2lkPVwiY2xzaWQ6RDI3 +Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwXCIgd2lkdGg9XCIiK3Ro +aXMuZ2V0QXR0cmlidXRlKCJ3aWR0aCIpKyJcIiBoZWlnaHQ9XCIiK3RoaXMuZ2V0 +QXR0cmlidXRlKCJoZWlnaHQiKSsiXCI+IjsKXzE5Kz0iPHBhcmFtIG5hbWU9XCJt +b3ZpZVwiIHZhbHVlPVwiIit0aGlzLmdldEF0dHJpYnV0ZSgic3dmIikrIlwiIC8+ +IjsKdmFyIF8xZD10aGlzLmdldFBhcmFtcygpOwpmb3IodmFyIGtleSBpbiBfMWQp +e18xOSs9IjxwYXJhbSBuYW1lPVwiIitrZXkrIlwiIHZhbHVlPVwiIitfMWRba2V5 +XSsiXCIgLz4iO30KdmFyIF8xZj10aGlzLmdldFZhcmlhYmxlUGFpcnMoKS5qb2lu +KCImIik7CmlmKF8xZi5sZW5ndGg+MCl7XzE5Kz0iPHBhcmFtIG5hbWU9XCJmbGFz +aHZhcnNcIiB2YWx1ZT1cIiIrXzFmKyJcIiAvPiI7fV8xOSs9Ijwvb2JqZWN0PiI7 +fQpyZXR1cm4gXzE5Owp9LHdyaXRlOmZ1bmN0aW9uKF8yMCl7CmlmKHRoaXMuZ2V0 +QXR0cmlidXRlKCJ1c2VFeHByZXNzSW5zdGFsbCIpKXsKdmFyIF8yMT1uZXcgZGVj +b25jZXB0LlBsYXllclZlcnNpb24oWzYsMCw2NV0pOwppZih0aGlzLmluc3RhbGxl +ZFZlci52ZXJzaW9uSXNWYWxpZChfMjEpJiYhdGhpcy5pbnN0YWxsZWRWZXIudmVy +c2lvbklzVmFsaWQodGhpcy5nZXRBdHRyaWJ1dGUoInZlcnNpb24iKSkpewp0aGlz +LnNldEF0dHJpYnV0ZSgiZG9FeHByZXNzSW5zdGFsbCIsdHJ1ZSk7CnRoaXMuYWRk +VmFyaWFibGUoIk1NcmVkaXJlY3RVUkwiLGVzY2FwZSh0aGlzLmdldEF0dHJpYnV0 +ZSgieGlSZWRpcmVjdFVybCIpKSk7CmRvY3VtZW50LnRpdGxlPWRvY3VtZW50LnRp +dGxlLnNsaWNlKDAsNDcpKyIgLSBGbGFzaCBQbGF5ZXIgSW5zdGFsbGF0aW9uIjsK +dGhpcy5hZGRWYXJpYWJsZSgiTU1kb2N0aXRsZSIsZG9jdW1lbnQudGl0bGUpO319 +CmlmKHRoaXMuc2tpcERldGVjdHx8dGhpcy5nZXRBdHRyaWJ1dGUoImRvRXhwcmVz +c0luc3RhbGwiKXx8dGhpcy5pbnN0YWxsZWRWZXIudmVyc2lvbklzVmFsaWQodGhp +cy5nZXRBdHRyaWJ1dGUoInZlcnNpb24iKSkpewp2YXIgbj0odHlwZW9mIF8yMD09 +InN0cmluZyIpP2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKF8yMCk6XzIwOwpuLmlu +bmVySFRNTD10aGlzLmdldFNXRkhUTUwoKTtyZXR1cm4gdHJ1ZTsKfWVsc2V7aWYo +dGhpcy5nZXRBdHRyaWJ1dGUoInJlZGlyZWN0VXJsIikhPSIiKXtkb2N1bWVudC5s +b2NhdGlvbi5yZXBsYWNlKHRoaXMuZ2V0QXR0cmlidXRlKCJyZWRpcmVjdFVybCIp +KTt9fQpyZXR1cm4gZmFsc2U7fX07CmRlY29uY2VwdC5TV0ZPYmplY3RVdGlsLmdl +dFBsYXllclZlcnNpb249ZnVuY3Rpb24oKXsKdmFyIF8yMz1uZXcgZGVjb25jZXB0 +LlBsYXllclZlcnNpb24oWzAsMCwwXSk7CmlmKG5hdmlnYXRvci5wbHVnaW5zJiZu +YXZpZ2F0b3IubWltZVR5cGVzLmxlbmd0aCl7CnZhciB4PW5hdmlnYXRvci5wbHVn +aW5zWyJTaG9ja3dhdmUgRmxhc2giXTsKaWYoeCYmeC5kZXNjcmlwdGlvbil7XzIz +PW5ldyBkZWNvbmNlcHQuUGxheWVyVmVyc2lvbih4LmRlc2NyaXB0aW9uLnJlcGxh +Y2UoLyhbYS16QS1aXXxccykrLywiIikucmVwbGFjZSgvKFxzK3J8XHMrYlswLTld +KykvLCIuIikuc3BsaXQoIi4iKSk7fQp9ZWxzZXt0cnl7dmFyIGF4bz1uZXcgQWN0 +aXZlWE9iamVjdCgiU2hvY2t3YXZlRmxhc2guU2hvY2t3YXZlRmxhc2guNyIpO30K +Y2F0Y2goZSl7dHJ5e3ZhciBheG89bmV3IEFjdGl2ZVhPYmplY3QoIlNob2Nrd2F2 +ZUZsYXNoLlNob2Nrd2F2ZUZsYXNoLjYiKTsKXzIzPW5ldyBkZWNvbmNlcHQuUGxh +eWVyVmVyc2lvbihbNiwwLDIxXSk7YXhvLkFsbG93U2NyaXB0QWNjZXNzPSJhbHdh +eXMiO30KY2F0Y2goZSl7aWYoXzIzLm1ham9yPT02KXtyZXR1cm4gXzIzO319dHJ5 +e2F4bz1uZXcgQWN0aXZlWE9iamVjdCgiU2hvY2t3YXZlRmxhc2guU2hvY2t3YXZl +Rmxhc2giKTt9CmNhdGNoKGUpe319aWYoYXhvIT1udWxsKXtfMjM9bmV3IGRlY29u +Y2VwdC5QbGF5ZXJWZXJzaW9uKGF4by5HZXRWYXJpYWJsZSgiJHZlcnNpb24iKS5z +cGxpdCgiICIpWzFdLnNwbGl0KCIsIikpO319CnJldHVybiBfMjM7fTsKZGVjb25j +ZXB0LlBsYXllclZlcnNpb249ZnVuY3Rpb24oXzI3KXsKdGhpcy5tYWpvcj1fMjdb +MF0hPW51bGw/cGFyc2VJbnQoXzI3WzBdKTowOwp0aGlzLm1pbm9yPV8yN1sxXSE9 +bnVsbD9wYXJzZUludChfMjdbMV0pOjA7CnRoaXMucmV2PV8yN1syXSE9bnVsbD9w +YXJzZUludChfMjdbMl0pOjA7Cn07CmRlY29uY2VwdC5QbGF5ZXJWZXJzaW9uLnBy +b3RvdHlwZS52ZXJzaW9uSXNWYWxpZD1mdW5jdGlvbihmdil7CmlmKHRoaXMubWFq +b3I8ZnYubWFqb3Ipe3JldHVybiBmYWxzZTt9CmlmKHRoaXMubWFqb3I+ZnYubWFq +b3Ipe3JldHVybiB0cnVlO30KaWYodGhpcy5taW5vcjxmdi5taW5vcil7cmV0dXJu +IGZhbHNlO30KaWYodGhpcy5taW5vcj5mdi5taW5vcil7cmV0dXJuIHRydWU7fQpp +Zih0aGlzLnJldjxmdi5yZXYpewpyZXR1cm4gZmFsc2U7Cn1yZXR1cm4gdHJ1ZTt9 +OwpkZWNvbmNlcHQudXRpbD17Z2V0UmVxdWVzdFBhcmFtZXRlcjpmdW5jdGlvbihf +Mjkpewp2YXIgcT1kb2N1bWVudC5sb2NhdGlvbi5zZWFyY2h8fGRvY3VtZW50Lmxv +Y2F0aW9uLmhhc2g7CmlmKHEpe3ZhciBfMmI9cS5zdWJzdHJpbmcoMSkuc3BsaXQo +IiYiKTsKZm9yKHZhciBpPTA7aTxfMmIubGVuZ3RoO2krKyl7CmlmKF8yYltpXS5z +dWJzdHJpbmcoMCxfMmJbaV0uaW5kZXhPZigiPSIpKT09XzI5KXsKcmV0dXJuIF8y +YltpXS5zdWJzdHJpbmcoKF8yYltpXS5pbmRleE9mKCI9IikrMSkpO319fQpyZXR1 +cm4gIiI7fX07CmRlY29uY2VwdC5TV0ZPYmplY3RVdGlsLmNsZWFudXBTV0ZzPWZ1 +bmN0aW9uKCl7aWYod2luZG93Lm9wZXJhfHwhZG9jdW1lbnQuYWxsKXtyZXR1cm47 +fQp2YXIgXzJkPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJPQkpFQ1Qi +KTsKZm9yKHZhciBpPTA7aTxfMmQubGVuZ3RoO2krKyl7XzJkW2ldLnN0eWxlLmRp +c3BsYXk9Im5vbmUiO2Zvcih2YXIgeCBpbiBfMmRbaV0pewppZih0eXBlb2YgXzJk +W2ldW3hdPT0iZnVuY3Rpb24iKXtfMmRbaV1beF09ZnVuY3Rpb24oKXt9O319fX07 +CmRlY29uY2VwdC5TV0ZPYmplY3RVdGlsLnByZXBVbmxvYWQ9ZnVuY3Rpb24oKXtf +X2ZsYXNoX3VubG9hZEhhbmRsZXI9ZnVuY3Rpb24oKXt9OwpfX2ZsYXNoX3NhdmVk +VW5sb2FkSGFuZGxlcj1mdW5jdGlvbigpe307CmlmKHR5cGVvZiB3aW5kb3cub251 +bmxvYWQ9PSJmdW5jdGlvbiIpewp2YXIgXzMwPXdpbmRvdy5vbnVubG9hZDsKd2lu +ZG93Lm9udW5sb2FkPWZ1bmN0aW9uKCl7CmRlY29uY2VwdC5TV0ZPYmplY3RVdGls +LmNsZWFudXBTV0ZzKCk7XzMwKCk7fTsKfWVsc2V7d2luZG93Lm9udW5sb2FkPWRl +Y29uY2VwdC5TV0ZPYmplY3RVdGlsLmNsZWFudXBTV0ZzO319OwppZih0eXBlb2Yg +d2luZG93Lm9uYmVmb3JldW5sb2FkPT0iZnVuY3Rpb24iKXsKdmFyIG9sZEJlZm9y +ZVVubG9hZD13aW5kb3cub25iZWZvcmV1bmxvYWQ7CndpbmRvdy5vbmJlZm9yZXVu +bG9hZD1mdW5jdGlvbigpewpkZWNvbmNlcHQuU1dGT2JqZWN0VXRpbC5wcmVwVW5s +b2FkKCk7Cm9sZEJlZm9yZVVubG9hZCgpO307Cn1lbHNle3dpbmRvdy5vbmJlZm9y +ZXVubG9hZD1kZWNvbmNlcHQuU1dGT2JqZWN0VXRpbC5wcmVwVW5sb2FkO30KaWYo +QXJyYXkucHJvdG90eXBlLnB1c2g9PW51bGwpewpBcnJheS5wcm90b3R5cGUucHVz +aD1mdW5jdGlvbihfMzEpewp0aGlzW3RoaXMubGVuZ3RoXT1fMzE7CnJldHVybiB0 +aGlzLmxlbmd0aDt9O30KdmFyIGdldFF1ZXJ5UGFyYW1WYWx1ZT1kZWNvbmNlcHQu +dXRpbC5nZXRSZXF1ZXN0UGFyYW1ldGVyOwp2YXIgRmxhc2hPYmplY3Q9ZGVjb25j +ZXB0LlNXRk9iamVjdDsKdmFyIFNXRk9iamVjdD1kZWNvbmNlcHQuU1dGT2JqZWN0 +Owo= + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline; filename=postsHandler.js +Content-Type: application/x-javascript; charset=utf-8; name=postsHandler.js +Content-Location: http://habrahabr.ru/js/1307631427/postsHandler.js +Content-Transfer-Encoding: Base64 + +dmFyIHBvc3RzSGFuZGxlciA9IGZ1bmN0aW9uKCkgew0KCXRoaXMucG9zdHNfaXQg +PSAtMTsNCgl0aGlzLnBvc3RzID0gW107DQoJdGhpcy5jdXJyZW50UGFnZSA9ICcn +Ow0KCXRoaXMuaXNQb3N0QmVpbmdSZWFkID0gZmFsc2U7DQp9DQoJDQpwb3N0c0hh +bmRsZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbigpIHsNCg0KCXZhciBfdGhp +cyA9IHRoaXM7DQoJDQoJdGhpcy5wb3N0cyA9ICQoJ3dyYXBwZXInKS5nZXRFbGVt +ZW50cygnLmhlbnRyeScpOw0KCXRoaXMucG9zdHMuc29ydChwb3N0c0hhbmRsZXIu +c29ydEFycmF5KTsNCgkNCglkb2N1bWVudC5vbmtleXVwID0gZnVuY3Rpb24oZXYp +IHsNCgkJDQoJCXZhciB0YXJnOw0KCQlpZighZXYpCWV2PXdpbmRvdy5ldmVudDsN +CgkJaWYgKCFkb2N1bWVudC5hbGwpIGV2LnByZXZlbnREZWZhdWx0KCk7IGVsc2Ug +ZXYucmV0dXJuVmFsdWUgPSBmYWxzZTsNCgkNCgkJaWYgKGV2LnRhcmdldCkgdGFy +ZyA9IGV2LnRhcmdldDsNCgkJZWxzZSBpZiAoZXYuc3JjRWxlbWVudCkgdGFyZyA9 +IGV2LnNyY0VsZW1lbnQ7DQoJCWlmICh0YXJnLm5vZGVUeXBlID09IDMpIHRhcmcg +PSB0YXJnLnBhcmVudE5vZGU7DQoJCQ0KCQl2YXIga2V5ID0gZ2V0Q2hhckNvZGUo +ZXYpOw0KCQkNCgkJaWYodGFyZy50YWdOYW1lICE9ICdURVhUQVJFQScgJiYgdGFy +Zy50YWdOYW1lICE9ICdJTlBVVCcpIHsNCgkJCWlmKGtleT09NzIpIHsNCgkJCQlf +dGhpcy50b3AoZXYpOw0KCQkJfQ0KCQkJZWxzZSBpZihrZXk9PTc1KSB7DQoJCQkJ +X3RoaXMucHJldihldik7DQoJCQl9DQoJCQllbHNlIGlmKGtleT09NzQpIHsNCgkJ +CQlfdGhpcy5uZXh0KGV2KTsNCgkJCX0NCgkJfQ0KCX0NCn07DQoNCnBvc3RzSGFu +ZGxlci5wcm90b3R5cGUuc29ydEFycmF5ID0gZnVuY3Rpb24oYSwgYikgew0KICBp +ZiAoYS5vZmZzZXRUb3AgPCBiLm9mZnNldFRvcCkNCiAgICByZXR1cm4gLTE7DQog +IGlmIChhLm9mZnNldFRvcCA+IGIub2Zmc2V0VG9wKQ0KICAgIHJldHVybiAxOw0K +ICByZXR1cm4gMDsJCQ0KfTsNCg0KLy/vv73vv73vv73vv73vv73vv73vv73vv73v +v73vv70g77+977+977+977+977+977+977+9IO+/ve+/ve+/ve+/vQ0KcG9zdHNI +YW5kbGVyLnByb3RvdHlwZS5kZXRlY3RDdXJyZW50UG9zdCA9IGZ1bmN0aW9uKCkg +ew0KCXRoaXMuaXNQb3N0QmVpbmdSZWFkID0gZmFsc2U7DQoJdmFyIGJvdW5kcyA9 +IHRoaXMuZ2V0V2luZG93Qm91bmRzKCk7DQoJdmFyIHBvc3QgPSAtMTsNCgl2YXIg +cG9zdHNfbGVuZ3RoID0gdGhpcy5wb3N0cy5sZW5ndGg7DQoJZm9yKHZhciBpPTA7 +IGk8cG9zdHNfbGVuZ3RoOyBpKyspIHsNCgkJaWYodGhpcy5wb3N0c1tpKzFdKSB7 +DQoJCQlpZigkKHRoaXMucG9zdHNbaV0pLmdldFBvc2l0aW9uKCkueTw9Ym91bmRz +LnkgJiYgJCh0aGlzLnBvc3RzW2ldKS5nZXRQb3NpdGlvbigpLnk+PWJvdW5kcy55 +KSB7DQoJCQkJdmFyIHBvc3QgPSBpOw0KCQkJfQ0KCQl9DQoJCWVsc2UgaWYgKCQo +dGhpcy5wb3N0c1tpXSkuZ2V0UG9zaXRpb24oKS55PD1ib3VuZHMueSkgew0KCQkJ +dmFyIHBvc3QgPSBpOw0KCQl9DQoJfQ0KCWlmKHBvc3Q+LTEgJiYgYm91bmRzLnkh +PSQodGhpcy5wb3N0c1twb3N0XSkuZ2V0UG9zaXRpb24oKS55KSB7DQoJCXRoaXMu +aXNQb3N0QmVpbmdSZWFkID0gdHJ1ZTsNCgl9DQoJcmV0dXJuIHBvc3Q7DQp9Ow0K +DQovL++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vSDvv73vv73vv73vv73vv73vv73v +v73vv73vv73vv70g77+977+977+977+977+977+977+9IO+/ve+/ve+/ve+/ve+/ +ve+/ve+/vQ0KcG9zdHNIYW5kbGVyLnByb3RvdHlwZS5nZXRXaW5kb3dCb3VuZHMg +PSBmdW5jdGlvbigpIHsNCiAgICB2YXIgdywgaCwgeCwgeTsNCg0KICAgIGlmICh3 +aW5kb3cuZ2Vja28pIHsNCiAgICAgICAgdmFyIGIgPSBkb2N1bWVudC5ib2R5Ow0K +ICAgICAgICB3ID0gYi5jbGllbnRXaWR0aDsNCiAgICAgICAgaCA9IGIuY2xpZW50 +SGVpZ2h0Ow0KICAgICAgICB4ID0gd2luZG93LnNjcm9sbFg7DQogICAgICAgIHkg +PSB3aW5kb3cuc2Nyb2xsWTsNCiAgICB9DQogICAgZWxzZSBpZiAod2luZG93Lndl +YmtpdCkgew0KICAgICAgICB3ID0gd2luZG93LmlubmVyV2lkdGg7DQogICAgICAg +IGggPSB3aW5kb3cuaW5uZXJIZWlnaHQ7DQogICAgICAgIHggPSB3aW5kb3cuc2Ny +b2xsWDsNCiAgICAgICAgeSA9IHdpbmRvdy5zY3JvbGxZOw0KICAgIH0NCiAgICBl +bHNlIGlmICh3aW5kb3cub3BlcmEpIHsNCiAgICAgICAgdyA9IHdpbmRvdy5pbm5l +cldpZHRoOw0KICAgICAgICBoID0gd2luZG93LmlubmVySGVpZ2h0Ow0KICAgICAg +ICB4ID0gd2luZG93LnBhZ2VYT2Zmc2V0Ow0KICAgICAgICB5ID0gd2luZG93LnBh +Z2VZT2Zmc2V0Ow0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICAgdmFyIGQgPSBk +b2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7DQogICAgICAgIHZhciBiID0gZG9jdW1l +bnQuYm9keTsNCiAgICAgICAgdyA9IGQuY2xpZW50V2lkdGggID8gZC5jbGllbnRX +aWR0aCAgOiBiLmNsaWVudFdpZHRoICA/IGIuY2xpZW50V2lkdGggIDogMDsNCiAg +ICAgICAgaCA9IGQuY2xpZW50SGVpZ2h0ID8gZC5jbGllbnRIZWlnaHQgOiBiLmNs +aWVudEhlaWdodCA/IGIuY2xpZW50SGVpZ2h0IDogMDsNCiAgICAgICAgeCA9IGQu +c2Nyb2xsTGVmdCAgID8gZC5zY3JvbGxMZWZ0ICAgOiBiLnNjcm9sbExlZnQgICA/ +IGIuc2Nyb2xsTGVmdCAgIDogMDsNCiAgICAgICAgeSA9IGQuc2Nyb2xsVG9wICAg +ID8gZC5zY3JvbGxUb3AgICAgOiBiLnNjcm9sbFRvcCAgICA/IGIuc2Nyb2xsVG9w +ICAgIDogMDsNCiAgICB9DQoNCiAgICByZXR1cm4gew0KICAgICAgICAndyc6IHcs +DQogICAgICAgICdoJzogaCwNCiAgICAgICAgJ3gnOiB4LA0KICAgICAgICAneSc6 +IHkNCiAgICB9Ow0KCQ0KfTsNCg0KcG9zdHNIYW5kbGVyLnByb3RvdHlwZS50b3Ag +PSBmdW5jdGlvbihldikgew0KCWlmKCFldikJZXY9d2luZG93LmV2ZW50Ow0KCWlm +ICghZG9jdW1lbnQuYWxsKSBldi5wcmV2ZW50RGVmYXVsdCgpOyBlbHNlIGV2LnJl +dHVyblZhbHVlID0gZmFsc2U7DQoJDQoJd2luZG93LnNjcm9sbFRvKDAsMCk7DQp9 +Ow0KDQpwb3N0c0hhbmRsZXIucHJvdG90eXBlLnByZXYgPSBmdW5jdGlvbihldikg +ew0KCWlmKCFldikJZXY9d2luZG93LmV2ZW50Ow0KCWlmICghZG9jdW1lbnQuYWxs +KSBldi5wcmV2ZW50RGVmYXVsdCgpOyBlbHNlIGV2LnJldHVyblZhbHVlID0gZmFs +c2U7CQ0KCQ0KCXRoaXMucG9zdHNfaXQgPSB0aGlzLmRldGVjdEN1cnJlbnRQb3N0 +KCk7DQoNCglpZih0aGlzLnBvc3RzICYmIHRoaXMucG9zdHMubGVuZ3RoKSB7DQoJ +CWlmKHRoaXMucG9zdHNfaXQ8PXRoaXMucG9zdHMubGVuZ3RoICYmIHRoaXMucG9z +dHNfaXQ+MCkgew0KCQkJaWYoIXRoaXMuaXNQb3N0QmVpbmdSZWFkKSB7DQoJCQkJ +dGhpcy5wb3N0c19pdC0tOw0KCQkJfQ0KCQkJd2luZG93LnNjcm9sbFRvKDAsJCh0 +aGlzLnBvc3RzW3RoaXMucG9zdHNfaXRdKS5nZXRQb3NpdGlvbigpLnkpOw0KCQl9 +DQoJCWVsc2UgaWYgKHRoaXMucG9zdHNfaXQ8PTApew0KCQkJdGhpcy5wcmV2UGFn +ZSgpOw0KCQl9DQoJCWVsc2UgaWYodGhpcy5wb3N0c19pdD50aGlzLnBvc3RzLmxl +bmd0aCkgew0KCQkJdGhpcy5wb3N0c19pdCA9IHRoaXMucG9zdHMubGVuZ3RoLTI7 +DQoJCQl3aW5kb3cuc2Nyb2xsVG8oMCwkKHRoaXMucG9zdHNbdGhpcy5wb3N0c19p +dF0pLmdldFBvc2l0aW9uKCkueSk7DQoJCX0NCgl9DQp9Ow0KDQpwb3N0c0hhbmRs +ZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihldikgew0KCWlmKCFldikgZXY9 +d2luZG93LmV2ZW50Ow0KCWlmICghZG9jdW1lbnQuYWxsKSBldi5wcmV2ZW50RGVm +YXVsdCgpOyBlbHNlIGV2LnJldHVyblZhbHVlID0gZmFsc2U7DQoJDQoJdGhpcy5w +b3N0c19pdCA9IHRoaXMuZGV0ZWN0Q3VycmVudFBvc3QoKTsNCg0KCWlmKHRoaXMu +cG9zdHMgJiYgdGhpcy5wb3N0cy5sZW5ndGgpIHsNCgkJdmFyIGJvdW5kcyA9IHRo +aXMuZ2V0V2luZG93Qm91bmRzKCk7DQoJCXZhciBkb2NIZWlnaHQgPSAkKCdoZWFk +ZXItd3JhcHBlcicpLm9mZnNldEhlaWdodCskKCd3cmFwcGVyJykub2Zmc2V0SGVp +Z2h0KyQoJ2Zvb3RlcicpLm9mZnNldEhlaWdodCs1MDsNCgkJaWYoKGJvdW5kcy55 +ICsgYm91bmRzLmgpID09IGRvY0hlaWdodCB8fCAoYm91bmRzLnkgKyBib3VuZHMu +aCkgPT0gZG9jSGVpZ2h0KzEwKXsNCgkJCXRoaXMubmV4dFBhZ2UoKTsNCgkJfQ0K +CQlpZih0aGlzLnBvc3RzX2l0PHRoaXMucG9zdHMubGVuZ3RoLTEgJiYgdGhpcy5w +b3N0c19pdD49LTEpIHsNCgkJCXRoaXMucG9zdHNfaXQrKzsNCgkJCXdpbmRvdy5z +Y3JvbGxUbygwLCQodGhpcy5wb3N0c1t0aGlzLnBvc3RzX2l0XSkuZ2V0UG9zaXRp +b24oKS55KTsNCgkJfQ0KCX0NCn07DQoNCnBvc3RzSGFuZGxlci5wcm90b3R5cGUu +bmV4dFBhZ2UgPSBmdW5jdGlvbigpIHsNCglpZih3aW5kb3cubG9jYXRpb24uaHJl +Zi5tYXRjaCgvXGQrL2cpKSB7DQoJCXRoaXMuY3VycmVudFBhZ2UgPSB3aW5kb3cu +bG9jYXRpb24uaHJlZi5tYXRjaCgvXGQrL2cpWzBdOw0KCQl0aGlzLmN1cnJlbnRQ +YWdlID0gcGFyc2VJbnQodGhpcy5jdXJyZW50UGFnZSk7DQoJCXRoaXMubmV4dFBh +Z2UgPSB0aGlzLmN1cnJlbnRQYWdlICsgMTsNCgkJd2luZG93LmxvY2F0aW9uLmhy +ZWYgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5yZXBsYWNlKHRoaXMuY3VycmVudFBh +Z2UsIHRoaXMubmV4dFBhZ2UpOw0KCX0NCgllbHNlIHsNCgkJdGhpcy5uZXh0UGFn +ZSA9IDI7DQoJCXdpbmRvdy5sb2NhdGlvbi5ocmVmID0gd2luZG93LmxvY2F0aW9u +LmhyZWYgKyAncGFnZScgKyB0aGlzLm5leHRQYWdlOw0KCX0NCn07DQoNCnBvc3Rz +SGFuZGxlci5wcm90b3R5cGUucHJldlBhZ2UgPSBmdW5jdGlvbigpIHsNCglpZih3 +aW5kb3cubG9jYXRpb24uaHJlZi5tYXRjaCgvXGQrL2cpKSB7DQoJCXRoaXMuY3Vy +cmVudFBhZ2UgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5tYXRjaCgvXGQrL2cpWzBd +Ow0KCQlpZih0aGlzLmN1cnJlbnRQYWdlIT0nMScpIHsNCgkJCXRoaXMuY3VycmVu +dFBhZ2UgPSBwYXJzZUludCh0aGlzLmN1cnJlbnRQYWdlKTsNCgkJCXRoaXMubmV4 +dFBhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlLTE7DQoJCQl3aW5kb3cubG9jYXRpb24u +aHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnJlcGxhY2UodGhpcy5jdXJyZW50 +UGFnZSwgdGhpcy5uZXh0UGFnZSk7DQoJCX0NCgkJZWxzZSB7DQoJCQl3aW5kb3cu +c2Nyb2xsVG8oMCwwKTsNCgkJfQ0KCX0NCgllbHNlIHsNCgkJd2luZG93LnNjcm9s +bFRvKDAsMCk7DQoJfQ0KCQ0KfTsNCg0KdmFyIHBvc3RzSGFuZGxlciA9IG5ldyBw +b3N0c0hhbmRsZXIoKTsNCg0Kd2luZG93LmFkZEV2ZW50KCdkb21yZWFkeScsIGZ1 +bmN0aW9uKCkgew0KCXBvc3RzSGFuZGxlci5pbml0KCk7DQp9KTs= + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline; filename=habraWYG.js +Content-Type: application/x-javascript; charset=utf-8; name=habraWYG.js +Content-Location: http://habrahabr.ru/js/1307631427/habraWYG.js +Content-Transfer-Encoding: Base64 + +LyoKCWhhYnJhV1lHIC0g0L/RgNC+0YHRgtC+0Lkg0LLQuNC30LjQstC40LMKKi8K +CmhhYnJhV1lHID0gewoKCWluc2VydFRhZ1dpdGhUZXh0OiBmdW5jdGlvbiAobGlu +aywgdGFnTmFtZSl7CgkJdmFyIHN0YXJ0VGFnID0gJzwnICsgdGFnTmFtZSArICc+ +JzsKCQl2YXIgZW5kVGFnID0gJzwvJyArIHRhZ05hbWUgKyAnPic7CgkJaGFicmFX +WUcuaW5zZXJ0VGFnKGxpbmssIHN0YXJ0VGFnLCBlbmRUYWcpOwoJCXJldHVybiBm +YWxzZTsKCX0sCgoJaW5zZXJ0SW1hZ2U6IGZ1bmN0aW9uKGxpbmspewoJCXZhciBz +cmMgPSBwcm9tcHQoJ9CS0LLQtdC00LjRgtC1IHNyYyDQutCw0YDRgtC40L3QutC4 +JywgJ2h0dHA6Ly8nKTsKCQlpZihzcmMpewoJCQloYWJyYVdZRy5pbnNlcnRUYWco +bGluaywgJzxpbWcgc3JjPSInICsgc3JjICsgJyIgYWx0PSJpbWFnZSIvPicsICcn +KTsKCQl9CgkJcmV0dXJuIGZhbHNlOwoJfSwKCglpbnNlcnRMaW5rOiBmdW5jdGlv +bihsaW5rKXsKCQl2YXIgaHJlZiA9IHByb21wdCgn0JLQstC10LTQuNGC0LUgVVJM +INGB0YHRi9C70LrQuCcsICdodHRwOi8vJyk7CgkJaWYoaHJlZil7CgkJCWhhYnJh +V1lHLmluc2VydFRhZyhsaW5rLCAnPGEgaHJlZj0iJyArIGhyZWYgKyAnIj4nLCAn +PC9hPicpOwoJCX0KCQlyZXR1cm4gZmFsc2U7Cgl9LAoKCWluc2VydFVzZXI6IGZ1 +bmN0aW9uKGxpbmspewoJCXZhciBsb2dpbiA9IHByb21wdCgn0JLQstC10LTQuNGC +0LUg0L3QuNC60L3QtdC50Lwg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPJywgJycp +OwoJCWlmKGxvZ2luKXsKCQkJaGFicmFXWUcuaW5zZXJ0VGFnKGxpbmssICc8aGgg +dXNlcj0iJyArIGxvZ2luICsgJyIvPicsICcnKTsKCQl9CgkJcmV0dXJuIGZhbHNl +OwoJfSwKCglpbnNlcnRIYWJyYWN1dDogZnVuY3Rpb24obGluayl7CgkJaGFicmFX +WUcuaW5zZXJ0VGFnKGxpbmssICc8aGFicmFjdXQgLz4nLCAnJyk7CgkJcmV0dXJu +IGZhbHNlOwoJfSwKCglpbnNlcnRUYWc6IGZ1bmN0aW9uKGxpbmssIHN0YXJ0VGFn +LCBlbmRUYWcsIHJlcE9iail7CgkJCXZhciB0ZXh0YXJlYVBhcmVudCA9ICQobGlu +aykuZ2V0UGFyZW50KCcuZWRpdG9yJyk7CgkJCXZhciB0ZXh0YXJlYSA9IHRleHRh +cmVhUGFyZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0ZXh0YXJlYScpWzBdOwoJ +CQl0ZXh0YXJlYS5mb2N1cygpOwoKCQkJdmFyIHNjcnRvcCA9IHRleHRhcmVhLnNj +cm9sbFRvcDsKCgkJCXZhciBjdXJzb3JQb3MgPSBoYWJyYVdZRy5nZXRDdXJzb3Io +dGV4dGFyZWEpOwoJCQl2YXIgdHh0X3ByZSA9IHRleHRhcmVhLnZhbHVlLnN1YnN0 +cmluZygwLCBjdXJzb3JQb3Muc3RhcnQpOwoJCQl2YXIgdHh0X3NlbCA9IHRleHRh +cmVhLnZhbHVlLnN1YnN0cmluZyhjdXJzb3JQb3Muc3RhcnQsIGN1cnNvclBvcy5l +bmQpOwoJCQl2YXIgdHh0X2FmdCA9IHRleHRhcmVhLnZhbHVlLnN1YnN0cmluZyhj +dXJzb3JQb3MuZW5kKTsKCgkJCWlmKHJlcE9iail7CgkJCQl0eHRfc2VsID0gdHh0 +X3NlbC5yZXBsYWNlKC9cci9nLCAnJyk7CgkJCQl0eHRfc2VsID0gdHh0X3NlbCAh +PSAnJyA/IHR4dF9zZWwgOiAnICc7CgkJCQl0eHRfc2VsID0gdHh0X3NlbC5yZXBs +YWNlKG5ldyBSZWdFeHAocmVwT2JqLmZpbmRTdHIsICdnbScpLCByZXBPYmoucmVw +U3RyKTsKCQkJfQoKCQkJaWYgKGN1cnNvclBvcy5zdGFydCA9PSBjdXJzb3JQb3Mu +ZW5kKXsKCQkJCXZhciBudUN1cnNvclBvcyA9IGN1cnNvclBvcy5zdGFydCArIHN0 +YXJ0VGFnLmxlbmd0aDsKCQkJfWVsc2V7CgkJCQl2YXIgbnVDdXJzb3JQb3M9U3Ry +aW5nKHR4dF9wcmUgKyBzdGFydFRhZyArIHR4dF9zZWwgKyBlbmRUYWcpLmxlbmd0 +aDsKCQkJfQoKCQkJdGV4dGFyZWEudmFsdWUgPSB0eHRfcHJlICsgc3RhcnRUYWcg +KyB0eHRfc2VsICsgZW5kVGFnICsgdHh0X2FmdDsKCgoJCQkvKgoJCQlpZih0ZXh0 +YXJlYS5zZXRTZWxlY3Rpb25SYW5nZSkgewoJCQkJdGV4dGFyZWEuc2V0U2VsZWN0 +aW9uUmFuZ2UobnVDdXJzb3JQb3MgLSA1LCBudUN1cnNvclBvcyk7CgkJCX0KCQkJ +Ki8KCQkJaGFicmFXWUcuc2V0Q3Vyc29yKHRleHRhcmVhLCBudUN1cnNvclBvcywg +bnVDdXJzb3JQb3MpOwoKCQkJaWYgKHNjcnRvcCkgdGV4dGFyZWEuc2Nyb2xsVG9w +ID0gc2NydG9wOwoKCQkJcmV0dXJuIGZhbHNlOwoJfSwKCglpbnNlcnRUYWdGcm9t +RHJvcEJveDogZnVuY3Rpb24obGluayl7CgkJCWhhYnJhV1lHLmluc2VydFRhZ1dp +dGhUZXh0KGxpbmssIGxpbmsudmFsdWUpOwoJCQlsaW5rLnNlbGVjdGVkSW5kZXgg +PSAwOwoJfSwKCglpbnNlcnRMaXN0OiBmdW5jdGlvbihsaW5rKXsKCgkJCXZhciBz +dGFydFRhZyA9ICc8JyArIGxpbmsudmFsdWUgKyAnPlxuJzsKCQkJdmFyIGVuZFRh +ZyA9ICdcbjwvJyArIGxpbmsudmFsdWUgKyAnPic7CgoJCQl2YXIgcmVwT2JqID0g +ewoJCQkJZmluZFN0cjogJ14oLispJywKCQkJCXJlcFN0cjogJ1x0PGxpPiQxPC9s +aT4nCgkJCX0KCgkJCWhhYnJhV1lHLmluc2VydFRhZyhsaW5rLCBzdGFydFRhZywg +ZW5kVGFnLCByZXBPYmopOwoKCQkJbGluay5zZWxlY3RlZEluZGV4ID0gMDsKCX0s +CgoJaW5zZXJ0VGFiOiBmdW5jdGlvbihlLCB0ZXh0YXJlYSl7CgkJCWlmKCFlKSBl +ID0gd2luZG93LmV2ZW50OwoJCQlpZiAoZS5rZXlDb2RlKSB2YXIga2V5Q29kZSA9 +IGUua2V5Q29kZTsKCQkJZWxzZSBpZiAoZS53aGljaCkgdmFyIGtleUNvZGUgPSBl +LndoaWNoOwoKCQkJLy9hbGVydChrZXlDb2RlKTsKCQkJc3dpdGNoKGUudHlwZSl7 +CgkJCQljYXNlICdrZXlkb3duJzoKCQkJCQlpZihrZXlDb2RlID09IDE2KXsKCQkJ +CQkJaGFicmFXWUcuc2hpZnQgPSB0cnVlOwoJCQkJCQkvL2FsZXJ0KCcxJyk7CgkJ +CQkJfQoJCQkJCWJyZWFrOwoKCQkJCWNhc2UgJ2tleXVwJzoKCQkJCQlpZihrZXlD +b2RlID09IDE2KSB7CgkJCQkJCWhhYnJhV1lHLnNoaWZ0ID0gZmFsc2U7CgkJCQkJ +CS8vYWxlcnQoJzInKTsKCQkJCQl9CgoJCQkJCWJyZWFrOwoJCQl9CgoJCQl0ZXh0 +YXJlYS5mb2N1cygpOwoJCQl2YXIgY3Vyc29yUG9zID0gaGFicmFXWUcuZ2V0Q3Vy +c29yKHRleHRhcmVhKTsKCgkJCWlmIChjdXJzb3JQb3Muc3RhcnQgPT0gY3Vyc29y +UG9zLmVuZCl7CgkJCQlyZXR1cm4gdHJ1ZTsKCgoJCQl9IGVsc2UgaWYoa2V5Q29k +ZSA9PSA5ICYmICFoYWJyYVdZRy5zaGlmdCl7CgkJCQl2YXIgcmVwT2JqID0gewoJ +CQkJCWZpbmRTdHI6ICdeKC4rKScsCgkJCQkJcmVwU3RyOiAnXHQkMScKCQkJCX0K +CQkJCWhhYnJhV1lHLmluc2VydFRhZyh0ZXh0YXJlYSwgJycsICcnLCByZXBPYmop +OwoJCQkJcmV0dXJuIGZhbHNlOwoKCQkJfSBlbHNlIGlmKGtleUNvZGUgPT0gOSAm +JiBoYWJyYVdZRy5zaGlmdCl7CgkJCQl2YXIgcmVwT2JqID0gewoJCQkJCWZpbmRT +dHI6ICdeXHQoLispJywKCQkJCQlyZXBTdHI6ICckMScKCQkJCX0KCQkJCWhhYnJh +V1lHLmluc2VydFRhZyh0ZXh0YXJlYSwgJycsICcnLCByZXBPYmopOwoJCQkJcmV0 +dXJuIGZhbHNlOwoJCQl9Cgl9LAoKCWdldEN1cnNvcjogZnVuY3Rpb24oaW5wdXQp +ewoJCQl2YXIgcmVzdWx0ID0ge3N0YXJ0OiAwLCBlbmQ6IDB9OwoJCQlpZiAoaW5w +dXQuc2V0U2VsZWN0aW9uUmFuZ2UpewoJCQkJcmVzdWx0LnN0YXJ0PSBpbnB1dC5z +ZWxlY3Rpb25TdGFydDsKCQkJCXJlc3VsdC5lbmQgPSBpbnB1dC5zZWxlY3Rpb25F +bmQ7CgkJCX0gZWxzZSBpZiAoIWRvY3VtZW50LnNlbGVjdGlvbikgewoJCQkJcmV0 +dXJuIGZhbHNlOwoJCQl9IGVsc2UgaWYgKGRvY3VtZW50LnNlbGVjdGlvbiAmJiBk +b2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UpIHsKCQkJCXZhciByYW5nZSA9 +IGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpOwoJCQkJdmFyIHN0b3Jl +ZF9yYW5nZSA9IHJhbmdlLmR1cGxpY2F0ZSgpOwoJCQkJc3RvcmVkX3JhbmdlLm1v +dmVUb0VsZW1lbnRUZXh0KGlucHV0KTsKCQkJCXN0b3JlZF9yYW5nZS5zZXRFbmRQ +b2ludCgnRW5kVG9FbmQnLCByYW5nZSk7CgkJCQlyZXN1bHQuc3RhcnQgPSBzdG9y +ZWRfcmFuZ2UudGV4dC5sZW5ndGggLSByYW5nZS50ZXh0Lmxlbmd0aDsKCQkJCXJl +c3VsdC5lbmQgPSByZXN1bHQuc3RhcnQgKyByYW5nZS50ZXh0Lmxlbmd0aDsKCQkJ +fQoJCQlyZXR1cm4gcmVzdWx0OwoJfSwKCglzZXRDdXJzb3I6IGZ1bmN0aW9uKHRl +eHRhcmVhLCBzdGFydCwgZW5kKXsKCQkJaWYodGV4dGFyZWEuY3JlYXRlVGV4dFJh +bmdlKSB7CgkJCQl2YXIgcmFuZ2UgPSB0ZXh0YXJlYS5jcmVhdGVUZXh0UmFuZ2Uo +KTsKCQkJCXJhbmdlLm1vdmUoImNoYXJhY3RlciIsIHN0YXJ0KTsKCQkJCXJhbmdl +LnNlbGVjdCgpOwoJCQl9IGVsc2UgaWYodGV4dGFyZWEuc2VsZWN0aW9uU3RhcnQp +IHsKCQkJCXRleHRhcmVhLnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpOwoJ +CQl9Cgl9Cgp9Cgo= + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline; filename=friending.js +Content-Type: application/x-javascript; charset=utf-8; name=friending.js +Content-Location: http://habrahabr.ru/js/1307631427/friending.js +Content-Transfer-Encoding: Base64 + +ZnJpZW5kaW5nSGFuZGxlciA9IHsNCgl1cmw6ICcvYWpheC91c2Vycy9mcmllbmRz +LycsDQoJeG1sOiB7DQoJCXJlc3BvbnNlTm9kZXM6IHsNCgkJCWVycm9yIDogJ2Vy +cm9yJywNCgkJCXJlc3VsdCA6ICdtZXNzYWdlJywNCgkJCXRleHQgOiAndGV4dCcN +CgkJfSwNCg0KCQlwYXJzZTogZnVuY3Rpb24oeG1sT2JqKXsNCgkJCXZhciB4bWxO +b2RlcyA9IHt9Ow0KCQkJZm9yIChwcm9wIGluIGZyaWVuZGluZ0hhbmRsZXIueG1s +LnJlc3BvbnNlTm9kZXMpIHsNCgkJCQl4bWxOb2Rlc1twcm9wXSA9IHhtbE9iai5n +ZXRFbGVtZW50c0J5VGFnTmFtZShmcmllbmRpbmdIYW5kbGVyLnhtbC5yZXNwb25z +ZU5vZGVzW3Byb3BdKTsNCgkJCX0NCgkJCXJldHVybiB4bWxOb2RlczsNCgkJfQ0K +CX0sDQoJDQoJZnJpZW5kVW5mcmllbmQgOiBmdW5jdGlvbihmcmllbmRJZCwgZnJp +ZW5kKSB7DQoJCXByb2ZpbGVGb3JtLmhpZGVQYW5lbHMoKTsNCgkJaWYgKGZyaWVu +ZCkgew0KCQkJJCgnanMtYWRkRnJpZW5kTWVzc2FnZScpLnJlbW92ZUNsYXNzKCdo +aWRkZW4nKTsNCgkJCSQoJ2pzLWFkZEZyaWVuZFNlbmRCdXR0b24nKS5yZW1vdmVD +bGFzcygnaGlkZGVuJyk7DQoJCX0gZWxzZSB7DQoJCQkkKCdqcy1hZGRGcmllbmRN +ZXNzYWdlJykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpOw0KCQkJJCgnanMtcmVtb3Zl +RnJpZW5kU2VuZEJ1dHRvbicpLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTsNCgkJfQ0K +CX0sDQoJDQoJYWRkRnJpZW5kU2VuZCA6IGZ1bmN0aW9uIChmcmllbmRJZCkgew0K +CQl2YXIgZGF0YSA9ICdhY3Rpb249ZnJpZW5kJmZyaWVuZElkPScgKyBmcmllbmRJ +ZCArICcmbXNnPScgKyAkKCdqcy1GcmllbmRVbmZyaWVuZE1lc3NhZ2UnKS52YWx1 +ZTsNCgkJYWpheExvYWRQb3N0KGZyaWVuZGluZ0hhbmRsZXIudXJsLCBkYXRhLCBm +dW5jdGlvbihhamF4T2JqKSB7DQogICAgICAgICAgICBmcmllbmRpbmdIYW5kbGVy +LmFkZEZyaWVuZE9ubG9hZChhamF4T2JqKQ0KICAgICAgICB9KTsNCgl9LA0KCQ0K +CXJlbW92ZUZyaWVuZFNlbmQgOiBmdW5jdGlvbiAoZnJpZW5kSWQpIHsNCgkJdmFy +IGRhdGEgPSAnYWN0aW9uPXVuZnJpZW5kJmZyaWVuZElkPScgKyBmcmllbmRJZCAr +ICcmbXNnPScgKyAkKCdqcy1GcmllbmRVbmZyaWVuZE1lc3NhZ2UnKS52YWx1ZTsN +CgkJYWpheExvYWRQb3N0KGZyaWVuZGluZ0hhbmRsZXIudXJsLCBkYXRhLCBmcmll +bmRpbmdIYW5kbGVyLnJlbW92ZUZyaWVuZE9ubG9hZCk7DQoJfSwNCgkNCglhZGRG +cmllbmRPbmxvYWQgOiBmdW5jdGlvbihhamF4T2JqKSB7DQoJCWlmKGFqYXhPYmog +JiYgYWpheE9iai5yZXNwb25zZVhNTCl7DQoJCQl2YXIgeG1sT2JqID0gYWpheE9i +ai5yZXNwb25zZVhNTDsNCgkJCXZhciB4bWxOb2RlcyA9IGZyaWVuZGluZ0hhbmRs +ZXIueG1sLnBhcnNlKHhtbE9iaik7DQoJCQlpZih4bWxOb2Rlcy5lcnJvciAmJiB4 +bWxOb2Rlcy5lcnJvci5sZW5ndGgpew0KCQkJCXZhciBlcnJvcnNfbGVuZ3RoID0g +eG1sTm9kZXMuZXJyb3IubGVuZ3RoOw0KCQkJCWZvciAodmFyIGkgPSAwOyBpIDwg +ZXJyb3JzX2xlbmd0aDsgaSsrKSB7DQoJCQkJCWZ1dHVfYWxlcnQoRkFULmZyaWVu +ZGxpZXJfaGVhZGVyLCB4bWxOb2Rlcy5lcnJvcltpXS5maXJzdENoaWxkLmRhdGEs +IHRydWUsICdlcnJvcicpOw0KCQkJCX0NCgkJCX0NCgkJCWlmKHhtbE5vZGVzLnJl +c3VsdCAmJiB4bWxOb2Rlcy5yZXN1bHQubGVuZ3RoKSB7DQoJCQkJaWYoeG1sTm9k +ZXMudGV4dCAmJiB4bWxOb2Rlcy50ZXh0Lmxlbmd0aCkgew0KCQkJCQlmdXR1X2Fs +ZXJ0KEZBVC5mcmllbmRsaWVyX2hlYWRlciwgeG1sTm9kZXMudGV4dFswXS5maXJz +dENoaWxkLmRhdGEsIGZhbHNlLCAnbWVzc2FnZScpOw0KCQkJCX0NCgkJCQkkKCdq +cy1GcmllbmRVbmZyaWVuZE1lc3NhZ2UnKS52YWx1ZSA9ICcnOw0KCQkJCSQoJ2pz +LWFkZEZyaWVuZE1lc3NhZ2UnKS5hZGRDbGFzcygnaGlkZGVuJyk7DQoJCQkJJCgn +anMtYWRkRnJpZW5kU2VuZEJ1dHRvbicpLmFkZENsYXNzKCdoaWRkZW4nKTsNCg0K +CQkJCS8vJCgnanMtYWRkRnJpZW5kQnV0dG9uJykuYWRkQ2xhc3MoJ2hpZGRlbicp +Ow0KCQkJCS8vJCgnanMtZGVsZXRlRnJpZW5kQnV0dG9uJykucmVtb3ZlQ2xhc3Mo +J2hpZGRlbicpOw0KICAgICAgICAgICAgICAgIA0KCSAgICAgICAgICAgICQkKCJw +cm9maWxlLWFjdGlvbnMtZnJpZW5kLWFkZCIpLnNldFN0eWxlKCdkaXNwbGF5Jywg +J25vbmUnKQ0KCSAgICAgICAgICAgICQkKCJwcm9maWxlLWFjdGlvbnMtZnJpZW5k +LWRlbCIpLnNldFN0eWxlKCdkaXNwbGF5JywgJ2lubGluZScpDQoJCQl9DQoJCX0N +Cgl9LA0KCQ0KCXJlbW92ZUZyaWVuZE9ubG9hZCA6IGZ1bmN0aW9uKGFqYXhPYmop +IHsNCgkJaWYoYWpheE9iaiAmJiBhamF4T2JqLnJlc3BvbnNlWE1MKXsNCgkJCXZh +ciB4bWxPYmogPSBhamF4T2JqLnJlc3BvbnNlWE1MOw0KCQkJdmFyIHhtbE5vZGVz +ID0gZnJpZW5kaW5nSGFuZGxlci54bWwucGFyc2UoeG1sT2JqKTsNCgkJCWlmKHht +bE5vZGVzLmVycm9yICYmIHhtbE5vZGVzLmVycm9yLmxlbmd0aCl7DQoJCQkJdmFy +IGVycm9yc19sZW5ndGggPSB4bWxOb2Rlcy5lcnJvci5sZW5ndGg7DQoJCQkJZm9y +ICh2YXIgaSA9IDA7IGkgPCBlcnJvcnNfbGVuZ3RoOyBpKyspIHsNCgkJCQkJZnV0 +dV9hbGVydChGQVQuZnJpZW5kbGllcl9oZWFkZXIsIHhtbE5vZGVzLmVycm9yW2ld +LmZpcnN0Q2hpbGQuZGF0YSwgdHJ1ZSwgJ2Vycm9yJyk7DQoJCQkJfQ0KCQkJfQ0K +CQkJaWYoeG1sTm9kZXMucmVzdWx0ICYmIHhtbE5vZGVzLnJlc3VsdC5sZW5ndGgp +IHsNCgkJCQlmdXR1X2FsZXJ0KEZBVC5mcmllbmRsaWVyX2hlYWRlciwgJ9CS0Ysg +0YPQtNCw0LvQuNC70Lgg0LTRgNGD0LPQsCA6KCcsIGZhbHNlLCAnbWVzc2FnZScp +Ow0KCQkJCSQoJ2pzLUZyaWVuZFVuZnJpZW5kTWVzc2FnZScpLnZhbHVlID0gJyc7 +DQoJCQkJJCgnanMtYWRkRnJpZW5kTWVzc2FnZScpLmFkZENsYXNzKCdoaWRkZW4n +KTsNCgkJCQkkKCdqcy1yZW1vdmVGcmllbmRTZW5kQnV0dG9uJykuYWRkQ2xhc3Mo +J2hpZGRlbicpOw0KDQoJCQkJLy8kKCdqcy1hZGRGcmllbmRCdXR0b24nKS5yZW1v +dmVDbGFzcygnaGlkZGVuJyk7DQoJCQkJLy8kKCdqcy1kZWxldGVGcmllbmRCdXR0 +b24nKS5hZGRDbGFzcygnaGlkZGVuJyk7DQoJCQl9DQoJCX0NCgl9LA0KCQ0KCWFu +c3dlciA6IGZ1bmN0aW9uKGFuc3dlciwgbWVzc2FnZV9pZCwgdXNlcl9pZCwgZnJp +ZW5kX2lkKSB7DQoJCXZhciBkYXRhID0gJ2FjdGlvbj1yZXBseSZhbnN3ZXI9JyAr +IGFuc3dlciArICcmbWVzc2FnZV9pZD0nICsgbWVzc2FnZV9pZCArICcmdXNlcl9p +ZD0nICsgdXNlcl9pZCArICcmZnJpZW5kX2lkPScgKyBmcmllbmRfaWQ7DQoJCWFq +YXhMb2FkUG9zdChmcmllbmRpbmdIYW5kbGVyLnVybCwgZGF0YSwgZnJpZW5kaW5n +SGFuZGxlci5hbnN3ZXJPbmxvYWQpOw0KCX0sDQoJYW5zd2VyT25sb2FkIDogZnVu +Y3Rpb24oYWpheE9iaikgew0KCQlpZihhamF4T2JqICYmIGFqYXhPYmoucmVzcG9u +c2VYTUwpew0KCQkJdmFyIHhtbE9iaiA9IGFqYXhPYmoucmVzcG9uc2VYTUw7DQoJ +CQl2YXIgeG1sTm9kZXMgPSBmcmllbmRpbmdIYW5kbGVyLnhtbC5wYXJzZSh4bWxP +YmopOw0KCQkJaWYoeG1sTm9kZXMuZXJyb3IgJiYgeG1sTm9kZXMuZXJyb3IubGVu +Z3RoKXsNCgkJCQl2YXIgZXJyb3JzX2xlbmd0aCA9IHhtbE5vZGVzLmVycm9yLmxl +bmd0aDsNCgkJCQlmb3IgKHZhciBpID0gMDsgaSA8IGVycm9yc19sZW5ndGg7IGkr +Kykgew0KCQkJCQlmdXR1X2FsZXJ0KEZBVC5mcmllbmRsaWVyX2hlYWRlciwgeG1s +Tm9kZXMuZXJyb3JbaV0uZmlyc3RDaGlsZC5kYXRhLCB0cnVlLCAnZXJyb3InKTsN +CgkJCQl9DQoJCQl9DQoJCQlpZih4bWxOb2Rlcy50ZXh0ICYmIHhtbE5vZGVzLnRl +eHQubGVuZ3RoKSB7DQoJCQkJJCgnZnJpZW5kLW1haWwtYWN0aW9uJykuaW5uZXJI +VE1MID0geG1sTm9kZXMudGV4dFswXS5maXJzdENoaWxkLmRhdGE7DQoJCQl9DQoJ +CX0JDQoJfQ0KfTsNCg0KY29tcGFuaWVzSGFuZGxlciA9IHsNCgl3b3JrZXJTZW5k +IDogZnVuY3Rpb24gKGNvbXBhbnlfaWQsIGFkZCwgZmF2KSB7DQoJCXZhciBwZW9w +bGVMaXN0LHBlb3BsZUNvdW50ZXIscGVvcGxlTWVudTsNCgkJKG5ldyBSZXF1ZXN0 +KHsNCiAgICAgICAgICAgICd1cmwnOiB0ZW1wLmJhc2UgKyAnYWpheC9jb21wYW55 +L3NldC8nLA0KICAgICAgICAgICAgJ2RhdGEnOiB7DQogICAgICAgICAgICAgICAg +J2FjdGlvbic6IGFkZCA/ICggZmF2ID8gJ2Zhbl9hZGQnIDogJ3dvcmtlcl9hZGQn +KSA6ICggZmF2ID8gJ2Zhbl9kZWwnIDogJ3dvcmtlcl9kZWwnKSwNCgkJCQknY29t +cGFueV9pZCcgOiBjb21wYW55X2lkDQogICAgICAgICAgICB9LA0KCQkJIm9uUmVx +dWVzdCI6ZnVuY3Rpb24oKXsNCgkJCQlwZW9wbGVMaXN0ID0gZmF2ID8gJCgnanMt +Y29tcGFueUZhbnNMaXN0JykgOiAkKCdqcy1jb21wYW55V29ya2Vyc0xpc3QnKTsN +CgkJCQlwZW9wbGVDb3VudGVyID0gZmF2ID8gJCgnanMtY29tcGFueUZhbnNDb3Vu +dCcpIDogJCgnanMtY29tcGFueVdvcmtlcnNDb3VudCcpOw0KCQkJCXBlb3BsZU1l +bnUgPSAkKGRvY3VtZW50KS5nZXRFbGVtZW50KCIucHJvZmlsZS1hY3Rpb25zLW1l +bnUgLmpzLXlvdXItd29yay1zdGF0ZSIpOw0KCQkJfSwNCgkJCSJvblN1Y2Nlc3Mi +OiBmdW5jdGlvbihyLHJ4bWwpew0KCQkJCXZhciBlcnJvcnMgPSByeG1sLmdldEVs +ZW1lbnRzQnlUYWdOYW1lKCJlcnJvciIpOw0KCQkJCWlmIChlcnJvcnMgJiYgZXJy +b3JzLmxlbmd0aCkgew0KCQkJCQl2YXIgZXJyb3JzdGV4dCA9ICIiOw0KCQkJCQlm +b3IgKHZhciBpPTAsbD1lcnJvcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7DQoJCQkJ +CQllcnJvcnN0ZXh0ICs9IGVycm9yc1tpXS5maXJzdENoaWxkLmRhdGEgKyAiPC9i +cj4iOw0KCQkJCQl9Ow0KCQkJCQlmdXR1X2FsZXJ0KCLQntC5LdC+0Lkt0L7QuSDR +gSDQutC+0LvQsdCw0YHQvtC5ISIsIGVycm9yc3RleHQsIGZhbHNlLCAnZXJyb3In +KTsNCgkJCQl9DQoJCQkJdmFyIG1lc3NhZ2UgPSByeG1sLmdldEVsZW1lbnRzQnlU +YWdOYW1lKCJtZXNzYWdlIilbMF07DQoJCQkJdmFyIGNvbXBhbnkgPSByeG1sLmdl +dEVsZW1lbnRzQnlUYWdOYW1lKCJjb21wYW55IilbMF07CQkJCQ0KCQkJCQ0KCQkJ +CWlmIChtZXNzYWdlKSB7DQoJCQkJCXZhciB1c2VyTm9kZSA9IHJ4bWwuZ2V0RWxl +bWVudHNCeVRhZ05hbWUoJ3VzZXInKVswXSwNCgkJCQkJCXVzZXJOYW1lID0gdXNl +ck5vZGUuZmlyc3RDaGlsZC5kYXRhLA0KCQkJCQkJdXNlclVybCAgPSB1c2VyTm9k +ZS5nZXRBdHRyaWJ1dGUoJ3VybCcpOw0KCQkJCQlpZiAoYWRkKSB7CQkJCQkJDQoJ +CQkJCQlwZW9wbGVNZW51ICYmIHBlb3BsZU1lbnUuYWRkQ2xhc3MoIGZhdiA/ICJq +cy15b3UtbG92ZS10aGlzLWNvcnAiIDogImpzLXlvdS13b3JrLWhlcmUiKTsNCgkJ +CQkJCXBlb3BsZUxpc3QgJiYgKCgobmV3IEVsZW1lbnQoJ2xpJykpLmFkb3B0KChu +ZXcgRWxlbWVudCgiYSIsIHsndGV4dCc6IHVzZXJOYW1lICwgJ2hyZWYnOiAiaHR0 +cDovLyIgKyB1c2VyVXJsICsnLyd9KSkpKS5pbmplY3QocGVvcGxlTGlzdCkpOw0K +CQkJCQkJcGVvcGxlQ291bnRlciAmJiAoKHBlb3BsZUNvdW50ZXIuaW5uZXJIVE1M +ID0gTnVtYmVyKHBlb3BsZUNvdW50ZXIuaW5uZXJIVE1MKSArIDEpKTsNCgkJCQkJ +fSBlbHNlIHsNCgkJCQkJCXBlb3BsZU1lbnUgJiYgcGVvcGxlTWVudS5yZW1vdmVD +bGFzcyggZmF2ID8gImpzLXlvdS1sb3ZlLXRoaXMtY29ycCIgOiAianMteW91LXdv +cmstaGVyZSIpOw0KCQkJCQkJcGVvcGxlQ291bnRlciAmJiAocGVvcGxlQ291bnRl +ci5pbm5lckhUTUwgPSBOdW1iZXIocGVvcGxlQ291bnRlci5pbm5lckhUTUwpIC0g +MSk7DQoJCQkJCQl2YXIgdXNlclF1ZXJ5ID0gJ2FbaHJlZj1odHRwOi8vJyt1c2Vy +VXJsKycvXSc7DQoJCQkJCQlwZW9wbGVMaXN0ICYmIHBlb3BsZUxpc3QuZ2V0RWxl +bWVudCh1c2VyUXVlcnkpLmdldFBhcmVudCgpLmRpc3Bvc2UoKTsNCgkJCQkJfQ0K +CQkJCQkkKCdmYW5zX2NvdW50Jykuc2V0KCdodG1sJyxjb21wYW55LmdldEF0dHJp +YnV0ZSgnZmFuc19jb3VudF9zdHInKSk7DQoJCQkJfQ0KCQkJCQ0KCQkJfQ0KICAg +ICAgICB9KSkuc2VuZCgpOw0KCX0sDQoJZmFuU2VuZCA6IGZ1bmN0aW9uIChjb21w +YW55X2lkLCBhZGRGYW4pIHsNCgkJdGhpcy53b3JrZXJTZW5kKGNvbXBhbnlfaWQs +IGFkZEZhbiwgdHJ1ZSk7DQoJfQ0KfTsNCg== + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline; filename=2694_24x24.webp +Content-Type: image/webp; name=2694_24x24.webp +Content-Location: http://habrahabr.ru/media/thumb/cf/f9/9b/2694/2694_24x24.jpg +Content-Transfer-Encoding: Base64 + +UklGRjIBAABXRUJQVlA4ICYBAACwBQCdASoYABgAAocIhYWIhYSICQIAEPs8afz5 +/ufcB/VXqV/rN7FfpjK2o0nqc+CmDlFjqdwA/v7ta8D4gQUZdhq4v/A+lP4I9wpT +af3tPH/8TH6+w8KH0i6kicPMkt2TxAw/5/eAbR2zPH2oMaU6BTa0xCPOOMbdbRb/ +5FdLDLd7m1DsDCJFcOfjaWx/z9zTy1ygf7gA496uA24yTdf4t2Nkq+Cu7H/wQn3D +XT/f/01v07LrL/zPmd/v2iX4mtveqxjWf/5t27/8Nf5BhG4zWAflreMQ3YYP/hr5 +Of8Tv7R/v5LJ5e9jpJ0r/zxyvz91T9hwKsRf5otc/ZfamuUgTm17zniK6ukNnlwa +H0/Mv/ufGma+j5P//XSRSDDvCfjvAKAAAAA= + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline; filename=stub-user-small.gif +Content-Type: image/gif; name=stub-user-small.gif +Content-Location: http://habrahabr.ru/i/avatars/stub-user-small.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhFwAXAOYAAKSYmJGEhJ2VlaCUlJKFhZyRkZ+SkpOIiLGnp6menqKWlrqy +srOpqb21tZCDg8bExMrIyMzKytHOzsjGxuzn597Z2u7o6JWKiuvl5e/q6fHs6+7o +6d7Z2evl5tbS0peKipeNjdvX1+nj45WJiezo55mNjZqOjtvY1+7p6M/Ly/Dq65OG +hpmQkOfi4pSIiJaLi9TR0JKGhtnW1efj4ufi46abm/Dr697a2dTQ0ZiMjNbS07Sr +q+nj5JSHh+nk45uSktnV1ZiLi5SJic/LzNTQ0NnV1pOHh5aMjJeMjOzn6Letrevm +5ZaJicS8vMfAwNbT0pmMjKyiopuQkN7a2qugoMrDw7ivr5yPj52SksW+vs/MzL+3 +t5aKisK6uvDr6ryzs/Hs7MC4uJuPj66jo5WLi83GxpGFhZmOjpeLi9vY2K+lpaOY +mO7p6eXh4Onk5J6RkaecnKWZmdvX2Ozo6MvFxe/q6u/p6pWIiJ+YmOXg4PHr7O/p +6ePe3vDq6uDc3PHr6yH5BAAAAAAALAAAAAAXABcAAAf/gH8af4R6hIUag3+Gi3qG +GmCMgoqMkYeNhSp9m16bfSqaNpyifaSfdRl7qnape6mtrqqyGRkWFhsbFii6G2VV +Tk0bKChswra5JBTJFBRJFHROWV1bX83Jc8okSRgdHRjcHb9NYQ0LSjtL398dSx08 +Pjw8Im4i0tRWSgwIPiJwcWsi+M2g0YIGjYHkzO1AMIZKixlxFAxo8TCPxYt5vlhZ +qCZKghpt8gwwgOUin5MoTy5smCAOSiwFpKD0Q7NmTY81ANgUY8JEzRscKgCtIDRo +haAcplQwcaYEiApTOJxIcyJE1RByco6MGaJEDiRgT1SVUUSGDCBlIw4ocMUElBxo +m17IBUIWiIcnOjzoeLJmZFsoQT5w4XKBzBG9HjzgIAKjMREDBUyUCMxkhOULL47A +wLFYgmfPb8RM/mDZhWkhF4589qwlheshXj/ccdHDiJEDB4SQATFkSOsUEYIH/8Ck +x4rjMW6jBsFCeHAI0KEbJ0A9RvLlLH5Ehz6he3cCAQKYGR/jwAXmPwR47/6gfXsH +8MWXP59dAB737QMBADs= + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline; filename=21610_24x24.webp +Content-Type: image/webp; name=21610_24x24.webp +Content-Location: http://habrahabr.ru/media/thumb/ef/f1/15/21610/21610_24x24.jpg +Content-Transfer-Encoding: Base64 + +UklGRiIBAABXRUJQVlA4IBYBAAAQBgCdASoYABgAAIcIhYWIhYSICQIAEQb8e/zH +/r+CN+0HXkx9t+/9bELL7gm3u0VHJPpdfVWm0YaA8I4buAqs4ESWf1lG8Lyt8m5N +/JgHBx3xYaQx0/a/xrQPkHsD2On+M1ISTcL8pJk/mjke9Y9nG9hcfxAKq3DBcjcS +E8FqS0EK62piTk9zqXeeJHlzD/8btrMxHdKPV13Z2dDauDKnj3+m2/7YcMzHwf/+ +GvsLcWcHk0S2BrZBWlCcHOvne+6e7kIhmbKfR4Nvlkse0dDFHE4SSSPeTz8lw4xt +25zQHoWzxRN4fX4L07vzf1hvr/OWfbk3b0xwufRLtdUcJBQKn9O3c1Pan+745wLK +msWDFmaTqwAAAA== + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline; filename=big.png +Content-Type: image/png; name=big.png +Content-Location: http://habrahabr.ru/i/special/bookmate/big.png +Content-Transfer-Encoding: Base64 + +iVBORw0KGgoAAAANSUhEUgAAABQAAAAcCAYAAABh2p9gAAAAGXRFWHRTb2Z0d2Fy +ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHxJREFUeNpi/PDhOQMxIDw84T8++ZUr +FzCCaCYGKgNGmAthLoDZhMtFMHlcLqe6C1nQbUa3kZCL0QHVXTj4DWQhVQOh2Kd9 +OiQE6J8OCeWQAU+HLOhhMvwT9sCnQ/qX2O7u7ljTIbmxT/vSBpfLiHX5aDokvhyk +mwsBAgwA8KdP9B+WVFkAAAAASUVORK5CYII= + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline; filename=bg_cicle_help.png +Content-Type: image/png; name=bg_cicle_help.png +Content-Location: http://habrahabr.ru/i/bg_cicle_help.png +Content-Transfer-Encoding: Base64 + +iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2Fy +ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXRJREFUeNqkUz1rg1AUvUpCgsQQkqFT +oFPAyVl/QLPkJxQczZCtc6f+hULI3ilzFjNkjKtOmYT+AR1CQUGQ3iPvhaeRLDlw +UN+95355n5YkCbXwxlwyXaYlzi7MMzNgHlVnTQnwytww/dlsNhoOh9Tv92tDWZZU +FAWlafrHnzvmN/MXtp4i/ppOp+/j8Zh0XW+UNBgMapqmObperx9Zlr3w8SeCSM8N +xJPJ5E6sAjb4wFdUW1eAnn1klgjDkPb7PeV5DmdyXZdWq9XNDl+uwsc8EGCJntuZ +IZjP5xRFER0OB7Jtu/6WlUDDM1kigIuBqXAc5/a+WCzodDpRHMe3AIDQuEhryWl3 +Aa0AqECF0Fg9eoDtdltn9jyvkb0xWCwJ/nMXIF6v142WJITmggBnLEkX0D8Pq9Mm +NGcECLBhVVU1HPisDmAYxp0YvmIrA13s9o437C4Afh+ebQhfrPRR3oWHq6xmhpiX +6Eeu8tOXSXv2Ov8LMADqM6TU3F3u5gAAAABJRU5ErkJggg== + +------------PzsECPV81mhEFq3fWaXOFZ +Content-Disposition: inline; filename=favicon_1202.ico +Content-Type: image/x-icon; name=favicon_1202.ico +Content-Location: http://habrahabr.ru/media/company/favicon/12/favicon_1202.ico +Content-Transfer-Encoding: Base64 + +AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAABML +AAATCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAamRaGGZgVm1jXFO0YltT0WNd +VNJmYFe5amRadmpjWiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZmBWcGJc +Uu92b2f/in+B/5CAjv+IeYX/fHJy/3FrY/9vaWD2cmxignlyaAUAAAAAAAAAAAAA +AAAAAAAAYlxTm3VsaP+vnbP/yq/f/7GEzP+bX7n/klG3/41Jvv+NYKz/h3mB/3x2 +bv99d2yyf3lvCQAAAAAAAAAAYlxTf35xdv+pf87/om24/4VCfP94LWb/cyhf/3An +YP9xJ2v/eiWQ/4U1p/+Qeo3/h4J6/4aAdpgAAAAAZ2FYKnRrafSXZMH/j0um/34w +av9+MGj/fzJq/3wxZf95LmP/dClg/2wkWf9zJXP/gjOR/5aHjv+Qi4P/joh+P2tl +XIeKa5v/hC6z/4Ezgf+CM4T/gzWF/4M2gf+BNHj/gDNs/3swZf92K2P/bSVc/3Yk +dP+OXo3/n5qT/5qTiqF8dG3Hh0mq/4Amn/+EN5b/hTKf/4Ipm/+EM5b/hDaM/4I0 +gP+AM2//ezBl/3QqYf9wJWP/gTp8/6qfn/+kn5fchHd644tWnf+cipn/qJ+g/7Ch +sP+lhbj/jk6w/4Iqn/+ENI//gzZ//4Azbf95LmP/cSZi/340bv+xo6f/sKym6oqB +feSVjYz/opWh/6yas//Bub3/zMrJ/9bQ1/+rhsL/hDGf/4AsiP+BNHb/ezBl/3Ml +Xv+FR3P/xsC+/7y4suqNiILJk3mM/4g7p/+gZtH/roLS/8Oq1P/j3+P/5+bl/8y6 +0v+UW6D/gC57/3stYP97NGf/vKW0/9XU0v/Gwrzcko6IiY1mgv9/K4D/sYTU/97K +7//Eot//s4zS/+Td5f/u7ez/6+nr/8u3yf+6nbH/1crQ/+fm5f/e3Nn/zsrFo52Y +kSuZiY32dytj/4xKiv/NseL/yqrm/6l20/+jc8v/6+br//b08v/08/P/8O/v/+3s +6//p6Of/4uDe/9fUz0IAAAAAqaahg5N1jP92KWL/hUB5/7mTwv+dZb7/gyi0/6uC +vP/6+fb/+Pby//Lw7f/u7On/6ejm/+Tj4pwAAAAAAAAAALKspQK6uLWho4ik/5hp +nf+cbJr/dyhs/3cncv+EQ37/8Ovs//b18v/y8Oz/7evo/+nn5bbl5OMLAAAAAAAA +AAAAAAAAu7avAcnHxXbOx87ytZjB/6F3tf+cbLH/wKbL//Lx7//x7+v/7+3q9+vp +6Ifo5+UHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1dPPHOHf3nPo5+a06+rp0uzr +69Tt6+i57evpfOzq6CQAAAAAAAAAAAAAAAAAAAAA//8AAPgfAADwBwAA4AMAAMAD +AADAAQAAgAEAAIABAACAAQAAgAEAAMABAADAAwAA4AcAAPAPAAD4HwAA//8AAA== + +------------PzsECPV81mhEFq3fWaXOFZ-- diff --git a/4-JffArticles/1-BlocksFaq/BlocksFaq.txt b/4-JffArticles/1-BlocksFaq/BlocksFaq.txt new file mode 100644 index 0000000..525a684 --- /dev/null +++ b/4-JffArticles/1-BlocksFaq/BlocksFaq.txt @@ -0,0 +1,228 @@ +О блоках и их использовании в Objective-C часть 1-ая + + + В OS X 10.6 и iOS 4.0 компания Apple анонсировала поддержку блоков, по сути являющиx собою замыкания. Дальше о блоках в контексте разработки под IOS, Objective-C (тоесть работа без gc). + Для использования блоков IOS ver. < 4.0 можно применить ESBlockRuntime и PLBlocks. + +Кратко о теории + + Экземпляр блока, тип блока и сам блоковый литерал обозначаются с помощью оператора ^, пример: + +typedef int (^MyBlock)(int); + +int multiplier = 7; + MyBlock myBlock = ^(int num) { + return num * multiplier; + }; + +* This source code was highlighted with Source Code Highlighter. + + или + +int multiplier = 7; +int (^myBlock)(int) = ^(int num) { + return num * multiplier; + }; + +* This source code was highlighted with Source Code Highlighter. + + Вызов блока аналогичен вызову обычной сишной функции. Например, так: + +myBlock( 3 ) + +* This source code was highlighted with Source Code Highlighter. + + Главной особенностью блоков является их умение хранить контекст в котором они создавались. В примере выше «myBlock» всегда будет умножать число на 7. Как же это все работает? + +Виды переменных контекста блока + + 1. Примитивные типы С и структуры, блоки хранят как константы. Пример: + + +int multiplier = 7; +int (^myBlock)(int) = ^(int num) { + return num * multiplier; + }; + multiplier = 8; + NSLog( @"%d", myBlock( 3 ) ); + +* This source code was highlighted with Source Code Highlighter. + + Печатает — 21, а не 24. + + 2. Переменные заданные с ключевым словом __block являются изменяемыми. Работает это за счет копирования значения такой переменной в кучу и каждый блок хранит ссылку на эту переменную. Пример: + +__block int multiplier = 7; +int (^myBlock)(int) = ^(int num) { + return num * multiplier; + }; + multiplier = 8; + NSLog( @"%d", myBlock( 3 ) ); + +* This source code was highlighted with Source Code Highlighter. + + Печатает — 24, а не 21. + + 3. Переменные — указатели на обьекты с подсчетом ссылок (id, NSObject). Для них вызывается retain при копировании блока в кучу. Пример: + +NSDate* date = [ [ NSDate alloc ] init ]; + +void (^printDate)() = ^() { + NSLog( @"date: %@", date ); + }; + +//копируем блок в кучу + printDate = [ [ printDate copy ] autorelease ]; + + [ date release ]; + + printDate(); + +* This source code was highlighted with Source Code Highlighter. + + Здесь хочется обратить ваше внимание на то, что retain объекта date происходит именно во время копирования блока в кучу, а не во время его создания. К примеру, этот код упадет с “EXC_BAD_ACCESS” + +NSDate* date = [ [ NSDate alloc ] init ]; + +void (^printDate)() = ^() { + NSLog( @"date: %@", date ); + }; + + [ date release ]; + +//копируем блок в кучу и падаем + printDate = [ [ printDate copy ] autorelease ]; + + printDate(); + +* This source code was highlighted with Source Code Highlighter. + + 4. Переменные — указатели на обьекты с подсчетом ссылок (id, NSObject) объявленые с ключевым словом __block. Для них НЕ вызывается retain при копировании блока в кучу. Пример: +__block NSDate* date = [ [ NSDate alloc ] init ]; + +void (^printDate)() = ^() { + //здесь падаем при обращении к date + NSLog( @"date: %@", date ); + }; + +//копируем блок в кучу, для объекта date retain не вызывается + printDate = [ [ printDate copy ] autorelease ]; + + [ date release ]; + + printDate(); + +* This source code was highlighted with Source Code Highlighter. + + Обычно это используется для избегания циклических ссылок. Пример: +@interface SomeClass : NSObject + +//копируем блок проперти + @property ( nonatomic, copy ) SimpleBlock block; + + @end + + @implementation SomeClass + + @synthesize block = _block; + + -(void)dealloc + { + [ _block release ]; + + [ super dealloc ]; + } + + -(void)methodB + { + } + + -(void)methodA + { + __block SomeClass* self_ = self; + //потенциально циклическая ссылка( утечка ) - класс хранит блок, а блок ссылается на класс + self.block = ^() + { + //здесь retain для self_ не вызывается + [ self_ methodB ]; + }; + } + + @end + +* This source code was highlighted with Source Code Highlighter. + + Блоки являются экземплярами класса NSObject (конкретные классы этих обьектов не определенны), поэтому мы можем и вынуждены пользоватся методами класса NSObject — copy, retain, release и autorelease для блоков. Но зачем нам это нужно? + +Блоки и управление памятью + + По умолчанию экземпляры блоков создаются не в куче, как можно было бы предположить, а в стеке. Поэтому при необходимости сделать отложеный вызов блока сначала его нужно скопировать в кучу. + + Допустим, существует расширение класса NSObject c методом «performAfterDelay:», который выполняет заданный блок с задержкой. + +@implementation NSObject (BlocksExtensions) + + -(void)callSelfBlock + { + void* self_ = self; + ESSimpleBlock block_ = (ESSimpleBlock)self_; + block_(); + } + + -(void)performAfterDelay:( NSTimeInterval )delay_ + { + [ self performSelector: @selector( callSelfBlock ) withObject: nil afterDelay: delay_ ]; + } + + @end + +* This source code was highlighted with Source Code Highlighter. + + И, собственно, вызов: + NSDate* date = [ NSDate date ]; + + void (^printDate)() = ^() { + NSLog( @"date: %@", date ); + }; + + [ printDate performAfterDelay: 0.3 ]; + +* This source code was highlighted with Source Code Highlighter. + + Такой код «свалит» наше приложение, потому как стековый блок будет к моменту вызова разрушен, и мы обратимся в месте вызова блока к случайной памяти. Хотя при этом такой код: + void (^printDate)() = ^() { + NSLog( @"date: %@", [ NSDate date ] ); + }; + + [ printDate performAfterDelay: 0.3 ]; + +* This source code was highlighted with Source Code Highlighter. + + будет прекрасно работать. В чем же причина? Обратите внимание — последний блок не ссылается на внешние переменные следовательно нет и необходимости создавать его копию. В этом случае компилятор создает так называемый Global блок. В программе существует всего один экземпляр такого блока, время жизни которого ограничено временем жизни приложения. Таким образом, GlobalBlock можно рассматривать как singletone-объект. + +Виды блоковых переменных + + И так, подведем итоги. Существует три вида блоков: глобальные( без состояния ), локальные или они же стековые, и блоки в куче (MallocBlock). Следовательно методы copy, retain, release и autorelease глобального блока ничего не делают. Метод retain так же ничего не делает для стекового блока. Для Malloc блока метод copy в свою очередь работает как retain для NSObject. + + И конечно же исправленная версия предыдущего примера с добавлением метода copy: +@implementation NSObject (BlocksExtensions) + + -(void)callSelfBlock + { + void* self_ = self; + ESSimpleBlock block_ = (ESSimpleBlock)self_; + block_(); + } + + -(void)performAfterDelay:( NSTimeInterval )delay_ + { + //копируем блок в кучу, так как отложеный вызов - afterDelay: + self = [ [ self copy ] autorelease ]; + [ self performSelector: @selector( callSelfBlock ) withObject: nil afterDelay: delay_ ]; + } + + @end + +* This source code was highlighted with Source Code Highlighter. + +О блоках и их использовании в Objective-C часть 2-ая \ No newline at end of file diff --git a/4-JffArticles/2-BlocksAndCollections/BlocksAndCollections.habr b/4-JffArticles/2-BlocksAndCollections/BlocksAndCollections.habr new file mode 100644 index 0000000..e69de29 diff --git a/4-JffArticles/2-BlocksAndCollections/BlocksAndCollections.mht b/4-JffArticles/2-BlocksAndCollections/BlocksAndCollections.mht new file mode 100644 index 0000000..53553ba --- /dev/null +++ b/4-JffArticles/2-BlocksAndCollections/BlocksAndCollections.mht @@ -0,0 +1,17195 @@ +Content-Type: multipart/related; start=; boundary=----------KWbw7cErKpPXlw3YJNkT2K +Content-Location: http://habrahabr.ru/blogs/macosxdev/120869/ +Subject: =?utf-8?Q?=D0=9E=20=D0=B1=D0=BB=D0=BE=D0=BA=D0=B0=D1=85=20=D0=B8=20=D0=B8=D1=85=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B8=20=D0=B2=20Objective-C=20=D1=87=D0=B0=D1=81=D1=82=D1=8C=202-=D0=B0=D1=8F=20/=20=D0=A0=D0=B0=D0=B7=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B0=20=D0=BF=D0=BE=D0=B4=20Apple=20iOS=20/=20=D0=A5=D0=B0=D0=B1=D1=80=D0=B0=D1=85=D0=B0=D0=B1=D1=80?= +MIME-Version: 1.0 + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=default.htm +Content-Type: text/html; charset=utf-8; name=default.htm +Content-ID: +Content-Location: http://habrahabr.ru/blogs/macosxdev/120869/ +Content-Transfer-Encoding: Base64 + +PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJh +bnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQv +eGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPg0KDQo8aHRtbCB4bWxucz0iaHR0cDov +L3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9InJ1Ij4NCjxoZWFkPg0K +CTxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9o +dG1sOyBjaGFyc2V0PXV0Zi04IiAvPg0KCQ0KCTx0aXRsZT7QniDQsdC70L7QutCw +0YUg0Lgg0LjRhSDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQuCDQsiBPYmplY3Rp +dmUtQyDRh9Cw0YHRgtGMIDIt0LDRjyAvINCg0LDQt9GA0LDQsdC+0YLQutCwINC/ +0L7QtCBBcHBsZSBpT1MgLyDQpdCw0LHRgNCw0YXQsNCx0YA8L3RpdGxlPg0KDQoJ +PGxpbmsgaHJlZj0iaHR0cDovL2hhYnJhaGFici5ydS9jc3MvMTMwNzYzMTQyNy9h +bGwuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIC8+DQoNCg0KICAg +IDxtZXRhIG5hbWU9ImFwcGxpY2F0aW9uLW5hbWUiIGNvbnRlbnQ9ItCl0LDQsdGA +0LDRhdCw0LHRgCIgLz4gDQogICAgPG1ldGEgbmFtZT0ibXNhcHBsaWNhdGlvbi10 +b29sdGlwIiBjb250ZW50PSLQpdCw0LHRgNCw0YXQsNCx0YAiIC8+IA0KICAgIDxt +ZXRhIG5hbWU9Im1zYXBwbGljYXRpb24tc3RhcnR1cmwiIGNvbnRlbnQ9Imh0dHA6 +Ly9oYWJyYWhhYnIucnUvIiAvPiANCg0KICAgIDxtZXRhIG5hbWU9Im1zYXBwbGlj +YXRpb24tdGFzayIgY29udGVudD0ibmFtZT3Qv9C+0YHRgtGLO2FjdGlvbi11cmk9 +aHR0cDovL2hhYnJhaGFici5ydS87aWNvbi11cmk9aHR0cDovL2hhYnJhaGFici5y +dS9mYXZpY29uLmljbyIvPg0KICAgIDxtZXRhIG5hbWU9Im1zYXBwbGljYXRpb24t +dGFzayIgY29udGVudD0ibmFtZT1xJmE7YWN0aW9uLXVyaT1odHRwOi8vaGFicmFo +YWJyLnJ1L3FhLztpY29uLXVyaT1odHRwOi8vaGFicmFoYWJyLnJ1L2Zhdmljb24u +aWNvIi8+DQogICAgPG1ldGEgbmFtZT0ibXNhcHBsaWNhdGlvbi10YXNrIiBjb250 +ZW50PSJuYW1lPdCx0LvQvtCz0Lg7YWN0aW9uLXVyaT1odHRwOi8vaGFicmFoYWJy +LnJ1L2Jsb2dsaXN0LztpY29uLXVyaT1odHRwOi8vaGFicmFoYWJyLnJ1L2Zhdmlj +b24uaWNvIi8+DQogICAgPG1ldGEgbmFtZT0ibXNhcHBsaWNhdGlvbi10YXNrIiBj +b250ZW50PSJuYW1lPdC70Y7QtNC4O2FjdGlvbi11cmk9aHR0cDovL2hhYnJhaGFi +ci5ydS9wZW9wbGUvO2ljb24tdXJpPWh0dHA6Ly9oYWJyYWhhYnIucnUvZmF2aWNv +bi5pY28iLz4NCiAgICA8bWV0YSBuYW1lPSJtc2FwcGxpY2F0aW9uLXRhc2siIGNv +bnRlbnQ9Im5hbWU90LrQvtC80L/QsNC90LjQuDthY3Rpb24tdXJpPWh0dHA6Ly9o +YWJyYWhhYnIucnUvY29tcGFuaWVzLztpY29uLXVyaT1odHRwOi8vaGFicmFoYWJy +LnJ1L2Zhdmljb24uaWNvIi8+DQo8IS0tIC9pZTkgLS0+DQoNCgkNCgkNCgkNCgkN +Cgk8bGluayByZWw9InNob3J0Y3V0IGljb24iIGhyZWY9Imh0dHA6Ly9oYWJyYWhh +YnIucnUvaS9mYXZpY29uLmljbyIgLz4NCgk8bGluayByZWw9ImltYWdlX3NyYyIg +aHJlZj0iaHR0cDovL2hhYnJhaGFici5ydS9pL2xvZ28uZ2lmIiAvPg0KCQ0KCQ0K +CQk8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0i0J/RgNC+0LTQvtC7 +0LbQtdC90LjQtSDRgtC+0L/QuNC60LAgJm1kYXNoOyDQniDQsdC70L7QutCw0YUg +0Lgg0LjRhSDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQuCDQsiBPYmplY3RpdmUt +QyDRh9Cw0YHRgtGMIDEt0LDRjy4gINCc0L3QvtCz0LjQtSDQuNC3INGC0LXRhSDQ +utGC0L4g0LLQv9C10YDQstGL0LUg0YHRgtCw0LvQutC40LLQsNC10YLRgdGPINGB +INCx0LvQvtC60LDQvNC4ICjQuNC70Lgg0LfQsNC80YvQutCw0L3QuNGP0LzQuCks +INC30LDQtNCw0Y7RgiDQstC+0L/RgNC+0YEgJm1kYXNoOy4uLiIgLz4gDQoJDQoN +CgkNCgk8bGluayB0aXRsZT0iIiB0eXBlPSJhcHBsaWNhdGlvbi9yc3MreG1sIiBy +ZWw9ImFsdGVybmF0ZSIgaHJlZj0iaHR0cDovL2hhYnJhaGFici5ydS9yc3MvYmxv +Z3MvbWFjb3N4ZGV2LzEyMDg2OS85N2JkMTk1NDBmMDVmN2M5ZmRhMWZjNzZlNjBk +ZTNhNy8iLz4NCg0KCTwhLS1baWYgSUUgNl0+PGxpbmsgcmVsPSJzdHlsZXNoZWV0 +IiBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1L2Nzcy8xMzA3NjMxNDI3L2llNi5j +c3MiIG1lZGlhPSJhbGwiIC8+PCFbZW5kaWZdLS0+DQoJPCEtLVtpZiBJRSA3XT48 +bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHA6Ly9oYWJyYWhhYnIucnUv +Y3NzLzEzMDc2MzE0MjcvaWU3LmNzcyIgbWVkaWE9ImFsbCIgLz48IVtlbmRpZl0t +LT4NCgk8IS0tW2lmIElFIF0+PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJo +dHRwOi8vaGFicmFoYWJyLnJ1L2Nzcy8xMzA3NjMxNDI3L2llLmNzcyIgbWVkaWE9 +ImFsbCIgLz48IVtlbmRpZl0tLT4NCgkNCgkNCgk8bGluayBocmVmPSIvY3NzLzEz +MDc2MzE0Mjcva2FybWEuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJhbGwi +IC8+DQoJPGxpbmsgaHJlZj0iL2Nzcy8xMzA3NjMxNDI3L3Byb2ZpbGUuY3NzIiBy +ZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIC8+DQoJDQoJPGxpbmsgaHJlZj0i +L2Nzcy8xMzA3NjMxNDI3L3NpZGViYXIvY2F0ZWdvcnlfYmxvZ3MuY3NzIiByZWw9 +InN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIC8+DQoJPGxpbmsgaHJlZj0iL2Nzcy8x +MzA3NjMxNDI3L3NpZGViYXIvYmVzdF9jb21wYW55LmNzcyIgcmVsPSJzdHlsZXNo +ZWV0IiBtZWRpYT0iYWxsIiAvPg0KDQoJPGxpbmsgcmVsPSJoZWxwIiBocmVmPSJo +dHRwOi8vaGFicmFoYWJyLnJ1L2luZm8vaGVscC8iLz4NCgk8bGluayByZWw9InNl +YXJjaCIgaHJlZj0iaHR0cDovL2hhYnJhaGFici5ydS9zZWFyY2gvIi8+DQoJPGxp +bmsgcmVsPSJob21lIiBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1LyIvPg0KCTxz +Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly9oYWJyYWhh +YnIucnUvanMvMTMwNzYzMTQyNy9tb290b29scy0xLjItY29yZS15Yy5qcyI+PC9z +Y3JpcHQ+DQoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0 +cDovL2hhYnJhaGFici5ydS9qcy8xMzA3NjMxNDI3L3N5c3RlbS5qcyI+PC9zY3Jp +cHQ+DQoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cDov +L2hhYnJhaGFici5ydS9qcy8xMzA3NjMxNDI3L3RtL2luaXQuanMiPjwvc2NyaXB0 +Pg0KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly9o +YWJyYWhhYnIucnUvanMvMTMwNzYzMTQyNy9jb21tb24uanMiPjwvc2NyaXB0Pg0K +CQ0KCTwhLS1zY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6 +Ly9oYWJyYWhhYnIucnUvanMvMTMwNzYzMTQyNy9vbGQtc3R1ZmYtdi0xLmpzIj48 +L3NjcmlwdC0tPg0KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9 +Imh0dHA6Ly9oYWJyYWhhYnIucnUvanMvMTMwNzYzMTQyNy9hbGwuanMiPjwvc2Ny +aXB0Pg0KCQ0KCQkNCg0KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz +cmM9Imh0dHA6Ly9oYWJyYWhhYnIucnUvanMvMTMwNzYzMTQyNy90bS92YWxpZGF0 +aW9uLmpzIj48L3NjcmlwdD4NCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw +dCIgc3JjPSJodHRwOi8vaGFicmFoYWJyLnJ1L2pzLzEzMDc2MzE0MjcvdG0veG1s +aGFuZGxlci5qcyI+PC9zY3JpcHQ+DQoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz +Y3JpcHQiIHNyYz0iaHR0cDovL2hhYnJhaGFici5ydS9qcy8xMzA3NjMxNDI3L3Rt +L2NvbnRyb2xzL2NvbnRyb2wuanMiPjwvc2NyaXB0Pg0KCTxzY3JpcHQgdHlwZT0i +dGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly9oYWJyYWhhYnIucnUvanMvMTMw +NzYzMTQyNy90bS9mb3Jtcy9mYXZvdXJpdGVzX2FkZC5qcyI+PC9zY3JpcHQ+DQoJ +PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cDovL2hhYnJh +aGFici5ydS9qcy8xMzA3NjMxNDI3L3RtL2NvbnRyb2xzL2J1dHRvbi5qcyI+PC9z +Y3JpcHQ+DQoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0 +cDovL2hhYnJhaGFici5ydS9qcy8xMzA3NjMxNDI3L3RtL2Zvcm0uanMiPjwvc2Ny +aXB0Pg0KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6 +Ly9oYWJyYWhhYnIucnUvanMvMTMwNzYzMTQyNy9hdXRvc3VnZ2VzdC5qcyI+PC9z +Y3JpcHQ+DQoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0 +cDovL2hhYnJhaGFici5ydS9qcy8xMzA3NjMxNDI3L2hpZ2hsaWdodC5qcyI+PC9z +Y3JpcHQ+DQoJDQoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KCS8q +PCFbQ0RBVEFbKi8NCgl2YXIgeWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdz +Y3JpcHQnKTsNCgkJeWEuc3JjID0gJ2h0dHA6Ly9hbi55YW5kZXgucnUvc3lzdGVt +L2NvbnRleHQuanMnOw0KCS8qIF1dPiovDQoJPC9zY3JpcHQ+DQoJPHNjcmlwdCB0 +eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KCS8qPCFbQ0RBVEFbKi8NCgl2YXIgZ2Eg +PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCgkJZ2Euc2V0QXR0 +cmlidXRlKCdhc3luYycsICd0cnVlJyk7DQoJCWdhLnNyYyA9ICgnaHR0cHM6JyA9 +PSBkb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbCA/ICdodHRwczovL3NzbCcgOiAn +aHR0cDovL3d3dycpICsgJy5nb29nbGUtYW5hbHl0aWNzLmNvbS9nYS5qcyc7DQoJ +LyogXV0+Ki8NCgk8L3NjcmlwdD4NCgkNCgk8c2NyaXB0IHR5cGU9InRleHQvamF2 +YXNjcmlwdCI+DQoJLyo8IVtDREFUQVsqLw0KCQl2YXIgdGVtcD10ZW1wfHx7fTsN +CgkJd2luZG93LnRlbXA9dGVtcDsNCgkJdGVtcC5iYXNlID0gKHdpbmRvdy5iYXNl +X2Z1bGxfdXJsID0gJ2h0dHA6Ly9oYWJyYWhhYnIucnUvJyk7DQoJCXRlbXAuYmFz +ZV9zaG9ydCA9ICdoYWJyYWhhYnIucnUnOw0KCQlobGpzLmluaXRIaWdobGlnaHRp +bmdPbkxvYWQoKTsNCgkvKiBdXT4qLw0KCTwvc2NyaXB0PiANCgkNCgk8c2NyaXB0 +IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvanMvMTMwNzYzMTQyNy9jb21t +ZW50Rm9ybS5qcyI+PC9zY3JpcHQ+DQoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz +Y3JpcHQiIHNyYz0iL2pzLzEzMDc2MzE0Mjcvdm90aW5nLmpzIj48L3NjcmlwdD4N +Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvanMvMTMwNzYz +MTQyNy9zd2ZvYmplY3QuanMiPjwvc2NyaXB0Pg0KCTxzY3JpcHQgdHlwZT0idGV4 +dC9qYXZhc2NyaXB0IiBzcmM9Ii9qcy8xMzA3NjMxNDI3L3Bvc3RzSGFuZGxlci5q +cyI+PC9zY3JpcHQ+DQoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNy +Yz0iL2pzLzEzMDc2MzE0MjcvaGFicmFXWUcuanMiPjwvc2NyaXB0Pg0KCTxzY3Jp +cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii9qcy8xMzA3NjMxNDI3L2Zy +aWVuZGluZy5qcyI+PC9zY3JpcHQ+DQoJDQoNCgkJDQo8L2hlYWQ+DQoNCjxib2R5 +IGlkPSJtYWluLXBhZ2UiIGNsYXNzPSJibG9ncyBibG9nLXBhbmVsICAiIGxhbmc9 +InJ1Ij4NCgkJDQoJCQkNCg0KCQkJDQoNCgkJCQ0KCQkJDQoJCQkNCgkJCQ0KCQkJ +DQoJCQkNCgkJCQ0KDQoJCQkNCg0KCQkJDQoNCgkJCQ0KCQkJPHNjcmlwdD4NCgkJ +CXZhciBtYl9yYW5kb20gPSBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAxMDAw +MDApOw0KCQkJZG9jdW1lbnQud3JpdGUoIjxzY3JpcHQgc3JjPSdodHRwOi8vcGlu +ay5oYWJyYWxhYi5ydS9jZ2ktYmluL2lmcmFtZS9oYWJyX290aGVyc185MD8iK21i +X3JhbmRvbSsiJm9wdGlvbnM9RlQnPjwvc2NyIisiaXB0PiIpOw0KCQkJPC9zY3Jp +cHQ+DQoJCQkNCg0KCQkJDQoNCgkJCQ0KDQoJCQkJCQkJCQ0KDQoJCQ0KDQoNCg0K +PGRpdiBjbGFzcz0iaGVhZGVyIj4NCgkNCgkNCgkJPGRsIGNsYXNzPSJwYW5lbC1w +ZXJzb25hbCI+Cgk8ZHQ+CgkJPGEgaHJlZj0iaHR0cDovL21vYm9yYi5oYWJyYWhh +YnIucnUvIiBjbGFzcz0iaGFicmF1c2VyIj5tb2JvcmI8L2E+CgoJCQoKCgkJCgkJ +PGEgaHJlZj0iaHR0cDovL2hhYnJhaGFici5ydS9zZXR0aW5ncy8iIGNsYXNzPSJu +YXYtc2V0dGluZ3MiPtC90LDRgdGC0YDQvtC50LrQuDwvYT4KCQk8YSBocmVmPSJo +dHRwOi8vaGFicmFoYWJyLnJ1L2xvZ291dC9tb2JvcmIvNDI1NDkzOTA0NS8iPtCy +0YvQudGC0Lg8L2E+CgkJCgkJCgk8L2R0PgoJPGRkPgoJCQoJICA8YSAgaHJlZj0i +aHR0cDovL21vYm9yYi5oYWJyYWhhYnIucnUvbWFpbC8iPtC70LjRh9C90LDRjyDQ +v9C+0YfRgtCwPC9hPgkKCQk8YSBocmVmPSJodHRwOi8vbW9ib3JiLmhhYnJhaGFi +ci5ydS9mYXZvcml0ZXMvIj7QuNC30LHRgNCw0L3QvdC+0LU8L2E+CgkJCgkJCgk8 +L2RkPgoJPGRkIGNsYXNzPSJoYWJyYXVzZXItY2hhcmdlIiBpZD0idXNlcmNoYXJn +ZSI+0KMg0LLQsNGBINC+0YHRgtCw0LvQvtGB0YwgMTQg0LPQvtC70L7RgdC+0LIg +0LfQsCDQutCw0YDQvNGDLCDRgtC+0L/QuNC60LgsINCy0L7Qv9GA0L7RgdGLINC4 +IDI4INC30LAg0L7RgtCy0LXRgtGLINC4INC60L7QvNC80LXQvdGC0LDRgNC40Lg8 +L2RkPgo8L2RsPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci8vPCFb +Q0RBVEFbCgl2YXIgdGVtcD10ZW1wfHx7fTsKCXRlbXAudXNlciA9IHsgJ2xvZ2lu +JzogJ21vYm9yYid9OwovL11dPgo8L3NjcmlwdD4KDQoJIA0KCTxkaXYgY2xhc3M9 +InBhbmVsLXRvb2xzIj4NCgkJDQoJCTxkaXYgY2xhc3M9InBhbmVsLXNldHRpbmdz +Ij4NCgkJCSZuYnNwOw0KCQk8L2Rpdj4NCgkJIA0KCQk8Zm9ybSBjbGFzcz0icGFu +ZWwtc2VhcmNoIGpzLWF1dG9zdWdnZXN0LWhvbGRlciAiIGFjdGlvbj0iaHR0cDov +L2hhYnJhaGFici5ydS9zZWFyY2gvIiBtZXRob2Q9ImdldCIgYWNjZXB0LWNoYXJz +ZXQ9InV0Zi04Ij4NCgkJCTxwPg0KCQkJCTxsYWJlbCBjbGFzcz0icGFuZWwtc2Vh +cmNoLWxhYmVsIiBmb3I9InNlYXJjaCI+DQoJCQkJCTxpbnB1dCBpZD0ic2VhcmNo +IiBjbGFzcz0iaW4tdGV4dCBqcy1hdXRvc3VnZ2VzdC1maWVsZCAiIHRpdGxlPSLQ +v9C+0LjRgdC6INC/0L4g0YHQsNC50YLRgyIgdHlwZT0idGV4dCIgbmFtZT0icSIg +dmFsdWU9IiIvPiANCgkJCQkJPHNwYW4+0L/QvtC40YHQuiDQv9C+INGB0LDQudGC +0YM8L3NwYW4+DQoJCQkJPC9sYWJlbD4NCgkJCQk8aW5wdXQgY2xhc3M9ImluLXN1 +Ym1pdCIgdHlwZT0ic3VibWl0IiBpZD0iZG8iIHZhbHVlPSIiIHRpdGxlPSJFbnRl +ciEiIC8+DQoJCQk8L3A+DQoJCQk8ZGl2IGNsYXNzPSJqcy1hdXRvc3VnZ2VzdC1v +dXRwdXQtY29udGFpbmVyIj48ZGl2IGNsYXNzPSJqcy1hdXRvc3VnZ2VzdC1vdXRw +dXQgaGlkZGVuIj48L2Rpdj48L2Rpdj4NCgkJPC9mb3JtPg0KCTwvZGl2Pg0KCTxh +IGNsYXNzPSJsb2dvICIgaHJlZj0iaHR0cDovL2hhYnJhaGFici5ydS8iIHRpdGxl +PSLQndCwINCz0LvQsNCy0L3Rg9GOINGB0YLRgNCw0L3QuNGG0YMiPjwvYT4NCgkN +Cg0KCTx1bCBjbGFzcz0icGFuZWwtbmF2LXRvcCI+DQoJDQoJCQ0KCQkJDQoJCQkN +CgkJCQk8bGkgY2xhc3M9ImN1cnJlbnQiPjxhIGhyZWY9Imh0dHA6Ly9oYWJyYWhh +YnIucnUvIj7Qn9C+0YHRgtGLPC9hPjwvbGk+DQoJCQkNCgkJDQoJCQ0KCQkNCgkN +CgkJDQoJCQ0KCQkNCgkJCTxsaT48YSBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1 +L3FhLyI+USZhbXA7QTwvYT48L2xpPg0KCQkNCgkNCgkJDQoJCQ0KCQkNCgkJCTxs +aT48YSBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1L2Jsb2dsaXN0LyI+0JHQu9C+ +0LPQuDwvYT48L2xpPg0KCQkNCgkNCgkJDQoJCQ0KCQkNCgkJCTxsaT48YSBocmVm +PSJodHRwOi8vaGFicmFoYWJyLnJ1L3Blb3BsZS8iPtCb0Y7QtNC4PC9hPjwvbGk+ +DQoJCQ0KCQ0KCQkNCgkJDQoJCQ0KCQkJPGxpPjxhIGhyZWY9Imh0dHA6Ly9oYWJy +YWhhYnIucnUvY29tcGFuaWVzLyI+0JrQvtC80L/QsNC90LjQuDwvYT48L2xpPg0K +CQkNCgkNCgkNCgkNCgkNCgkNCgk8bGkgc3R5bGU9Im1hcmdpbi1ib3R0b206MDsN +CgkJbWFyZ2luLWxlZnQ6MDsNCgkJbWFyZ2luLXJpZ2h0OjA7DQoJCW1hcmdpbi10 +b3A6LTE0cHg7Ij4NCgkJPHNwYW4+DQoJCQk8c2NyaXB0IHR5cGU9InRleHQvamF2 +YXNjcmlwdCI+DQoJCQkvKjwhW0NEQVRBWyovDQoJCQl2YXIgbWJfcmFuZG9tID0g +TWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogMTAwMDAwKTsNCgkJCWRvY3VtZW50 +LndyaXRlKCI8c2NyaXB0IHNyYz1cJ2h0dHA6Ly9waW5rLmhhYnJhbGFiLnJ1L2Nn +aS1iaW4vaWZyYW1lL3NwZWNpYWw/IittYl9yYW5kb20rIiZvcHRpb25zPUZUXCc+ +PC9zY3IiKyJpcHQ+Iik7DQoJCQkvKiBdXT4qLw0KCQkJPC9zY3JpcHQ+DQoJCTwv +c3Bhbj4NCgkJDQoJPC9saT4NCgk8bGkgc3R5bGU9Im1hcmdpbi1ib3R0b206MDsN +CgkJbWFyZ2luLWxlZnQ6MTVweDsNCgkJbWFyZ2luLXJpZ2h0OjA7DQoJCW1hcmdp +bi10b3A6LTlweDsiPg0KCQk8c3Bhbj4NCgkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph +dmFzY3JpcHQiPg0KCQkvKjwhW0NEQVRBWyovDQoJCXZhciBtYl9yYW5kb20gPSBN +YXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAxMDAwMDApOw0KCQlkb2N1bWVudC53 +cml0ZSgiPHNjcmlwdCBzcmM9XCdodHRwOi8vcGluay5oYWJyYWxhYi5ydS9jZ2kt +YmluL2lmcmFtZS9zcGVjaWFsXzI/IittYl9yYW5kb20rIiZvcHRpb25zPUZUXCc+ +PC9zY3IiKyJpcHQ+Iik7DQoJCS8qIF1dPiovDQoJCTwvc2NyaXB0Pg0KCQk8L3Nw +YW4+DQoJPC9saT4NCgkNCgkNCg0KCTwvdWw+DQoNCjwvZGl2Pg0KDQoNCjxkaXYg +aWQ9IndyYXBwZXIiPg0KPGRpdiBpZD0iaW5uZXIiID4NCg0KDQoJPGRpdiBpZD0i +bWFpbi1jb250ZW50Ij4NCgkJDQoNCgkNCgkJCTxkaXYgaWQ9InZpdmEtbGEtdzNj +Ij4KCQk8ZGl2IGNsYXNzPSJibG9nLXRpdGxlIj4KCQkJPGgyIGNsYXNzPSJibG9n +LWhlYWRlciI+CgkJCQk8YSBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1L2Jsb2dz +L21hY29zeGRldi8iIGNsYXNzPSJzaWxlbnRsaW5rIj7QoNCw0LfRgNCw0LHQvtGC +0LrQsCDQv9C+0LQgQXBwbGUgaU9TPC9hPgoJCQkJPHNwYW4gY2xhc3M9InByb2Zp +bGVkX2Jsb2ciIHRpdGxlPSLQn9GA0L7RhNC40LvRjNC90YvQuSDQsdC70L7QsyI+ +PC9zcGFuPgoJCQkJCgkJCTwvaDI+CgkJCSA8ZGwgY2xhc3M9ImJsb2ctaW5kZXgi +PgoJCQkgCTxkdD7QuNC90LTQtdC60YE8L2R0PgoJCQkJPGRkPjE1NCwxMDwvZGQ+ +CgkJCSA8L2RsPgoJCTwvZGl2PgoJPC9kaXY+CgkNCgkNCg0KCQo8ZGl2IGNsYXNz +PSJwYWdlLW5hdmlnYXRpb24iPgoJPHRhYmxlIGNsYXNzPSJwYWdlLW1lbnUiPgoJ +CTx0cj4KCQkJPHRkIGlkPSJ3cml0ZSIgd2lkdGg9IjIwIj4KCQkJCQoJCQkJPGEg +aHJlZj0iL2FkZC90b3BpYy8iIHRpdGxlPSLQndCw0L/QuNGB0LDRgtGMINC90L7Q +stGL0Lkg0YXQsNCx0YDQsNGC0L7Qv9C40LoiPjxpbWcgc3JjPSIvaS93cml0ZS10 +b3BpYy5wbmciIGFsdD0i0J3QsNC/0LjRgdCw0YLRjCIgaGVpZ2h0PSIzNSIgd2lk +dGg9IjM0IiAvPjwvYT4KCQkJCQoJCQkJCgkJCTwvdGQ+CgkJCQoJCQkJCgkJCQkJ +PHRkIGNsYXNzPSIgY3VycmVudCI+PGRpdj48YSBocmVmPSJodHRwOi8vaGFicmFo +YWJyLnJ1L2Jsb2dzL21hY29zeGRldi8iIHRpdGxlPSIiPtCX0LDRhdCw0LHRgNC1 +0L3QvdGL0LU8L2E+PC9kaXY+PC90ZD4KCQkJCQoJCQkJCgkJCQoJCQkJCgkJCQkK +CQkJCQk8dGQgY2xhc3M9IiI+PGRpdj48YSBocmVmPSJodHRwOi8vaGFicmFoYWJy +LnJ1L2Jsb2dzL21hY29zeGRldi9uZXcvIiB0aXRsZT0iIj7QndC+0LLRi9C1PC9h +PjwvZGl2PjwvdGQ+CgkJCQkKCQkJCgkJCQkKCQkJCQoJCQkJCTx0ZCBjbGFzcz0i +Ij48ZGl2PjxhIGhyZWY9Imh0dHA6Ly9oYWJyYWhhYnIucnUvYmxvZ3MvbWFjb3N4 +ZGV2L3VuaGFicmVkLyIgdGl0bGU9IiI+0J7RgtGF0LDQsdGA0LXQvdC90YvQtTwv +YT48L2Rpdj48L3RkPgoJCQkJCgkJCQoJCTwvdHI+Cgk8L3RhYmxlPgoJCjwvZGl2 +PgoNCgkKCQoKCgoKCQoKCQoJCTxkaXYgY2xhc3M9ImhlbnRyeSAiPgoKCQkJPGgy +IGNsYXNzPSJlbnRyeS10aXRsZSBzaW5nbGUtZW50cnktdGl0bGUiPgoJCQkJCgkJ +CQkKCQkJCQoJCQkJCgoJCQkJCgoJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxzcGFu +IHRpdGxlPSJodHRwOi8vaGFicmFoYWJyLnJ1L2Jsb2dzL21hY29zeGRldi8xMjA4 +NjkvIiBjbGFzcz0idG9waWMiPtCeINCx0LvQvtC60LDRhSDQuCDQuNGFINC40YHQ +v9C+0LvRjNC30L7QstCw0L3QuNC4INCyIE9iamVjdGl2ZS1DINGH0LDRgdGC0Ywg +Mi3QsNGPPC9zcGFuPgoJCQkJCQoJCQkJCgoJCQkJIDxhIHRpdGxlPSLQoNC10LTQ +sNC60YLQuNGA0L7QstCw0YLRjCDRhdCw0LHRgNCw0YLQvtC/0LjQuiIgY2xhc3M9 +ImVkaXQiIGhyZWY9Imh0dHA6Ly9oYWJyYWhhYnIucnUvZWRpdC90b3BpYy8xMjA4 +NjkvIj48aW1nIHNyYz0iL2kvdG9waWNfZWRpdC5naWYiIHdpZHRoPSIxNiIgaGVp +Z2h0PSIxNiIgYWx0PSLQoNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCIgLz48L2E+ +CgoJCQkJCgkJCQkKCQkJPC9oMj4KCgkJCQoKPGRpdiBjbGFzcz0iY29udGVudCI+ +CgnQn9GA0L7QtNC+0LvQttC10L3QuNC1INGC0L7Qv9C40LrQsCDigJQgPGEgaHJl +Zj0iaHR0cDovL2hhYnJhaGFici5ydS9ibG9ncy9tYWNvc3hkZXYvMTE5ODc3LyI+ +0J4g0LHQu9C+0LrQsNGFINC4INC40YUg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC4 +0Lgg0LIgT2JqZWN0aXZlLUMg0YfQsNGB0YLRjCAxLdCw0Y88L2E+Ljxici8+DQo8 +YnIvPg0K0JzQvdC+0LPQuNC1INC40Lcg0YLQtdGFINC60YLQviDQstC/0LXRgNCy +0YvQtSDRgdGC0LDQu9C60LjQstCw0LXRgtGB0Y8g0YEg0LHQu9C+0LrQsNC80Lgg +KNC40LvQuCDQt9Cw0LzRi9C60LDQvdC40Y/QvNC4KSwg0LfQsNC00LDRjtGCINCy +0L7Qv9GA0L7RgSDigJQgwqvQsCDQt9Cw0YfQtdC8PyDQldGB0LvQuCDQuCDQsdC1 +0Lcg0L3QuNGFINC80L7QttC90L7Cuy4g0JTQsCDQvNC+0LbQvdC+LiDQndC+INC4 +0YHQv9C+0LvRjNC30L7QstCw0L3QuNC1INCx0LvQvtC60L7QsiDQuNC80LXQtdGC +INC90LUg0LzQsNC70L4g0L/RgNC10LjQvNGD0YnQtdGB0YLQsiwg0Lgg0L/QtdGA +0LLQvtC1INC40Lcg0L3QuNGFIOKAlCDRgdGD0YnQtdGB0YLQstC10L3QvdCw0Y8g +0Y3QutC+0L3QvtC80LjRjyDQvdCwINC60L7Qu9C40YfQtdGB0YLQstC1INC60L7Q +tNCwLCDQsCDRgdC70LXQtNC+0LLQsNGC0LXQu9GM0L3QviDQuCDQvdCwINCy0YDQ +tdC80LXQvdC4INC90LDQv9C40YHQsNC90LjRjyDQuCDQv9C+0LTQtNC10YDQttC6 +0LUuINCU0LDQu9GM0YjQtSDQsdGD0LTRgyDQs9C+0LLQvtGA0LjRgtGMINC/0YDQ +uNC80LXRgNCw0LzQuC48YnIvPg0KPGJyLz4NCjxoND7QodC+0LTQtdGA0LbQsNC9 +0LjQtTo8L2g0Pjxici8+DQoxLiDQoNCw0LHQvtGC0LAg0YEg0LrQvtC90YLQtdC5 +0L3QtdGA0LDQvNC4INC90LAg0L/RgNC40LzQtdGA0LUgTlNBcnJheS48YnIvPg0K +Mi4gR3VhcmRzINC90LAg0L/RgNC40LzQtdGA0LUgVUlUYWJsZVZpZXcuPGJyLz4N +CjMuINCY0YHQv9C+0LvRjNC30L7QstCw0L3QuNC1INCx0LvQvtC60L7QsiDQstC8 +0LXRgdGC0L4g0LrQu9Cw0YHRgdC+0LIg0L3QsCDQv9GA0LjQvNC10YDQtSBzY2hl +ZHVsZWQg0L7Qv9C10YDQsNGG0LjQuS48YnIvPg0KNC4g0JHQu9C+0LrQuCDQstC8 +0LXRgdGC0L4g0LTQtdC70LXQs9Cw0YLQvtCyINCyIFVJQWxlcnRWaWV3Ljxici8+ +DQo1LiBVSVZpZXcg0LDQvdC40LzQsNGG0LjQuCwg0L/QvtGB0LvQtdC00L7QstCw +0YLQtdC70YzQvdC+0YHRgtGMINCw0L3QuNC80LDRhtC40LkuPGJyLz4NCjYuINCQ +0YHQuNC90YXRgNC+0L3QvdGL0LUg0L7Qv9C10YDQsNGG0LjQuCDQuCDRg9C/0YDQ +sNCy0LvQtdC90LjQtSDQuNC80LguINCf0LXRgNC10L/QuNGB0YvQstCw0LXQvCDQ +v9GA0LjQvNC10YAg0YEg0LDQvdC40LzQsNGG0LjRj9C80LguPGJyLz4NCjxhIG5h +bWU9ImhhYnJhY3V0Ij48L2E+PGJyLz4NCjxoNT4xLiDQoNCw0LHQvtGC0LAg0YEg +0LrQvtC90YLQtdC50L3QtdGA0LDQvNC4INC90LAg0L/RgNC40LzQtdGA0LUgTlNB +cnJheS48L2g1Pjxici8+DQrQodCw0LzRi9C8INGH0LDRgdGC0L4g0L/RgNC40LLQ +vtC00LjQvNGL0Lwg0L/RgNC40LzQtdGA0L7QvCDQuNGB0L/QvtC70YzQt9C+0LLQ +sNC90LjRjyDQsdC70L7QutC+0LIg0Y/QstC70Y/QtdGC0YHRjyDRgNCw0LHQvtGC +0LAg0YEg0LrQvtC90YLQtdC50L3QtdGA0LDQvNC4LiDQrdGC0L7RgiDRgtC+0L/Q +uNC6INC90LUg0LHRg9C00LXRgiDQuNGB0LrQu9GO0YfQtdC90LjQtdC8LCDQv9C+ +0YHQvNC+0YLRgNC40Lwg0L3QsCDRgNC10YjQtdC90LjRjyDQvdC10LrQvtGC0L7R +gNGL0YUg0YHRgtCw0L3QtNCw0YDRgtC90YvRhSDQt9Cw0LTQsNGHINC40YHQv9C+ +0LvRjNC30YPRjyDQsdC70L7QutC4Ljxici8+DQo8YnIvPg0KPGg2PtCX0LDQtNCw +0YfQsDE8L2g2Pjxici8+DQrQndCw0L/QuNGB0LDRgtGMINGE0YPQvdC60YbQuNGO +INGB0L7Qt9C00LDRjtGJ0YPRjiDQvNCw0YHRgdC40LIg0YfQuNGB0LXQuyDQuNC3 +INC80LDRgdGB0LjQstCwINGB0YLRgNC+0LosINC60LDQttC00YvQuSDRjdC70LXQ +vNC10L3RgiDQutC+0YLQvtGA0L7Qs9C+INGP0LLQu9GP0LXRgtGB0Y8g0LTQu9C4 +0L3QvdC+0Lkg0YHQvtC+0YLQstC10YLRgdCy0YPRjtGJ0LXQuSDRgdGC0YDQvtC6 +0Lgg0LLRhdC+0LTRj9GJ0LXQs9C+INC80LDRgdGB0LjQstCwLjxici8+DQo8YnIv +Pg0K0KDQtdGI0LXQvdC40LUxOjxici8+DQo8YmxvY2txdW90ZT48Y29kZT48Zm9u +dCBjb2xvcj0iYmxhY2siPk5TQXJyYXkqIHN0cmluZ3NMZW5ndGhzKCBOU0FycmF5 +KiBzdHJpbmdzXyApPGJyLz4NCns8YnIvPg0KJm5ic3A7IE5TTXV0YWJsZUFycmF5 +KiBzdHJpbmdzX2xlbmd0aHNfID08YnIvPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7WyBO +U011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTogWyBzdHJpbmdzXyBjb3Vu +dCBdIF07PGJyLz4NCiZuYnNwOyA8Zm9udCBjb2xvcj0iIzAwMDBmZiI+Zm9yPC9m +b250PiAoIE5TU3RyaW5nKiBzdHJpbmdfIDxmb250IGNvbG9yPSIjMDAwMGZmIj5p +bjwvZm9udD4gc3RyaW5nc18gKTxici8+DQombmJzcDsgezxici8+DQombmJzcDsm +bmJzcDsmbmJzcDtOU051bWJlciogbGVuZ3RoXyA9IFsgTlNOdW1iZXIgbnVtYmVy +V2l0aFVuc2lnbmVkSW50OiBbIHN0cmluZ18gbGVuZ3RoIF0gXTs8YnIvPg0KJm5i +c3A7Jm5ic3A7Jm5ic3A7WyBzdHJpbmdzX2xlbmd0aHNfIGFkZE9iamVjdDogbGVu +Z3RoXyBdOzxici8+DQombmJzcDsgfTxici8+DQombmJzcDsgPGZvbnQgY29sb3I9 +IiMwMDAwZmYiPnJldHVybjwvZm9udD4gWyBOU0FycmF5IGFycmF5V2l0aEFycmF5 +OiBzdHJpbmdzX2xlbmd0aHNfIF07PGJyLz4NCn08L2ZvbnQ+PGJyLz4NCjxici8+ +DQo8Zm9udCBjb2xvcj0iZ3JheSI+KiBUaGlzIHNvdXJjZSBjb2RlIHdhcyBoaWdo +bGlnaHRlZCB3aXRoIDxhIGhyZWY9Imh0dHA6Ly92aXJ0c2VyLm5ldC9ibG9nL3Bv +c3Qvc291cmNlLWNvZGUtaGlnaGxpZ2h0ZXIuYXNweCI+PGZvbnQgY29sb3I9Imdy +YXkiPlNvdXJjZSBDb2RlIEhpZ2hsaWdodGVyPC9mb250PjwvYT4uPC9mb250Pjwv +Y29kZT48L2Jsb2NrcXVvdGU+PGJyLz4NCtCg0LXRiNC10L3QuNC1MiDRgSDQsdC7 +0L7QutCw0LzQuDo8YnIvPg0KPGJsb2NrcXVvdGU+PGNvZGU+PGZvbnQgY29sb3I9 +ImJsYWNrIj5OU0FycmF5KiBzdHJpbmdzTGVuZ3RocyggTlNBcnJheSogc3RyaW5n +c18gKTxici8+DQp7PGJyLz4NCiZuYnNwOyA8Zm9udCBjb2xvcj0iIzAwMDBmZiI+ +cmV0dXJuPC9mb250PiBbIHN0cmluZ3NfIG1hcDogXiggaWQgc3RyaW5nXyApPGJy +Lz4NCiZuYnNwOyB7PGJyLz4NCiZuYnNwOyZuYnNwOyZuYnNwOzxmb250IGNvbG9y +PSIjMDAwMGZmIj5yZXR1cm48L2ZvbnQ+IChpZClbIE5TTnVtYmVyIG51bWJlcldp +dGhVbnNpZ25lZEludDogWyBzdHJpbmdfIGxlbmd0aCBdIF07PGJyLz4NCiZuYnNw +OyB9IF07PGJyLz4NCn08L2ZvbnQ+PGJyLz4NCjxici8+DQo8Zm9udCBjb2xvcj0i +Z3JheSI+KiBUaGlzIHNvdXJjZSBjb2RlIHdhcyBoaWdobGlnaHRlZCB3aXRoIDxh +IGhyZWY9Imh0dHA6Ly92aXJ0c2VyLm5ldC9ibG9nL3Bvc3Qvc291cmNlLWNvZGUt +aGlnaGxpZ2h0ZXIuYXNweCI+PGZvbnQgY29sb3I9ImdyYXkiPlNvdXJjZSBDb2Rl +IEhpZ2hsaWdodGVyPC9mb250PjwvYT4uPC9mb250PjwvY29kZT48L2Jsb2NrcXVv +dGU+PGJyLz4NCjxoNj4g0JfQsNC00LDRh9CwMjwvaDY+PGJyLz4NCtCX0LDQtNCw +0L0g0LzQsNGB0YHQuNCyINGB0YLRgNGD0LrRgtGD0YAg0YEg0YLQsNC60LjQvCDQ +uNC90YLQtdGA0YTQtdC50YHQvtC8Ojxici8+DQo8YmxvY2txdW90ZT48Y29kZT48 +Zm9udCBjb2xvcj0iYmxhY2siPkA8Zm9udCBjb2xvcj0iIzAwMDBmZiI+aW50ZXJm +YWNlPC9mb250PiBFbGVtZW50IDogTlNPYmplY3Q8YnIvPg0KPGJyLz4NCkBwcm9w +ZXJ0eSAoIG5vbmF0b21pYywgcmV0YWluLCA8Zm9udCBjb2xvcj0iIzAwMDBmZiI+ +cmVhZG9ubHk8L2ZvbnQ+ICkgTlNBcnJheSogc3ViRWxlbWVudHM7PGJyLz4NCjxi +ci8+DQpAZW5kPC9mb250Pjxici8+DQo8YnIvPg0KPGZvbnQgY29sb3I9ImdyYXki +PiogVGhpcyBzb3VyY2UgY29kZSB3YXMgaGlnaGxpZ2h0ZWQgd2l0aCA8YSBocmVm +PSJodHRwOi8vdmlydHNlci5uZXQvYmxvZy9wb3N0L3NvdXJjZS1jb2RlLWhpZ2hs +aWdodGVyLmFzcHgiPjxmb250IGNvbG9yPSJncmF5Ij5Tb3VyY2UgQ29kZSBIaWdo +bGlnaHRlcjwvZm9udD48L2E+LjwvZm9udD48L2NvZGU+PC9ibG9ja3F1b3RlPtC9 +0YPQttC90L4g0YHQvtC30LTQsNGC0Ywg0L3QvtCy0YvQuSDQvNCw0YHRgdC40LIs +INC60L7RgtC+0YDRi9C5INGB0L7QtNC10YDQttC40YIg0LLRgdC1INGN0LvQtdC8 +0LXQvdGC0Ysg0LLRgdC10YUgc3ViRWxlbWVudHMuPGJyLz4NCjxici8+DQrQoNC1 +0YjQtdC90LjQtTE6PGJyLz4NCjxibG9ja3F1b3RlPjxjb2RlPjxmb250IGNvbG9y +PSJibGFjayI+TlNBcnJheSogYWxsU3ViRWxlbWVudHMoIE5TQXJyYXkqIGVsZW1l +bnRzXyApPGJyLz4NCns8YnIvPg0KJm5ic3A7IE5TTXV0YWJsZUFycmF5KiByZXN1 +bHRfID0gWyBOU011dGFibGVBcnJheSBhcnJheSBdOzxici8+DQo8YnIvPg0KJm5i +c3A7IDxmb250IGNvbG9yPSIjMDAwMGZmIj5mb3I8L2ZvbnQ+ICggRWxlbWVudCog +ZWxlbWVudF8gPGZvbnQgY29sb3I9IiMwMDAwZmYiPmluPC9mb250PiBlbGVtZW50 +c18gKTxici8+DQombmJzcDsgezxici8+DQombmJzcDsmbmJzcDsmbmJzcDtOU0Fy +cmF5KiBvYmplY3RfaXRlbXNfID0gZWxlbWVudF8uc3ViRWxlbWVudHM7PGJyLz4N +CiZuYnNwOyZuYnNwOyZuYnNwO1sgcmVzdWx0XyBhZGRPYmplY3RzRnJvbUFycmF5 +OiBvYmplY3RfaXRlbXNfIF07IDxici8+DQombmJzcDsgfTs8YnIvPg0KPGJyLz4N +CiZuYnNwOyA8Zm9udCBjb2xvcj0iIzAwMDBmZiI+cmV0dXJuPC9mb250PiBbIE5T +QXJyYXkgYXJyYXlXaXRoQXJyYXk6IHJlc3VsdF8gXTs8YnIvPg0KfTwvZm9udD48 +YnIvPg0KPGJyLz4NCjxmb250IGNvbG9yPSJncmF5Ij4qIFRoaXMgc291cmNlIGNv +ZGUgd2FzIGhpZ2hsaWdodGVkIHdpdGggPGEgaHJlZj0iaHR0cDovL3ZpcnRzZXIu +bmV0L2Jsb2cvcG9zdC9zb3VyY2UtY29kZS1oaWdobGlnaHRlci5hc3B4Ij48Zm9u +dCBjb2xvcj0iZ3JheSI+U291cmNlIENvZGUgSGlnaGxpZ2h0ZXI8L2ZvbnQ+PC9h +Pi48L2ZvbnQ+PC9jb2RlPjwvYmxvY2txdW90ZT48YnIvPg0K0KDQtdGI0LXQvdC4 +0LUyINGBINCx0LvQvtC60LDQvNC4Ojxici8+DQo8YmxvY2txdW90ZT48Y29kZT48 +Zm9udCBjb2xvcj0iYmxhY2siPk5TQXJyYXkqIGFsbFN1YkVsZW1lbnRzKCBOU0Fy +cmF5KiBlbGVtZW50c18gKTxici8+DQp7PGJyLz4NCiZuYnNwOyA8Zm9udCBjb2xv +cj0iIzAwMDBmZiI+cmV0dXJuPC9mb250PiBbIGVsZW1lbnRzXyBmbGF0dGVuOiBe +KCBpZCBlbGVtZW50XyApPGJyLz4NCiZuYnNwOyB7PGJyLz4NCiZuYnNwOyZuYnNw +OyZuYnNwOzxmb250IGNvbG9yPSIjMDAwMGZmIj5yZXR1cm48L2ZvbnQ+IFsgZWxl +bWVudF8gc3ViRWxlbWVudHMgXTs8YnIvPg0KJm5ic3A7IH0gXTs8YnIvPg0KfTwv +Zm9udD48YnIvPg0KPGJyLz4NCjxmb250IGNvbG9yPSJncmF5Ij4qIFRoaXMgc291 +cmNlIGNvZGUgd2FzIGhpZ2hsaWdodGVkIHdpdGggPGEgaHJlZj0iaHR0cDovL3Zp +cnRzZXIubmV0L2Jsb2cvcG9zdC9zb3VyY2UtY29kZS1oaWdobGlnaHRlci5hc3B4 +Ij48Zm9udCBjb2xvcj0iZ3JheSI+U291cmNlIENvZGUgSGlnaGxpZ2h0ZXI8L2Zv +bnQ+PC9hPi48L2ZvbnQ+PC9jb2RlPjwvYmxvY2txdW90ZT48YnIvPg0K0JXRidC1 +INC90LXRgdC60L7Qu9GM0LrQviDRg9C00L7QsdC90YvRhSDRgNCw0YHRiNC40YDQ +tdC90LjQuSDQutC70LDRgdGB0LAgTlNBcnJheSDQvNC+0LbQvdC+INC90LDQudGC +0Lgg0LIg0YTQsNC50LvQtSA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vRW1i +ZWRkZWRTb3VyY2VzL0pGRkxpYnJhcnkvdHJlZS9tYXN0ZXIvbGlicy9KRkZVdGls +cy9OU0FycmF5L05TQXJyYXkrQmxvY2tzQWRkaXRpb25zLm0iPk5TQXJyYXkrQmxv +Y2tzQWRkaXRpb25zLm08L2E+PGJyLz4NCjxici8+DQo8aDU+Mi4gR3VhcmRzINC9 +0LAg0L/RgNC40LzQtdGA0LUgVUlUYWJsZVZpZXcuPC9oNT48YnIvPg0K0JXRgdC7 +0Lgg0L3QtdC+0LHRhdC+0LTQuNC80L4g0LLRi9C/0L7Qu9C90LjRgtGMINC90LXR +gdC60L7Qu9GM0LrQviDQv9C+0LTRgNGP0LQg0LDQv9C00LXQudGC0L7QsiDQutC+ +0L3RgtC10L3RgtCwINCyIFVJVGFibGVWaWV3INGBINCw0L3QuNC80LDRhtC40Y/Q +vNC4ICjQvdCw0L/RgNC40LzQtdGAINC+0LTQuNC9INGN0LvQtdC80LXQvdGCINC0 +0L7QsdCw0LLQuNGC0YwsINC00YDRg9Cz0L7QuSDRg9C00LDQu9C40YLRjCksINGC +0L4g0YfRgtC+INCx0Ysg0LIg0YDQtdC30YPQu9GM0YLQuNGA0YPRjtGJ0LXQuSDQ +sNC90LjQvNCw0YbQuNC4INCy0YHQtSDQstGL0LPQu9GP0LTQtdC70L4g0LDQutC6 +0YPRgNCw0YLQvdC+LCDQvdC10L7QsdGF0L7QtNC40LzQviDRjdGC0Lgg0LTQtdC5 +0YHRgtCy0LjRjyDQv9C+0LzQtdGB0YLQuNGC0Ywg0LIg0L/RgNC10LTQtdC70LDR +hSDQstGL0LfQvtCy0LAg0LTQstGD0YUg0LzQtdGC0L7QtNC+0LI6IGJlZ2luVXBk +YXRlcyDQuCBlbmRVcGRhdGVzLiDQkiDRgtCw0LrQvtC8INC60L7QtNC1INC80L7Q +ttC90L4g0LTQvtC/0YPRgdGC0LjRgtGMINC90LXRgdC60L7Qu9GM0LrQviDQvtGI +0LjQsdC+0LosINC90LDQv9GA0LjQvNC10YAg0YLQsNC60YPRjjo8YnIvPg0KPGJs +b2NrcXVvdGU+PGNvZGU+PGZvbnQgY29sb3I9ImJsYWNrIj5bIHNlbGYgYmVnaW5V +cGRhdGVzIF07PGJyLz4NCjxici8+DQpbIHNlbGYudGFibGVWaWV3IGRlbGV0ZVJv +d3NBdEluZGV4UGF0aHM6IGRlbGV0ZV9pbmRleF9wYXRoZXNfPGJyLz4NCiZuYnNw +OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw +OyZuYnNwOyZuYnNwOyB3aXRoUm93QW5pbWF0aW9uOiBVSVRhYmxlVmlld1Jvd0Fu +aW1hdGlvbkJvdHRvbSBdOzxici8+DQo8YnIvPg0KPGZvbnQgY29sb3I9IiMwMDgw +MDAiPi8v0LfQtNC10YHRjCDQvtGI0LjQsdC60LAg0LXRgdC70LggY29uZGl0aW9u +XyA9PSB0cnVlLCDQvNGLINC90LUg0LLRi9C30L7QstC10LwgZW5kVXBkYXRlczwv +Zm9udD48YnIvPg0KPGZvbnQgY29sb3I9IiMwMDAwZmYiPmlmPC9mb250PiAoIGNv +bmRpdGlvbl8gKTxici8+DQombmJzcDsgPGZvbnQgY29sb3I9IiMwMDAwZmYiPnJl +dHVybjwvZm9udD47PGJyLz4NCjxici8+DQpbIHNlbGYudGFibGVWaWV3IGluc2Vy +dFJvd3NBdEluZGV4UGF0aHM6IGluc2VydF9pbmRleF9wYXRoZXNfPGJyLz4NCiZu +YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu +YnNwOyZuYnNwOyZuYnNwOyB3aXRoUm93QW5pbWF0aW9uOiBVSVRhYmxlVmlld1Jv +d0FuaW1hdGlvblRvcCBdOzxici8+DQo8YnIvPg0KWyBzZWxmIGVuZFVwZGF0ZXMg +XTs8L2ZvbnQ+PGJyLz4NCjxici8+DQo8Zm9udCBjb2xvcj0iZ3JheSI+KiBUaGlz +IHNvdXJjZSBjb2RlIHdhcyBoaWdobGlnaHRlZCB3aXRoIDxhIGhyZWY9Imh0dHA6 +Ly92aXJ0c2VyLm5ldC9ibG9nL3Bvc3Qvc291cmNlLWNvZGUtaGlnaGxpZ2h0ZXIu +YXNweCI+PGZvbnQgY29sb3I9ImdyYXkiPlNvdXJjZSBDb2RlIEhpZ2hsaWdodGVy +PC9mb250PjwvYT4uPC9mb250PjwvY29kZT48L2Jsb2NrcXVvdGU+PGJyLz4NCtCS +INGC0LDQutC40YUg0YHQu9GD0YfQsNGP0YUsINC60LDQuiDQuCDQstGB0LvRg9GH +0LDQtSDRgNCw0LHQvtGC0Ysg0YEg0YTQsNC50LvQsNC80Lgg0LjQu9C4INC00YDR +g9Cz0LjQvNC4INGA0LXRgdGD0YDRgdCw0LzQuCDQutC+0YLQvtGA0YvQtSDQvdGD +0LbQvdC+INC+0YHQstC+0LHQvtC20LTQsNGC0YwsINC90LAg0L/QvtC80L7RidGM +INC/0YDQuNGF0L7QtNGP0YIg0YLQsNC6INC90LDQt9GL0LLQsNC10LzRi9C1INC+ +0YXRgNCw0L3QvdC40LrQuC1ndWFyZHMsINC60L7RgtC+0YDRi9C1INC70LXQs9C6 +0L4g0YDQtdCw0LvQuNC30YPRjtGC0YHRjyDRgSDQv9C+0LzQvtGJ0YzRjiDQsdC7 +0L7QutC+0LIuINCU0L7QsdCw0LLQuNC8INGA0LDRgdGI0LjRgNC10L3QuNC1INC6 +0LvQsNGB0YHQsCBVSVRhYmxlVmlldyDRgSDQvNC10YLQvtC00L7QvCB3aXRoaW5V +cGRhdGVzOjxici8+DQo8YmxvY2txdW90ZT48Y29kZT48Zm9udCBjb2xvcj0iYmxh +Y2siPkA8Zm9udCBjb2xvcj0iIzAwMDBmZiI+aW50ZXJmYWNlPC9mb250PiBVSVRh +YmxlVmlldyAoQmxvY2tzQWRkaXRpb25zKTxici8+DQo8YnIvPg0KLSg8Zm9udCBj +b2xvcj0iIzAwMDBmZiI+dm9pZDwvZm9udD4pd2l0aGluVXBkYXRlczooIDxmb250 +IGNvbG9yPSIjMDAwMGZmIj52b2lkPC9mb250PiAoXikoIDxmb250IGNvbG9yPSIj +MDAwMGZmIj52b2lkPC9mb250PiApIClibG9ja187PGJyLz4NCjxici8+DQpAZW5k +PGJyLz4NCjxici8+DQpAaW1wbGVtZW50YXRpb24gVUlUYWJsZVZpZXcgKEJsb2Nr +c0FkZGl0aW9ucyk8YnIvPg0KPGJyLz4NCi0oPGZvbnQgY29sb3I9IiMwMDAwZmYi +PnZvaWQ8L2ZvbnQ+KXdpdGhpblVwZGF0ZXM6KCA8Zm9udCBjb2xvcj0iIzAwMDBm +ZiI+dm9pZDwvZm9udD4gKF4pKCA8Zm9udCBjb2xvcj0iIzAwMDBmZiI+dm9pZDwv +Zm9udD4gKSApYmxvY2tfPGJyLz4NCns8YnIvPg0KJm5ic3A7IFsgc2VsZiBiZWdp +blVwZGF0ZXMgXTs8YnIvPg0KPGJyLz4NCiZuYnNwOyBAPGZvbnQgY29sb3I9IiMw +MDAwZmYiPnRyeTwvZm9udD48YnIvPg0KJm5ic3A7IHs8YnIvPg0KJm5ic3A7Jm5i +c3A7Jm5ic3A7YmxvY2tfKCk7PGJyLz4NCiZuYnNwOyB9PGJyLz4NCiZuYnNwOyBA +PGZvbnQgY29sb3I9IiMwMDAwZmYiPmZpbmFsbHk8L2ZvbnQ+PGJyLz4NCiZuYnNw +OyB7PGJyLz4NCiZuYnNwOyZuYnNwOyZuYnNwO1sgc2VsZiBlbmRVcGRhdGVzIF07 +PGJyLz4NCiZuYnNwOyB9PGJyLz4NCn08YnIvPg0KPGJyLz4NCkBlbmQ8L2ZvbnQ+ +PGJyLz4NCjxici8+DQo8Zm9udCBjb2xvcj0iZ3JheSI+KiBUaGlzIHNvdXJjZSBj +b2RlIHdhcyBoaWdobGlnaHRlZCB3aXRoIDxhIGhyZWY9Imh0dHA6Ly92aXJ0c2Vy +Lm5ldC9ibG9nL3Bvc3Qvc291cmNlLWNvZGUtaGlnaGxpZ2h0ZXIuYXNweCI+PGZv +bnQgY29sb3I9ImdyYXkiPlNvdXJjZSBDb2RlIEhpZ2hsaWdodGVyPC9mb250Pjwv +YT4uPC9mb250PjwvY29kZT48L2Jsb2NrcXVvdGU+PGJyLz4NCtC40YHQv9GA0LDQ +stC70Y/QtdC8INC+0YjQuNCx0LrRgyDRgSDQsNC90LjQvNCw0YbQuNGP0LzQuDo8 +YnIvPg0KPGJsb2NrcXVvdGU+PGNvZGU+PGZvbnQgY29sb3I9ImJsYWNrIj5bIHNl +bGYudGFibGVWaWV3IHdpdGhpblVwZGF0ZXM6IF4oIDxmb250IGNvbG9yPSIjMDAw +MGZmIj52b2lkPC9mb250PiApPGJyLz4NCns8YnIvPg0KJm5ic3A7IFsgc2VsZi50 +YWJsZVZpZXcgZGVsZXRlUm93c0F0SW5kZXhQYXRoczogZGVsZXRlX2luZGV4X3Bh +dGhlc188YnIvPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 +Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7d2l0aFJv +d0FuaW1hdGlvbjogVUlUYWJsZVZpZXdSb3dBbmltYXRpb25Cb3R0b20gXTs8YnIv +Pg0KPGJyLz4NCiZuYnNwOyA8Zm9udCBjb2xvcj0iIzAwMDBmZiI+aWY8L2ZvbnQ+ +ICggY29uZGl0aW9uXyApPGJyLz4NCiZuYnNwOyZuYnNwOyZuYnNwOzxmb250IGNv +bG9yPSIjMDAwMGZmIj5yZXR1cm48L2ZvbnQ+Ozxici8+DQo8YnIvPg0KJm5ic3A7 +IFsgc2VsZi50YWJsZVZpZXcgaW5zZXJ0Um93c0F0SW5kZXhQYXRoczogaW5zZXJ0 +X2luZGV4X3BhdGhlc188YnIvPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i +c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i +c3A7d2l0aFJvd0FuaW1hdGlvbjogVUlUYWJsZVZpZXdSb3dBbmltYXRpb25Ub3Ag +XTs8YnIvPg0KfSBdOzwvZm9udD48YnIvPg0KPGJyLz4NCjxmb250IGNvbG9yPSJn +cmF5Ij4qIFRoaXMgc291cmNlIGNvZGUgd2FzIGhpZ2hsaWdodGVkIHdpdGggPGEg +aHJlZj0iaHR0cDovL3ZpcnRzZXIubmV0L2Jsb2cvcG9zdC9zb3VyY2UtY29kZS1o +aWdobGlnaHRlci5hc3B4Ij48Zm9udCBjb2xvcj0iZ3JheSI+U291cmNlIENvZGUg +SGlnaGxpZ2h0ZXI8L2ZvbnQ+PC9hPi48L2ZvbnQ+PC9jb2RlPjwvYmxvY2txdW90 +ZT48YnIvPg0KPGg1PjMuINCY0YHQv9C+0LvRjNC30L7QstCw0L3QuNC1INCx0LvQ +vtC60L7QsiDQstC80LXRgdGC0L4g0LrQu9Cw0YHRgdC+0LIg0L3QsCDQv9GA0LjQ +vNC10YDQtSBzY2hlZHVsZWQg0L7Qv9C10YDQsNGG0LjQuS48L2g1Pjxici8+DQrQ +oNC10YjQsNC10LzQsNGPINC30LDQtNCw0YfQsCDQsiDRjdGC0L7QvCDQv9GA0LjQ +vNC10YDQtSDQvdC1INC40LzQtdC10YIg0L/RgNGP0LzQvtCz0L4g0L7RgtC90L7R +iNC10L3QuNGPINC6INCx0LvQvtC60LDQvCwg0L3QviDQv9C+0LrQsNC30YvQstCw +0LXRgiDQvdCw0YHQutC+0LvRjNC60L4g0LzQvtC20LXRgiDQsdGL0YLRjCDQu9C+ +0LrQsNC90LjRh9C90L4g0YDQtdGI0LXQvdCwINC/0YDQvtCx0LvQtdC80LAg0YEg +0LjRhSDQv9GA0LjQvNC10L3QtdC90LjQtdC8Ljxici8+DQo8YnIvPg0K0KLQtSDQ +utGC0L4g0YLQtdGB0L3QviDRgNCw0LHQvtGC0LDQuyDRgSDQvNC10YLQvtC00LDQ +vNC4OiA8YSBocmVmPSJodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9saWJyYXJ5 +L21hYy9kb2N1bWVudGF0aW9uL0NvY29hL1JlZmVyZW5jZS9Gb3VuZGF0aW9uL0Ns +YXNzZXMvTlNPYmplY3RfQ2xhc3MvUmVmZXJlbmNlL1JlZmVyZW5jZS5odG1sIy8v +YXBwbGVfcmVmL29jYy9pbnN0bS9OU09iamVjdC9wZXJmb3JtU2VsZWN0b3I6d2l0 +aE9iamVjdDphZnRlckRlbGF5OiI+4oCTIFsgTlNPYmplY3QgcGVyZm9ybVNlbGVj +dG9yOndpdGhPYmplY3Q6YWZ0ZXJEZWxheTogXTwvYT4g0LggPGEgaHJlZj0iaHR0 +cDovL2RldmVsb3Blci5hcHBsZS5jb20vbGlicmFyeS9tYWMvZG9jdW1lbnRhdGlv +bi9Db2NvYS9SZWZlcmVuY2UvRm91bmRhdGlvbi9DbGFzc2VzL05TVGltZXJfQ2xh +c3MvUmVmZXJlbmNlL05TVGltZXIuaHRtbCMvL2FwcGxlX3JlZi9vY2MvY2xtL05T +VGltZXIvdGltZXJXaXRoVGltZUludGVydmFsOnRhcmdldDpzZWxlY3Rvcjp1c2Vy +SW5mbzpyZXBlYXRzOiI+KyBbIE5TVGltZXIgdGltZXJXaXRoVGltZUludGVydmFs +OnRhcmdldDpzZWxlY3Rvcjp1c2VySW5mbzpyZXBlYXRzOiBdPC9hPiDQv9C+0LvQ +sNCz0LDRjiDQt9Cw0LzQtdGC0LjQu9C4INGH0YLQviDQtNC70Y8gwqt0YXJnZXTC +uyDQsdGD0LTQtdGCINCy0YvQt9Cy0LDQvSDQvNC10YLQvtC0IMKrcmV0YWluwrsg +0LIg0LzQvtC80LXQvdGCINGB0L7Qt9C00LDQvdC40Y8g0L7RgtC70L7QttC10L3Q +vtCz0L4g0LLRi9C30L7QstCwLCDQuCDCq3JlbGVhc2XCuywg0LXRgdC70Lgg0LfQ +sNC/0LvQsNC90LjRgNC+0LLQsNC90YvQtSDQtNC10LnRgdGC0LLQuNGPINCx0L7Q +u9GM0YjQtSDQvdC1INCx0YPQtNGD0YIg0LLRi9C30YvQstCw0YLRgdGPLiDQmtCw +0Log0L/QvtC60LDQt9GL0LLQsNC10YIg0L/RgNCw0LrRgtC40LrQsCwg0YLQsNC6 +0L7QtSDQv9C+0LLQtdC00LXQvdC40LUg0L3QtSDQvtGH0LXQvdGMINGD0LTQvtCx +0L3Qviwg0YLQsNC6INC60LDQuiDRh9Cw0YHRgtC+INGC0YDQtdCx0YPQtdGCINC9 +0LDQv9C40YHQsNC90LjRjyDQtNC+0L/QvtC70L3QuNGC0LXQu9GM0L3QvtC5INC7 +0L7Qs9C40LrQuCDQv9C+INCy0YvQt9C+0LLRgyA8YSBocmVmPSJodHRwOi8vZGV2 +ZWxvcGVyLmFwcGxlLmNvbS9saWJyYXJ5L21hYy9kb2N1bWVudGF0aW9uL0NvY29h +L1JlZmVyZW5jZS9Gb3VuZGF0aW9uL0NsYXNzZXMvTlNPYmplY3RfQ2xhc3MvUmVm +ZXJlbmNlL1JlZmVyZW5jZS5odG1sIy8vYXBwbGVfcmVmL29jYy9jbG0vTlNPYmpl +Y3QvY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OiI+KyBb +IE5TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdl +dDogXTwvYT4g0LggPGEgaHJlZj0iaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20v +bGlicmFyeS9tYWMvZG9jdW1lbnRhdGlvbi9Db2NvYS9SZWZlcmVuY2UvRm91bmRh +dGlvbi9DbGFzc2VzL05TVGltZXJfQ2xhc3MvUmVmZXJlbmNlL05TVGltZXIuaHRt +bCMvL2FwcGxlX3JlZi9vY2MvaW5zdG0vTlNUaW1lci9pbnZhbGlkYXRlIj4g4oCU +IFsgTlNUaW1lciBpbnZhbGlkYXRlIF08L2E+INC00LvRjyDQvtGC0LzQtdC90Ysg +0LfQsNC/0LvQsNC90LjRgNC+0LLQsNC90YvRhSDQstGL0LfQvtCy0L7Qsiwg0Lgg +0L/QvtGB0LvQtdC00YPRjtGJ0LXQuSDQstC+0LfQvNC+0LbQvdC+0YHRgtC4INC+ +0YHQstC+0LHQvtC20LTQtdC90LjRjyDQvtCx0YrQtdC60YLQsCDCq3RhcmdldMK7 +Ljxici8+DQrQl9C00LXRgdGMINC80Ysg0L/RgNC40YXQvtC00LjQvCDQuiDQuNC0 +0LXQtSDRgtC+0LPQviDRh9GC0L4sINCx0YvQu9C+INCx0Ysg0YPQtNC+0LHQvdC1 +0Lkg0LjQvNC10YLRjCDQstC+0LfQvNC+0LbQvdC+0YHRgtGMINGB0L7Qt9C00LDR +gtGMINC+0YLQu9C+0LbQtdC90YvQuSDQstGL0LfQvtCyLCDQutC+0YLQvtGA0YvQ +uSDQsdGLINC90LUg0LLRi9C30YvQstCw0LsgwqtyZXRhaW7CuyDQuCDRgdCw0LzQ +vtC+0YLQvNC10L3Rj9C70YHRjyDQv9GA0Lgg0YPQtNCw0LvQtdC90LjQuCDCq3Rh +cmdldMK7INC40Lcg0L/QsNC80Y/RgtC4Ljxici8+DQrQndCw0YjQtdC5INGG0LXQ +u9GM0Y4g0LHRg9C00LXRgiDQvdCw0L/QuNGB0LDQvdC40LUg0LzQtdGC0L7QtNCw +INGA0LDQsdC+0YLQsNGO0YnQtdCz0L4g0L7Qv9C40YHQsNC90YvQvCDQstGL0YjQ +tSDRgdC/0L7RgdC+0LHQvtC8INGBINGC0LDQutC40Lwg0LjQvdGC0LXRgNGE0LXQ +udGB0L7QvDo8YnIvPg0KPGJsb2NrcXVvdGU+PGNvZGU+PGZvbnQgY29sb3I9ImJs +YWNrIj5APGZvbnQgY29sb3I9IiMwMDAwZmYiPmludGVyZmFjZTwvZm9udD4gTlNP +YmplY3QgKFNjaGVkdWxlcik8YnIvPg0KPGJyLz4NCi0oPGZvbnQgY29sb3I9IiMw +MDAwZmYiPnZvaWQ8L2ZvbnQ+KXBlcmZvcm1TZWxlY3RvcjooIFNFTCApc2VsZWN0 +b3JfPGJyLz4NCiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu +YnNwOyZuYnNwOyB0aW1lSW50ZXJ2YWw6KCBOU1RpbWVJbnRlcnZhbCApdGltZV9p +bnRlcnZhbF88YnIvPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i +c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHVzZXJJbmZvOiggaWQg +KXVzZXJfaW5mb188YnIvPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 +Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7cmVwZWF0 +czooIEJPT0wgKXJlcGVhdHNfOzxici8+DQo8YnIvPg0KQGVuZDxici8+DQo8L2Zv +bnQ+PGJyLz4NCjxmb250IGNvbG9yPSJncmF5Ij4qIFRoaXMgc291cmNlIGNvZGUg +d2FzIGhpZ2hsaWdodGVkIHdpdGggPGEgaHJlZj0iaHR0cDovL3ZpcnRzZXIubmV0 +L2Jsb2cvcG9zdC9zb3VyY2UtY29kZS1oaWdobGlnaHRlci5hc3B4Ij48Zm9udCBj +b2xvcj0iZ3JheSI+U291cmNlIENvZGUgSGlnaGxpZ2h0ZXI8L2ZvbnQ+PC9hPi48 +L2ZvbnQ+PC9jb2RlPjwvYmxvY2txdW90ZT48YnIvPg0K0JTQu9GPINC90LDRh9Cw +0LvQsCDRgNC10LDQu9C40LfRg9C10Lwg0LrQu9Cw0YHRgSBKRkZTY2hlZHVsZXIg +0YEg0YLQsNC60LjQvCDQuNC90YLQtdGA0YTQtdC50YHQvtC8Ojxici8+DQo8Ymxv +Y2txdW90ZT48Y29kZT48Zm9udCBjb2xvcj0iYmxhY2siPjxmb250IGNvbG9yPSIj +MDA4MDAwIj4vL9GC0LjQvyDQsdC70L7QutCwINC00LvRjyDQvtGC0LzQtdC90Ysg +0LfQsNC/0LvQsNC90LjRgNC+0LLQsNC90L7Qs9C+INC00LXQudGB0YLQstC40Y88 +L2ZvbnQ+PGJyLz4NCnR5cGVkZWYgPGZvbnQgY29sb3I9IiMwMDAwZmYiPnZvaWQ8 +L2ZvbnQ+ICheSkZGQ2FuY2VsU2NoZWR1bGVkQmxvY2spICggPGZvbnQgY29sb3I9 +IiMwMDAwZmYiPnZvaWQ8L2ZvbnQ+ICk7PGJyLz4NCjxmb250IGNvbG9yPSIjMDA4 +MDAwIj4vL9GC0LjQvyDQsdC70L7QutCwINGB0L7QttC10YDQttCw0YnQtdCz0L4g +0LfQsNC/0LvQsNC90LjRgNC+0LLQsNC90L7QtSDQtNC10LnRgdGC0LLQuNC1PC9m +b250Pjxici8+DQp0eXBlZGVmIDxmb250IGNvbG9yPSIjMDAwMGZmIj52b2lkPC9m +b250PiAoXkpGRlNjaGVkdWxlZEJsb2NrKSAoIEpGRkNhbmNlbFNjaGVkdWxlZEJs +b2NrIGNhbmNlbF8gKTs8YnIvPg0KPGJyLz4NCkA8Zm9udCBjb2xvcj0iIzAwMDBm +ZiI+aW50ZXJmYWNlPC9mb250PiBKRkZTY2hlZHVsZXIgOiBOU09iamVjdDxici8+ +DQo8YnIvPg0KPGZvbnQgY29sb3I9IiMwMDgwMDAiPi8v0YHQvtC30LTQsNGC0Ywg +0L3QvtCy0YvQuSAmcXVvdDvQv9C70LDQvdC40YDQvtCy0YnQuNC6JnF1b3Q7PC9m +b250Pjxici8+DQorKGlkKXNjaGVkdWxlcjs8YnIvPg0KPGJyLz4NCjxmb250IGNv +bG9yPSIjMDA4MDAwIj4vL9C/0L7Qu9GD0YfQuNGC0YwgJnF1b3Q70L7QsdGJ0LjQ +uSDQv9C70LDQvdC40YDQvtCy0YnQuNC6JnF1b3Q7PC9mb250Pjxici8+DQorKGlk +KXNoYXJlZFNjaGVkdWxlcjs8YnIvPg0KPGJyLz4NCjxmb250IGNvbG9yPSIjMDA4 +MDAwIj4vL9C00L7QsdCw0LLQuNGC0Ywg0L3QvtCy0L7QtSDQt9Cw0L/Qu9Cw0L3Q +uNGA0L7QstCw0L3QvtC1INC00LXQudGB0YLQstC40LU8L2ZvbnQ+PGJyLz4NCjxm +b250IGNvbG9yPSIjMDA4MDAwIj4vL9GA0LXQt9GD0LvRjNGC0LDRgiAtINCx0LvQ +vtC6INC00LvRjyDQvtGC0LzQtdC90Ysg0LfQsNC/0LvQsNC90LjRgNC+0LLQsNC9 +0L7Qs9C+INC00LXQudGB0YLQstC40Y88L2ZvbnQ+PGJyLz4NCi0oSkZGQ2FuY2Vs +U2NoZWR1bGVkQmxvY2spYWRkQmxvY2s6KCBKRkZTY2hlZHVsZWRCbG9jayApYmxv +Y2tfPGJyLz4NCiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu +YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO2R1cmF0aW9u +OiggTlNUaW1lSW50ZXJ2YWwgKWR1cmF0aW9uXzs8YnIvPg0KPGJyLz4NCjxmb250 +IGNvbG9yPSIjMDA4MDAwIj4vL9C+0YLQvNC10L3QsCDQstGB0LXRhSDQt9Cw0L/Q +u9Cw0L3QuNGA0L7QstCw0L3Ri9GFINC00LXQudGB0YLQstC40Lkg0LTQu9GPINGB +0LrQtdC00YPQu9C10YDQsCwg0LLRi9C30YvQstCw0LXRgtGB0Y8g0YLQsNC60LbQ +tSDQsiBkZWFsbG9jINC60LvQsNGB0YHQsCBKRkZTY2hlZHVsZXI8L2ZvbnQ+PGJy +Lz4NCi0oPGZvbnQgY29sb3I9IiMwMDAwZmYiPnZvaWQ8L2ZvbnQ+KWNhbmNlbEFs +bFNjaGVkdWxlZE9wZXJhdGlvbnM7PGJyLz4NCjxici8+DQpAZW5kPGJyLz4NCjxi +ci8+DQo8L2ZvbnQ+PGJyLz4NCjxmb250IGNvbG9yPSJncmF5Ij4qIFRoaXMgc291 +cmNlIGNvZGUgd2FzIGhpZ2hsaWdodGVkIHdpdGggPGEgaHJlZj0iaHR0cDovL3Zp +cnRzZXIubmV0L2Jsb2cvcG9zdC9zb3VyY2UtY29kZS1oaWdobGlnaHRlci5hc3B4 +Ij48Zm9udCBjb2xvcj0iZ3JheSI+U291cmNlIENvZGUgSGlnaGxpZ2h0ZXI8L2Zv +bnQ+PC9hPi48L2ZvbnQ+PC9jb2RlPjwvYmxvY2txdW90ZT48YnIvPg0K0KDQtdCw +0LvQuNC30LDRhtC40Y8g0LzQtdGC0L7QtNCwIC0oSkZGQ2FuY2VsU2NoZWR1bGVk +QmxvY2spYWRkQmxvY2s6KCBKRkZTY2hlZHVsZWRCbG9jayApYmxvY2tfIGR1cmF0 +aW9uOiggTlNUaW1lSW50ZXJ2YWwgKWR1cmF0aW9uXzxici8+DQo8YmxvY2txdW90 +ZT48Y29kZT48Zm9udCBjb2xvcj0iYmxhY2siPi0oSkZGQ2FuY2VsU2NoZWR1bGVk +QmxvY2spYWRkQmxvY2s6KCBKRkZTY2hlZHVsZWRCbG9jayApYmxvY2tfPGJyLz4N +CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw +OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO2R1cmF0aW9uOiggTlNUaW1l +SW50ZXJ2YWwgKWR1cmF0aW9uXzxici8+DQp7PGJyLz4NCiZuYnNwOyA8Zm9udCBj +b2xvcj0iIzAwODAwMCI+Ly/Qv9GA0L7RgdGC0L4g0YXRgNCw0L3Rj9GJ0LjQuSDQ +sdC70L7QuiDQutC70LDRgdGBPC9mb250Pjxici8+DQombmJzcDsgSkZGU2ltcGxl +QmxvY2tIb2xkZXIqIGNhbmNlbF9ibG9ja19ob2xkZXJfID0gWyBKRkZTaW1wbGVC +bG9ja0hvbGRlciBzaW1wbGVCbG9ja0hvbGRlciBdOzxici8+DQo8YnIvPg0KJm5i +c3A7IGJsb2NrXyA9IFsgWyBibG9ja18gY29weSBdIGF1dG9yZWxlYXNlIF07PGJy +Lz4NCiZuYnNwOyA8Zm9udCBjb2xvcj0iIzAwODAwMCI+Ly/Qt9Cw0LLQvtGA0LDR +h9C40LDQtdC8INC+0LHRitC10LrRgiBibG9ja18g0LIg0LHQu9C+0Log0LHQtdC3 +INCw0YDQs9GD0LzQtdC90YLQvtCyPC9mb250Pjxici8+DQombmJzcDsgPGZvbnQg +Y29sb3I9IiMwMDgwMDAiPi8v0YfRgtC+INCx0Ysg0LzQvtC20L3QviDQsdGL0LvQ +viDQstGL0LfQstCw0YLRjCDQtdCz0L4g0LzQtdGC0L7QtNC+0LwgcGVyZm9ybUJs +b2NrPC9mb250Pjxici8+DQombmJzcDsgPGZvbnQgY29sb3I9IiMwMDAwZmYiPnZv +aWQ8L2ZvbnQ+IChec2NoZWR1bGVfYmxvY2tfKSAoIDxmb250IGNvbG9yPSIjMDAw +MGZmIj52b2lkPC9mb250PiApID0gWyBbIF48YnIvPg0KJm5ic3A7IHs8YnIvPg0K +Jm5ic3A7Jm5ic3A7Jm5ic3A7YmxvY2tfKCBjYW5jZWxfYmxvY2tfaG9sZGVyXy5z +aW1wbGVCbG9jayApOzxici8+DQombmJzcDsgfSBjb3B5IF0gYXV0b3JlbGVhc2Ug +XTs8YnIvPg0KPGJyLz4NCiZuYnNwOyA8Zm9udCBjb2xvcj0iIzAwODAwMCI+Ly/Q +t9Cw0L/Rg9GB0LrQsNC10Lwg0YLQsNC50LzQtdGAINGBINCx0LvQvtC60L7QvCDQ +stC80LXRgdGC0L4gJnF1b3Q7dGFyZ2V0JnF1b3Q7PC9mb250Pjxici8+DQombmJz +cDsgX19ibG9jayBOU1RpbWVyKiB0aW1lcl8gPSBbIE5TVGltZXIgc2NoZWR1bGVk +VGltZXJXaXRoVGltZUludGVydmFsOiBkdXJhdGlvbl88YnIvPg0KJm5ic3A7Jm5i +c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i +c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i +c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i +c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHRhcmdldDogc2NoZWR1 +bGVfYmxvY2tfPGJyLz4NCiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu +YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu +YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu +YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu +YnNwOyBzZWxlY3RvcjogQHNlbGVjdG9yKCBwZXJmb3JtQmxvY2sgKTxici8+DQom +bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm +bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm +bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm +bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgdXNlckluZm86IG5p +bDxici8+DQombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz +cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz +cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz +cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz +cDtyZXBlYXRzOiBZRVMgXTs8YnIvPg0KPGJyLz4NCiZuYnNwOyBfX2Jsb2NrIE5T +T2JqZWN0KiBjYW5jZWxfcHRyXyA9IG5pbDs8YnIvPg0KJm5ic3A7IF9fYmxvY2sg +SkZGU2NoZWR1bGVyKiBzY2hlZHVsZXJfID0gc2VsZjs8YnIvPg0KPGJyLz4NCiZu +YnNwOyA8Zm9udCBjb2xvcj0iIzAwODAwMCI+Ly/RgdC+0LfQtNCw0Lwg0LHQu9C+ +0Log0LTQu9GPINC+0YLQvNC10L3RiyDQt9Cw0L/Qu9Cw0L3QuNGA0L7QstCw0L3Q +vtCz0L4g0LLRi9C30L7QstCwPC9mb250Pjxici8+DQombmJzcDsgY2FuY2VsX2Js +b2NrX2hvbGRlcl8uc2ltcGxlQmxvY2sgPSBePGJyLz4NCiZuYnNwOyB7PGJyLz4N +CiZuYnNwOyZuYnNwOyZuYnNwOzxmb250IGNvbG9yPSIjMDAwMGZmIj5pZjwvZm9u +dD4gKCBzY2hlZHVsZXJfICk8YnIvPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7ezxici8+ +DQombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgWyB0aW1lcl8gaW52YWxpZGF0ZSBd +Ozxici8+DQombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgPGZvbnQgY29sb3I9IiMw +MDgwMDAiPi8v0YPQtNCw0LvRj9C10Lwg0LLRi9C/0L7Qu9C90LXQvdC90YvQuSDQ +sdC70L7QujwvZm9udD48YnIvPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IFsg +c2NoZWR1bGVyXy5jYW5jZWxCbG9ja3MgcmVtb3ZlT2JqZWN0OiBjYW5jZWxfcHRy +XyBdOzxici8+DQombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgc2NoZWR1bGVyXyA9 +IG5pbDs8YnIvPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7fTxici8+DQombmJzcDsgfTs8 +YnIvPg0KPGJyLz4NCiZuYnNwOyBjYW5jZWxfcHRyXyA9IChpZCljYW5jZWxfYmxv +Y2tfaG9sZGVyXy5zaW1wbGVCbG9jazs8YnIvPg0KJm5ic3A7IDxmb250IGNvbG9y +PSIjMDA4MDAwIj4vL9GB0L7RhdGA0LDQvdGP0LXQvCDQsdC70L7QuiDQvtGC0LzQ +tdC90Ysg0LTQu9GPINC30LDQv9C70LDQvdC40YDQvtCy0LDQvdC+0LPQviDQstGL +0LfQvtCy0LAg0LIgZGVhbGxvYzwvZm9udD48YnIvPg0KJm5ic3A7IFsgc2VsZi5j +YW5jZWxCbG9ja3MgYWRkT2JqZWN0OiBjYW5jZWxfcHRyXyBdOzxici8+DQo8YnIv +Pg0KJm5ic3A7IDxmb250IGNvbG9yPSIjMDAwMGZmIj5yZXR1cm48L2ZvbnQ+IGNh +bmNlbF9ibG9ja19ob2xkZXJfLnNpbXBsZUJsb2NrOzxici8+DQp9PC9mb250Pjxi +ci8+DQo8YnIvPg0KPGZvbnQgY29sb3I9ImdyYXkiPiogVGhpcyBzb3VyY2UgY29k +ZSB3YXMgaGlnaGxpZ2h0ZWQgd2l0aCA8YSBocmVmPSJodHRwOi8vdmlydHNlci5u +ZXQvYmxvZy9wb3N0L3NvdXJjZS1jb2RlLWhpZ2hsaWdodGVyLmFzcHgiPjxmb250 +IGNvbG9yPSJncmF5Ij5Tb3VyY2UgQ29kZSBIaWdobGlnaHRlcjwvZm9udD48L2E+ +LjwvZm9udD48L2NvZGU+PC9ibG9ja3F1b3RlPjxici8+DQrQktC10YHRjCDQutC+ +0LQg0YDQtdC70LjQt9Cw0YbQuNC4INC60LvQsNGB0YHQsCA8YSBocmVmPSJodHRw +czovL2dpdGh1Yi5jb20vRW1iZWRkZWRTb3VyY2VzL0pGRkxpYnJhcnkvdHJlZS9t +YXN0ZXIvbGlicy9KRkZTY2hlZHVsZXIvSkZGU2NoZWR1bGVyLm0iPkpGRlNjaGVk +dWxlcjwvYT4uPGJyLz4NCjxici8+DQrQlNCw0LvRjNGI0LUg0YfRgtC+INCx0Ysg +0LLRgdC1INGA0LDQsdC+0YLQsNC70L4sINC90LDQvCDQv9C+0L3QsNC00L7QsdC4 +0YLRgdGPINC90LXRgdC60L7Qu9GM0LrQviDQtNC+0L/QvtC70L3QuNGC0LXQu9GM +0L3Ri9GFINC80LXRgtC+0LTQvtCyOjxici8+DQoxLiDigJQgWyBOU09iamVjdCBw +ZXJmb3JtQmxvY2sgXSDigJQg0LLRi9C/0L7Qu9C90LjRgtGMINCx0LvQvtC6PGJy +Lz4NCjxibG9ja3F1b3RlPjxjb2RlPjxmb250IGNvbG9yPSJibGFjayI+QGltcGxl +bWVudGF0aW9uIE5TT2JqZWN0IChQZXJmb3JtQmxvY2spPGJyLz4NCjxici8+DQo8 +Zm9udCBjb2xvcj0iIzAwODAwMCI+Ly/QstGL0LfQstCw0YLRjCDRgdC10LHRjyDQ +utCw0Log0LHQu9C+0Lo8L2ZvbnQ+PGJyLz4NCi0oPGZvbnQgY29sb3I9IiMwMDAw +ZmYiPnZvaWQ8L2ZvbnQ+KXBlcmZvcm1CbG9jazxici8+DQp7PGJyLz4NCiZuYnNw +OyA8Zm9udCBjb2xvcj0iIzAwMDBmZiI+dm9pZDwvZm9udD4qIHNlbGZfID0gc2Vs +Zjs8YnIvPg0KJm5ic3A7IEpGRlNpbXBsZUJsb2NrIGJsb2NrXyA9IChKRkZTaW1w +bGVCbG9jaylzZWxmXzs8YnIvPg0KJm5ic3A7IGJsb2NrXygpOzxici8+DQp9PGJy +Lz4NCjxici8+DQpAZW5kPGJyLz4NCjxici8+DQo8Zm9udCBjb2xvcj0iIzAwODAw +MCI+Ly/Qv9GA0LjQvNC10YAg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y88L2Zv +bnQ+PGJyLz4NClsgXiB7PGJyLz4NCiZuYnNwOyBOU0xvZyggPGZvbnQgY29sb3I9 +IiNBMzE1MTUiPkAmcXVvdDt0ZXN0JnF1b3Q7PC9mb250PiApOzxici8+DQp9IHBl +cmZvcm1CbG9jayBdOzwvZm9udD48YnIvPg0KPGJyLz4NCjxmb250IGNvbG9yPSJn +cmF5Ij4qIFRoaXMgc291cmNlIGNvZGUgd2FzIGhpZ2hsaWdodGVkIHdpdGggPGEg +aHJlZj0iaHR0cDovL3ZpcnRzZXIubmV0L2Jsb2cvcG9zdC9zb3VyY2UtY29kZS1o +aWdobGlnaHRlci5hc3B4Ij48Zm9udCBjb2xvcj0iZ3JheSI+U291cmNlIENvZGUg +SGlnaGxpZ2h0ZXI8L2ZvbnQ+PC9hPi48L2ZvbnQ+PC9jb2RlPjwvYmxvY2txdW90 +ZT48YnIvPg0KMi4gPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL0VtYmVkZGVk +U291cmNlcy9KRkZMaWJyYXJ5L3RyZWUvbWFzdGVyL2xpYnMvSkZGVXRpbHMvTlNT +dHJpbmcvTlNTdHJpbmcrU2VhcmNoLm0iPiDigJQgWyBOU1N0cmluZyBudW1iZXJP +ZkNoYXJhY3RlckZyb21TdHJpbmc6IF08L2E+INC60L7Qu9C40YfQtdGB0YLQstC+ +INCy0YXQvtC20LTQtdC90LjQuSDRgdC40LzQstC+0LvQsCDQt9Cw0LTQsNC90L7Q +s9C+INCyINGB0YLRgNC+0LrQtS4g0J/RgNC40LzQtdGAOjxici8+DQo8YmxvY2tx +dW90ZT48Y29kZT48Zm9udCBjb2xvcj0iYmxhY2siPk5TTG9nKCA8Zm9udCBjb2xv +cj0iI0EzMTUxNSI+QCZxdW90O251bSBvZiBcJnF1b3Q7OlwmcXVvdDsgLSAlZCZx +dW90OzwvZm9udD4sIFsgPGZvbnQgY29sb3I9IiNBMzE1MTUiPkAmcXVvdDs6dGVz +dDomcXVvdDs8L2ZvbnQ+IG51bWJlck9mQ2hhcmFjdGVyRnJvbVN0cmluZzogPGZv +bnQgY29sb3I9IiNBMzE1MTUiPkAmcXVvdDs6JnF1b3Q7PC9mb250PiBdICk7PC9m +b250Pjxici8+DQo8YnIvPg0KPGZvbnQgY29sb3I9ImdyYXkiPiogVGhpcyBzb3Vy +Y2UgY29kZSB3YXMgaGlnaGxpZ2h0ZWQgd2l0aCA8YSBocmVmPSJodHRwOi8vdmly +dHNlci5uZXQvYmxvZy9wb3N0L3NvdXJjZS1jb2RlLWhpZ2hsaWdodGVyLmFzcHgi +Pjxmb250IGNvbG9yPSJncmF5Ij5Tb3VyY2UgQ29kZSBIaWdobGlnaHRlcjwvZm9u +dD48L2E+LjwvZm9udD48L2NvZGU+PC9ibG9ja3F1b3RlPjxici8+DQrQv9C10YfQ +sNGC0LDQtdGCIOKAlCBudW0gb2YgJnF1b3Q7OiZxdW90OyDigJQgMjxici8+DQo8 +YnIvPg0KMy4gPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL0VtYmVkZGVkU291 +cmNlcy9KRkZMaWJyYXJ5L3RyZWUvbWFzdGVyL2xpYnMvSkZGVXRpbHMvTlNPYmpl +Y3QvTlNPYmplY3QrT25EZWFsbG9jQmxvY2subSI+IOKAlCBbIE5TT2JqZWN0IGFk +ZE9uRGVhbGxvY0Jsb2NrOiBdIDwvYT4g4oCUINC00L7QsdCw0LLQuNGC0Ywg0LHQ +u9C+0LosINC60L7RgtC+0YDRi9C5INC00L7Qu9C20LXQvSDQstGL0L/QvtC70L3Q +uNGC0YHRjyDQv9GA0Lgg0YPQtNCw0LvQtdC90LjQuCDQstC70LDQtNC10LvRjNGG +0LAg0LjQtyDQv9Cw0LzRj9GC0LggKNCyINC80LXRgtC+0LTQtSBkZWFsbG9jKS4g +0J/RgNC40LzQtdGAOjxici8+DQo8YmxvY2txdW90ZT48Y29kZT48Zm9udCBjb2xv +cj0iYmxhY2siPk5TT2JqZWN0KiBvYmplY3RfID0gWyBbIE5TT2JqZWN0IGFsbG9j +IF0gaW5pdCBdOzxici8+DQpbIG9iamVjdF8gYWRkT25EZWFsbG9jQmxvY2s6IF48 +YnIvPg0Kezxici8+DQombmJzcDsgTlNMb2coIDxmb250IGNvbG9yPSIjQTMxNTE1 +Ij5AJnF1b3Q7dGVzdCZxdW90OzwvZm9udD4gKTs8YnIvPg0KfSBdOzxici8+DQo8 +Zm9udCBjb2xvcj0iIzAwODAwMCI+Ly/Qt9C00LXRjCDQv9C10YfQsNGC0LDQtdGC +0YHRjyAtIHRlc3Q8L2ZvbnQ+PGJyLz4NClsgb2JqZWN0XyByZWxlYXNlIF07PC9m +b250Pjxici8+DQo8YnIvPg0KPGZvbnQgY29sb3I9ImdyYXkiPiogVGhpcyBzb3Vy +Y2UgY29kZSB3YXMgaGlnaGxpZ2h0ZWQgd2l0aCA8YSBocmVmPSJodHRwOi8vdmly +dHNlci5uZXQvYmxvZy9wb3N0L3NvdXJjZS1jb2RlLWhpZ2hsaWdodGVyLmFzcHgi +Pjxmb250IGNvbG9yPSJncmF5Ij5Tb3VyY2UgQ29kZSBIaWdobGlnaHRlcjwvZm9u +dD48L2E+LjwvZm9udD48L2NvZGU+PC9ibG9ja3F1b3RlPjxici8+DQrQotC10L/Q +tdGA0Ywg0YMg0L3QsNGBINC10YHRgtGMINCy0YHQtSDQvdC10L7QsdGF0L7QtNC4 +0LzQvtC1INC00LvRjyDRgNC10LDQu9C40LfQsNGG0LjQuCDQv9C10YDQstC40YfQ +vdC+0Lkg0LfQsNC00LDRh9C4INCz0LvQsNCy0Ysg4oCUINC90LDQv9C40YHQsNC9 +0LjRjyDQvNC10YLQvtC00LAg0L/QvtGA0L7QttC00LDRjtGJ0LXQs9C+INC+0YLQ +u9C+0LbQtdC90YvQuSDQstGL0LfQvtCyINC/0L7RgdC70LUg0LfQsNC00LDQvdC+ +0LPQviDQstGA0LXQvNC10L3QuCwg0LrQvtGC0L7RgNGL0Lkg0L3QtSDQstGL0LfR +i9Cy0LDQtdGCIMKrcmV0YWluwrsg0LTQu9GPIMKrdGFyZ2V0wrsuINCg0LXQsNC7 +0LjQt9Cw0YbQuNGPOjxici8+DQo8YmxvY2txdW90ZT48Y29kZT48Zm9udCBjb2xv +cj0iYmxhY2siPi0oPGZvbnQgY29sb3I9IiMwMDAwZmYiPnZvaWQ8L2ZvbnQ+KXBl +cmZvcm1TZWxlY3RvcjooIFNFTCApc2VsZWN0b3JfPGJyLz4NCiZuYnNwOyZuYnNw +OyB0aW1lSW50ZXJ2YWw6KCBOU1RpbWVJbnRlcnZhbCApdGltZV9pbnRlcnZhbF88 +YnIvPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7IHVzZXJJbmZvOiggaWQgKXVzZXJfaW5m +b18gPGJyLz4NCiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO3JlcGVhdHM6KCBCT09M +IClyZXBlYXRzXzxici8+DQp7PGJyLz4NCiZuYnNwOzxmb250IGNvbG9yPSIjMDA4 +MDAwIj4vL9Cy0LDQu9C40LTQsNGG0LjRjyDQsNGA0LPRg9C80LXQvdGC0L7Qsjwv +Zm9udD48YnIvPg0KJm5ic3A7TlNTdHJpbmcqIHNlbGVjdG9yX3N0cmluZ18gPSBO +U1N0cmluZ0Zyb21TZWxlY3Rvciggc2VsZWN0b3JfICk7PGJyLz4NCiZuYnNwO05T +VUludGVnZXIgbnVtX29mX2FyZ3NfID0gWyBzZWxlY3Rvcl9zdHJpbmdfIG51bWJl +ck9mQ2hhcmFjdGVyRnJvbVN0cmluZzogPGZvbnQgY29sb3I9IiNBMzE1MTUiPkAm +cXVvdDs6JnF1b3Q7PC9mb250PiBdOzxici8+DQombmJzcDtOU1N0cmluZyogYXNz +ZXJ0X3dhcm5pbmdfID0gWyBOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OiA8Zm9u +dCBjb2xvcj0iI0EzMTUxNSI+QCZxdW90O3NlbGVjdG9yIFwmcXVvdDslQFwmcXVv +dDsgc2hvdWxkIGhhcyAwIG9yIDEgcGFyYW1ldGVycyZxdW90OzwvZm9udD4sIHNl +bGVjdG9yX3N0cmluZ18gXTs8YnIvPg0KJm5ic3A7TlNBc3NlcnQoIG51bV9vZl9h +cmdzXyA9PSAwIHx8IG51bV9vZl9hcmdzXyA9PSAxLCBhc3NlcnRfd2FybmluZ18g +KTs8YnIvPg0KPGJyLz4NCiZuYnNwOzxmb250IGNvbG9yPSIjMDA4MDAwIj4vL9GH +0YLQviDQsdGLINC40LfQsdC10LbQsNGC0Ywg0YbQuNC60LvQuNGH0LXRgdC60L7Q +uSDRgdGB0YvQu9C60LggLSDQuNGB0L7Qu9GM0LfRg9C10Lwg0LIg0LHQu9C+0LrQ +tSBfX2Jsb2NrIHNlbGZfINCy0LzQtdGB0YLQviBzZWxmPC9mb250Pjxici8+DQom +bmJzcDtfX2Jsb2NrIGlkIHNlbGZfID0gc2VsZjs8YnIvPg0KPGJyLz4NCiZuYnNw +Ozxmb250IGNvbG9yPSIjMDA4MDAwIj4vL9GB0L7Qt9C00LDQtdC8IHNjaGVkdWxl +ZCDQsdC70L7Quiwg0LrQvtGC0L7RgNGL0Lkg0LLRi9C30YvQstCw0LXRgiDRgdC1 +0LvQtdC60YLQvtGAPC9mb250Pjxici8+DQombmJzcDtKRkZTY2hlZHVsZWRCbG9j +ayBibG9ja18gPSBeKCBKRkZDYW5jZWxTY2hlZHVsZWRCbG9jayBjYW5jZWxfICk8 +YnIvPg0KJm5ic3A7ezxici8+DQombmJzcDsgPGZvbnQgY29sb3I9IiMwMDgwMDAi +Pi8v0L7RgtC80LXQvdGP0LXQvCDQtNCw0LvRjNC90LXQudGI0LXQtSDQstGL0L/Q +vtC70L3QtdC90LjQtSDQsdC70L7QutCwINC10YHQu9C4INC/0L7QstGC0L7RgNGL +INC90LUg0L3Rg9C20L3RizwvZm9udD48YnIvPg0KJm5ic3A7IDxmb250IGNvbG9y +PSIjMDAwMGZmIj5pZjwvZm9udD4gKCAhcmVwZWF0c18gKTxici8+DQombmJzcDsg +ezxici8+DQombmJzcDsmbmJzcDsgWyBzZWxmXyByZW1vdmVPbkRlYWxsb2NCbG9j +azogY2FuY2VsXyBdOzxici8+DQombmJzcDsmbmJzcDsgY2FuY2VsXygpOzxici8+ +DQombmJzcDsgfTxici8+DQo8YnIvPg0KJm5ic3A7IDxmb250IGNvbG9yPSIjMDA4 +MDAwIj4vL9Cy0YvQt9GL0LLQsNC10Lwg0YHQtdC70LXQutGC0L7RgDwvZm9udD48 +YnIvPg0KJm5ic3A7IG51bV9vZl9hcmdzXyA9PSAxPGJyLz4NCiZuYnNwOyZuYnNw +OyA/IG9iamNfbXNnU2VuZCggc2VsZl8sIHNlbGVjdG9yXywgdXNlcl9pbmZvXyAp +PGJyLz4NCiZuYnNwOyZuYnNwOyA6IG9iamNfbXNnU2VuZCggc2VsZl8sIHNlbGVj +dG9yXyApOzxici8+DQombmJzcDt9Ozxici8+DQo8YnIvPg0KJm5ic3A7SkZGU2No +ZWR1bGVyKiBzY2hlZHVsZXJfID0gWyBKRkZTY2hlZHVsZXIgc2hhcmVkU2NoZWR1 +bGVyIF07PGJyLz4NCjxici8+DQombmJzcDs8Zm9udCBjb2xvcj0iIzAwODAwMCI+ +Ly/Qv9C70LDQvdC40YDRg9C10Lwg0LLRi9C30L7QstGLINCx0LvQvtC60LAg0YEg +0LfQsNC00LDQvdC90YvQvCDQuNC90YLQtdGA0LLQsNC70L7QvDwvZm9udD48YnIv +Pg0KJm5ic3A7SkZGQ2FuY2VsU2NoZWR1bGVkQmxvY2sgY2FuY2VsXyA9IFsgc2No +ZWR1bGVyXyBhZGRCbG9jazogYmxvY2tfPGJyLz4NCiZuYnNwOyZuYnNwOyZuYnNw +OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw +OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw +OyBkdXJhdGlvbjogdGltZV9pbnRlcnZhbF8gXTs8YnIvPg0KJm5ic3A7PGZvbnQg +Y29sb3I9IiMwMDgwMDAiPi8v0L7RgtC80LXQvdGP0LXQvCDQstGL0L/QvtC70L3Q +tdC90LjQtSBzY2hlZHVsZWQg0LHQu9C+0LrQsCDQv9GA0Lgg0YPQtNCw0LvQvdC4 +0Lgg0LjQtyDQv9Cw0LzRj9GC0Lgg0L7QsdGK0LXQutGC0LAgc2VsZjwvZm9udD48 +YnIvPg0KJm5ic3A7WyBzZWxmIGFkZE9uRGVhbGxvY0Jsb2NrOiBjYW5jZWxfIF07 +PGJyLz4NCn08L2ZvbnQ+PGJyLz4NCjxici8+DQo8Zm9udCBjb2xvcj0iZ3JheSI+ +KiBUaGlzIHNvdXJjZSBjb2RlIHdhcyBoaWdobGlnaHRlZCB3aXRoIDxhIGhyZWY9 +Imh0dHA6Ly92aXJ0c2VyLm5ldC9ibG9nL3Bvc3Qvc291cmNlLWNvZGUtaGlnaGxp +Z2h0ZXIuYXNweCI+PGZvbnQgY29sb3I9ImdyYXkiPlNvdXJjZSBDb2RlIEhpZ2hs +aWdodGVyPC9mb250PjwvYT4uPC9mb250PjwvY29kZT48L2Jsb2NrcXVvdGU+PGJy +Lz4NCtCYINC60L7QvdC10YfQvdC+INC20LUg0L/RgNC40LzQtdGAINC40YHQv9C+ +0LvRjNC30L7QstCw0L3QuNGPINGN0YLQvtCz0L4g0LzQtdGC0L7QtNCwOjxici8+ +DQo8YmxvY2txdW90ZT48Y29kZT48Zm9udCBjb2xvcj0iYmxhY2siPlNvbWVDbGFz +cyogb2JqZWN0XyA9IFsgWyBTb21lQ2xhc3MgYWxsb2MgXSBpbml0IF07PGJyLz4N +Cjxici8+DQo8Zm9udCBjb2xvcj0iIzAwODAwMCI+Ly/RgdC+0LfQtNCw0YLRjCDQ +vtGC0LvQvtC20LXQvdGL0Lkg0LLRi9C30L7QsiDQvNC10YLQvtC00LAgcHJpbnQ8 +L2ZvbnQ+PGJyLz4NClsgb2JqZWN0XyBwZXJmb3JtU2VsZWN0b3I6IEBzZWxlY3Rv +ciggcHJpbnQgKTxici8+DQombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm +bmJzcDsgdGltZUludGVydmFsOiAxLjxici8+DQombmJzcDsmbmJzcDsmbmJzcDsm +bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgdXNlckluZm86IG5pbDxici8+ +DQombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz +cDsmbmJzcDtyZXBlYXRzOiBOTyBdOzxici8+DQo8YnIvPg0KPGZvbnQgY29sb3I9 +IiMwMDgwMDAiPi8v0L/QvtGB0LvQtSByZWxlYXNlINC80LXRgtC+0LQgcHJpbnQg +0L3QtSDQstGL0LfQvtCy0LXRgtGB0Y8g0L3QuNC60L7Qs9C00LAsPC9mb250Pjxi +ci8+DQo8Zm9udCBjb2xvcj0iIzAwODAwMCI+Ly/RgtCw0Log0LrQsNC6INGC0LDQ +udC80LXRgCDQvtGC0LzQtdC90Y/QtdGC0YHRjyDQv9GA0Lgg0YPQtNCw0LvQtdC9 +0LjQuCBvYmplY3RfINC40Lcg0L/QsNC80Y/RgtC4PC9mb250Pjxici8+DQpbIG9i +amVjdF8gcmVsZWFzZSBdOzxici8+DQo8L2ZvbnQ+PGJyLz4NCjxmb250IGNvbG9y +PSJncmF5Ij4qIFRoaXMgc291cmNlIGNvZGUgd2FzIGhpZ2hsaWdodGVkIHdpdGgg +PGEgaHJlZj0iaHR0cDovL3ZpcnRzZXIubmV0L2Jsb2cvcG9zdC9zb3VyY2UtY29k +ZS1oaWdobGlnaHRlci5hc3B4Ij48Zm9udCBjb2xvcj0iZ3JheSI+U291cmNlIENv +ZGUgSGlnaGxpZ2h0ZXI8L2ZvbnQ+PC9hPi48L2ZvbnQ+PC9jb2RlPjwvYmxvY2tx +dW90ZT48YnIvPg0K0JjRgtC+0LMuINCf0L7QtNC+0LHQvdGL0Lkg0LzQtdGC0L7Q +tCDQsiDQv9GA0L7QtdC60YLQtSDQutC+0YLQvtGA0YvQuSDRjyDQv9C40YjRgyDR +gdGD0YnQtdGB0YLQstC+0LLQsNC7INC4INC00L4g0L/QvtGP0LLQu9C10L3QuNGP +INCx0LvQvtC60L7Qsiwg0L3QviDQtdCz0L4g0LjQvNC/0LvQtdC80LXQvdGC0LDR +htC40Y8g0YHQvtC00LXRgNC20LDQu9CwINGA0L7QstC90L4g0LIgMi41LdC+0Lkg +0YDQsNC30LAg0LHQvtC70YzRiNC1INGB0YLRgNC+0Log0LrQvtC00LAg0Lgg0LjR +gdC/0YDQsNCy0LvRj9C70LjRgdGMINC90LUg0L7QtNC40L0g0YDQsNC3LiDQoNC1 +0LDQu9C40LfQsNGG0LjRjyDQttC1INGBINCx0LvQvtC60LDQvNC4INC00LDQu9Cw +0YHRjCDQvNC90LUg0YEg0L/QtdGA0LLQvtCz0L4g0YDQsNC30LAg0Lgg0LTQviDR +gdC40YUg0L/QvtGAINC+0YjQuNCx0L7QuiDQvdC1INC90LDRhdC+0LTQuNC70Lgu +INCd0LDQtNC10Y7RgdGMINC/0YDQuNCy0LXQtNC10L3Ri9C1INC/0YDQuNC80LXR +gNGLINCx0YvQu9C4INC00LvRjyDQktCw0YEg0LjQvdGC0LXRgNC10YHQvdGLLjxi +ci8+DQo8YnIvPg0K0J/QvtC60LAg0LLRgdC1LCDQvtGB0YLQsNC70YzQvdGL0LUg +0LPQu9Cw0LLRiyDQsiDRgdC70LXQtNGD0Y7RidC10Lwg0YLQvtC/0LjQutC1LgoK +CQoKCQoKCQo8L2Rpdj4KCgoKCgkJCQ0KPHVsIGNsYXNzPSJ0YWdzIiB0aXRsZT0i +0KLQtdCz0Lgg0Log0LfQsNC/0LjRgdC4Ij4NCgk8bGkgPjxhIGhyZWY9Imh0dHA6 +Ly9oYWJyYWhhYnIucnUvdGFnL2lvcy8iIHJlbD0idGFnIj5pb3M8L2E+PC9saT48 +bGkgPiwgPGEgaHJlZj0iaHR0cDovL2hhYnJhaGFici5ydS90YWcvYmxvY2tzLyIg +cmVsPSJ0YWciPmJsb2NrczwvYT48L2xpPjxsaSA+LCA8YSBocmVmPSJodHRwOi8v +aGFicmFoYWJyLnJ1L3RhZy9pcGhvbmUvIiByZWw9InRhZyI+aXBob25lPC9hPjwv +bGk+PGxpID4sIDxhIGhyZWY9Imh0dHA6Ly9oYWJyYWhhYnIucnUvdGFnL2lwYWQv +IiByZWw9InRhZyI+aXBhZDwvYT48L2xpPjxsaSA+LCA8YSBocmVmPSJodHRwOi8v +aGFicmFoYWJyLnJ1L3RhZy9jbG9zdXJlLyIgcmVsPSJ0YWciPmNsb3N1cmU8L2E+ +PC9saT48bGkgY2xhc3M9ImZhdm91cml0ZXNfZWRpdF90YWdzIj48YSBocmVmPSIj +IiBvbmNsaWNrPSJ0ZW1wLmZhdm91cml0ZXNfYWRkLmNoYW5nZV90YWdzKHRoaXMp +OyByZXR1cm4gZmFsc2U7Ij7QmNC30LzQtdC90LjRgtGMINGB0LLQvtC4INC80LXR +gtC60Lg8L2E+PC9saT4NCjwvdWw+DQoKCQkJDQo8ZGl2IGNsYXNzPSJlbnRyeS1p +bmZvIHZvdGVfaG9sZGVyIiBpZD0iaW5mb3BhbmVsMTIwODY5Ij4NCg0KCQk8IS0t +ICDQl9Cw0LrRgNGD0LPQu9GR0L3QvdGL0LUg0YPQs9C+0LvQutC4IC0tPg0KDQoJ +CTxkaXYgY2xhc3M9ImNvcm5lciB0bCI+PC9kaXY+PGRpdiBjbGFzcz0iY29ybmVy +IHRyIj48L2Rpdj4NCg0KCQk8ZGl2IGNsYXNzPSJlbnRyeS1pbmZvLXdyYXAiPg0K +CQkJDQoJCQkNCgkJCQk8ZGl2IGNsYXNzPSJ2b3RpbmcgcG9zaXRpdmUgIG1pbmUg +ZXhwaXJlZCI+DQoJCQkJCTxkaXYgY2xhc3M9ImNhbi12b3RlIj48YSB0aXRsZT0i +0J3RgNCw0LLQuNGC0YHRjyIgaHJlZj0iIyIgY2xhc3M9InZvdGVfcGx1cyIgb25j +bGljaz0icmV0dXJuIFZvdGVyLnZvdGUoZXZlbnQsIHRoaXMsICdwb3N0JywgJ3Bs +dXMnKTsiPjwvYT48L2Rpdj4NCgkJCQkJPGRpdiBjbGFzcz0iY2Fubm90LXZvdGUi +PjxzcGFuIHRpdGxlPSLQndGA0LDQstC40YLRgdGPIiBjbGFzcz0idm90ZV9wbHVz +Ij48L3NwYW4+PC9kaXY+DQoJCQkJCTxkaXYgY2xhc3M9Im1hcmsiPjxzcGFuIHRp +dGxlPSLQktGB0LXQs9C+IDM2INCz0L7Qu9C+0YHQvtCyOiAmdWFycjszMiDQuCAm +ZGFycjs0Ij4rMjg8L3NwYW4+PC9kaXY+DQoJCQkJCTxkaXYgY2xhc3M9ImNhbi12 +b3RlIj48YSB0aXRsZT0i0J3QtSDQvdGA0LDQstC40YLRgdGPIiBocmVmPSIjIiBj +bGFzcz0idm90ZV9taW51cyIgb25jbGljaz0icmV0dXJuIFZvdGVyLnZvdGUoZXZl +bnQsIHRoaXMsICdwb3N0JywgJ21pbnVzJyk7Ij48L2E+PC9kaXY+DQoJCQkJCTxk +aXYgY2xhc3M9ImNhbm5vdC12b3RlIj48c3BhbiBjbGFzcz0idm90ZV9taW51cyI+ +PC9zcGFuPjwvZGl2Pg0KCQkJCTwvZGl2Pg0KCQkJDQoJCQk8ZGl2IGNsYXNzPSJw +dWJsaXNoZWQiPjwhLS0g0JTQsNGC0LAg0LIg0YTQvtGA0LzQsNGC0LUgSVNPINC/ +0LjRhdCw0LXRgtGB0Y8g0LIgdGl0bGUgLS0+DQoJCQkJPHNwYW4+IDgg0LjRjtC9 +0Y8gMjAxMSwgMTA6NTU8L3NwYW4+DQoJCQk8L2Rpdj4NCg0KCQkJDQoJCQkNCgkJ +CTxkaXYgY2xhc3M9ImZhdl9hZGRlZCBqcy10b19mYXZzX2hvbGRlciI+DQoJCQkJ +PGEgY2xhc3M9ImpzLXRvX2ZhdnNfcmVtb3ZlIiB0aXRsZT0i0KPQtNCw0LvQuNGC +0Ywg0LjQtyDQuNC30LHRgNCw0L3QvdC+0LPQviIgaHJlZj0iIyIgb25jbGljaz0i +ZmF2c0hhbmRsZXIuZmF2b3JpdGVzU2VuZCh0aGlzLCAncG9zdHMnLCAxMjA4Njkp +OyByZXR1cm4gZmFsc2U7Ij4gPC9hPg0KCQkJPC9kaXY+DQoJCQkNCgkJCTxkaXYg +Y2xhc3M9ImZhdnNfY291bnQiIHRpdGxlPSLQmtC+0LvQuNGH0LXRgdGC0LLQviDQ +v9C+0LvRjNC30L7QstCw0YLQtdC70LXQuSwg0LTQvtCx0LDQstC40LLRiNC40YUg +0L/QvtGB0YIg0LIg0LjQt9Cx0YDQsNC90L3QvtC1Ij40OTwvZGl2Pg0KCQkJPGRp +diBjbGFzcz0idHdpdHRlciI+DQoJCQkJPGEgaHJlZj0iaHR0cDovL3R3aXR0ZXIu +Y29tL2ludGVudC90d2VldD90ZXh0PWh0dHA6Ly9oYWJyLnJ1L3AvMTIwODY5LyvQ +nivQsdC70L7QutCw0YUr0Lgr0LjRhSvQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQ +uCvQsitPYmplY3RpdmUtQyvRh9Cw0YHRgtGMKzIt0LDRjyslMjNoYWJyIiB0aXRs +ZT0i0J7Qv9GD0LHQu9C40LrQvtCy0LDRgtGMINGB0YHRi9C70LrRgyDQvdCwINC/ +0L7RgdGCINCyIFR3aXR0ZXIiIHRhcmdldD0iX2JsYW5rIj48L2E+DQoJCQk8L2Rp +dj4NCgkJCTxkaXYgY2xhc3M9ImZhY2Vib29rIj4NCgkJCQk8YSBocmVmPSJodHRw +Oi8vd3d3LmZhY2Vib29rLmNvbS9zaGFyZXIucGhwP3U9aHR0cDovL2hhYnJhaGFi +ci5ydS9ibG9ncy9tYWNvc3hkZXYvMTIwODY5LyIgdGl0bGU9ItCe0L/Rg9Cx0LvQ +uNC60L7QstCw0YLRjCDRgdGB0YvQu9C60YMg0L3QsCDQv9C+0YHRgiDQsiBGYWNl +Ym9vayIgb25jbGljaz0id2luZG93Lm9wZW4odGhpcy5ocmVmLCAn0J7Qv9GD0LHQ +u9C40LrQvtCy0LDRgtGMINGB0YHRi9C70LrRgyDQvdCwINC/0L7RgdGCINCyIEZh +Y2Vib29rJywgJ3dpZHRoPTgwMCxoZWlnaHQ9MzAwJyk7IHJldHVybiBmYWxzZSI+ +PC9hPg0KCQkJPC9kaXY+DQoJCQkNCg0KCQkJDQoJCQkNCg0KCQkJDQoNCgkJCQ0K +CQkJDQoJCQkJPGRpdiBjbGFzcz0idmNhcmQgYXV0aG9yIGZ1bGwiPg0KCQkJCQk8 +YSB0aXRsZT0i0JDQstGC0L7RgCDRgtC10LrRgdGC0LAiIGhyZWY9Imh0dHA6Ly9t +b2JvcmIuaGFicmFoYWJyLnJ1LyIgY2xhc3M9ImZuIG5pY2tuYW1lIHVybCI+PHNw +YW4+bW9ib3JiPC9zcGFuPjwvYT4NCgkJCQk8L2Rpdj4NCgkJCQ0KCQkJDQoNCgkJ +CQ0KDQoJCQkNCg0KDQoJCTwvZGl2Pg0KDQoJCTxkaXYgY2xhc3M9ImNvcm5lciBi +bCI+PC9kaXY+PGRpdiBjbGFzcz0iY29ybmVyIGJyIj48L2Rpdj4NCjwvZGl2Pg0K +DQoNCgoJCQkKCQk8L2Rpdj4KCQoKCg0KDQoNCg0KCQ0KDQoNCg0KCQ0KCQkNCgkJ +CQ0KCQkJCQo8ZGl2IGlkPSJ4c2lkZWJhci1wbGFjZXIiPjwvZGl2PgoKPHNjcmlw +dCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cDovL2hhYnJhaGFici5y +dS9qcy8xMzA3NjMxNDI3L3RtL21vb3Rvb2xzLWRyYWcuanMiPjwvc2NyaXB0Pgo8 +c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwOi8vaGFicmFo +YWJyLnJ1L2pzLzEzMDc2MzE0MjcvdG0vc2lkZWJhci9zaWRlYmFyLmpzIj48L3Nj +cmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJY29tbWVudEZv +cm0udGFyZ2V0SWQgPSAnMTIwODY5JzsKCWNvbW1lbnRGb3JtLnRhcmdldFR5cGUg +PSAncG9zdCc7Cjwvc2NyaXB0PgoNCgkJCQ0KCQkNCgkJPGRpdiBpZD0iY29tbWVu +dHMiPg0KCQkJPGgyIGNsYXNzPSJjb21tZW50cy1oZWFkZXIiPtC60L7QvNC80LXQ +vdGC0LDRgNC40LggKDxzcGFuIGNsYXNzPSJqcy1jb21tZW50cy1jb3VudCI+MTk8 +L3NwYW4+KTwvaDI+DQoJCQkNCgkJCQk8dWwgY2xhc3M9ImhlbnRyeSI+CgkKCQk8 +bGkgaWQ9ImNvbW1lbnRfMzk2NjQyNSIgY2xhc3M9ImNvbW1lbnRfaG9sZGVyIHZv +dGVfaG9sZGVyIj4KCQkJCgkJCQk8ZGl2IGNsYXNzPSJtc2ctbWV0YSI+CgkJCQkJ +PGRpdiBjbGFzcz0iZm9sZGluZy1kb3QtaG9sZGVyIj48ZGl2IGNsYXNzPSJmb2xk +aW5nLWRvdCI+PC9kaXY+PC9kaXY+CgkJCQkJPHVsIGNsYXNzPSJtZW51IGluZm8g +YXV0aG9yIGhjYXJkIj4KCQkJCQkJPGxpIGNsYXNzPSJhdmF0YXIiPgoJCQkJCQkJ +PGEgaHJlZj0iaHR0cDovL3Rpa2hvcC5oYWJyYWhhYnIucnUvIiB0aXRsZT0idGlr +aG9wIj4KCQkJCQkJCQk8aW1nIHNyYz0iaHR0cDovL2hhYnJhaGFici5ydS9pL2F2 +YXRhcnMvc3R1Yi11c2VyLXNtYWxsLmdpZiIgYWx0PSJ0aWtob3AiIC8+CgkJCQkJ +CQkJPGI+PC9iPgoJCQkJCQkJPC9hPgoJCQkJCQk8L2xpPgoJCQkJCQk8bGkgY2xh +c3M9ImZuIG5pY2tuYW1lIHVzZXJuYW1lIj4KCQkJCQkJCTxhIGhyZWY9Imh0dHA6 +Ly90aWtob3AuaGFicmFoYWJyLnJ1LyIgY2xhc3M9InVybCI+dGlraG9wPC9hPiwK +CQkJCQkJPC9saT4KCQkJCQkJPGxpIGNsYXNzPSJkYXRlIj4KCQkJCQkJCTxhYmJy +IGNsYXNzPSJwdWJsaXNoZWQiIHRpdGxlPSIyMDExLTA2LTA4VDExOjI1OjQ2KzA0 +OjAwIj4gOCDQuNGO0L3RjyAyMDExLCAxMToyNTwvYWJicj4KCQkJCQkJPC9saT4K +CQkJCQkJPGxpIGNsYXNzPSJib29rbWFyayI+CgkJCQkJCQk8YSBocmVmPSIjY29t +bWVudF8zOTY2NDI1IiB0aXRsZT0i0KHRgdGL0LvQutCwINC90LAg0LrQvtC80LzQ +tdC90YLQsNGA0LjQuSIgcmVsPSJib29rbWFyayI+IzwvYT4KCQkJCQkJPC9saT4K +CQkJCQkJCgkJCQkJCTxsaSBjbGFzcz0idG8tZmF2cyBqcy10b19mYXZzX2hvbGRl +ciI+CgkJCQkJCQk8YSBocmVmPSIjIiBjbGFzcz0ianMtdG9fZmF2c19hZGQiIG9u +Y2xpY2s9ImZhdnNIYW5kbGVyLmZhdm9yaXRlc1NlbmQodGhpcywgJ2NvbW1lbnRz +JywgMzk2NjQyNSk7IHJldHVybiBmYWxzZTsiIHRpdGxlPSLQlNC+0LHQsNCy0LjR +gtGMINCyINC40LfQsdGA0LDQvdC90L7QtSI+PC9hPgoJCQkJCQk8L2xpPgoJCQkJ +CQkKCQkJCQkJCgkJCQkJCTxsaSBjbGFzcz0iZG93bi10by1jaGlsZCBoaWRkZW4i +PjxhIHRpdGxlPSLQntCx0YDQsNGC0L3QviIgb25jbGljaz0icmV0dXJuIGNvbW1l +bnRGb3JtLmdvVG9DaGlsZENvbW1lbnQodGhpcyk7IiBocmVmPSIjIj4mZGFycjs8 +L2E+PC9saT4KCQkJCQkJPCEtLTxsaSBjbGFzcz0ic2luZ2xlLXRyZWUiPgoJCQkJ +CQkJPGEgY2xhc3M9ImpzLXNlcnYganMtc2luZ2xlLXRyZWUiIGhyZWY9Jyc+0LLQ +tdGC0LrQsDwvYT4KCQkJCQkJCTxhIGNsYXNzPSJqcy1zZXJ2IGpzLW11bHRpcGxh +eS10cmVlIiBocmVmPSIjY29tbWVudF8zOTY2NDI1Ij7QstC+0YHRgdGC0LDQvdC+ +0LLQuNGC0Yw8L2E+CgkJCQkJCTwvbGk+LS0+CgkJCQkJCQoJCQkJCQk8bGk+CgkJ +CQkJCQk8dWwgY2xhc3M9InZvdGUgdm90aW5nIHBvc2l0aXZlIGV4cGlyZWQiPgoJ +CQkJCQkJCTxsaSBjbGFzcz0ibWFyayI+PHNwYW4+KzI8L3NwYW4+PC9saT4KCQkJ +CQkJCQk8bGkgY2xhc3M9ImJ1dHRvbnMiPgoJCQkJCQkJCQk8YSByZXY9InZvdGVy +LWZvci1jb21tZW50OjM5NjY0MjUiIGNsYXNzPSJ2b3RlX21pbnVzIHZvdGUtZm9y +LWNvbW1lbnQiIHRpdGxlPSLQn9C70L7RhdC+0Lkg0LrQvtC80LzQtdC90YLQsNGA +0LjQuSI+PC9hPgoJCQkJCQkJCQk8YSByZXY9InZvdGVyLWZvci1jb21tZW50OjM5 +NjY0MjUiIGNsYXNzPSJ2b3RlX3BsdXMgdm90ZS1mb3ItY29tbWVudCIgdGl0bGU9 +ItCl0L7RgNC+0YjQuNC5INC60L7QvNC80LXQvdGC0LDRgNC40LkiPjwvYT4KCQkJ +CQkJCQk8L2xpPgoJCQkJCQkJPC91bD4KCQkJCQkJPC9saT4KCQkJCQkJCgkJCQkJ +PC91bD4KCgkJCQk8L2Rpdj4KCgkJCQk8ZGl2IGNsYXNzPSJlbnRyeS1jb250ZW50 +Ij4KCQkJCQk8ZGl2IGNsYXNzPSJlbnRyeS1jb250ZW50LW9ubHkiPgoJCQkJCSAg +ICDQodC/0LDRgdC40LHQviDQt9CwINGB0YLQsNGC0YzRjiwg0L7Rh9C10L3RjCDQ +v9C+0LvQtdC30L3QsNGPINC40L3RhNC+0YDQvNCw0YbQuNGPLgoJCQkJCTwvZGl2 +PgoJCQkJCTxwIGNsYXNzPSJyZXBseSI+PGEgY2xhc3M9ImpzLXNlcnYiIGhyZWY9 +Ij9yZXBseV90bz0zOTY2NDI1I2NvbW1lbnRfMzk2NjQyNSIgb25jbGljaz0iY29t +bWVudEZvcm0ubW92ZUZvcm0oJ3JlcGx5X2Zvcm1fMzk2NjQyNScpOyByZXR1cm4g +ZmFsc2U7Ij7QvtGC0LLQtdGC0LjRgtGMPC9hPjwvcD4KCQkJCTwvZGl2PgoKCQkJ +CTxkaXYgaWQ9InJlcGx5X2Zvcm1fMzk2NjQyNSIgY2xhc3M9InJlcGx5X2Zvcm0i +PgoKCQkJCQkKCQkJCTwvZGl2PgoJCQkKCgkJCQoJCQkKCQkJCgoJCQkKCgkJPC9s +aT4KCQoJCTxsaSBpZD0iY29tbWVudF8zOTY2NzI3IiBjbGFzcz0iY29tbWVudF9o +b2xkZXIgdm90ZV9ob2xkZXIiPgoJCQkKCQkJCTxkaXYgY2xhc3M9Im1zZy1tZXRh +Ij4KCQkJCQk8ZGl2IGNsYXNzPSJmb2xkaW5nLWRvdC1ob2xkZXIiPjxkaXYgY2xh +c3M9ImZvbGRpbmctZG90Ij48L2Rpdj48L2Rpdj4KCQkJCQk8dWwgY2xhc3M9Im1l +bnUgaW5mbyBhdXRob3IgaGNhcmQiPgoJCQkJCQk8bGkgY2xhc3M9ImF2YXRhciI+ +CgkJCQkJCQk8YSBocmVmPSJodHRwOi8vSGFjY2VsLmhhYnJhaGFici5ydS8iIHRp +dGxlPSJIYWNjZWwiPgoJCQkJCQkJCTxpbWcgc3JjPSJodHRwOi8vaGFicmFoYWJy +LnJ1L2kvYXZhdGFycy9zdHViLXVzZXItc21hbGwuZ2lmIiBhbHQ9IkhhY2NlbCIg +Lz4KCQkJCQkJCQk8Yj48L2I+CgkJCQkJCQk8L2E+CgkJCQkJCTwvbGk+CgkJCQkJ +CTxsaSBjbGFzcz0iZm4gbmlja25hbWUgdXNlcm5hbWUiPgoJCQkJCQkJPGEgaHJl +Zj0iaHR0cDovL0hhY2NlbC5oYWJyYWhhYnIucnUvIiBjbGFzcz0idXJsIj5IYWNj +ZWw8L2E+LAoJCQkJCQk8L2xpPgoJCQkJCQk8bGkgY2xhc3M9ImRhdGUiPgoJCQkJ +CQkJPGFiYnIgY2xhc3M9InB1Ymxpc2hlZCIgdGl0bGU9IjIwMTEtMDYtMDhUMTI6 +NDA6MzArMDQ6MDAiPiA4INC40Y7QvdGPIDIwMTEsIDEyOjQwPC9hYmJyPgoJCQkJ +CQk8L2xpPgoJCQkJCQk8bGkgY2xhc3M9ImJvb2ttYXJrIj4KCQkJCQkJCTxhIGhy +ZWY9IiNjb21tZW50XzM5NjY3MjciIHRpdGxlPSLQodGB0YvQu9C60LAg0L3QsCDQ +utC+0LzQvNC10L3RgtCw0YDQuNC5IiByZWw9ImJvb2ttYXJrIj4jPC9hPgoJCQkJ +CQk8L2xpPgoJCQkJCQkKCQkJCQkJPGxpIGNsYXNzPSJ0by1mYXZzIGpzLXRvX2Zh +dnNfaG9sZGVyIj4KCQkJCQkJCTxhIGhyZWY9IiMiIGNsYXNzPSJqcy10b19mYXZz +X2FkZCIgb25jbGljaz0iZmF2c0hhbmRsZXIuZmF2b3JpdGVzU2VuZCh0aGlzLCAn +Y29tbWVudHMnLCAzOTY2NzI3KTsgcmV0dXJuIGZhbHNlOyIgdGl0bGU9ItCU0L7Q +sdCw0LLQuNGC0Ywg0LIg0LjQt9Cx0YDQsNC90L3QvtC1Ij48L2E+CgkJCQkJCTwv +bGk+CgkJCQkJCQoJCQkJCQkKCQkJCQkJPGxpIGNsYXNzPSJkb3duLXRvLWNoaWxk +IGhpZGRlbiI+PGEgdGl0bGU9ItCe0LHRgNCw0YLQvdC+IiBvbmNsaWNrPSJyZXR1 +cm4gY29tbWVudEZvcm0uZ29Ub0NoaWxkQ29tbWVudCh0aGlzKTsiIGhyZWY9IiMi +PiZkYXJyOzwvYT48L2xpPgoJCQkJCQk8IS0tPGxpIGNsYXNzPSJzaW5nbGUtdHJl +ZSI+CgkJCQkJCQk8YSBjbGFzcz0ianMtc2VydiBqcy1zaW5nbGUtdHJlZSIgaHJl +Zj0nJz7QstC10YLQutCwPC9hPgoJCQkJCQkJPGEgY2xhc3M9ImpzLXNlcnYganMt +bXVsdGlwbGF5LXRyZWUiIGhyZWY9IiNjb21tZW50XzM5NjY3MjciPtCy0L7RgdGB +0YLQsNC90L7QstC40YLRjDwvYT4KCQkJCQkJPC9saT4tLT4KCQkJCQkJCgkJCQkJ +CTxsaT4KCQkJCQkJCTx1bCBjbGFzcz0idm90ZSB2b3RpbmcgIGV4cGlyZWQiPgoJ +CQkJCQkJCTxsaSBjbGFzcz0ibWFyayI+PHNwYW4+MDwvc3Bhbj48L2xpPgoJCQkJ +CQkJCTxsaSBjbGFzcz0iYnV0dG9ucyI+CgkJCQkJCQkJCTxhIHJldj0idm90ZXIt +Zm9yLWNvbW1lbnQ6Mzk2NjcyNyIgY2xhc3M9InZvdGVfbWludXMgdm90ZS1mb3It +Y29tbWVudCIgdGl0bGU9ItCf0LvQvtGF0L7QuSDQutC+0LzQvNC10L3RgtCw0YDQ +uNC5Ij48L2E+CgkJCQkJCQkJCTxhIHJldj0idm90ZXItZm9yLWNvbW1lbnQ6Mzk2 +NjcyNyIgY2xhc3M9InZvdGVfcGx1cyB2b3RlLWZvci1jb21tZW50IiB0aXRsZT0i +0KXQvtGA0L7RiNC40Lkg0LrQvtC80LzQtdC90YLQsNGA0LjQuSI+PC9hPgoJCQkJ +CQkJCTwvbGk+CgkJCQkJCQk8L3VsPgoJCQkJCQk8L2xpPgoJCQkJCQkKCQkJCQk8 +L3VsPgoKCQkJCTwvZGl2PgoKCQkJCTxkaXYgY2xhc3M9ImVudHJ5LWNvbnRlbnQi +PgoJCQkJCTxkaXYgY2xhc3M9ImVudHJ5LWNvbnRlbnQtb25seSI+CgkJCQkJICAg +INCh0L/QsNGB0LjQsdC+IOKAlCDQv9C+0LfQvdC+0LLQsNGC0LXQu9GM0L3QvgoJ +CQkJCTwvZGl2PgoJCQkJCTxwIGNsYXNzPSJyZXBseSI+PGEgY2xhc3M9ImpzLXNl +cnYiIGhyZWY9Ij9yZXBseV90bz0zOTY2NzI3I2NvbW1lbnRfMzk2NjcyNyIgb25j +bGljaz0iY29tbWVudEZvcm0ubW92ZUZvcm0oJ3JlcGx5X2Zvcm1fMzk2NjcyNycp +OyByZXR1cm4gZmFsc2U7Ij7QvtGC0LLQtdGC0LjRgtGMPC9hPjwvcD4KCQkJCTwv +ZGl2PgoKCQkJCTxkaXYgaWQ9InJlcGx5X2Zvcm1fMzk2NjcyNyIgY2xhc3M9InJl +cGx5X2Zvcm0iPgoKCQkJCQkKCQkJCTwvZGl2PgoJCQkKCgkJCQoJCQkKCQkJCgoJ +CQkKCgkJPC9saT4KCQoJCTxsaSBpZD0iY29tbWVudF8zOTY2NzQyIiBjbGFzcz0i +Y29tbWVudF9ob2xkZXIgdm90ZV9ob2xkZXIiPgoJCQkKCQkJCTxkaXYgY2xhc3M9 +Im1zZy1tZXRhIj4KCQkJCQk8ZGl2IGNsYXNzPSJmb2xkaW5nLWRvdC1ob2xkZXIi +PjxkaXYgY2xhc3M9ImZvbGRpbmctZG90Ij48L2Rpdj48L2Rpdj4KCQkJCQk8dWwg +Y2xhc3M9Im1lbnUgaW5mbyBhdXRob3IgaGNhcmQiPgoJCQkJCQk8bGkgY2xhc3M9 +ImF2YXRhciI+CgkJCQkJCQk8YSBocmVmPSJodHRwOi8vUGlsb3QzNC5oYWJyYWhh +YnIucnUvIiB0aXRsZT0iUGlsb3QzNCI+CgkJCQkJCQkJPGltZyBzcmM9Imh0dHA6 +Ly9oYWJyYWhhYnIucnUvbWVkaWEvdGh1bWIvZDYvNjAvMDYvMzE2Mi8zMTYyXzI0 +eDI0LmpwZyIgYWx0PSJQaWxvdDM0IiAvPgoJCQkJCQkJCTxiPjwvYj4KCQkJCQkJ +CTwvYT4KCQkJCQkJPC9saT4KCQkJCQkJPGxpIGNsYXNzPSJmbiBuaWNrbmFtZSB1 +c2VybmFtZSI+CgkJCQkJCQk8YSBocmVmPSJodHRwOi8vUGlsb3QzNC5oYWJyYWhh +YnIucnUvIiBjbGFzcz0idXJsIj5QaWxvdDM0PC9hPiwKCQkJCQkJPC9saT4KCQkJ +CQkJPGxpIGNsYXNzPSJkYXRlIj4KCQkJCQkJCTxhYmJyIGNsYXNzPSJwdWJsaXNo +ZWQiIHRpdGxlPSIyMDExLTA2LTA4VDEyOjQ0OjQ1KzA0OjAwIj4gOCDQuNGO0L3R +jyAyMDExLCAxMjo0NDwvYWJicj4KCQkJCQkJPC9saT4KCQkJCQkJPGxpIGNsYXNz +PSJib29rbWFyayI+CgkJCQkJCQk8YSBocmVmPSIjY29tbWVudF8zOTY2NzQyIiB0 +aXRsZT0i0KHRgdGL0LvQutCwINC90LAg0LrQvtC80LzQtdC90YLQsNGA0LjQuSIg +cmVsPSJib29rbWFyayI+IzwvYT4KCQkJCQkJPC9saT4KCQkJCQkJCgkJCQkJCTxs +aSBjbGFzcz0idG8tZmF2cyBqcy10b19mYXZzX2hvbGRlciI+CgkJCQkJCQk8YSBo +cmVmPSIjIiBjbGFzcz0ianMtdG9fZmF2c19hZGQiIG9uY2xpY2s9ImZhdnNIYW5k +bGVyLmZhdm9yaXRlc1NlbmQodGhpcywgJ2NvbW1lbnRzJywgMzk2Njc0Mik7IHJl +dHVybiBmYWxzZTsiIHRpdGxlPSLQlNC+0LHQsNCy0LjRgtGMINCyINC40LfQsdGA +0LDQvdC90L7QtSI+PC9hPgoJCQkJCQk8L2xpPgoJCQkJCQkKCQkJCQkJCgkJCQkJ +CTxsaSBjbGFzcz0iZG93bi10by1jaGlsZCBoaWRkZW4iPjxhIHRpdGxlPSLQntCx +0YDQsNGC0L3QviIgb25jbGljaz0icmV0dXJuIGNvbW1lbnRGb3JtLmdvVG9DaGls +ZENvbW1lbnQodGhpcyk7IiBocmVmPSIjIj4mZGFycjs8L2E+PC9saT4KCQkJCQkJ +PCEtLTxsaSBjbGFzcz0ic2luZ2xlLXRyZWUiPgoJCQkJCQkJPGEgY2xhc3M9Impz +LXNlcnYganMtc2luZ2xlLXRyZWUiIGhyZWY9Jyc+0LLQtdGC0LrQsDwvYT4KCQkJ +CQkJCTxhIGNsYXNzPSJqcy1zZXJ2IGpzLW11bHRpcGxheS10cmVlIiBocmVmPSIj +Y29tbWVudF8zOTY2NzQyIj7QstC+0YHRgdGC0LDQvdC+0LLQuNGC0Yw8L2E+CgkJ +CQkJCTwvbGk+LS0+CgkJCQkJCQoJCQkJCQk8bGk+CgkJCQkJCQk8dWwgY2xhc3M9 +InZvdGUgdm90aW5nIHBvc2l0aXZlIGV4cGlyZWQiPgoJCQkJCQkJCTxsaSBjbGFz +cz0ibWFyayI+PHNwYW4+KzI8L3NwYW4+PC9saT4KCQkJCQkJCQk8bGkgY2xhc3M9 +ImJ1dHRvbnMiPgoJCQkJCQkJCQk8YSByZXY9InZvdGVyLWZvci1jb21tZW50OjM5 +NjY3NDIiIGNsYXNzPSJ2b3RlX21pbnVzIHZvdGUtZm9yLWNvbW1lbnQiIHRpdGxl +PSLQn9C70L7RhdC+0Lkg0LrQvtC80LzQtdC90YLQsNGA0LjQuSI+PC9hPgoJCQkJ +CQkJCQk8YSByZXY9InZvdGVyLWZvci1jb21tZW50OjM5NjY3NDIiIGNsYXNzPSJ2 +b3RlX3BsdXMgdm90ZS1mb3ItY29tbWVudCIgdGl0bGU9ItCl0L7RgNC+0YjQuNC5 +INC60L7QvNC80LXQvdGC0LDRgNC40LkiPjwvYT4KCQkJCQkJCQk8L2xpPgoJCQkJ +CQkJPC91bD4KCQkJCQkJPC9saT4KCQkJCQkJCgkJCQkJPC91bD4KCgkJCQk8L2Rp +dj4KCgkJCQk8ZGl2IGNsYXNzPSJlbnRyeS1jb250ZW50Ij4KCQkJCQk8ZGl2IGNs +YXNzPSJlbnRyeS1jb250ZW50LW9ubHkiPgoJCQkJCSAgICDQlNCwLCDQv9C+0YHQ +u9C1IEMjINC40LvQuCBQeXRob24g0LrQvtC90LXRh9C90L4g0LvRj9C80LHQtNGL +INCy0YvQs9C70Y/QtNGP0YIg0YHQuNC70YzQvdC+INC80YPQtNGA0LXQvdGL0LzQ +uC4g0JXRgdC70Lgg0LIgQyMg0LTQu9GPINGE0YPQvdC60YbQuNC4INC+0LHRgNCw +0YLQvdC+0LPQviDQstGL0LfQvtCy0LAg0Y8g0LHRg9C00YMg0L/QuNGB0LDRgtGM +INC70Y/QvNCx0LTRgywg0YLQviDQsiBPYmplY3RpdmUtQyDRjyDQv9C+0LrQsCDQ +u9GD0YfRiNC1INC/0L4g0YHRgtCw0YDQuNC90LrQtSDRgSDRgdC10LvQtdC60YLQ +vtGA0L7QvCwg0YfRgtC+0LHRiyDQvdC1INC80YPQtNGA0LjRgtGMINGBINC/0LDQ +vNGP0YLRjNGOLiDQpdC+0YLRjyDQvNC+0LbQtdGCINC00LXQu9C+INC/0YDQuNCy +0YvRh9C60LguPGJyLz4NCjxici8+DQrQkiDQu9GO0LHQvtC8INGB0LvRg9GH0LDQ +tSDRhdC+0YLRjyDQsdGLIG1hcCDQsiDQvNCw0YHRgdC40LLQtSDRg9C20LUg0L7R +gtC70LjRh9C90YvQuSDQv9C70Y7RgS4g0JTQttCw0LLQuNGB0YLQsNC8INC+INGC +0LDQutC+0Lwg0YLQvtC70YzQutC+INC80LXRh9GC0LDRgtGMKQoJCQkJCTwvZGl2 +PgoJCQkJCTxwIGNsYXNzPSJyZXBseSI+PGEgY2xhc3M9ImpzLXNlcnYiIGhyZWY9 +Ij9yZXBseV90bz0zOTY2NzQyI2NvbW1lbnRfMzk2Njc0MiIgb25jbGljaz0iY29t +bWVudEZvcm0ubW92ZUZvcm0oJ3JlcGx5X2Zvcm1fMzk2Njc0MicpOyByZXR1cm4g +ZmFsc2U7Ij7QvtGC0LLQtdGC0LjRgtGMPC9hPjwvcD4KCQkJCTwvZGl2PgoKCQkJ +CTxkaXYgaWQ9InJlcGx5X2Zvcm1fMzk2Njc0MiIgY2xhc3M9InJlcGx5X2Zvcm0i +PgoKCQkJCQkKCQkJCTwvZGl2PgoJCQkKCgkJCQoJCQkKCQkJCgoJCQkKCgkJPC9s +aT4KCQoJCTxsaSBpZD0iY29tbWVudF8zOTY2ODIxIiBjbGFzcz0iY29tbWVudF9o +b2xkZXIgdm90ZV9ob2xkZXIiPgoJCQkKCQkJCTxkaXYgY2xhc3M9Im1zZy1tZXRh +Ij4KCQkJCQk8ZGl2IGNsYXNzPSJmb2xkaW5nLWRvdC1ob2xkZXIiPjxkaXYgY2xh +c3M9ImZvbGRpbmctZG90Ij48L2Rpdj48L2Rpdj4KCQkJCQk8dWwgY2xhc3M9Im1l +bnUgaW5mbyBhdXRob3IgaGNhcmQiPgoJCQkJCQk8bGkgY2xhc3M9ImF2YXRhciI+ +CgkJCQkJCQk8YSBocmVmPSJodHRwOi8vdGFudXIuaGFicmFoYWJyLnJ1LyIgdGl0 +bGU9InRhbnVyIj4KCQkJCQkJCQk8aW1nIHNyYz0iaHR0cDovL2hhYnJhaGFici5y +dS9pL2F2YXRhcnMvc3R1Yi11c2VyLXNtYWxsLmdpZiIgYWx0PSJ0YW51ciIgLz4K +CQkJCQkJCQk8Yj48L2I+CgkJCQkJCQk8L2E+CgkJCQkJCTwvbGk+CgkJCQkJCTxs +aSBjbGFzcz0iZm4gbmlja25hbWUgdXNlcm5hbWUiPgoJCQkJCQkJPGEgaHJlZj0i +aHR0cDovL3RhbnVyLmhhYnJhaGFici5ydS8iIGNsYXNzPSJ1cmwiPnRhbnVyPC9h +PiwKCQkJCQkJPC9saT4KCQkJCQkJPGxpIGNsYXNzPSJkYXRlIj4KCQkJCQkJCTxh +YmJyIGNsYXNzPSJwdWJsaXNoZWQiIHRpdGxlPSIyMDExLTA2LTA4VDEzOjA5OjEz +KzA0OjAwIj4gOCDQuNGO0L3RjyAyMDExLCAxMzowOTwvYWJicj4KCQkJCQkJPC9s +aT4KCQkJCQkJPGxpIGNsYXNzPSJib29rbWFyayI+CgkJCQkJCQk8YSBocmVmPSIj +Y29tbWVudF8zOTY2ODIxIiB0aXRsZT0i0KHRgdGL0LvQutCwINC90LAg0LrQvtC8 +0LzQtdC90YLQsNGA0LjQuSIgcmVsPSJib29rbWFyayI+IzwvYT4KCQkJCQkJPC9s +aT4KCQkJCQkJCgkJCQkJCTxsaSBjbGFzcz0idG8tZmF2cyBqcy10b19mYXZzX2hv +bGRlciI+CgkJCQkJCQk8YSBocmVmPSIjIiBjbGFzcz0ianMtdG9fZmF2c19hZGQi +IG9uY2xpY2s9ImZhdnNIYW5kbGVyLmZhdm9yaXRlc1NlbmQodGhpcywgJ2NvbW1l +bnRzJywgMzk2NjgyMSk7IHJldHVybiBmYWxzZTsiIHRpdGxlPSLQlNC+0LHQsNCy +0LjRgtGMINCyINC40LfQsdGA0LDQvdC90L7QtSI+PC9hPgoJCQkJCQk8L2xpPgoJ +CQkJCQkKCQkJCQkJCgkJCQkJCTxsaSBjbGFzcz0iZG93bi10by1jaGlsZCBoaWRk +ZW4iPjxhIHRpdGxlPSLQntCx0YDQsNGC0L3QviIgb25jbGljaz0icmV0dXJuIGNv +bW1lbnRGb3JtLmdvVG9DaGlsZENvbW1lbnQodGhpcyk7IiBocmVmPSIjIj4mZGFy +cjs8L2E+PC9saT4KCQkJCQkJPCEtLTxsaSBjbGFzcz0ic2luZ2xlLXRyZWUiPgoJ +CQkJCQkJPGEgY2xhc3M9ImpzLXNlcnYganMtc2luZ2xlLXRyZWUiIGhyZWY9Jyc+ +0LLQtdGC0LrQsDwvYT4KCQkJCQkJCTxhIGNsYXNzPSJqcy1zZXJ2IGpzLW11bHRp +cGxheS10cmVlIiBocmVmPSIjY29tbWVudF8zOTY2ODIxIj7QstC+0YHRgdGC0LDQ +vdC+0LLQuNGC0Yw8L2E+CgkJCQkJCTwvbGk+LS0+CgkJCQkJCQoJCQkJCQk8bGk+ +CgkJCQkJCQk8dWwgY2xhc3M9InZvdGUgdm90aW5nICBleHBpcmVkIj4KCQkJCQkJ +CQk8bGkgY2xhc3M9Im1hcmsiPjxzcGFuPjA8L3NwYW4+PC9saT4KCQkJCQkJCQk8 +bGkgY2xhc3M9ImJ1dHRvbnMiPgoJCQkJCQkJCQk8YSByZXY9InZvdGVyLWZvci1j +b21tZW50OjM5NjY4MjEiIGNsYXNzPSJ2b3RlX21pbnVzIHZvdGUtZm9yLWNvbW1l +bnQiIHRpdGxlPSLQn9C70L7RhdC+0Lkg0LrQvtC80LzQtdC90YLQsNGA0LjQuSI+ +PC9hPgoJCQkJCQkJCQk8YSByZXY9InZvdGVyLWZvci1jb21tZW50OjM5NjY4MjEi +IGNsYXNzPSJ2b3RlX3BsdXMgdm90ZS1mb3ItY29tbWVudCIgdGl0bGU9ItCl0L7R +gNC+0YjQuNC5INC60L7QvNC80LXQvdGC0LDRgNC40LkiPjwvYT4KCQkJCQkJCQk8 +L2xpPgoJCQkJCQkJPC91bD4KCQkJCQkJPC9saT4KCQkJCQkJCgkJCQkJPC91bD4K +CgkJCQk8L2Rpdj4KCgkJCQk8ZGl2IGNsYXNzPSJlbnRyeS1jb250ZW50Ij4KCQkJ +CQk8ZGl2IGNsYXNzPSJlbnRyeS1jb250ZW50LW9ubHkiPgoJCQkJCSAgICDQmNGB +0L/RgNCw0LLRjNGC0LUg0YHQu9C+0LLQviDCq9Ch0L7QttC10YDQttCw0L3QuNC1 +wrsg0LIg0L3QsNGH0LDQu9C1INGB0YLQsNGC0YzQuAoJCQkJCTwvZGl2PgoJCQkJ +CTxwIGNsYXNzPSJyZXBseSI+PGEgY2xhc3M9ImpzLXNlcnYiIGhyZWY9Ij9yZXBs +eV90bz0zOTY2ODIxI2NvbW1lbnRfMzk2NjgyMSIgb25jbGljaz0iY29tbWVudEZv +cm0ubW92ZUZvcm0oJ3JlcGx5X2Zvcm1fMzk2NjgyMScpOyByZXR1cm4gZmFsc2U7 +Ij7QvtGC0LLQtdGC0LjRgtGMPC9hPjwvcD4KCQkJCTwvZGl2PgoKCQkJCTxkaXYg +aWQ9InJlcGx5X2Zvcm1fMzk2NjgyMSIgY2xhc3M9InJlcGx5X2Zvcm0iPgoKCQkJ +CQkKCQkJCTwvZGl2PgoJCQkKCgkJCQoJCQkKCQkJCgoJCQkKCQkJCTx1bCBjbGFz +cz0iaGVudHJ5Ij4KCQoJCTxsaSBpZD0iY29tbWVudF8zOTY2ODkxIiBjbGFzcz0i +Y29tbWVudF9ob2xkZXIgdm90ZV9ob2xkZXIiPgoJCQkKCQkJCTxkaXYgY2xhc3M9 +Im1zZy1tZXRhIG15LXJlcGx5Ij4KCQkJCQk8ZGl2IGNsYXNzPSJmb2xkaW5nLWRv +dC1ob2xkZXIiPjxkaXYgY2xhc3M9ImZvbGRpbmctZG90Ij48L2Rpdj48L2Rpdj4K +CQkJCQk8dWwgY2xhc3M9Im1lbnUgaW5mbyBhdXRob3IgaGNhcmQiPgoJCQkJCQk8 +bGkgY2xhc3M9ImF2YXRhciI+CgkJCQkJCQk8YSBocmVmPSJodHRwOi8vbW9ib3Ji +LmhhYnJhaGFici5ydS8iIHRpdGxlPSJtb2JvcmIiPgoJCQkJCQkJCTxpbWcgc3Jj +PSJodHRwOi8vaGFicmFoYWJyLnJ1L2kvYXZhdGFycy9zdHViLXVzZXItc21hbGwu +Z2lmIiBhbHQ9Im1vYm9yYiIgLz4KCQkJCQkJCQk8Yj48L2I+CgkJCQkJCQk8L2E+ +CgkJCQkJCTwvbGk+CgkJCQkJCTxsaSBjbGFzcz0iZm4gbmlja25hbWUgdXNlcm5h +bWUiPgoJCQkJCQkJPGEgaHJlZj0iaHR0cDovL21vYm9yYi5oYWJyYWhhYnIucnUv +IiBjbGFzcz0idXJsIj5tb2JvcmI8L2E+LAoJCQkJCQk8L2xpPgoJCQkJCQk8bGkg +Y2xhc3M9ImRhdGUiPgoJCQkJCQkJPGFiYnIgY2xhc3M9InB1Ymxpc2hlZCIgdGl0 +bGU9IjIwMTEtMDYtMDhUMTM6MjY6MjArMDQ6MDAiPiA4INC40Y7QvdGPIDIwMTEs +IDEzOjI2PC9hYmJyPgoJCQkJCQk8L2xpPgoJCQkJCQk8bGkgY2xhc3M9ImJvb2tt +YXJrIj4KCQkJCQkJCTxhIGhyZWY9IiNjb21tZW50XzM5NjY4OTEiIHRpdGxlPSLQ +odGB0YvQu9C60LAg0L3QsCDQutC+0LzQvNC10L3RgtCw0YDQuNC5IiByZWw9ImJv +b2ttYXJrIj4jPC9hPgoJCQkJCQk8L2xpPgoJCQkJCQkKCQkJCQkJPGxpIGNsYXNz +PSJ0by1mYXZzIGpzLXRvX2ZhdnNfaG9sZGVyIj4KCQkJCQkJCTxhIGhyZWY9IiMi +IGNsYXNzPSJqcy10b19mYXZzX2FkZCIgb25jbGljaz0iZmF2c0hhbmRsZXIuZmF2 +b3JpdGVzU2VuZCh0aGlzLCAnY29tbWVudHMnLCAzOTY2ODkxKTsgcmV0dXJuIGZh +bHNlOyIgdGl0bGU9ItCU0L7QsdCw0LLQuNGC0Ywg0LIg0LjQt9Cx0YDQsNC90L3Q +vtC1Ij48L2E+CgkJCQkJCTwvbGk+CgkJCQkJCQoJCQkJCQk8bGkgY2xhc3M9InVw +LXRvLXBhcmVudCI+PGEgdGl0bGU9ItCe0YLQstC10YIg0L3QsCIgb25jbGljaz0i +cmV0dXJuIGNvbW1lbnRGb3JtLmdvVG9QYXJlbnRDb21tZW50KHRoaXMpOyIgaHJl +Zj0iI2NvbW1lbnRfMzk2NjgyMSI+JnVhcnI7PC9hPjwvbGk+CgkJCQkJCTxsaSBj +bGFzcz0iZG93bi10by1jaGlsZCBoaWRkZW4iPjxhIHRpdGxlPSLQntCx0YDQsNGC +0L3QviIgb25jbGljaz0icmV0dXJuIGNvbW1lbnRGb3JtLmdvVG9DaGlsZENvbW1l +bnQodGhpcyk7IiBocmVmPSIjIj4mZGFycjs8L2E+PC9saT4KCQkJCQkJPCEtLTxs +aSBjbGFzcz0ic2luZ2xlLXRyZWUiPgoJCQkJCQkJPGEgY2xhc3M9ImpzLXNlcnYg +anMtc2luZ2xlLXRyZWUiIGhyZWY9JyNjb21tZW50XzM5NjY4MjEnPtCy0LXRgtC6 +0LA8L2E+CgkJCQkJCQk8YSBjbGFzcz0ianMtc2VydiBqcy1tdWx0aXBsYXktdHJl +ZSIgaHJlZj0iI2NvbW1lbnRfMzk2Njg5MSI+0LLQvtGB0YHRgtCw0L3QvtCy0LjR +gtGMPC9hPgoJCQkJCQk8L2xpPi0tPgoJCQkJCQkKCQkJCQkJPGxpPgoJCQkJCQkJ +PHVsIGNsYXNzPSJ2b3RlIHZvdGluZyAgbWluZSBleHBpcmVkIj4KCQkJCQkJCQk8 +bGkgY2xhc3M9Im1hcmsiPjxzcGFuPjA8L3NwYW4+PC9saT4KCQkJCQkJCQk8bGkg +Y2xhc3M9ImJ1dHRvbnMiPgoJCQkJCQkJCQk8YSByZXY9InZvdGVyLWZvci1jb21t +ZW50OjM5NjY4OTEiIGNsYXNzPSJ2b3RlX21pbnVzIHZvdGUtZm9yLWNvbW1lbnQi +IHRpdGxlPSLQn9C70L7RhdC+0Lkg0LrQvtC80LzQtdC90YLQsNGA0LjQuSI+PC9h +PgoJCQkJCQkJCQk8YSByZXY9InZvdGVyLWZvci1jb21tZW50OjM5NjY4OTEiIGNs +YXNzPSJ2b3RlX3BsdXMgdm90ZS1mb3ItY29tbWVudCIgdGl0bGU9ItCl0L7RgNC+ +0YjQuNC5INC60L7QvNC80LXQvdGC0LDRgNC40LkiPjwvYT4KCQkJCQkJCQk8L2xp +PgoJCQkJCQkJPC91bD4KCQkJCQkJPC9saT4KCQkJCQkJCgkJCQkJPC91bD4KCgkJ +CQk8L2Rpdj4KCgkJCQk8ZGl2IGNsYXNzPSJlbnRyeS1jb250ZW50Ij4KCQkJCQk8 +ZGl2IGNsYXNzPSJlbnRyeS1jb250ZW50LW9ubHkiPgoJCQkJCSAgICDQn9C+0L/R +gNCw0LLQuNC7LCDRgdC/0LDRgdC40LHQvgoJCQkJCTwvZGl2PgoJCQkJCTxwIGNs +YXNzPSJyZXBseSI+PGEgY2xhc3M9ImpzLXNlcnYiIGhyZWY9Ij9yZXBseV90bz0z +OTY2ODkxI2NvbW1lbnRfMzk2Njg5MSIgb25jbGljaz0iY29tbWVudEZvcm0ubW92 +ZUZvcm0oJ3JlcGx5X2Zvcm1fMzk2Njg5MScpOyByZXR1cm4gZmFsc2U7Ij7QvtGC +0LLQtdGC0LjRgtGMPC9hPjwvcD4KCQkJCTwvZGl2PgoKCQkJCTxkaXYgaWQ9InJl +cGx5X2Zvcm1fMzk2Njg5MSIgY2xhc3M9InJlcGx5X2Zvcm0iPgoKCQkJCQkKCQkJ +CTwvZGl2PgoJCQkKCgkJCQoJCQkKCQkJCgoJCQkKCgkJPC9saT4KCQo8L3VsPgoK +CQkJCgoJCTwvbGk+CgkKCQk8bGkgaWQ9ImNvbW1lbnRfMzk2NjkwOSIgY2xhc3M9 +ImNvbW1lbnRfaG9sZGVyIHZvdGVfaG9sZGVyIj4KCQkJCgkJCQk8ZGl2IGNsYXNz +PSJtc2ctbWV0YSI+CgkJCQkJPGRpdiBjbGFzcz0iZm9sZGluZy1kb3QtaG9sZGVy +Ij48ZGl2IGNsYXNzPSJmb2xkaW5nLWRvdCI+PC9kaXY+PC9kaXY+CgkJCQkJPHVs +IGNsYXNzPSJtZW51IGluZm8gYXV0aG9yIGhjYXJkIj4KCQkJCQkJPGxpIGNsYXNz +PSJhdmF0YXIiPgoJCQkJCQkJPGEgaHJlZj0iaHR0cDovL2Z5bGZvdC5oYWJyYWhh +YnIucnUvIiB0aXRsZT0iZnlsZm90Ij4KCQkJCQkJCQk8aW1nIHNyYz0iaHR0cDov +L2hhYnJhaGFici5ydS9tZWRpYS90aHVtYi85Zi9mYS9hMy8zNzAxMC8zNzAxMF8y +NHgyNC5wbmciIGFsdD0iZnlsZm90IiAvPgoJCQkJCQkJCTxiPjwvYj4KCQkJCQkJ +CTwvYT4KCQkJCQkJPC9saT4KCQkJCQkJPGxpIGNsYXNzPSJmbiBuaWNrbmFtZSB1 +c2VybmFtZSI+CgkJCQkJCQk8YSBocmVmPSJodHRwOi8vZnlsZm90LmhhYnJhaGFi +ci5ydS8iIGNsYXNzPSJ1cmwiPmZ5bGZvdDwvYT4sCgkJCQkJCTwvbGk+CgkJCQkJ +CTxsaSBjbGFzcz0iZGF0ZSI+CgkJCQkJCQk8YWJiciBjbGFzcz0icHVibGlzaGVk +IiB0aXRsZT0iMjAxMS0wNi0wOFQxMzozMDo0MCswNDowMCI+IDgg0LjRjtC90Y8g +MjAxMSwgMTM6MzA8L2FiYnI+CgkJCQkJCTwvbGk+CgkJCQkJCTxsaSBjbGFzcz0i +Ym9va21hcmsiPgoJCQkJCQkJPGEgaHJlZj0iI2NvbW1lbnRfMzk2NjkwOSIgdGl0 +bGU9ItCh0YHRi9C70LrQsCDQvdCwINC60L7QvNC80LXQvdGC0LDRgNC40LkiIHJl +bD0iYm9va21hcmsiPiM8L2E+CgkJCQkJCTwvbGk+CgkJCQkJCQoJCQkJCQk8bGkg +Y2xhc3M9InRvLWZhdnMganMtdG9fZmF2c19ob2xkZXIiPgoJCQkJCQkJPGEgaHJl +Zj0iIyIgY2xhc3M9ImpzLXRvX2ZhdnNfYWRkIiBvbmNsaWNrPSJmYXZzSGFuZGxl +ci5mYXZvcml0ZXNTZW5kKHRoaXMsICdjb21tZW50cycsIDM5NjY5MDkpOyByZXR1 +cm4gZmFsc2U7IiB0aXRsZT0i0JTQvtCx0LDQstC40YLRjCDQsiDQuNC30LHRgNCw +0L3QvdC+0LUiPjwvYT4KCQkJCQkJPC9saT4KCQkJCQkJCgkJCQkJCQoJCQkJCQk8 +bGkgY2xhc3M9ImRvd24tdG8tY2hpbGQgaGlkZGVuIj48YSB0aXRsZT0i0J7QsdGA +0LDRgtC90L4iIG9uY2xpY2s9InJldHVybiBjb21tZW50Rm9ybS5nb1RvQ2hpbGRD +b21tZW50KHRoaXMpOyIgaHJlZj0iIyI+JmRhcnI7PC9hPjwvbGk+CgkJCQkJCTwh +LS08bGkgY2xhc3M9InNpbmdsZS10cmVlIj4KCQkJCQkJCTxhIGNsYXNzPSJqcy1z +ZXJ2IGpzLXNpbmdsZS10cmVlIiBocmVmPScnPtCy0LXRgtC60LA8L2E+CgkJCQkJ +CQk8YSBjbGFzcz0ianMtc2VydiBqcy1tdWx0aXBsYXktdHJlZSIgaHJlZj0iI2Nv +bW1lbnRfMzk2NjkwOSI+0LLQvtGB0YHRgtCw0L3QvtCy0LjRgtGMPC9hPgoJCQkJ +CQk8L2xpPi0tPgoJCQkJCQkKCQkJCQkJPGxpPgoJCQkJCQkJPHVsIGNsYXNzPSJ2 +b3RlIHZvdGluZyBwb3NpdGl2ZSBleHBpcmVkIj4KCQkJCQkJCQk8bGkgY2xhc3M9 +Im1hcmsiPjxzcGFuPisyPC9zcGFuPjwvbGk+CgkJCQkJCQkJPGxpIGNsYXNzPSJi +dXR0b25zIj4KCQkJCQkJCQkJPGEgcmV2PSJ2b3Rlci1mb3ItY29tbWVudDozOTY2 +OTA5IiBjbGFzcz0idm90ZV9taW51cyB2b3RlLWZvci1jb21tZW50IiB0aXRsZT0i +0J/Qu9C+0YXQvtC5INC60L7QvNC80LXQvdGC0LDRgNC40LkiPjwvYT4KCQkJCQkJ +CQkJPGEgcmV2PSJ2b3Rlci1mb3ItY29tbWVudDozOTY2OTA5IiBjbGFzcz0idm90 +ZV9wbHVzIHZvdGUtZm9yLWNvbW1lbnQiIHRpdGxlPSLQpdC+0YDQvtGI0LjQuSDQ +utC+0LzQvNC10L3RgtCw0YDQuNC5Ij48L2E+CgkJCQkJCQkJPC9saT4KCQkJCQkJ +CTwvdWw+CgkJCQkJCTwvbGk+CgkJCQkJCQoJCQkJCTwvdWw+CgoJCQkJPC9kaXY+ +CgoJCQkJPGRpdiBjbGFzcz0iZW50cnktY29udGVudCI+CgkJCQkJPGRpdiBjbGFz +cz0iZW50cnktY29udGVudC1vbmx5Ij4KCQkJCQkgICAg0JzQtdGA0LfQutC+0LLQ +sNGC0L7QtSDQvtGE0L7RgNC80LvQtdC90LjRjyDQutC+0LTQsC4KCQkJCQk8L2Rp +dj4KCQkJCQk8cCBjbGFzcz0icmVwbHkiPjxhIGNsYXNzPSJqcy1zZXJ2IiBocmVm +PSI/cmVwbHlfdG89Mzk2NjkwOSNjb21tZW50XzM5NjY5MDkiIG9uY2xpY2s9ImNv +bW1lbnRGb3JtLm1vdmVGb3JtKCdyZXBseV9mb3JtXzM5NjY5MDknKTsgcmV0dXJu +IGZhbHNlOyI+0L7RgtCy0LXRgtC40YLRjDwvYT48L3A+CgkJCQk8L2Rpdj4KCgkJ +CQk8ZGl2IGlkPSJyZXBseV9mb3JtXzM5NjY5MDkiIGNsYXNzPSJyZXBseV9mb3Jt +Ij4KCgkJCQkJCgkJCQk8L2Rpdj4KCQkJCgoJCQkKCQkJCgkJCQoKCQkJCgkJCQk8 +dWwgY2xhc3M9ImhlbnRyeSI+CgkKCQk8bGkgaWQ9ImNvbW1lbnRfMzk2Njk1NSIg +Y2xhc3M9ImNvbW1lbnRfaG9sZGVyIHZvdGVfaG9sZGVyIj4KCQkJCgkJCQk8ZGl2 +IGNsYXNzPSJtc2ctbWV0YSBteS1yZXBseSI+CgkJCQkJPGRpdiBjbGFzcz0iZm9s +ZGluZy1kb3QtaG9sZGVyIj48ZGl2IGNsYXNzPSJmb2xkaW5nLWRvdCI+PC9kaXY+ +PC9kaXY+CgkJCQkJPHVsIGNsYXNzPSJtZW51IGluZm8gYXV0aG9yIGhjYXJkIj4K +CQkJCQkJPGxpIGNsYXNzPSJhdmF0YXIiPgoJCQkJCQkJPGEgaHJlZj0iaHR0cDov +L21vYm9yYi5oYWJyYWhhYnIucnUvIiB0aXRsZT0ibW9ib3JiIj4KCQkJCQkJCQk8 +aW1nIHNyYz0iaHR0cDovL2hhYnJhaGFici5ydS9pL2F2YXRhcnMvc3R1Yi11c2Vy +LXNtYWxsLmdpZiIgYWx0PSJtb2JvcmIiIC8+CgkJCQkJCQkJPGI+PC9iPgoJCQkJ +CQkJPC9hPgoJCQkJCQk8L2xpPgoJCQkJCQk8bGkgY2xhc3M9ImZuIG5pY2tuYW1l +IHVzZXJuYW1lIj4KCQkJCQkJCTxhIGhyZWY9Imh0dHA6Ly9tb2JvcmIuaGFicmFo +YWJyLnJ1LyIgY2xhc3M9InVybCI+bW9ib3JiPC9hPiwKCQkJCQkJPC9saT4KCQkJ +CQkJPGxpIGNsYXNzPSJkYXRlIj4KCQkJCQkJCTxhYmJyIGNsYXNzPSJwdWJsaXNo +ZWQiIHRpdGxlPSIyMDExLTA2LTA4VDEzOjQxOjM1KzA0OjAwIj4gOCDQuNGO0L3R +jyAyMDExLCAxMzo0MTwvYWJicj4KCQkJCQkJPC9saT4KCQkJCQkJPGxpIGNsYXNz +PSJib29rbWFyayI+CgkJCQkJCQk8YSBocmVmPSIjY29tbWVudF8zOTY2OTU1IiB0 +aXRsZT0i0KHRgdGL0LvQutCwINC90LAg0LrQvtC80LzQtdC90YLQsNGA0LjQuSIg +cmVsPSJib29rbWFyayI+IzwvYT4KCQkJCQkJPC9saT4KCQkJCQkJCgkJCQkJCTxs +aSBjbGFzcz0idG8tZmF2cyBqcy10b19mYXZzX2hvbGRlciI+CgkJCQkJCQk8YSBo +cmVmPSIjIiBjbGFzcz0ianMtdG9fZmF2c19hZGQiIG9uY2xpY2s9ImZhdnNIYW5k +bGVyLmZhdm9yaXRlc1NlbmQodGhpcywgJ2NvbW1lbnRzJywgMzk2Njk1NSk7IHJl +dHVybiBmYWxzZTsiIHRpdGxlPSLQlNC+0LHQsNCy0LjRgtGMINCyINC40LfQsdGA +0LDQvdC90L7QtSI+PC9hPgoJCQkJCQk8L2xpPgoJCQkJCQkKCQkJCQkJPGxpIGNs +YXNzPSJ1cC10by1wYXJlbnQiPjxhIHRpdGxlPSLQntGC0LLQtdGCINC90LAiIG9u +Y2xpY2s9InJldHVybiBjb21tZW50Rm9ybS5nb1RvUGFyZW50Q29tbWVudCh0aGlz +KTsiIGhyZWY9IiNjb21tZW50XzM5NjY5MDkiPiZ1YXJyOzwvYT48L2xpPgoJCQkJ +CQk8bGkgY2xhc3M9ImRvd24tdG8tY2hpbGQgaGlkZGVuIj48YSB0aXRsZT0i0J7Q +sdGA0LDRgtC90L4iIG9uY2xpY2s9InJldHVybiBjb21tZW50Rm9ybS5nb1RvQ2hp +bGRDb21tZW50KHRoaXMpOyIgaHJlZj0iIyI+JmRhcnI7PC9hPjwvbGk+CgkJCQkJ +CTwhLS08bGkgY2xhc3M9InNpbmdsZS10cmVlIj4KCQkJCQkJCTxhIGNsYXNzPSJq +cy1zZXJ2IGpzLXNpbmdsZS10cmVlIiBocmVmPScjY29tbWVudF8zOTY2OTA5Jz7Q +stC10YLQutCwPC9hPgoJCQkJCQkJPGEgY2xhc3M9ImpzLXNlcnYganMtbXVsdGlw +bGF5LXRyZWUiIGhyZWY9IiNjb21tZW50XzM5NjY5NTUiPtCy0L7RgdGB0YLQsNC9 +0L7QstC40YLRjDwvYT4KCQkJCQkJPC9saT4tLT4KCQkJCQkJCgkJCQkJCTxsaT4K +CQkJCQkJCTx1bCBjbGFzcz0idm90ZSB2b3RpbmcgIG1pbmUgZXhwaXJlZCI+CgkJ +CQkJCQkJPGxpIGNsYXNzPSJtYXJrIj48c3Bhbj4wPC9zcGFuPjwvbGk+CgkJCQkJ +CQkJPGxpIGNsYXNzPSJidXR0b25zIj4KCQkJCQkJCQkJPGEgcmV2PSJ2b3Rlci1m +b3ItY29tbWVudDozOTY2OTU1IiBjbGFzcz0idm90ZV9taW51cyB2b3RlLWZvci1j +b21tZW50IiB0aXRsZT0i0J/Qu9C+0YXQvtC5INC60L7QvNC80LXQvdGC0LDRgNC4 +0LkiPjwvYT4KCQkJCQkJCQkJPGEgcmV2PSJ2b3Rlci1mb3ItY29tbWVudDozOTY2 +OTU1IiBjbGFzcz0idm90ZV9wbHVzIHZvdGUtZm9yLWNvbW1lbnQiIHRpdGxlPSLQ +pdC+0YDQvtGI0LjQuSDQutC+0LzQvNC10L3RgtCw0YDQuNC5Ij48L2E+CgkJCQkJ +CQkJPC9saT4KCQkJCQkJCTwvdWw+CgkJCQkJCTwvbGk+CgkJCQkJCQoJCQkJCTwv +dWw+CgoJCQkJPC9kaXY+CgoJCQkJPGRpdiBjbGFzcz0iZW50cnktY29udGVudCI+ +CgkJCQkJPGRpdiBjbGFzcz0iZW50cnktY29udGVudC1vbmx5Ij4KCQkJCQkgICAg +0JzQvtC20LXRgiDRh9GC0L4g0L/QvtGB0L7QstC10YLRg9C10YjRjCDQv9C+0LvR +g9GH0YjQtSDRh9C10LwgPGEgaHJlZj0iaHR0cDovL3ZpcnRzZXIubmV0L2Jsb2cv +cG9zdC9zb3VyY2UtY29kZS1oaWdobGlnaHRlci5hc3B4Ij5Tb3VyY2UgQ29kZSBI +aWdobGlnaHRlcjwvYT4sINCx0YvQuyDQsdGLINC+0YfQtdC90Ywg0LHQu9Cw0LPQ +vtC00LDRgNC10L0uCgkJCQkJPC9kaXY+CgkJCQkJPHAgY2xhc3M9InJlcGx5Ij48 +YSBjbGFzcz0ianMtc2VydiIgaHJlZj0iP3JlcGx5X3RvPTM5NjY5NTUjY29tbWVu +dF8zOTY2OTU1IiBvbmNsaWNrPSJjb21tZW50Rm9ybS5tb3ZlRm9ybSgncmVwbHlf +Zm9ybV8zOTY2OTU1Jyk7IHJldHVybiBmYWxzZTsiPtC+0YLQstC10YLQuNGC0Yw8 +L2E+PC9wPgoJCQkJPC9kaXY+CgoJCQkJPGRpdiBpZD0icmVwbHlfZm9ybV8zOTY2 +OTU1IiBjbGFzcz0icmVwbHlfZm9ybSI+CgoJCQkJCQoJCQkJPC9kaXY+CgkJCQoK +CQkJCgkJCQoJCQkKCgkJCQoJCQkJPHVsIGNsYXNzPSJoZW50cnkiPgoJCgkJPGxp +IGlkPSJjb21tZW50XzM5NjcxMjEiIGNsYXNzPSJjb21tZW50X2hvbGRlciB2b3Rl +X2hvbGRlciI+CgkJCQoJCQkJPGRpdiBjbGFzcz0ibXNnLW1ldGEiPgoJCQkJCTxk +aXYgY2xhc3M9ImZvbGRpbmctZG90LWhvbGRlciI+PGRpdiBjbGFzcz0iZm9sZGlu +Zy1kb3QiPjwvZGl2PjwvZGl2PgoJCQkJCTx1bCBjbGFzcz0ibWVudSBpbmZvIGF1 +dGhvciBoY2FyZCI+CgkJCQkJCTxsaSBjbGFzcz0iYXZhdGFyIj4KCQkJCQkJCTxh +IGhyZWY9Imh0dHA6Ly9BZ2VudF9TbWl0aC5oYWJyYWhhYnIucnUvIiB0aXRsZT0i +QWdlbnRfU21pdGgiPgoJCQkJCQkJCTxpbWcgc3JjPSJodHRwOi8vaGFicmFoYWJy +LnJ1L21lZGlhL3RodW1iLzQ3Lzc3Lzc5LzI5NjEyLzI5NjEyXzI0eDI0LmpwZyIg +YWx0PSJBZ2VudF9TbWl0aCIgLz4KCQkJCQkJCQk8Yj48L2I+CgkJCQkJCQk8L2E+ +CgkJCQkJCTwvbGk+CgkJCQkJCTxsaSBjbGFzcz0iZm4gbmlja25hbWUgdXNlcm5h +bWUiPgoJCQkJCQkJPGEgaHJlZj0iaHR0cDovL0FnZW50X1NtaXRoLmhhYnJhaGFi +ci5ydS8iIGNsYXNzPSJ1cmwiPkFnZW50X1NtaXRoPC9hPiwKCQkJCQkJPC9saT4K +CQkJCQkJPGxpIGNsYXNzPSJkYXRlIj4KCQkJCQkJCTxhYmJyIGNsYXNzPSJwdWJs +aXNoZWQiIHRpdGxlPSIyMDExLTA2LTA4VDE0OjI5OjE3KzA0OjAwIj4gOCDQuNGO +0L3RjyAyMDExLCAxNDoyOTwvYWJicj4KCQkJCQkJPC9saT4KCQkJCQkJPGxpIGNs +YXNzPSJib29rbWFyayI+CgkJCQkJCQk8YSBocmVmPSIjY29tbWVudF8zOTY3MTIx +IiB0aXRsZT0i0KHRgdGL0LvQutCwINC90LAg0LrQvtC80LzQtdC90YLQsNGA0LjQ +uSIgcmVsPSJib29rbWFyayI+IzwvYT4KCQkJCQkJPC9saT4KCQkJCQkJCgkJCQkJ +CTxsaSBjbGFzcz0idG8tZmF2cyBqcy10b19mYXZzX2hvbGRlciI+CgkJCQkJCQk8 +YSBocmVmPSIjIiBjbGFzcz0ianMtdG9fZmF2c19hZGQiIG9uY2xpY2s9ImZhdnNI +YW5kbGVyLmZhdm9yaXRlc1NlbmQodGhpcywgJ2NvbW1lbnRzJywgMzk2NzEyMSk7 +IHJldHVybiBmYWxzZTsiIHRpdGxlPSLQlNC+0LHQsNCy0LjRgtGMINCyINC40LfQ +sdGA0LDQvdC90L7QtSI+PC9hPgoJCQkJCQk8L2xpPgoJCQkJCQkKCQkJCQkJPGxp +IGNsYXNzPSJ1cC10by1wYXJlbnQiPjxhIHRpdGxlPSLQntGC0LLQtdGCINC90LAi +IG9uY2xpY2s9InJldHVybiBjb21tZW50Rm9ybS5nb1RvUGFyZW50Q29tbWVudCh0 +aGlzKTsiIGhyZWY9IiNjb21tZW50XzM5NjY5NTUiPiZ1YXJyOzwvYT48L2xpPgoJ +CQkJCQk8bGkgY2xhc3M9ImRvd24tdG8tY2hpbGQgaGlkZGVuIj48YSB0aXRsZT0i +0J7QsdGA0LDRgtC90L4iIG9uY2xpY2s9InJldHVybiBjb21tZW50Rm9ybS5nb1Rv +Q2hpbGRDb21tZW50KHRoaXMpOyIgaHJlZj0iIyI+JmRhcnI7PC9hPjwvbGk+CgkJ +CQkJCTwhLS08bGkgY2xhc3M9InNpbmdsZS10cmVlIj4KCQkJCQkJCTxhIGNsYXNz +PSJqcy1zZXJ2IGpzLXNpbmdsZS10cmVlIiBocmVmPScjY29tbWVudF8zOTY2OTU1 +Jz7QstC10YLQutCwPC9hPgoJCQkJCQkJPGEgY2xhc3M9ImpzLXNlcnYganMtbXVs +dGlwbGF5LXRyZWUiIGhyZWY9IiNjb21tZW50XzM5NjcxMjEiPtCy0L7RgdGB0YLQ +sNC90L7QstC40YLRjDwvYT4KCQkJCQkJPC9saT4tLT4KCQkJCQkJCgkJCQkJCTxs +aT4KCQkJCQkJCTx1bCBjbGFzcz0idm90ZSB2b3RpbmcgIGV4cGlyZWQiPgoJCQkJ +CQkJCTxsaSBjbGFzcz0ibWFyayI+PHNwYW4+MDwvc3Bhbj48L2xpPgoJCQkJCQkJ +CTxsaSBjbGFzcz0iYnV0dG9ucyI+CgkJCQkJCQkJCTxhIHJldj0idm90ZXItZm9y +LWNvbW1lbnQ6Mzk2NzEyMSIgY2xhc3M9InZvdGVfbWludXMgdm90ZS1mb3ItY29t +bWVudCIgdGl0bGU9ItCf0LvQvtGF0L7QuSDQutC+0LzQvNC10L3RgtCw0YDQuNC5 +Ij48L2E+CgkJCQkJCQkJCTxhIHJldj0idm90ZXItZm9yLWNvbW1lbnQ6Mzk2NzEy +MSIgY2xhc3M9InZvdGVfcGx1cyB2b3RlLWZvci1jb21tZW50IiB0aXRsZT0i0KXQ +vtGA0L7RiNC40Lkg0LrQvtC80LzQtdC90YLQsNGA0LjQuSI+PC9hPgoJCQkJCQkJ +CTwvbGk+CgkJCQkJCQk8L3VsPgoJCQkJCQk8L2xpPgoJCQkJCQkKCQkJCQk8L3Vs +PgoKCQkJCTwvZGl2PgoKCQkJCTxkaXYgY2xhc3M9ImVudHJ5LWNvbnRlbnQiPgoJ +CQkJCTxkaXYgY2xhc3M9ImVudHJ5LWNvbnRlbnQtb25seSI+CgkJCQkJICAgIDxj +b2RlPiZsdDsvc291cmNlIGxhbmc9JnF1b3Q7Y3BwJnF1b3Q7Jmd0OyZsdDsvL3Nv +dXJjZSZndDs8L2NvZGU+INC/0L7Qv9GA0L7QsdGD0LnRgtC1LCDRhdC+0YLRjyDQ +vdC1INGD0LLQtdGA0LXQvSDRh9GC0L4g0LHRg9C00LXRgiDQstGL0LPQu9GP0LTQ +tdGC0Ywg0LvRg9GH0YjQtS4KCQkJCQk8L2Rpdj4KCQkJCQk8cCBjbGFzcz0icmVw +bHkiPjxhIGNsYXNzPSJqcy1zZXJ2IiBocmVmPSI/cmVwbHlfdG89Mzk2NzEyMSNj +b21tZW50XzM5NjcxMjEiIG9uY2xpY2s9ImNvbW1lbnRGb3JtLm1vdmVGb3JtKCdy +ZXBseV9mb3JtXzM5NjcxMjEnKTsgcmV0dXJuIGZhbHNlOyI+0L7RgtCy0LXRgtC4 +0YLRjDwvYT48L3A+CgkJCQk8L2Rpdj4KCgkJCQk8ZGl2IGlkPSJyZXBseV9mb3Jt +XzM5NjcxMjEiIGNsYXNzPSJyZXBseV9mb3JtIj4KCgkJCQkJCgkJCQk8L2Rpdj4K +CQkJCgoJCQkKCQkJCgkJCQoKCQkJCgoJCTwvbGk+CgkKPC91bD4KCgkJCQoKCQk8 +L2xpPgoJCjwvdWw+CgoJCQkKCgkJPC9saT4KCQoJCTxsaSBpZD0iY29tbWVudF8z +OTY3MTYwIiBjbGFzcz0iY29tbWVudF9ob2xkZXIgdm90ZV9ob2xkZXIiPgoJCQkK +CQkJCTxkaXYgY2xhc3M9Im1zZy1tZXRhIj4KCQkJCQk8ZGl2IGNsYXNzPSJmb2xk +aW5nLWRvdC1ob2xkZXIiPjxkaXYgY2xhc3M9ImZvbGRpbmctZG90Ij48L2Rpdj48 +L2Rpdj4KCQkJCQk8dWwgY2xhc3M9Im1lbnUgaW5mbyBhdXRob3IgaGNhcmQiPgoJ +CQkJCQk8bGkgY2xhc3M9ImF2YXRhciI+CgkJCQkJCQk8YSBocmVmPSJodHRwOi8v +U3BlYWt1cy5oYWJyYWhhYnIucnUvIiB0aXRsZT0iU3BlYWt1cyI+CgkJCQkJCQkJ +PGltZyBzcmM9Imh0dHA6Ly9oYWJyYWhhYnIucnUvaS9hdmF0YXJzL3N0dWItdXNl +ci1zbWFsbC5naWYiIGFsdD0iU3BlYWt1cyIgLz4KCQkJCQkJCQk8Yj48L2I+CgkJ +CQkJCQk8L2E+CgkJCQkJCTwvbGk+CgkJCQkJCTxsaSBjbGFzcz0iZm4gbmlja25h +bWUgdXNlcm5hbWUiPgoJCQkJCQkJPGEgaHJlZj0iaHR0cDovL1NwZWFrdXMuaGFi +cmFoYWJyLnJ1LyIgY2xhc3M9InVybCI+U3BlYWt1czwvYT4sCgkJCQkJCTwvbGk+ +CgkJCQkJCTxsaSBjbGFzcz0iZGF0ZSI+CgkJCQkJCQk8YWJiciBjbGFzcz0icHVi +bGlzaGVkIiB0aXRsZT0iMjAxMS0wNi0wOFQxNDozOTo0NyswNDowMCI+IDgg0LjR +jtC90Y8gMjAxMSwgMTQ6Mzk8L2FiYnI+CgkJCQkJCTwvbGk+CgkJCQkJCTxsaSBj +bGFzcz0iYm9va21hcmsiPgoJCQkJCQkJPGEgaHJlZj0iI2NvbW1lbnRfMzk2NzE2 +MCIgdGl0bGU9ItCh0YHRi9C70LrQsCDQvdCwINC60L7QvNC80LXQvdGC0LDRgNC4 +0LkiIHJlbD0iYm9va21hcmsiPiM8L2E+CgkJCQkJCTwvbGk+CgkJCQkJCQoJCQkJ +CQk8bGkgY2xhc3M9InRvLWZhdnMganMtdG9fZmF2c19ob2xkZXIiPgoJCQkJCQkJ +PGEgaHJlZj0iIyIgY2xhc3M9ImpzLXRvX2ZhdnNfYWRkIiBvbmNsaWNrPSJmYXZz +SGFuZGxlci5mYXZvcml0ZXNTZW5kKHRoaXMsICdjb21tZW50cycsIDM5NjcxNjAp +OyByZXR1cm4gZmFsc2U7IiB0aXRsZT0i0JTQvtCx0LDQstC40YLRjCDQsiDQuNC3 +0LHRgNCw0L3QvdC+0LUiPjwvYT4KCQkJCQkJPC9saT4KCQkJCQkJCgkJCQkJCQoJ +CQkJCQk8bGkgY2xhc3M9ImRvd24tdG8tY2hpbGQgaGlkZGVuIj48YSB0aXRsZT0i +0J7QsdGA0LDRgtC90L4iIG9uY2xpY2s9InJldHVybiBjb21tZW50Rm9ybS5nb1Rv +Q2hpbGRDb21tZW50KHRoaXMpOyIgaHJlZj0iIyI+JmRhcnI7PC9hPjwvbGk+CgkJ +CQkJCTwhLS08bGkgY2xhc3M9InNpbmdsZS10cmVlIj4KCQkJCQkJCTxhIGNsYXNz +PSJqcy1zZXJ2IGpzLXNpbmdsZS10cmVlIiBocmVmPScnPtCy0LXRgtC60LA8L2E+ +CgkJCQkJCQk8YSBjbGFzcz0ianMtc2VydiBqcy1tdWx0aXBsYXktdHJlZSIgaHJl +Zj0iI2NvbW1lbnRfMzk2NzE2MCI+0LLQvtGB0YHRgtCw0L3QvtCy0LjRgtGMPC9h +PgoJCQkJCQk8L2xpPi0tPgoJCQkJCQkKCQkJCQkJPGxpPgoJCQkJCQkJPHVsIGNs +YXNzPSJ2b3RlIHZvdGluZyAgZXhwaXJlZCI+CgkJCQkJCQkJPGxpIGNsYXNzPSJt +YXJrIj48c3Bhbj4wPC9zcGFuPjwvbGk+CgkJCQkJCQkJPGxpIGNsYXNzPSJidXR0 +b25zIj4KCQkJCQkJCQkJPGEgcmV2PSJ2b3Rlci1mb3ItY29tbWVudDozOTY3MTYw +IiBjbGFzcz0idm90ZV9taW51cyB2b3RlLWZvci1jb21tZW50IiB0aXRsZT0i0J/Q +u9C+0YXQvtC5INC60L7QvNC80LXQvdGC0LDRgNC40LkiPjwvYT4KCQkJCQkJCQkJ +PGEgcmV2PSJ2b3Rlci1mb3ItY29tbWVudDozOTY3MTYwIiBjbGFzcz0idm90ZV9w +bHVzIHZvdGUtZm9yLWNvbW1lbnQiIHRpdGxlPSLQpdC+0YDQvtGI0LjQuSDQutC+ +0LzQvNC10L3RgtCw0YDQuNC5Ij48L2E+CgkJCQkJCQkJPC9saT4KCQkJCQkJCTwv +dWw+CgkJCQkJCTwvbGk+CgkJCQkJCQoJCQkJCTwvdWw+CgoJCQkJPC9kaXY+CgoJ +CQkJPGRpdiBjbGFzcz0iZW50cnktY29udGVudCI+CgkJCQkJPGRpdiBjbGFzcz0i +ZW50cnktY29udGVudC1vbmx5Ij4KCQkJCQkgICAg0KfQtdCz0L4t0YLQviDRjyDQ +vdC1INC+0YfQtdC90Ywg0L/QvtC90Y/QuyDQv9GA0LXQuNC80YPRidC10YHRgtCy +0L4g0LHQu9C+0LrQvtCyLCDQuNCx0L4g0L/QtdGA0LLRi9C5INC20LUg0L/RgNC4 +0LzQtdGAINC90LUg0YDQsNCx0L7Rh9C40LnigKY8YnIvPg0KPGJyLz4NCjxibG9j +a3F1b3RlPjxjb2RlPjxmb250IGNvbG9yPSJibGFjayI+TlNBcnJheSogc3RyaW5n +c0xlbmd0aHMoIE5TQXJyYXkqIHN0cmluZ3NfICk8YnIvPg0Kezxici8+DQombmJz +cDs8Zm9udCBjb2xvcj0iIzAwMDBmZiI+cmV0dXJuPC9mb250PiBbIHN0cmluZ3Nf +IG1hcDogXiggaWQgc3RyaW5nXyApPGJyLz4NCiZuYnNwO3s8YnIvPg0KJm5ic3A7 +IDxmb250IGNvbG9yPSIjMDAwMGZmIj5yZXR1cm48L2ZvbnQ+IChpZClbIE5TTnVt +YmVyIG51bWJlcldpdGhVbnNpZ25lZEludDogWyBzdHJpbmdfIGxlbmd0aCBdIF07 +PGJyLz4NCiZuYnNwO30gXTs8YnIvPg0KfTwvZm9udD48YnIvPg0KPGJyLz4NCjxm +b250IGNvbG9yPSJncmF5Ij4qIFRoaXMgc291cmNlIGNvZGUgd2FzIGhpZ2hsaWdo +dGVkIHdpdGggPGEgaHJlZj0iaHR0cDovL3ZpcnRzZXIubmV0L2Jsb2cvcG9zdC9z +b3VyY2UtY29kZS1oaWdobGlnaHRlci5hc3B4Ij48Zm9udCBjb2xvcj0iZ3JheSI+ +U291cmNlIENvZGUgSGlnaGxpZ2h0ZXI8L2ZvbnQ+PC9hPi48L2ZvbnQ+PC9jb2Rl +PjwvYmxvY2txdW90ZT48YnIvPg0Kd2FybmluZzogJ05TQXJyYXknIG1heSBub3Qg +cmVzcG9uZCB0byAnLW1hcDonPGJyLz4NCjxici8+DQoKCQkJCQk8L2Rpdj4KCQkJ +CQk8cCBjbGFzcz0icmVwbHkiPjxhIGNsYXNzPSJqcy1zZXJ2IiBocmVmPSI/cmVw +bHlfdG89Mzk2NzE2MCNjb21tZW50XzM5NjcxNjAiIG9uY2xpY2s9ImNvbW1lbnRG +b3JtLm1vdmVGb3JtKCdyZXBseV9mb3JtXzM5NjcxNjAnKTsgcmV0dXJuIGZhbHNl +OyI+0L7RgtCy0LXRgtC40YLRjDwvYT48L3A+CgkJCQk8L2Rpdj4KCgkJCQk8ZGl2 +IGlkPSJyZXBseV9mb3JtXzM5NjcxNjAiIGNsYXNzPSJyZXBseV9mb3JtIj4KCgkJ +CQkJCgkJCQk8L2Rpdj4KCQkJCgoJCQkKCQkJCgkJCQoKCQkJCgkJCQk8dWwgY2xh +c3M9ImhlbnRyeSI+CgkKCQk8bGkgaWQ9ImNvbW1lbnRfMzk2NzIwMSIgY2xhc3M9 +ImNvbW1lbnRfaG9sZGVyIHZvdGVfaG9sZGVyIj4KCQkJCgkJCQk8ZGl2IGNsYXNz +PSJtc2ctbWV0YSI+CgkJCQkJPGRpdiBjbGFzcz0iZm9sZGluZy1kb3QtaG9sZGVy +Ij48ZGl2IGNsYXNzPSJmb2xkaW5nLWRvdCI+PC9kaXY+PC9kaXY+CgkJCQkJPHVs +IGNsYXNzPSJtZW51IGluZm8gYXV0aG9yIGhjYXJkIj4KCQkJCQkJPGxpIGNsYXNz +PSJhdmF0YXIiPgoJCQkJCQkJPGEgaHJlZj0iaHR0cDovL1NwZWFrdXMuaGFicmFo +YWJyLnJ1LyIgdGl0bGU9IlNwZWFrdXMiPgoJCQkJCQkJCTxpbWcgc3JjPSJodHRw +Oi8vaGFicmFoYWJyLnJ1L2kvYXZhdGFycy9zdHViLXVzZXItc21hbGwuZ2lmIiBh +bHQ9IlNwZWFrdXMiIC8+CgkJCQkJCQkJPGI+PC9iPgoJCQkJCQkJPC9hPgoJCQkJ +CQk8L2xpPgoJCQkJCQk8bGkgY2xhc3M9ImZuIG5pY2tuYW1lIHVzZXJuYW1lIj4K +CQkJCQkJCTxhIGhyZWY9Imh0dHA6Ly9TcGVha3VzLmhhYnJhaGFici5ydS8iIGNs +YXNzPSJ1cmwiPlNwZWFrdXM8L2E+LAoJCQkJCQk8L2xpPgoJCQkJCQk8bGkgY2xh +c3M9ImRhdGUiPgoJCQkJCQkJPGFiYnIgY2xhc3M9InB1Ymxpc2hlZCIgdGl0bGU9 +IjIwMTEtMDYtMDhUMTQ6NDk6NTIrMDQ6MDAiPiA4INC40Y7QvdGPIDIwMTEsIDE0 +OjQ5PC9hYmJyPgoJCQkJCQk8L2xpPgoJCQkJCQk8bGkgY2xhc3M9ImJvb2ttYXJr +Ij4KCQkJCQkJCTxhIGhyZWY9IiNjb21tZW50XzM5NjcyMDEiIHRpdGxlPSLQodGB +0YvQu9C60LAg0L3QsCDQutC+0LzQvNC10L3RgtCw0YDQuNC5IiByZWw9ImJvb2tt +YXJrIj4jPC9hPgoJCQkJCQk8L2xpPgoJCQkJCQkKCQkJCQkJPGxpIGNsYXNzPSJ0 +by1mYXZzIGpzLXRvX2ZhdnNfaG9sZGVyIj4KCQkJCQkJCTxhIGhyZWY9IiMiIGNs +YXNzPSJqcy10b19mYXZzX2FkZCIgb25jbGljaz0iZmF2c0hhbmRsZXIuZmF2b3Jp +dGVzU2VuZCh0aGlzLCAnY29tbWVudHMnLCAzOTY3MjAxKTsgcmV0dXJuIGZhbHNl +OyIgdGl0bGU9ItCU0L7QsdCw0LLQuNGC0Ywg0LIg0LjQt9Cx0YDQsNC90L3QvtC1 +Ij48L2E+CgkJCQkJCTwvbGk+CgkJCQkJCQoJCQkJCQk8bGkgY2xhc3M9InVwLXRv +LXBhcmVudCI+PGEgdGl0bGU9ItCe0YLQstC10YIg0L3QsCIgb25jbGljaz0icmV0 +dXJuIGNvbW1lbnRGb3JtLmdvVG9QYXJlbnRDb21tZW50KHRoaXMpOyIgaHJlZj0i +I2NvbW1lbnRfMzk2NzE2MCI+JnVhcnI7PC9hPjwvbGk+CgkJCQkJCTxsaSBjbGFz +cz0iZG93bi10by1jaGlsZCBoaWRkZW4iPjxhIHRpdGxlPSLQntCx0YDQsNGC0L3Q +viIgb25jbGljaz0icmV0dXJuIGNvbW1lbnRGb3JtLmdvVG9DaGlsZENvbW1lbnQo +dGhpcyk7IiBocmVmPSIjIj4mZGFycjs8L2E+PC9saT4KCQkJCQkJPCEtLTxsaSBj +bGFzcz0ic2luZ2xlLXRyZWUiPgoJCQkJCQkJPGEgY2xhc3M9ImpzLXNlcnYganMt +c2luZ2xlLXRyZWUiIGhyZWY9JyNjb21tZW50XzM5NjcxNjAnPtCy0LXRgtC60LA8 +L2E+CgkJCQkJCQk8YSBjbGFzcz0ianMtc2VydiBqcy1tdWx0aXBsYXktdHJlZSIg +aHJlZj0iI2NvbW1lbnRfMzk2NzIwMSI+0LLQvtGB0YHRgtCw0L3QvtCy0LjRgtGM +PC9hPgoJCQkJCQk8L2xpPi0tPgoJCQkJCQkKCQkJCQkJPGxpPgoJCQkJCQkJPHVs +IGNsYXNzPSJ2b3RlIHZvdGluZyBwb3NpdGl2ZSBleHBpcmVkIj4KCQkJCQkJCQk8 +bGkgY2xhc3M9Im1hcmsiPjxzcGFuPisxPC9zcGFuPjwvbGk+CgkJCQkJCQkJPGxp +IGNsYXNzPSJidXR0b25zIj4KCQkJCQkJCQkJPGEgcmV2PSJ2b3Rlci1mb3ItY29t +bWVudDozOTY3MjAxIiBjbGFzcz0idm90ZV9taW51cyB2b3RlLWZvci1jb21tZW50 +IiB0aXRsZT0i0J/Qu9C+0YXQvtC5INC60L7QvNC80LXQvdGC0LDRgNC40LkiPjwv +YT4KCQkJCQkJCQkJPGEgcmV2PSJ2b3Rlci1mb3ItY29tbWVudDozOTY3MjAxIiBj +bGFzcz0idm90ZV9wbHVzIHZvdGUtZm9yLWNvbW1lbnQiIHRpdGxlPSLQpdC+0YDQ +vtGI0LjQuSDQutC+0LzQvNC10L3RgtCw0YDQuNC5Ij48L2E+CgkJCQkJCQkJPC9s +aT4KCQkJCQkJCTwvdWw+CgkJCQkJCTwvbGk+CgkJCQkJCQoJCQkJCTwvdWw+CgoJ +CQkJPC9kaXY+CgoJCQkJPGRpdiBjbGFzcz0iZW50cnktY29udGVudCI+CgkJCQkJ +PGRpdiBjbGFzcz0iZW50cnktY29udGVudC1vbmx5Ij4KCQkJCQkgICAg0Y8g0LrQ +sNC20LXRgtGB0Y8g0L/QvtC90Y/QuyDigJQg0LLRiyDRgNC10LrQvtC80LXQvdC0 +0YPQtdGC0LUg0L/QvtC00LrQu9GO0YfQuNGC0Ywg0LLQvdC10YjQvdGO0Y4g0LHQ +uNCx0LvQuNC+0YLQtdC60YMsINGH0YLQvtCx0Ysg0LrQvtC0INGA0LDQsdC+0YLQ +sNC7LiDQndGDINGC0L7Qs9C00LAg0L7Rh9C10LLQuNC00L3QviDRh9GC0L4g0YHR +gNCw0LLQvdC10L3QuNC1INC90LUg0LrQvtGA0YDQtdC60YLQvdC+LCDQuNCx0L4g +0YDQtdGI0LXQvdC40LUgMSDQvdC1INC40YHQv9C+0LvRjNC30YPQt9C10YIg0L3Q +uNC60LDQutC40YUg0LLQvdC10YjQvdC40YUg0LHQuNCx0LvQuNC+0YLQtdC6LCDQ +sCDRgNC10YjQtdC90LjQtSAyINC40YHQv9C+0LvRjNC30YPQtdGCLiDQodC00LXQ +u9Cw0YLRjCDRgNC10YjQtdC90LjQtSAxINCx0L7Qu9C10LUgwqvRjdC70LXQs9Cw +0L3RgtC90L7CuyDQvdC+INGH0YLQvtCx0Ysg0L7QvdC+INC40YHQv9C+0LvRjNC3 +0L7QstCw0LvQviDQstC90LXRiNC90Y7RjiDQsdC40LHQu9C40L7RgtC10LrRgyAo +0LHQtdC3INCx0LvQvtC60L7Qsikg0LLQv9C+0LvQvdC1INGB0LXQsdC1INCy0L7Q +t9C80L7QvdC+0LbQvdC+Ljxici8+DQrQoi7QtS4g0LDRgNCz0YPQvNC10L3Rgjxi +ci8+DQo8YmxvY2txdW90ZT7QndC+INC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC1 +INCx0LvQvtC60L7QsiDQuNC80LXQtdGCINC90LUg0LzQsNC70L4g0L/RgNC10LjQ +vNGD0YnQtdGB0YLQsiwg0Lgg0L/QtdGA0LLQvtC1INC40Lcg0L3QuNGFIOKAlCDR +gdGD0YnQtdGB0YLQstC10L3QvdCw0Y8g0Y3QutC+0L3QvtC80LjRjyDQvdCwINC6 +0L7Qu9C40YfQtdGB0YLQstC1INC60L7QtNCwLDwvYmxvY2txdW90ZT7QvdC1INGB +0L7RgdGC0L7Rj9GC0LXQu9C10L0gKNC60L7QtCDQsdGL0Lsg0LLRi9C90LXRgdC1 +0L0g0LLQviDQstC90LXRiNC90Y7RjiDQsdC40LHQu9C40L7RgtC10LrRgykuINCS +0L/RgNC+0YfQtdC8INC/0YDQvtC00L7Qu9C20LXQvdC40LU8YmxvY2txdW90ZT4g +0LAg0YHQu9C10LTQvtCy0LDRgtC10LvRjNC90L4g0Lgg0L3QsCDQstGA0LXQvNC1 +0L3QuCDQvdCw0L/QuNGB0LDQvdC40Y8g0Lgg0L/QvtC00LTQtdGA0LbQutC1Ljwv +YmxvY2txdW90ZT4g0J7Rh9C10L3RjCDRgdC+0LzQvdC40YLQtdC70YzQvdC+IOKA +lCDQuNCx0L4g0LvRg9GH0YjQtSAxMCDRgdGC0YDQvtC6INGH0LjRgdGC0L7Qs9C+ +INC00LvRjyDQv9C+0L3QuNC80LDQvdC40Y8g0LrQvtC00LAg0L/RgNC+0YLQuNCy +INC+0LTQvdC+0Lkg0YHRgtGA0L7Rh9C60Lgg0LIg0LrQvtGC0L7RgNC+0Lkg0YfQ +tdGA0YIg0L3QvtCz0YMg0YHQu9C+0LzQuNGC4oCmPGJyLz4NCtCi0L7Qv9C40Log +0L/Qu9GO0YHQsNC90YPQuyDQuNCx0L4g0L7QvSDQvdCw0LrQvtC90LXRhiDQvNC9 +0LUg0L/QvtC80L7QsyDQv9C+0L3Rj9GC0Ywg0LzQvdC1INGH0YLQviDQsdC70L7Q +utC4INC80L3QtSDRgdC+0LLRgdC10Lwg0L3QtSDQvdGD0LbQvdGLLgoJCQkJCTwv +ZGl2PgoJCQkJCTxwIGNsYXNzPSJyZXBseSI+PGEgY2xhc3M9ImpzLXNlcnYiIGhy +ZWY9Ij9yZXBseV90bz0zOTY3MjAxI2NvbW1lbnRfMzk2NzIwMSIgb25jbGljaz0i +Y29tbWVudEZvcm0ubW92ZUZvcm0oJ3JlcGx5X2Zvcm1fMzk2NzIwMScpOyByZXR1 +cm4gZmFsc2U7Ij7QvtGC0LLQtdGC0LjRgtGMPC9hPjwvcD4KCQkJCTwvZGl2PgoK +CQkJCTxkaXYgaWQ9InJlcGx5X2Zvcm1fMzk2NzIwMSIgY2xhc3M9InJlcGx5X2Zv +cm0iPgoKCQkJCQkKCQkJCTwvZGl2PgoJCQkKCgkJCQoJCQkKCQkJCgoJCQkKCQkJ +CTx1bCBjbGFzcz0iaGVudHJ5Ij4KCQoJCTxsaSBpZD0iY29tbWVudF8zOTY3NDQ2 +IiBjbGFzcz0iY29tbWVudF9ob2xkZXIgdm90ZV9ob2xkZXIiPgoJCQkKCQkJCTxk +aXYgY2xhc3M9Im1zZy1tZXRhIj4KCQkJCQk8ZGl2IGNsYXNzPSJmb2xkaW5nLWRv +dC1ob2xkZXIiPjxkaXYgY2xhc3M9ImZvbGRpbmctZG90Ij48L2Rpdj48L2Rpdj4K +CQkJCQk8dWwgY2xhc3M9Im1lbnUgaW5mbyBhdXRob3IgaGNhcmQiPgoJCQkJCQk8 +bGkgY2xhc3M9ImF2YXRhciI+CgkJCQkJCQk8YSBocmVmPSJodHRwOi8vRHJlZGRp +ay5oYWJyYWhhYnIucnUvIiB0aXRsZT0iRHJlZGRpayI+CgkJCQkJCQkJPGltZyBz +cmM9Imh0dHA6Ly9oYWJyYWhhYnIucnUvbWVkaWEvdGh1bWIvMDEvMTQvNGMvNDQy +NjcvNDQyNjdfMjR4MjQuanBnIiBhbHQ9IkRyZWRkaWsiIC8+CgkJCQkJCQkJPGI+ +PC9iPgoJCQkJCQkJPC9hPgoJCQkJCQk8L2xpPgoJCQkJCQk8bGkgY2xhc3M9ImZu +IG5pY2tuYW1lIHVzZXJuYW1lIj4KCQkJCQkJCTxhIGhyZWY9Imh0dHA6Ly9EcmVk +ZGlrLmhhYnJhaGFici5ydS8iIGNsYXNzPSJ1cmwiPkRyZWRkaWs8L2E+LAoJCQkJ +CQk8L2xpPgoJCQkJCQk8bGkgY2xhc3M9ImRhdGUiPgoJCQkJCQkJPGFiYnIgY2xh +c3M9InB1Ymxpc2hlZCIgdGl0bGU9IjIwMTEtMDYtMDhUMTU6NDU6MzYrMDQ6MDAi +PiA4INC40Y7QvdGPIDIwMTEsIDE1OjQ1PC9hYmJyPgoJCQkJCQk8L2xpPgoJCQkJ +CQk8bGkgY2xhc3M9ImJvb2ttYXJrIj4KCQkJCQkJCTxhIGhyZWY9IiNjb21tZW50 +XzM5Njc0NDYiIHRpdGxlPSLQodGB0YvQu9C60LAg0L3QsCDQutC+0LzQvNC10L3R +gtCw0YDQuNC5IiByZWw9ImJvb2ttYXJrIj4jPC9hPgoJCQkJCQk8L2xpPgoJCQkJ +CQkKCQkJCQkJPGxpIGNsYXNzPSJ0by1mYXZzIGpzLXRvX2ZhdnNfaG9sZGVyIj4K +CQkJCQkJCTxhIGhyZWY9IiMiIGNsYXNzPSJqcy10b19mYXZzX2FkZCIgb25jbGlj +az0iZmF2c0hhbmRsZXIuZmF2b3JpdGVzU2VuZCh0aGlzLCAnY29tbWVudHMnLCAz +OTY3NDQ2KTsgcmV0dXJuIGZhbHNlOyIgdGl0bGU9ItCU0L7QsdCw0LLQuNGC0Ywg +0LIg0LjQt9Cx0YDQsNC90L3QvtC1Ij48L2E+CgkJCQkJCTwvbGk+CgkJCQkJCQoJ +CQkJCQk8bGkgY2xhc3M9InVwLXRvLXBhcmVudCI+PGEgdGl0bGU9ItCe0YLQstC1 +0YIg0L3QsCIgb25jbGljaz0icmV0dXJuIGNvbW1lbnRGb3JtLmdvVG9QYXJlbnRD +b21tZW50KHRoaXMpOyIgaHJlZj0iI2NvbW1lbnRfMzk2NzIwMSI+JnVhcnI7PC9h +PjwvbGk+CgkJCQkJCTxsaSBjbGFzcz0iZG93bi10by1jaGlsZCBoaWRkZW4iPjxh +IHRpdGxlPSLQntCx0YDQsNGC0L3QviIgb25jbGljaz0icmV0dXJuIGNvbW1lbnRG +b3JtLmdvVG9DaGlsZENvbW1lbnQodGhpcyk7IiBocmVmPSIjIj4mZGFycjs8L2E+ +PC9saT4KCQkJCQkJPCEtLTxsaSBjbGFzcz0ic2luZ2xlLXRyZWUiPgoJCQkJCQkJ +PGEgY2xhc3M9ImpzLXNlcnYganMtc2luZ2xlLXRyZWUiIGhyZWY9JyNjb21tZW50 +XzM5NjcyMDEnPtCy0LXRgtC60LA8L2E+CgkJCQkJCQk8YSBjbGFzcz0ianMtc2Vy +diBqcy1tdWx0aXBsYXktdHJlZSIgaHJlZj0iI2NvbW1lbnRfMzk2NzQ0NiI+0LLQ +vtGB0YHRgtCw0L3QvtCy0LjRgtGMPC9hPgoJCQkJCQk8L2xpPi0tPgoJCQkJCQkK +CQkJCQkJPGxpPgoJCQkJCQkJPHVsIGNsYXNzPSJ2b3RlIHZvdGluZyAgZXhwaXJl +ZCI+CgkJCQkJCQkJPGxpIGNsYXNzPSJtYXJrIj48c3Bhbj4wPC9zcGFuPjwvbGk+ +CgkJCQkJCQkJPGxpIGNsYXNzPSJidXR0b25zIj4KCQkJCQkJCQkJPGEgcmV2PSJ2 +b3Rlci1mb3ItY29tbWVudDozOTY3NDQ2IiBjbGFzcz0idm90ZV9taW51cyB2b3Rl +LWZvci1jb21tZW50IiB0aXRsZT0i0J/Qu9C+0YXQvtC5INC60L7QvNC80LXQvdGC +0LDRgNC40LkiPjwvYT4KCQkJCQkJCQkJPGEgcmV2PSJ2b3Rlci1mb3ItY29tbWVu +dDozOTY3NDQ2IiBjbGFzcz0idm90ZV9wbHVzIHZvdGUtZm9yLWNvbW1lbnQiIHRp +dGxlPSLQpdC+0YDQvtGI0LjQuSDQutC+0LzQvNC10L3RgtCw0YDQuNC5Ij48L2E+ +CgkJCQkJCQkJPC9saT4KCQkJCQkJCTwvdWw+CgkJCQkJCTwvbGk+CgkJCQkJCQoJ +CQkJCTwvdWw+CgoJCQkJPC9kaXY+CgoJCQkJPGRpdiBjbGFzcz0iZW50cnktY29u +dGVudCI+CgkJCQkJPGRpdiBjbGFzcz0iZW50cnktY29udGVudC1vbmx5Ij4KCQkJ +CQkgICAg0J/QvtC00LTQtdGA0LbQuNCy0LDRjiDQttGD0YLQutGD0Y4g0L3QtdGH +0LjRgtCw0LXQvNC+0YHRgtGMINC60L7QtNCwLiDQpdC+0YLRjywg0LLQvtC30LzQ +vtC20L3Qviwg0Y3RgtC+INC00LXQu9C+INC/0YDQuNCy0YvRh9C60LguCgkJCQkJ +PC9kaXY+CgkJCQkJPHAgY2xhc3M9InJlcGx5Ij48YSBjbGFzcz0ianMtc2VydiIg +aHJlZj0iP3JlcGx5X3RvPTM5Njc0NDYjY29tbWVudF8zOTY3NDQ2IiBvbmNsaWNr +PSJjb21tZW50Rm9ybS5tb3ZlRm9ybSgncmVwbHlfZm9ybV8zOTY3NDQ2Jyk7IHJl +dHVybiBmYWxzZTsiPtC+0YLQstC10YLQuNGC0Yw8L2E+PC9wPgoJCQkJPC9kaXY+ +CgoJCQkJPGRpdiBpZD0icmVwbHlfZm9ybV8zOTY3NDQ2IiBjbGFzcz0icmVwbHlf +Zm9ybSI+CgoJCQkJCQoJCQkJPC9kaXY+CgkJCQoKCQkJCgkJCQoJCQkKCgkJCQoK +CQk8L2xpPgoJCgkJPGxpIGlkPSJjb21tZW50XzM5Njc4MDQiIGNsYXNzPSJjb21t +ZW50X2hvbGRlciB2b3RlX2hvbGRlciI+CgkJCQoJCQkJPGRpdiBjbGFzcz0ibXNn +LW1ldGEgbXktcmVwbHkiPgoJCQkJCTxkaXYgY2xhc3M9ImZvbGRpbmctZG90LWhv +bGRlciI+PGRpdiBjbGFzcz0iZm9sZGluZy1kb3QiPjwvZGl2PjwvZGl2PgoJCQkJ +CTx1bCBjbGFzcz0ibWVudSBpbmZvIGF1dGhvciBoY2FyZCI+CgkJCQkJCTxsaSBj +bGFzcz0iYXZhdGFyIj4KCQkJCQkJCTxhIGhyZWY9Imh0dHA6Ly9tb2JvcmIuaGFi +cmFoYWJyLnJ1LyIgdGl0bGU9Im1vYm9yYiI+CgkJCQkJCQkJPGltZyBzcmM9Imh0 +dHA6Ly9oYWJyYWhhYnIucnUvaS9hdmF0YXJzL3N0dWItdXNlci1zbWFsbC5naWYi +IGFsdD0ibW9ib3JiIiAvPgoJCQkJCQkJCTxiPjwvYj4KCQkJCQkJCTwvYT4KCQkJ +CQkJPC9saT4KCQkJCQkJPGxpIGNsYXNzPSJmbiBuaWNrbmFtZSB1c2VybmFtZSI+ +CgkJCQkJCQk8YSBocmVmPSJodHRwOi8vbW9ib3JiLmhhYnJhaGFici5ydS8iIGNs +YXNzPSJ1cmwiPm1vYm9yYjwvYT4sCgkJCQkJCTwvbGk+CgkJCQkJCTxsaSBjbGFz +cz0iZGF0ZSI+CgkJCQkJCQk8YWJiciBjbGFzcz0icHVibGlzaGVkIiB0aXRsZT0i +MjAxMS0wNi0wOFQxNjo0ODo0OSswNDowMCI+IDgg0LjRjtC90Y8gMjAxMSwgMTY6 +NDg8L2FiYnI+CgkJCQkJCTwvbGk+CgkJCQkJCTxsaSBjbGFzcz0iYm9va21hcmsi +PgoJCQkJCQkJPGEgaHJlZj0iI2NvbW1lbnRfMzk2NzgwNCIgdGl0bGU9ItCh0YHR +i9C70LrQsCDQvdCwINC60L7QvNC80LXQvdGC0LDRgNC40LkiIHJlbD0iYm9va21h +cmsiPiM8L2E+CgkJCQkJCTwvbGk+CgkJCQkJCQoJCQkJCQk8bGkgY2xhc3M9InRv +LWZhdnMganMtdG9fZmF2c19ob2xkZXIiPgoJCQkJCQkJPGEgaHJlZj0iIyIgY2xh +c3M9ImpzLXRvX2ZhdnNfYWRkIiBvbmNsaWNrPSJmYXZzSGFuZGxlci5mYXZvcml0 +ZXNTZW5kKHRoaXMsICdjb21tZW50cycsIDM5Njc4MDQpOyByZXR1cm4gZmFsc2U7 +IiB0aXRsZT0i0JTQvtCx0LDQstC40YLRjCDQsiDQuNC30LHRgNCw0L3QvdC+0LUi +PjwvYT4KCQkJCQkJPC9saT4KCQkJCQkJCgkJCQkJCTxsaSBjbGFzcz0idXAtdG8t +cGFyZW50Ij48YSB0aXRsZT0i0J7RgtCy0LXRgiDQvdCwIiBvbmNsaWNrPSJyZXR1 +cm4gY29tbWVudEZvcm0uZ29Ub1BhcmVudENvbW1lbnQodGhpcyk7IiBocmVmPSIj +Y29tbWVudF8zOTY3MjAxIj4mdWFycjs8L2E+PC9saT4KCQkJCQkJPGxpIGNsYXNz +PSJkb3duLXRvLWNoaWxkIGhpZGRlbiI+PGEgdGl0bGU9ItCe0LHRgNCw0YLQvdC+ +IiBvbmNsaWNrPSJyZXR1cm4gY29tbWVudEZvcm0uZ29Ub0NoaWxkQ29tbWVudCh0 +aGlzKTsiIGhyZWY9IiMiPiZkYXJyOzwvYT48L2xpPgoJCQkJCQk8IS0tPGxpIGNs +YXNzPSJzaW5nbGUtdHJlZSI+CgkJCQkJCQk8YSBjbGFzcz0ianMtc2VydiBqcy1z +aW5nbGUtdHJlZSIgaHJlZj0nI2NvbW1lbnRfMzk2NzIwMSc+0LLQtdGC0LrQsDwv +YT4KCQkJCQkJCTxhIGNsYXNzPSJqcy1zZXJ2IGpzLW11bHRpcGxheS10cmVlIiBo +cmVmPSIjY29tbWVudF8zOTY3ODA0Ij7QstC+0YHRgdGC0LDQvdC+0LLQuNGC0Yw8 +L2E+CgkJCQkJCTwvbGk+LS0+CgkJCQkJCQoJCQkJCQk8bGk+CgkJCQkJCQk8dWwg +Y2xhc3M9InZvdGUgdm90aW5nICBtaW5lIGV4cGlyZWQiPgoJCQkJCQkJCTxsaSBj +bGFzcz0ibWFyayI+PHNwYW4+MDwvc3Bhbj48L2xpPgoJCQkJCQkJCTxsaSBjbGFz +cz0iYnV0dG9ucyI+CgkJCQkJCQkJCTxhIHJldj0idm90ZXItZm9yLWNvbW1lbnQ6 +Mzk2NzgwNCIgY2xhc3M9InZvdGVfbWludXMgdm90ZS1mb3ItY29tbWVudCIgdGl0 +bGU9ItCf0LvQvtGF0L7QuSDQutC+0LzQvNC10L3RgtCw0YDQuNC5Ij48L2E+CgkJ +CQkJCQkJCTxhIHJldj0idm90ZXItZm9yLWNvbW1lbnQ6Mzk2NzgwNCIgY2xhc3M9 +InZvdGVfcGx1cyB2b3RlLWZvci1jb21tZW50IiB0aXRsZT0i0KXQvtGA0L7RiNC4 +0Lkg0LrQvtC80LzQtdC90YLQsNGA0LjQuSI+PC9hPgoJCQkJCQkJCTwvbGk+CgkJ +CQkJCQk8L3VsPgoJCQkJCQk8L2xpPgoJCQkJCQkKCQkJCQk8L3VsPgoKCQkJCTwv +ZGl2PgoKCQkJCTxkaXYgY2xhc3M9ImVudHJ5LWNvbnRlbnQiPgoJCQkJCTxkaXYg +Y2xhc3M9ImVudHJ5LWNvbnRlbnQtb25seSI+CgkJCQkJICAgIDxibG9ja3F1b3Rl +PtCw0YDQs9GD0LzQtdC90YI6IMKr0YHRg9GJ0LXRgdGC0LLQtdC90L3QsNGPINGN +0LrQvtC90L7QvNC40Y8g0L3QsCDQutC+0LvQuNGH0LXRgdGC0LLQtSDQutC+0LTQ +sMK7IOKAlCDQvdC1INGB0L7RgdGC0L7Rj9GC0LXQu9C10L0gKNC60L7QtCDQsdGL +0Lsg0LLRi9C90LXRgdC10L0g0LLQviDQstC90LXRiNC90Y7RjiDQsdC40LHQu9C4 +0L7RgtC10LrRgykuPC9ibG9ja3F1b3RlPjxici8+DQrQnNC10YLQvtC0IG1hcDog +0L/QuNGI0LXRgtGB0Y8g0L7QtNC40L0g0YDQsNC3LCDQuNGB0L/QvtC70YzQt9C+ +0LLQsNGC0Ywg0LzQvtC20L3QviDQvNC90L7QttC10YHRgtCy0L4g0YDQsNC3LCDR +gtGD0YIg0Lgg0Y3QutC+0L3QvtC80LjRjy4g0JIg0LzQvtC10Lwg0L/RgNC+0LXQ +utGC0LUgbWFwOiDQstGB0YLRgNC10YfQsNC10YLRgdGPIDQ0INGA0LDQt9CwPGJy +Lz4NCjxibG9ja3F1b3RlPtCe0YfQtdC90Ywg0YHQvtC80L3QuNGC0LXQu9GM0L3Q +viDigJQg0LjQsdC+INC70YPRh9GI0LUgMTAg0YHRgtGA0L7QuiDRh9C40YHRgtC+ +0LPQviDQtNC70Y8g0L/QvtC90LjQvNCw0L3QuNGPINC60L7QtNCwINC/0YDQvtGC +0LjQsiDQvtC00L3QvtC5INGB0YLRgNC+0YfQutC4INCyINC60L7RgtC+0YDQvtC5 +INGH0LXRgNGCINC90L7Qs9GDINGB0LvQvtC80LjRguKApjwvYmxvY2txdW90ZT48 +YnIvPg0K0JjQvNGPINC80LXRgtC+0LTQsCBtYXA6INCy0YvQsdGA0LDQvdC+INC9 +0LUg0YHQu9GD0YfQsNC50L3Qviwg0LzQtdGC0L7QtCBtYXA6INGBINCw0L3QsNC7 +0L7Qs9C40YfQvdGL0Lwg0L/QvtCy0LXQtNC10L3QuNC10Lwg0LLRgdGC0LXRh9Cw +0LXRgtGB0Y8g0YTQsNC60YLQuNGH0LXRgdC60Lgg0LLQviDQstGB0LXRhSDRj9C3 +0YvQutCw0YUg0L/RgNC+0LPRgNCw0LzQvNC40YDQvtCy0LDQvdC40Y8g0Lgg0LzQ +vdC+0LPQuNC8LCDQstC60LvRjtGH0LDRjyDQvNC10L3RjyDQv9GA0L7RidC1INGH +0LjRgtCw0YLRjCBtYXA6INCy0LzQtdGB0YLQviAxMCDRgdGC0YDQvtGH0LXQuiDQ +utC+0LTQsC48YnIvPg0KPGJsb2NrcXVvdGU+0KLQvtC/0LjQuiDQv9C70Y7RgdCw +0L3Rg9C7INC40LHQviDQvtC9INC90LDQutC+0L3QtdGGINC80L3QtSDQv9C+0LzQ +vtCzINC/0L7QvdGP0YLRjCDQvNC90LUg0YfRgtC+INCx0LvQvtC60Lgg0LzQvdC1 +INGB0L7QstGB0LXQvCDQvdC1INC90YPQttC90YsuPC9ibG9ja3F1b3RlPjxici8+ +DQrQn9C+0LvQsNCz0LDRjiDRh9GC0L4g0YEg0LHQu9C+0LrQsNC80Lgg0L/RgNC4 +0LTQtdGC0YHRjyDQvtC30L3QsNC60L7QvNC40YLRgdGPINCy0YHQtdC8IElPUyDR +gNCw0LfRgNCw0LHQvtGC0YfQuNC60LDQvCDQuNCx0L4g0LzQvdC+0LPQvtC1INC9 +0L7QstC+0LUg0LDQv9C4IElPUyBTREsg0LjQtNC10YIgYyDQuNGB0L/QvtC70YzQ +t9C+0LLQsNC90LjQtdC8INCx0LvQvtC60L7Qsiwg0LHQtdC3INCw0LvRjNGC0LXR +gNC90LDRgtC40LLRiyDRgSDRgdC10LvQtdC60YLQvtGA0LDQvNC4LiA8YSBocmVm +PSJodHRwOi8vd3d3Lmljb2RlYmxvZy5jb20vMjAxMC8wNy8wOC9hc3NldC1saWJy +YXJpZXMtYW5kLWJsb2Nrcy1pbi1pb3MtNC8iPtCf0YDQuNC80LXRgDwvYT4KCQkJ +CQk8L2Rpdj4KCQkJCQk8cCBjbGFzcz0icmVwbHkiPjxhIGNsYXNzPSJqcy1zZXJ2 +IiBocmVmPSI/cmVwbHlfdG89Mzk2NzgwNCNjb21tZW50XzM5Njc4MDQiIG9uY2xp +Y2s9ImNvbW1lbnRGb3JtLm1vdmVGb3JtKCdyZXBseV9mb3JtXzM5Njc4MDQnKTsg +cmV0dXJuIGZhbHNlOyI+0L7RgtCy0LXRgtC40YLRjDwvYT48L3A+CgkJCQk8L2Rp +dj4KCgkJCQk8ZGl2IGlkPSJyZXBseV9mb3JtXzM5Njc4MDQiIGNsYXNzPSJyZXBs +eV9mb3JtIj4KCgkJCQkJCgkJCQk8L2Rpdj4KCQkJCgoJCQkKCQkJCgkJCQoKCQkJ +CgkJCQk8dWwgY2xhc3M9ImhlbnRyeSI+CgkKCQk8bGkgaWQ9ImNvbW1lbnRfMzk2 +Nzk5NCIgY2xhc3M9ImNvbW1lbnRfaG9sZGVyIHZvdGVfaG9sZGVyIj4KCQkJCgkJ +CQk8ZGl2IGNsYXNzPSJtc2ctbWV0YSI+CgkJCQkJPGRpdiBjbGFzcz0iZm9sZGlu +Zy1kb3QtaG9sZGVyIj48ZGl2IGNsYXNzPSJmb2xkaW5nLWRvdCI+PC9kaXY+PC9k +aXY+CgkJCQkJPHVsIGNsYXNzPSJtZW51IGluZm8gYXV0aG9yIGhjYXJkIj4KCQkJ +CQkJPGxpIGNsYXNzPSJhdmF0YXIiPgoJCQkJCQkJPGEgaHJlZj0iaHR0cDovL1Nw +ZWFrdXMuaGFicmFoYWJyLnJ1LyIgdGl0bGU9IlNwZWFrdXMiPgoJCQkJCQkJCTxp +bWcgc3JjPSJodHRwOi8vaGFicmFoYWJyLnJ1L2kvYXZhdGFycy9zdHViLXVzZXIt +c21hbGwuZ2lmIiBhbHQ9IlNwZWFrdXMiIC8+CgkJCQkJCQkJPGI+PC9iPgoJCQkJ +CQkJPC9hPgoJCQkJCQk8L2xpPgoJCQkJCQk8bGkgY2xhc3M9ImZuIG5pY2tuYW1l +IHVzZXJuYW1lIj4KCQkJCQkJCTxhIGhyZWY9Imh0dHA6Ly9TcGVha3VzLmhhYnJh +aGFici5ydS8iIGNsYXNzPSJ1cmwiPlNwZWFrdXM8L2E+LAoJCQkJCQk8L2xpPgoJ +CQkJCQk8bGkgY2xhc3M9ImRhdGUiPgoJCQkJCQkJPGFiYnIgY2xhc3M9InB1Ymxp +c2hlZCIgdGl0bGU9IjIwMTEtMDYtMDhUMTc6MzM6MTYrMDQ6MDAiPiA4INC40Y7Q +vdGPIDIwMTEsIDE3OjMzPC9hYmJyPgoJCQkJCQk8L2xpPgoJCQkJCQk8bGkgY2xh +c3M9ImJvb2ttYXJrIj4KCQkJCQkJCTxhIGhyZWY9IiNjb21tZW50XzM5Njc5OTQi +IHRpdGxlPSLQodGB0YvQu9C60LAg0L3QsCDQutC+0LzQvNC10L3RgtCw0YDQuNC5 +IiByZWw9ImJvb2ttYXJrIj4jPC9hPgoJCQkJCQk8L2xpPgoJCQkJCQkKCQkJCQkJ +PGxpIGNsYXNzPSJ0by1mYXZzIGpzLXRvX2ZhdnNfaG9sZGVyIj4KCQkJCQkJCTxh +IGhyZWY9IiMiIGNsYXNzPSJqcy10b19mYXZzX2FkZCIgb25jbGljaz0iZmF2c0hh +bmRsZXIuZmF2b3JpdGVzU2VuZCh0aGlzLCAnY29tbWVudHMnLCAzOTY3OTk0KTsg +cmV0dXJuIGZhbHNlOyIgdGl0bGU9ItCU0L7QsdCw0LLQuNGC0Ywg0LIg0LjQt9Cx +0YDQsNC90L3QvtC1Ij48L2E+CgkJCQkJCTwvbGk+CgkJCQkJCQoJCQkJCQk8bGkg +Y2xhc3M9InVwLXRvLXBhcmVudCI+PGEgdGl0bGU9ItCe0YLQstC10YIg0L3QsCIg +b25jbGljaz0icmV0dXJuIGNvbW1lbnRGb3JtLmdvVG9QYXJlbnRDb21tZW50KHRo +aXMpOyIgaHJlZj0iI2NvbW1lbnRfMzk2NzgwNCI+JnVhcnI7PC9hPjwvbGk+CgkJ +CQkJCTxsaSBjbGFzcz0iZG93bi10by1jaGlsZCBoaWRkZW4iPjxhIHRpdGxlPSLQ +ntCx0YDQsNGC0L3QviIgb25jbGljaz0icmV0dXJuIGNvbW1lbnRGb3JtLmdvVG9D +aGlsZENvbW1lbnQodGhpcyk7IiBocmVmPSIjIj4mZGFycjs8L2E+PC9saT4KCQkJ +CQkJPCEtLTxsaSBjbGFzcz0ic2luZ2xlLXRyZWUiPgoJCQkJCQkJPGEgY2xhc3M9 +ImpzLXNlcnYganMtc2luZ2xlLXRyZWUiIGhyZWY9JyNjb21tZW50XzM5Njc4MDQn +PtCy0LXRgtC60LA8L2E+CgkJCQkJCQk8YSBjbGFzcz0ianMtc2VydiBqcy1tdWx0 +aXBsYXktdHJlZSIgaHJlZj0iI2NvbW1lbnRfMzk2Nzk5NCI+0LLQvtGB0YHRgtCw +0L3QvtCy0LjRgtGMPC9hPgoJCQkJCQk8L2xpPi0tPgoJCQkJCQkKCQkJCQkJPGxp +PgoJCQkJCQkJPHVsIGNsYXNzPSJ2b3RlIHZvdGluZyAgZXhwaXJlZCI+CgkJCQkJ +CQkJPGxpIGNsYXNzPSJtYXJrIj48c3Bhbj4wPC9zcGFuPjwvbGk+CgkJCQkJCQkJ +PGxpIGNsYXNzPSJidXR0b25zIj4KCQkJCQkJCQkJPGEgcmV2PSJ2b3Rlci1mb3It +Y29tbWVudDozOTY3OTk0IiBjbGFzcz0idm90ZV9taW51cyB2b3RlLWZvci1jb21t +ZW50IiB0aXRsZT0i0J/Qu9C+0YXQvtC5INC60L7QvNC80LXQvdGC0LDRgNC40Lki +PjwvYT4KCQkJCQkJCQkJPGEgcmV2PSJ2b3Rlci1mb3ItY29tbWVudDozOTY3OTk0 +IiBjbGFzcz0idm90ZV9wbHVzIHZvdGUtZm9yLWNvbW1lbnQiIHRpdGxlPSLQpdC+ +0YDQvtGI0LjQuSDQutC+0LzQvNC10L3RgtCw0YDQuNC5Ij48L2E+CgkJCQkJCQkJ +PC9saT4KCQkJCQkJCTwvdWw+CgkJCQkJCTwvbGk+CgkJCQkJCQoJCQkJCTwvdWw+ +CgoJCQkJPC9kaXY+CgoJCQkJPGRpdiBjbGFzcz0iZW50cnktY29udGVudCI+CgkJ +CQkJPGRpdiBjbGFzcz0iZW50cnktY29udGVudC1vbmx5Ij4KCQkJCQkgICAgJmd0 +OyDQnNC10YLQvtC0IG1hcDog0L/QuNGI0LXRgtGB0Y8g0L7QtNC40L0g0YDQsNC3 +PGJyLz4NCtCd0YMg0YLQsNC6INC4INCx0LXQtyDQsdC70L7QutC+0LIg0Y3RgtC+ +0YIg0LzQtdGC0L7QtCDQvdCw0L/QuNGB0LDRgtGMINC+0LTQuNC9INGA0LDQtyDQ +u9C10LPQutC+IOKAlCDRh9GC0L4g0LzQtdGI0LDQtdGCINC40YHQv9C+0LvRjNC3 +0L7QstCw0YLRjCDQvdC1INCx0LvQvtC6INCwINGD0LrQsNC30LDRgtC10LvRjCDQ +vdCwINGE0YPQvdC60YbQuNGOINC60L7Qu9C4INGF0L7Rh9C10YLRgdGPINC/0LDR +gNCw0LzQtdGC0YDQvtC8INC60L7QtCDQv9C10YDQtdC00LDQstCw0YLRjD88YnIv +Pg0KPGJyLz4NCtC+0LTQvdC+INC00LXQu9C+INC40YHQv9C+0LvRjNC30L7QstCw +0YLRjCDQv9C+INC90LXQvtCx0YXQvtC00LjQvNC+0YHRgtC4INC60L7Qs9C00LAg +0LDQu9GM0YLQtdGA0L3QsNGC0LjQsiDQvdC10YIsINC00YDRg9Cz0L7QtSDQtNC1 +0LvQviDRgdC+0LfQvdCw0YLQtdC70YzQvdC+LiDQryDRgtC+0LbQtSDQutCw0Log +0L3QuCDRgdGC0YDQsNC90L3QviDQtNC10LvQsNC7INC60L7QtCDRgSDQsdC70L7Q +utCw0LzQuCDigJQg0L3QsNC00L4g0LHRi9C70L4g0L/RgNC+0LLQtdGA0LjRgtGM +INC90LUg0YDQsNGB0YjQuNGA0LjRgiDQu9C4INCy0L7Qt9C80L7QttC90L7RgdGC +0Lgg0YLQsNC60L7QuSDQstCw0YDQuNCw0L3RgiDRgNCw0LHQvtGC0Ysg0YEg0LDQ +utGB0LXQu9C10YDQvtC80LXRgtGA0L7QvC4g0J3QtSDRgNCw0YHRiNC40YDQuNC7 +LiDQkCDQstC+0YIg0LrQvtC0INGB0YLQsNC7INCx0L7Qu9C10LUg0LPRgNC+0LzQ +vtC30LTQutC40Lwg4oCUINGN0YLQviDRgtC+0YfQvdC+LiDQpdC+0YLRjyDQutC+ +0L3QtdGH0L3QviDigJQg0L3QsCDQstC60YPRgSDQuCDRhtCy0LXRgiDQstGB0LUg +0YTQu9C+0LzQsNGB0YLQtdGA0Ysg0YDQsNC30L3Ri9C1IDopCgkJCQkJPC9kaXY+ +CgkJCQkJPHAgY2xhc3M9InJlcGx5Ij48YSBjbGFzcz0ianMtc2VydiIgaHJlZj0i +P3JlcGx5X3RvPTM5Njc5OTQjY29tbWVudF8zOTY3OTk0IiBvbmNsaWNrPSJjb21t +ZW50Rm9ybS5tb3ZlRm9ybSgncmVwbHlfZm9ybV8zOTY3OTk0Jyk7IHJldHVybiBm +YWxzZTsiPtC+0YLQstC10YLQuNGC0Yw8L2E+PC9wPgoJCQkJPC9kaXY+CgoJCQkJ +PGRpdiBpZD0icmVwbHlfZm9ybV8zOTY3OTk0IiBjbGFzcz0icmVwbHlfZm9ybSI+ +CgoJCQkJCQoJCQkJPC9kaXY+CgkJCQoKCQkJCgkJCQoJCQkKCgkJCQoKCQk8L2xp +PgoJCjwvdWw+CgoJCQkKCgkJPC9saT4KCQoJCTxsaSBpZD0iY29tbWVudF8zOTY4 +MDE3IiBjbGFzcz0iY29tbWVudF9ob2xkZXIgdm90ZV9ob2xkZXIiPgoJCQkKCQkJ +CTxkaXYgY2xhc3M9Im1zZy1tZXRhIj4KCQkJCQk8ZGl2IGNsYXNzPSJmb2xkaW5n +LWRvdC1ob2xkZXIiPjxkaXYgY2xhc3M9ImZvbGRpbmctZG90Ij48L2Rpdj48L2Rp +dj4KCQkJCQk8dWwgY2xhc3M9Im1lbnUgaW5mbyBhdXRob3IgaGNhcmQiPgoJCQkJ +CQk8bGkgY2xhc3M9ImF2YXRhciI+CgkJCQkJCQk8YSBocmVmPSJodHRwOi8vQ0xS +LmhhYnJhaGFici5ydS8iIHRpdGxlPSJDTFIiPgoJCQkJCQkJCTxpbWcgc3JjPSJo +dHRwOi8vaGFicmFoYWJyLnJ1L21lZGlhL3RodW1iL2VmL2YxLzE1LzIxNjEwLzIx +NjEwXzI0eDI0LmpwZyIgYWx0PSJDTFIiIC8+CgkJCQkJCQkJPGI+PC9iPgoJCQkJ +CQkJPC9hPgoJCQkJCQk8L2xpPgoJCQkJCQk8bGkgY2xhc3M9ImZuIG5pY2tuYW1l +IHVzZXJuYW1lIj4KCQkJCQkJCTxhIGhyZWY9Imh0dHA6Ly9DTFIuaGFicmFoYWJy +LnJ1LyIgY2xhc3M9InVybCI+Q0xSPC9hPiwKCQkJCQkJPC9saT4KCQkJCQkJPGxp +IGNsYXNzPSJkYXRlIj4KCQkJCQkJCTxhYmJyIGNsYXNzPSJwdWJsaXNoZWQiIHRp +dGxlPSIyMDExLTA2LTA4VDE3OjM2OjI4KzA0OjAwIj4gOCDQuNGO0L3RjyAyMDEx +LCAxNzozNjwvYWJicj4KCQkJCQkJPC9saT4KCQkJCQkJPGxpIGNsYXNzPSJib29r +bWFyayI+CgkJCQkJCQk8YSBocmVmPSIjY29tbWVudF8zOTY4MDE3IiB0aXRsZT0i +0KHRgdGL0LvQutCwINC90LAg0LrQvtC80LzQtdC90YLQsNGA0LjQuSIgcmVsPSJi +b29rbWFyayI+IzwvYT4KCQkJCQkJPC9saT4KCQkJCQkJCgkJCQkJCTxsaSBjbGFz +cz0idG8tZmF2cyBqcy10b19mYXZzX2hvbGRlciI+CgkJCQkJCQk8YSBocmVmPSIj +IiBjbGFzcz0ianMtdG9fZmF2c19hZGQiIG9uY2xpY2s9ImZhdnNIYW5kbGVyLmZh +dm9yaXRlc1NlbmQodGhpcywgJ2NvbW1lbnRzJywgMzk2ODAxNyk7IHJldHVybiBm +YWxzZTsiIHRpdGxlPSLQlNC+0LHQsNCy0LjRgtGMINCyINC40LfQsdGA0LDQvdC9 +0L7QtSI+PC9hPgoJCQkJCQk8L2xpPgoJCQkJCQkKCQkJCQkJPGxpIGNsYXNzPSJ1 +cC10by1wYXJlbnQiPjxhIHRpdGxlPSLQntGC0LLQtdGCINC90LAiIG9uY2xpY2s9 +InJldHVybiBjb21tZW50Rm9ybS5nb1RvUGFyZW50Q29tbWVudCh0aGlzKTsiIGhy +ZWY9IiNjb21tZW50XzM5NjcyMDEiPiZ1YXJyOzwvYT48L2xpPgoJCQkJCQk8bGkg +Y2xhc3M9ImRvd24tdG8tY2hpbGQgaGlkZGVuIj48YSB0aXRsZT0i0J7QsdGA0LDR +gtC90L4iIG9uY2xpY2s9InJldHVybiBjb21tZW50Rm9ybS5nb1RvQ2hpbGRDb21t +ZW50KHRoaXMpOyIgaHJlZj0iIyI+JmRhcnI7PC9hPjwvbGk+CgkJCQkJCTwhLS08 +bGkgY2xhc3M9InNpbmdsZS10cmVlIj4KCQkJCQkJCTxhIGNsYXNzPSJqcy1zZXJ2 +IGpzLXNpbmdsZS10cmVlIiBocmVmPScjY29tbWVudF8zOTY3MjAxJz7QstC10YLQ +utCwPC9hPgoJCQkJCQkJPGEgY2xhc3M9ImpzLXNlcnYganMtbXVsdGlwbGF5LXRy +ZWUiIGhyZWY9IiNjb21tZW50XzM5NjgwMTciPtCy0L7RgdGB0YLQsNC90L7QstC4 +0YLRjDwvYT4KCQkJCQkJPC9saT4tLT4KCQkJCQkJCgkJCQkJCTxsaT4KCQkJCQkJ +CTx1bCBjbGFzcz0idm90ZSB2b3RpbmcgIGV4cGlyZWQiPgoJCQkJCQkJCTxsaSBj +bGFzcz0ibWFyayI+PHNwYW4+MDwvc3Bhbj48L2xpPgoJCQkJCQkJCTxsaSBjbGFz +cz0iYnV0dG9ucyI+CgkJCQkJCQkJCTxhIHJldj0idm90ZXItZm9yLWNvbW1lbnQ6 +Mzk2ODAxNyIgY2xhc3M9InZvdGVfbWludXMgdm90ZS1mb3ItY29tbWVudCIgdGl0 +bGU9ItCf0LvQvtGF0L7QuSDQutC+0LzQvNC10L3RgtCw0YDQuNC5Ij48L2E+CgkJ +CQkJCQkJCTxhIHJldj0idm90ZXItZm9yLWNvbW1lbnQ6Mzk2ODAxNyIgY2xhc3M9 +InZvdGVfcGx1cyB2b3RlLWZvci1jb21tZW50IiB0aXRsZT0i0KXQvtGA0L7RiNC4 +0Lkg0LrQvtC80LzQtdC90YLQsNGA0LjQuSI+PC9hPgoJCQkJCQkJCTwvbGk+CgkJ +CQkJCQk8L3VsPgoJCQkJCQk8L2xpPgoJCQkJCQkKCQkJCQk8L3VsPgoKCQkJCTwv +ZGl2PgoKCQkJCTxkaXYgY2xhc3M9ImVudHJ5LWNvbnRlbnQiPgoJCQkJCTxkaXYg +Y2xhc3M9ImVudHJ5LWNvbnRlbnQtb25seSI+CgkJCQkJICAgIDxibG9ja3F1b3Rl +PtCi0L7Qv9C40Log0L/Qu9GO0YHQsNC90YPQuyDQuNCx0L4g0L7QvSDQvdCw0LrQ +vtC90LXRhiDQvNC90LUg0L/QvtC80L7QsyDQv9C+0L3Rj9GC0Ywg0LzQvdC1INGH +0YLQviDQsdC70L7QutC4INC80L3QtSDRgdC+0LLRgdC10Lwg0L3QtSDQvdGD0LbQ +vdGLLjwvYmxvY2txdW90ZT48YnIvPg0K0JLQsNC8INGB0LvQtdC00YPQtdGCINGB +0YDQvtGH0L3QviDQv9GA0L7Rh9C40YLQsNGC0Ywg0YPQttC1INGD0YHQv9C10LLR +iNC40LUg0YHRgtCw0YLRjCDCq9GB0YLQsNGA0L7QuSDQutC70LDRgdGB0LjQutC+ +0LnCuyDQvNCw0L3Rg9Cw0LvRiyDCq0dyYW5kIENlbnRyYWwgRGlzcGF0Y2ggKEdD +RCkgUmVmZXJlbmNlwrsg0LggwqtDb25jdXJyZW5jeSBQcm9ncmFtbWluZyBHdWlk +ZcK7LiDQkCDRgtC+INCy0LTRgNGD0LMg0LPQtNC1INCyINGA0LDQt9Cz0L7QstC+ +0YDQtSDQstGB0L/Qu9GL0LLQsNC10YIsINC60LDQuiDRgdC10LnRh9Cw0YEg4oCU +INC70Y7QtNC4INC90LUg0L/QvtC50LzRg9GCINC20LUuINCt0YLQviDQv9C+INGB +0YPRgtC4INGB0LXQudGH0LDRgSDQvtGB0L3QvtCy0Ysg0Lgg0L/QuNGB0LDRgtGM +INC60L7QtCDQsdC10Lcg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y8g0L/QvtC0 +0L7QsdC90YvRhSDQsdGD0YHRgtC+0LIg4oCUINGN0YLQviwg0L/RgNC+0YHRgtC4 +0YLQtSwg0L3QviDQv9C40YHQsNGC0Ywg0LPQvtCy0L3QvtC60L7QtC4KCQkJCQk8 +L2Rpdj4KCQkJCQk8cCBjbGFzcz0icmVwbHkiPjxhIGNsYXNzPSJqcy1zZXJ2IiBo +cmVmPSI/cmVwbHlfdG89Mzk2ODAxNyNjb21tZW50XzM5NjgwMTciIG9uY2xpY2s9 +ImNvbW1lbnRGb3JtLm1vdmVGb3JtKCdyZXBseV9mb3JtXzM5NjgwMTcnKTsgcmV0 +dXJuIGZhbHNlOyI+0L7RgtCy0LXRgtC40YLRjDwvYT48L3A+CgkJCQk8L2Rpdj4K +CgkJCQk8ZGl2IGlkPSJyZXBseV9mb3JtXzM5NjgwMTciIGNsYXNzPSJyZXBseV9m +b3JtIj4KCgkJCQkJCgkJCQk8L2Rpdj4KCQkJCgoJCQkKCQkJCgkJCQoKCQkJCgkJ +CQk8dWwgY2xhc3M9ImhlbnRyeSI+CgkKCQk8bGkgaWQ9ImNvbW1lbnRfMzk2ODI0 +NiIgY2xhc3M9ImNvbW1lbnRfaG9sZGVyIHZvdGVfaG9sZGVyIj4KCQkJCgkJCQk8 +ZGl2IGNsYXNzPSJtc2ctbWV0YSI+CgkJCQkJPGRpdiBjbGFzcz0iZm9sZGluZy1k +b3QtaG9sZGVyIj48ZGl2IGNsYXNzPSJmb2xkaW5nLWRvdCI+PC9kaXY+PC9kaXY+ +CgkJCQkJPHVsIGNsYXNzPSJtZW51IGluZm8gYXV0aG9yIGhjYXJkIj4KCQkJCQkJ +PGxpIGNsYXNzPSJhdmF0YXIiPgoJCQkJCQkJPGEgaHJlZj0iaHR0cDovL1NwZWFr +dXMuaGFicmFoYWJyLnJ1LyIgdGl0bGU9IlNwZWFrdXMiPgoJCQkJCQkJCTxpbWcg +c3JjPSJodHRwOi8vaGFicmFoYWJyLnJ1L2kvYXZhdGFycy9zdHViLXVzZXItc21h +bGwuZ2lmIiBhbHQ9IlNwZWFrdXMiIC8+CgkJCQkJCQkJPGI+PC9iPgoJCQkJCQkJ +PC9hPgoJCQkJCQk8L2xpPgoJCQkJCQk8bGkgY2xhc3M9ImZuIG5pY2tuYW1lIHVz +ZXJuYW1lIj4KCQkJCQkJCTxhIGhyZWY9Imh0dHA6Ly9TcGVha3VzLmhhYnJhaGFi +ci5ydS8iIGNsYXNzPSJ1cmwiPlNwZWFrdXM8L2E+LAoJCQkJCQk8L2xpPgoJCQkJ +CQk8bGkgY2xhc3M9ImRhdGUiPgoJCQkJCQkJPGFiYnIgY2xhc3M9InB1Ymxpc2hl +ZCIgdGl0bGU9IjIwMTEtMDYtMDhUMTg6NTU6MDYrMDQ6MDAiPiA4INC40Y7QvdGP +IDIwMTEsIDE4OjU1PC9hYmJyPgoJCQkJCQk8L2xpPgoJCQkJCQk8bGkgY2xhc3M9 +ImJvb2ttYXJrIj4KCQkJCQkJCTxhIGhyZWY9IiNjb21tZW50XzM5NjgyNDYiIHRp +dGxlPSLQodGB0YvQu9C60LAg0L3QsCDQutC+0LzQvNC10L3RgtCw0YDQuNC5IiBy +ZWw9ImJvb2ttYXJrIj4jPC9hPgoJCQkJCQk8L2xpPgoJCQkJCQkKCQkJCQkJPGxp +IGNsYXNzPSJ0by1mYXZzIGpzLXRvX2ZhdnNfaG9sZGVyIj4KCQkJCQkJCTxhIGhy +ZWY9IiMiIGNsYXNzPSJqcy10b19mYXZzX2FkZCIgb25jbGljaz0iZmF2c0hhbmRs +ZXIuZmF2b3JpdGVzU2VuZCh0aGlzLCAnY29tbWVudHMnLCAzOTY4MjQ2KTsgcmV0 +dXJuIGZhbHNlOyIgdGl0bGU9ItCU0L7QsdCw0LLQuNGC0Ywg0LIg0LjQt9Cx0YDQ +sNC90L3QvtC1Ij48L2E+CgkJCQkJCTwvbGk+CgkJCQkJCQoJCQkJCQk8bGkgY2xh +c3M9InVwLXRvLXBhcmVudCI+PGEgdGl0bGU9ItCe0YLQstC10YIg0L3QsCIgb25j +bGljaz0icmV0dXJuIGNvbW1lbnRGb3JtLmdvVG9QYXJlbnRDb21tZW50KHRoaXMp +OyIgaHJlZj0iI2NvbW1lbnRfMzk2ODAxNyI+JnVhcnI7PC9hPjwvbGk+CgkJCQkJ +CTxsaSBjbGFzcz0iZG93bi10by1jaGlsZCBoaWRkZW4iPjxhIHRpdGxlPSLQntCx +0YDQsNGC0L3QviIgb25jbGljaz0icmV0dXJuIGNvbW1lbnRGb3JtLmdvVG9DaGls +ZENvbW1lbnQodGhpcyk7IiBocmVmPSIjIj4mZGFycjs8L2E+PC9saT4KCQkJCQkJ +PCEtLTxsaSBjbGFzcz0ic2luZ2xlLXRyZWUiPgoJCQkJCQkJPGEgY2xhc3M9Impz +LXNlcnYganMtc2luZ2xlLXRyZWUiIGhyZWY9JyNjb21tZW50XzM5NjgwMTcnPtCy +0LXRgtC60LA8L2E+CgkJCQkJCQk8YSBjbGFzcz0ianMtc2VydiBqcy1tdWx0aXBs +YXktdHJlZSIgaHJlZj0iI2NvbW1lbnRfMzk2ODI0NiI+0LLQvtGB0YHRgtCw0L3Q +vtCy0LjRgtGMPC9hPgoJCQkJCQk8L2xpPi0tPgoJCQkJCQkKCQkJCQkJPGxpPgoJ +CQkJCQkJPHVsIGNsYXNzPSJ2b3RlIHZvdGluZyAgZXhwaXJlZCI+CgkJCQkJCQkJ +PGxpIGNsYXNzPSJtYXJrIj48c3Bhbj4wPC9zcGFuPjwvbGk+CgkJCQkJCQkJPGxp +IGNsYXNzPSJidXR0b25zIj4KCQkJCQkJCQkJPGEgcmV2PSJ2b3Rlci1mb3ItY29t +bWVudDozOTY4MjQ2IiBjbGFzcz0idm90ZV9taW51cyB2b3RlLWZvci1jb21tZW50 +IiB0aXRsZT0i0J/Qu9C+0YXQvtC5INC60L7QvNC80LXQvdGC0LDRgNC40LkiPjwv +YT4KCQkJCQkJCQkJPGEgcmV2PSJ2b3Rlci1mb3ItY29tbWVudDozOTY4MjQ2IiBj +bGFzcz0idm90ZV9wbHVzIHZvdGUtZm9yLWNvbW1lbnQiIHRpdGxlPSLQpdC+0YDQ +vtGI0LjQuSDQutC+0LzQvNC10L3RgtCw0YDQuNC5Ij48L2E+CgkJCQkJCQkJPC9s +aT4KCQkJCQkJCTwvdWw+CgkJCQkJCTwvbGk+CgkJCQkJCQoJCQkJCTwvdWw+CgoJ +CQkJPC9kaXY+CgoJCQkJPGRpdiBjbGFzcz0iZW50cnktY29udGVudCI+CgkJCQkJ +PGRpdiBjbGFzcz0iZW50cnktY29udGVudC1vbmx5Ij4KCQkJCQkgICAg0L3QtSDQ +v9GA0L7RidGDLiDQnNCw0L3Rg9Cw0LvRiywg0YfRgtC+INCy0Ysg0L/QvtGA0LXQ +utC+0LzQtdC90LTQvtCy0LDQu9C4IOKAlCDQvtGC0L3QvtGB0Y/RgtGB0Y8g0Log +aU9TNCDQuCDQstGL0YjQtSDigJQg0YIu0LUuINCy0LXRgdGMINC60L7QtCDRh9GC +0L4g0L3QsNC/0LjRgdCw0L0g0LTQviBpT1MgNCDigJQg0LPQvtCy0L3QvtC60L7Q +tD8g0L3Rgy3QvdGDLgoJCQkJCTwvZGl2PgoJCQkJCTxwIGNsYXNzPSJyZXBseSI+ +PGEgY2xhc3M9ImpzLXNlcnYiIGhyZWY9Ij9yZXBseV90bz0zOTY4MjQ2I2NvbW1l +bnRfMzk2ODI0NiIgb25jbGljaz0iY29tbWVudEZvcm0ubW92ZUZvcm0oJ3JlcGx5 +X2Zvcm1fMzk2ODI0NicpOyByZXR1cm4gZmFsc2U7Ij7QvtGC0LLQtdGC0LjRgtGM +PC9hPjwvcD4KCQkJCTwvZGl2PgoKCQkJCTxkaXYgaWQ9InJlcGx5X2Zvcm1fMzk2 +ODI0NiIgY2xhc3M9InJlcGx5X2Zvcm0iPgoKCQkJCQkKCQkJCTwvZGl2PgoJCQkK +CgkJCQoJCQkKCQkJCgoJCQkKCQkJCTx1bCBjbGFzcz0iaGVudHJ5Ij4KCQoJCTxs +aSBpZD0iY29tbWVudF8zOTY4MjYwIiBjbGFzcz0iY29tbWVudF9ob2xkZXIgdm90 +ZV9ob2xkZXIiPgoJCQkKCQkJCTxkaXYgY2xhc3M9Im1zZy1tZXRhIG15LXJlcGx5 +Ij4KCQkJCQk8ZGl2IGNsYXNzPSJmb2xkaW5nLWRvdC1ob2xkZXIiPjxkaXYgY2xh +c3M9ImZvbGRpbmctZG90Ij48L2Rpdj48L2Rpdj4KCQkJCQk8dWwgY2xhc3M9Im1l +bnUgaW5mbyBhdXRob3IgaGNhcmQiPgoJCQkJCQk8bGkgY2xhc3M9ImF2YXRhciI+ +CgkJCQkJCQk8YSBocmVmPSJodHRwOi8vbW9ib3JiLmhhYnJhaGFici5ydS8iIHRp +dGxlPSJtb2JvcmIiPgoJCQkJCQkJCTxpbWcgc3JjPSJodHRwOi8vaGFicmFoYWJy +LnJ1L2kvYXZhdGFycy9zdHViLXVzZXItc21hbGwuZ2lmIiBhbHQ9Im1vYm9yYiIg +Lz4KCQkJCQkJCQk8Yj48L2I+CgkJCQkJCQk8L2E+CgkJCQkJCTwvbGk+CgkJCQkJ +CTxsaSBjbGFzcz0iZm4gbmlja25hbWUgdXNlcm5hbWUiPgoJCQkJCQkJPGEgaHJl +Zj0iaHR0cDovL21vYm9yYi5oYWJyYWhhYnIucnUvIiBjbGFzcz0idXJsIj5tb2Jv +cmI8L2E+LAoJCQkJCQk8L2xpPgoJCQkJCQk8bGkgY2xhc3M9ImRhdGUiPgoJCQkJ +CQkJPGFiYnIgY2xhc3M9InB1Ymxpc2hlZCIgdGl0bGU9IjIwMTEtMDYtMDhUMTg6 +NTc6NTYrMDQ6MDAiPiA4INC40Y7QvdGPIDIwMTEsIDE4OjU3PC9hYmJyPgoJCQkJ +CQk8L2xpPgoJCQkJCQk8bGkgY2xhc3M9ImJvb2ttYXJrIj4KCQkJCQkJCTxhIGhy +ZWY9IiNjb21tZW50XzM5NjgyNjAiIHRpdGxlPSLQodGB0YvQu9C60LAg0L3QsCDQ +utC+0LzQvNC10L3RgtCw0YDQuNC5IiByZWw9ImJvb2ttYXJrIj4jPC9hPgoJCQkJ +CQk8L2xpPgoJCQkJCQkKCQkJCQkJPGxpIGNsYXNzPSJ0by1mYXZzIGpzLXRvX2Zh +dnNfaG9sZGVyIj4KCQkJCQkJCTxhIGhyZWY9IiMiIGNsYXNzPSJqcy10b19mYXZz +X2FkZCIgb25jbGljaz0iZmF2c0hhbmRsZXIuZmF2b3JpdGVzU2VuZCh0aGlzLCAn +Y29tbWVudHMnLCAzOTY4MjYwKTsgcmV0dXJuIGZhbHNlOyIgdGl0bGU9ItCU0L7Q +sdCw0LLQuNGC0Ywg0LIg0LjQt9Cx0YDQsNC90L3QvtC1Ij48L2E+CgkJCQkJCTwv +bGk+CgkJCQkJCQoJCQkJCQk8bGkgY2xhc3M9InVwLXRvLXBhcmVudCI+PGEgdGl0 +bGU9ItCe0YLQstC10YIg0L3QsCIgb25jbGljaz0icmV0dXJuIGNvbW1lbnRGb3Jt +LmdvVG9QYXJlbnRDb21tZW50KHRoaXMpOyIgaHJlZj0iI2NvbW1lbnRfMzk2ODI0 +NiI+JnVhcnI7PC9hPjwvbGk+CgkJCQkJCTxsaSBjbGFzcz0iZG93bi10by1jaGls +ZCBoaWRkZW4iPjxhIHRpdGxlPSLQntCx0YDQsNGC0L3QviIgb25jbGljaz0icmV0 +dXJuIGNvbW1lbnRGb3JtLmdvVG9DaGlsZENvbW1lbnQodGhpcyk7IiBocmVmPSIj +Ij4mZGFycjs8L2E+PC9saT4KCQkJCQkJPCEtLTxsaSBjbGFzcz0ic2luZ2xlLXRy +ZWUiPgoJCQkJCQkJPGEgY2xhc3M9ImpzLXNlcnYganMtc2luZ2xlLXRyZWUiIGhy +ZWY9JyNjb21tZW50XzM5NjgyNDYnPtCy0LXRgtC60LA8L2E+CgkJCQkJCQk8YSBj +bGFzcz0ianMtc2VydiBqcy1tdWx0aXBsYXktdHJlZSIgaHJlZj0iI2NvbW1lbnRf +Mzk2ODI2MCI+0LLQvtGB0YHRgtCw0L3QvtCy0LjRgtGMPC9hPgoJCQkJCQk8L2xp +Pi0tPgoJCQkJCQkKCQkJCQkJPGxpPgoJCQkJCQkJPHVsIGNsYXNzPSJ2b3RlIHZv +dGluZyAgbWluZSBleHBpcmVkIj4KCQkJCQkJCQk8bGkgY2xhc3M9Im1hcmsiPjxz +cGFuPjA8L3NwYW4+PC9saT4KCQkJCQkJCQk8bGkgY2xhc3M9ImJ1dHRvbnMiPgoJ +CQkJCQkJCQk8YSByZXY9InZvdGVyLWZvci1jb21tZW50OjM5NjgyNjAiIGNsYXNz +PSJ2b3RlX21pbnVzIHZvdGUtZm9yLWNvbW1lbnQiIHRpdGxlPSLQn9C70L7RhdC+ +0Lkg0LrQvtC80LzQtdC90YLQsNGA0LjQuSI+PC9hPgoJCQkJCQkJCQk8YSByZXY9 +InZvdGVyLWZvci1jb21tZW50OjM5NjgyNjAiIGNsYXNzPSJ2b3RlX3BsdXMgdm90 +ZS1mb3ItY29tbWVudCIgdGl0bGU9ItCl0L7RgNC+0YjQuNC5INC60L7QvNC80LXQ +vdGC0LDRgNC40LkiPjwvYT4KCQkJCQkJCQk8L2xpPgoJCQkJCQkJPC91bD4KCQkJ +CQkJPC9saT4KCQkJCQkJCgkJCQkJPC91bD4KCgkJCQk8L2Rpdj4KCgkJCQk8ZGl2 +IGNsYXNzPSJlbnRyeS1jb250ZW50Ij4KCQkJCQk8ZGl2IGNsYXNzPSJlbnRyeS1j +b250ZW50LW9ubHkiPgoJCQkJCSAgICDQm9C40YfQvdC+INC80L3QtSDQsdGL0LvQ +viDQvtGH0LXQvdGMINGC0YDRg9C00L3QviDQsdC10Lcg0LHQu9C+0LrQvtCyINCy +IElPUyB2ZXIuICZsdDsgNC4wLCDQv9C+0YLQvtC80YMg0L3QsNC/0LjRgdCw0Lsg +0LTQsNC20LUgPGEgaHJlZj0iaHR0cDovL2hhYnJhaGFici5ydS9ibG9ncy9tYWNv +c3hkZXYvMTE5NDcyLyI+0YDQsNC90YLQsNC50Lw8L2E+CgkJCQkJPC9kaXY+CgkJ +CQkJPHAgY2xhc3M9InJlcGx5Ij48YSBjbGFzcz0ianMtc2VydiIgaHJlZj0iP3Jl +cGx5X3RvPTM5NjgyNjAjY29tbWVudF8zOTY4MjYwIiBvbmNsaWNrPSJjb21tZW50 +Rm9ybS5tb3ZlRm9ybSgncmVwbHlfZm9ybV8zOTY4MjYwJyk7IHJldHVybiBmYWxz +ZTsiPtC+0YLQstC10YLQuNGC0Yw8L2E+PC9wPgoJCQkJPC9kaXY+CgoJCQkJPGRp +diBpZD0icmVwbHlfZm9ybV8zOTY4MjYwIiBjbGFzcz0icmVwbHlfZm9ybSI+CgoJ +CQkJCQoJCQkJPC9kaXY+CgkJCQoKCQkJCgkJCQoJCQkKCgkJCQoKCQk8L2xpPgoJ +CgkJPGxpIGlkPSJjb21tZW50XzM5NjgzODciIGNsYXNzPSJjb21tZW50X2hvbGRl +ciB2b3RlX2hvbGRlciI+CgkJCQoJCQkJPGRpdiBjbGFzcz0ibXNnLW1ldGEiPgoJ +CQkJCTxkaXYgY2xhc3M9ImZvbGRpbmctZG90LWhvbGRlciI+PGRpdiBjbGFzcz0i +Zm9sZGluZy1kb3QiPjwvZGl2PjwvZGl2PgoJCQkJCTx1bCBjbGFzcz0ibWVudSBp +bmZvIGF1dGhvciBoY2FyZCI+CgkJCQkJCTxsaSBjbGFzcz0iYXZhdGFyIj4KCQkJ +CQkJCTxhIGhyZWY9Imh0dHA6Ly9DTFIuaGFicmFoYWJyLnJ1LyIgdGl0bGU9IkNM +UiI+CgkJCQkJCQkJPGltZyBzcmM9Imh0dHA6Ly9oYWJyYWhhYnIucnUvbWVkaWEv +dGh1bWIvZWYvZjEvMTUvMjE2MTAvMjE2MTBfMjR4MjQuanBnIiBhbHQ9IkNMUiIg +Lz4KCQkJCQkJCQk8Yj48L2I+CgkJCQkJCQk8L2E+CgkJCQkJCTwvbGk+CgkJCQkJ +CTxsaSBjbGFzcz0iZm4gbmlja25hbWUgdXNlcm5hbWUiPgoJCQkJCQkJPGEgaHJl +Zj0iaHR0cDovL0NMUi5oYWJyYWhhYnIucnUvIiBjbGFzcz0idXJsIj5DTFI8L2E+ +LAoJCQkJCQk8L2xpPgoJCQkJCQk8bGkgY2xhc3M9ImRhdGUiPgoJCQkJCQkJPGFi +YnIgY2xhc3M9InB1Ymxpc2hlZCIgdGl0bGU9IjIwMTEtMDYtMDhUMTk6NDc6NTYr +MDQ6MDAiPiA4INC40Y7QvdGPIDIwMTEsIDE5OjQ3PC9hYmJyPgoJCQkJCQk8L2xp +PgoJCQkJCQk8bGkgY2xhc3M9ImJvb2ttYXJrIj4KCQkJCQkJCTxhIGhyZWY9IiNj +b21tZW50XzM5NjgzODciIHRpdGxlPSLQodGB0YvQu9C60LAg0L3QsCDQutC+0LzQ +vNC10L3RgtCw0YDQuNC5IiByZWw9ImJvb2ttYXJrIj4jPC9hPgoJCQkJCQk8L2xp +PgoJCQkJCQkKCQkJCQkJPGxpIGNsYXNzPSJ0by1mYXZzIGpzLXRvX2ZhdnNfaG9s +ZGVyIj4KCQkJCQkJCTxhIGhyZWY9IiMiIGNsYXNzPSJqcy10b19mYXZzX2FkZCIg +b25jbGljaz0iZmF2c0hhbmRsZXIuZmF2b3JpdGVzU2VuZCh0aGlzLCAnY29tbWVu +dHMnLCAzOTY4Mzg3KTsgcmV0dXJuIGZhbHNlOyIgdGl0bGU9ItCU0L7QsdCw0LLQ +uNGC0Ywg0LIg0LjQt9Cx0YDQsNC90L3QvtC1Ij48L2E+CgkJCQkJCTwvbGk+CgkJ +CQkJCQoJCQkJCQk8bGkgY2xhc3M9InVwLXRvLXBhcmVudCI+PGEgdGl0bGU9ItCe +0YLQstC10YIg0L3QsCIgb25jbGljaz0icmV0dXJuIGNvbW1lbnRGb3JtLmdvVG9Q +YXJlbnRDb21tZW50KHRoaXMpOyIgaHJlZj0iI2NvbW1lbnRfMzk2ODI0NiI+JnVh +cnI7PC9hPjwvbGk+CgkJCQkJCTxsaSBjbGFzcz0iZG93bi10by1jaGlsZCBoaWRk +ZW4iPjxhIHRpdGxlPSLQntCx0YDQsNGC0L3QviIgb25jbGljaz0icmV0dXJuIGNv +bW1lbnRGb3JtLmdvVG9DaGlsZENvbW1lbnQodGhpcyk7IiBocmVmPSIjIj4mZGFy +cjs8L2E+PC9saT4KCQkJCQkJPCEtLTxsaSBjbGFzcz0ic2luZ2xlLXRyZWUiPgoJ +CQkJCQkJPGEgY2xhc3M9ImpzLXNlcnYganMtc2luZ2xlLXRyZWUiIGhyZWY9JyNj +b21tZW50XzM5NjgyNDYnPtCy0LXRgtC60LA8L2E+CgkJCQkJCQk8YSBjbGFzcz0i +anMtc2VydiBqcy1tdWx0aXBsYXktdHJlZSIgaHJlZj0iI2NvbW1lbnRfMzk2ODM4 +NyI+0LLQvtGB0YHRgtCw0L3QvtCy0LjRgtGMPC9hPgoJCQkJCQk8L2xpPi0tPgoJ +CQkJCQkKCQkJCQkJPGxpPgoJCQkJCQkJPHVsIGNsYXNzPSJ2b3RlIHZvdGluZyAg +ZXhwaXJlZCI+CgkJCQkJCQkJPGxpIGNsYXNzPSJtYXJrIj48c3Bhbj4wPC9zcGFu +PjwvbGk+CgkJCQkJCQkJPGxpIGNsYXNzPSJidXR0b25zIj4KCQkJCQkJCQkJPGEg +cmV2PSJ2b3Rlci1mb3ItY29tbWVudDozOTY4Mzg3IiBjbGFzcz0idm90ZV9taW51 +cyB2b3RlLWZvci1jb21tZW50IiB0aXRsZT0i0J/Qu9C+0YXQvtC5INC60L7QvNC8 +0LXQvdGC0LDRgNC40LkiPjwvYT4KCQkJCQkJCQkJPGEgcmV2PSJ2b3Rlci1mb3It +Y29tbWVudDozOTY4Mzg3IiBjbGFzcz0idm90ZV9wbHVzIHZvdGUtZm9yLWNvbW1l +bnQiIHRpdGxlPSLQpdC+0YDQvtGI0LjQuSDQutC+0LzQvNC10L3RgtCw0YDQuNC5 +Ij48L2E+CgkJCQkJCQkJPC9saT4KCQkJCQkJCTwvdWw+CgkJCQkJCTwvbGk+CgkJ +CQkJCQoJCQkJCTwvdWw+CgoJCQkJPC9kaXY+CgoJCQkJPGRpdiBjbGFzcz0iZW50 +cnktY29udGVudCI+CgkJCQkJPGRpdiBjbGFzcz0iZW50cnktY29udGVudC1vbmx5 +Ij4KCQkJCQkgICAg0J3QtdGCINC60L7QvdC10YfQvdC+LCDRg9Cy0LXRgNC10L0g +0YfRgtC+INGF0L7RgNC+0YjQuNC5INC60L7QtCwg0L3QviDQv9GA0L7QtNC+0LvQ +ttCw0YLRjCDQvtGC0LrQsNC30YvQstCw0YLRjNGB0Y8g0L7RgiDQvdC40YUg0YHQ +tdC50YfQsNGBIOKAlCDRjdGC0L4g0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g +0L3QtdCx0LvQsNCz0L7RgNCw0LfRg9C80L3Qvi48YnIvPg0KPGJyLz4NCtCa0YHR +gtCw0YLQuCDQvdCwINGB0LDQvNC+0Lwg0LTQtdC70LUg0LHQu9C+0LrQuCDQsiDQ +vNCw0Log0YLRg9GB0L7QstC60LUg0LDQutGC0LjQstC90L4g0LzRg9GB0YHQuNGA +0L7QstCw0LvQuNGB0Ywg0LfQsNC00L7Qu9Cz0L4g0LTQviDQvtGE0LjRhtC40LDQ +u9GM0L3QvtCz0L4g0LLRi9GF0L7QtNCwICgxMC42INC4IGlPUyA0KSwgQXBwbGUg +0YHQsNC80LAg0LjRhSDQvdCw0YfQsNC70LAg0L/Ri9GC0LDRgtGM0YHRjyDQv9GA +0L7QtNCy0LjQvdGD0YLRjCDQutCw0Log0YHRgtCw0L3QtNCw0YDRgiDQtdGJ0LUg +0LIgMjAwOCDQs9C+0LTRgywg0LAg0L/QvtGB0LrQvtC70YzQutGDINCy0YHQtSDR +gdGD0YDRgdGLINC+0YLQutGA0YvRgtGLLCDRgtC+INC/0L7Rh9GC0Lgg0YHRgNCw +0LfRgyDQttC1INCx0YvQuyDQvtGC0L/QvtGH0LrQvtCy0LDQvSDQv9GA0L7QtdC6 +0YIgcGxibG9ja3Mg0LrQvtGC0L7RgNGL0Lkg0L/QvtC30LLQvtC70Y/QuyDQvdCw +0YHQu9Cw0LTQuNGC0YHRjyDQuNC80Lgg0Lgg0LIg0LvQtdC+0L/QsNGA0LTQtSwg +0L3RgyDQuCDQsiDQv9C10YDQstGL0YUg0LLQtdGA0YHQuNGP0YUgaU9TICjQvdC1 +INGD0LLQtdGA0LXQvSwg0LjQsdC+INC90LUg0L/QuNGI0YMg0L/QvtC0IGlPUywg +0L3QviDQstGA0L7QtNC1INC60LDQuiDQtdGJ0LUg0YEgMiDQstC10YDRgdC40Lgp +LiA8YnIvPg0KPGJyLz4NCtCd0YMg0LAg0L/QvtGB0LvQtSDRg9C20LUg0L7RhNC4 +0YbQuNCw0LvRjNC90L7Qs9C+INC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNGPINC/ +0YDQvtGI0LXQuyDQttC1INGG0LXQu9GL0Lkg0LPQvtC0LCDQt9CwINGN0YLQviDQ +stGA0LXQvNGPINCx0LvQvtC60Lgg0LggZ2NkINC00LXQudGB0YLQstC40YLQtdC7 +0YzQvdC+INGB0YLQsNC70Lgg0L3QtdC+0YLRitC10LzQu9C10LzQvtC5INGH0LDR +gdGC0YzRjiDQv9GA0LDQutGC0LjRh9C10YHQutC4INC70Y7QsdC+0Lkg0L/RgNC+ +0LPRgNCw0LzQvNGLLiDQldGB0LvQuCDRgdC/0YDQvtGB0LjRgtGMINC80LXQvdGP +INGH0YLQviDRgdCw0LzQvtC1INC30LDQv9C+0LzQuNC90LDRjtGJ0LXQtdGB0Y8g +0L/QvtGP0LLQuNC70L7RgdGMINGDIEFwcGxlINC30LAg0L/QvtGB0LvQtdC00L3Q +uNC1INC90LXRgdC60L7Qu9GM0LrQviDQu9C10YIsINGPINC90LDQt9C+0LLRgyDQ +uNC80LXQvdC90L4gZ2NkINC4INCx0LvQvtC60LguPGJyLz4NCgoJCQkJCTwvZGl2 +PgoJCQkJCTxwIGNsYXNzPSJyZXBseSI+PGEgY2xhc3M9ImpzLXNlcnYiIGhyZWY9 +Ij9yZXBseV90bz0zOTY4Mzg3I2NvbW1lbnRfMzk2ODM4NyIgb25jbGljaz0iY29t +bWVudEZvcm0ubW92ZUZvcm0oJ3JlcGx5X2Zvcm1fMzk2ODM4NycpOyByZXR1cm4g +ZmFsc2U7Ij7QvtGC0LLQtdGC0LjRgtGMPC9hPjwvcD4KCQkJCTwvZGl2PgoKCQkJ +CTxkaXYgaWQ9InJlcGx5X2Zvcm1fMzk2ODM4NyIgY2xhc3M9InJlcGx5X2Zvcm0i +PgoKCQkJCQkKCQkJCTwvZGl2PgoJCQkKCgkJCQoJCQkKCQkJCgoJCQkKCgkJPC9s +aT4KCQo8L3VsPgoKCQkJCgoJCTwvbGk+CgkKPC91bD4KCgkJCQoKCQk8L2xpPgoJ +CgkJPGxpIGlkPSJjb21tZW50XzM5Njk1NjQiIGNsYXNzPSJjb21tZW50X2hvbGRl +ciB2b3RlX2hvbGRlciI+CgkJCQoJCQkJPGRpdiBjbGFzcz0ibXNnLW1ldGEiPgoJ +CQkJCTxkaXYgY2xhc3M9ImZvbGRpbmctZG90LWhvbGRlciI+PGRpdiBjbGFzcz0i +Zm9sZGluZy1kb3QiPjwvZGl2PjwvZGl2PgoJCQkJCTx1bCBjbGFzcz0ibWVudSBp +bmZvIGF1dGhvciBoY2FyZCI+CgkJCQkJCTxsaSBjbGFzcz0iYXZhdGFyIj4KCQkJ +CQkJCTxhIGhyZWY9Imh0dHA6Ly9rcG93ZXIuaGFicmFoYWJyLnJ1LyIgdGl0bGU9 +Imtwb3dlciI+CgkJCQkJCQkJPGltZyBzcmM9Imh0dHA6Ly9oYWJyYWhhYnIucnUv +bWVkaWEvdGh1bWIvN2YvZmIvYmEvMzA2MzcvMzA2MzdfMjR4MjQuanBnIiBhbHQ9 +Imtwb3dlciIgLz4KCQkJCQkJCQk8Yj48L2I+CgkJCQkJCQk8L2E+CgkJCQkJCTwv +bGk+CgkJCQkJCTxsaSBjbGFzcz0iZm4gbmlja25hbWUgdXNlcm5hbWUiPgoJCQkJ +CQkJPGEgaHJlZj0iaHR0cDovL2twb3dlci5oYWJyYWhhYnIucnUvIiBjbGFzcz0i +dXJsIj5rcG93ZXI8L2E+LAoJCQkJCQk8L2xpPgoJCQkJCQk8bGkgY2xhc3M9ImRh +dGUiPgoJCQkJCQkJPGFiYnIgY2xhc3M9InB1Ymxpc2hlZCIgdGl0bGU9IjIwMTEt +MDYtMDlUMDc6NTc6MTQrMDQ6MDAiPiA5INC40Y7QvdGPIDIwMTEsIDA3OjU3PC9h +YmJyPgoJCQkJCQk8L2xpPgoJCQkJCQk8bGkgY2xhc3M9ImJvb2ttYXJrIj4KCQkJ +CQkJCTxhIGhyZWY9IiNjb21tZW50XzM5Njk1NjQiIHRpdGxlPSLQodGB0YvQu9C6 +0LAg0L3QsCDQutC+0LzQvNC10L3RgtCw0YDQuNC5IiByZWw9ImJvb2ttYXJrIj4j +PC9hPgoJCQkJCQk8L2xpPgoJCQkJCQkKCQkJCQkJPGxpIGNsYXNzPSJ0by1mYXZz +IGpzLXRvX2ZhdnNfaG9sZGVyIj4KCQkJCQkJCTxhIGhyZWY9IiMiIGNsYXNzPSJq +cy10b19mYXZzX2FkZCIgb25jbGljaz0iZmF2c0hhbmRsZXIuZmF2b3JpdGVzU2Vu +ZCh0aGlzLCAnY29tbWVudHMnLCAzOTY5NTY0KTsgcmV0dXJuIGZhbHNlOyIgdGl0 +bGU9ItCU0L7QsdCw0LLQuNGC0Ywg0LIg0LjQt9Cx0YDQsNC90L3QvtC1Ij48L2E+ +CgkJCQkJCTwvbGk+CgkJCQkJCQoJCQkJCQk8bGkgY2xhc3M9InVwLXRvLXBhcmVu +dCI+PGEgdGl0bGU9ItCe0YLQstC10YIg0L3QsCIgb25jbGljaz0icmV0dXJuIGNv +bW1lbnRGb3JtLmdvVG9QYXJlbnRDb21tZW50KHRoaXMpOyIgaHJlZj0iI2NvbW1l +bnRfMzk2NzIwMSI+JnVhcnI7PC9hPjwvbGk+CgkJCQkJCTxsaSBjbGFzcz0iZG93 +bi10by1jaGlsZCBoaWRkZW4iPjxhIHRpdGxlPSLQntCx0YDQsNGC0L3QviIgb25j +bGljaz0icmV0dXJuIGNvbW1lbnRGb3JtLmdvVG9DaGlsZENvbW1lbnQodGhpcyk7 +IiBocmVmPSIjIj4mZGFycjs8L2E+PC9saT4KCQkJCQkJPCEtLTxsaSBjbGFzcz0i +c2luZ2xlLXRyZWUiPgoJCQkJCQkJPGEgY2xhc3M9ImpzLXNlcnYganMtc2luZ2xl +LXRyZWUiIGhyZWY9JyNjb21tZW50XzM5NjcyMDEnPtCy0LXRgtC60LA8L2E+CgkJ +CQkJCQk8YSBjbGFzcz0ianMtc2VydiBqcy1tdWx0aXBsYXktdHJlZSIgaHJlZj0i +I2NvbW1lbnRfMzk2OTU2NCI+0LLQvtGB0YHRgtCw0L3QvtCy0LjRgtGMPC9hPgoJ +CQkJCQk8L2xpPi0tPgoJCQkJCQkKCQkJCQkJPGxpPgoJCQkJCQkJPHVsIGNsYXNz +PSJ2b3RlIHZvdGluZyAgZXhwaXJlZCI+CgkJCQkJCQkJPGxpIGNsYXNzPSJtYXJr +Ij48c3Bhbj4wPC9zcGFuPjwvbGk+CgkJCQkJCQkJPGxpIGNsYXNzPSJidXR0b25z +Ij4KCQkJCQkJCQkJPGEgcmV2PSJ2b3Rlci1mb3ItY29tbWVudDozOTY5NTY0IiBj +bGFzcz0idm90ZV9taW51cyB2b3RlLWZvci1jb21tZW50IiB0aXRsZT0i0J/Qu9C+ +0YXQvtC5INC60L7QvNC80LXQvdGC0LDRgNC40LkiPjwvYT4KCQkJCQkJCQkJPGEg +cmV2PSJ2b3Rlci1mb3ItY29tbWVudDozOTY5NTY0IiBjbGFzcz0idm90ZV9wbHVz +IHZvdGUtZm9yLWNvbW1lbnQiIHRpdGxlPSLQpdC+0YDQvtGI0LjQuSDQutC+0LzQ +vNC10L3RgtCw0YDQuNC5Ij48L2E+CgkJCQkJCQkJPC9saT4KCQkJCQkJCTwvdWw+ +CgkJCQkJCTwvbGk+CgkJCQkJCQoJCQkJCTwvdWw+CgoJCQkJPC9kaXY+CgoJCQkJ +PGRpdiBjbGFzcz0iZW50cnktY29udGVudCI+CgkJCQkJPGRpdiBjbGFzcz0iZW50 +cnktY29udGVudC1vbmx5Ij4KCQkJCQkgICAg0J3QtdC80L3QvtCz0L4g0YEg0LLQ +sNC80Lgg0L3QtSDRgdC+0LPQu9Cw0YHQtdC9LiDQkdC70L7QutC4LCDQstC+0LfQ +vNC+0LbQvdC+LCDQuCDQvdC1INC/0LDQvdCw0YbQtdGPLCDQvtC00L3QsNC60L4g +0L/RgNC4INGA0LDQsdC+0YLQtSDRgSDRgtC10LzQuCDQttC1INC40L3RgtC10YDR +hNC10LnRgdCw0LzQuCDQt9Cw0YfQsNGB0YLRg9GOINC/0YDQvtGB0YLQviDQvdC1 +INC90YDQsNCy0LjRgtGB0Y8g0L7Qv9GA0LXQtNC10LvRj9GC0Ywg0L/QvtC70L7Q +stC40L3RgyDQu9C+0LPQuNC60Lgg0LIg0L7QtNC90L7QvCDQvNC10YLQvtC00LUs +INC/0L7Qu9C+0LLQuNC90YMg0LIg0LTRgNGD0LPQvtC8Ljxici8+DQrQryDQuNC8 +0LXRjiDQstCy0LjQtNGDLCDQvdCw0L/RgNC40LzQtdGALCBVSUFsZXJ0VmlldyDi +gJQg0YDQsNC00Lgg0LfQsNGH0LDRgdGC0YPRjiDQv9Cw0YDRiyDRgdGC0YDQvtC6 +LCDQvtCx0YDQsNCx0LDRgtGL0LLQsNGO0YnQuNGFINC00LXQudGB0YLQstC40Y8g +0L/QviDQstGL0LHQvtGA0YMg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPLCDQv9GA +0LjRhdC+0LTQuNC70L7RgdGMINC30LDQstC+0LTQuNGC0Ywg0L3QvtCy0YvQuSDQ +vNC10YLQvtC0ICsg0LXRidC1INC4INC+0L/RgNC10LTQtdC70Y/RgtGMLCDQvtGC +INC60LDQutC+0LPQviDQuNC3IFVJQWxlcnRWaWV3ICjQtdGB0LvQuCDQuNGFINC9 +0LXRgdC60L7Qu9GM0LrQvikg0LzRiyDQv9GA0LjRiNC70LjigKYKCQkJCQk8L2Rp +dj4KCQkJCQk8cCBjbGFzcz0icmVwbHkiPjxhIGNsYXNzPSJqcy1zZXJ2IiBocmVm +PSI/cmVwbHlfdG89Mzk2OTU2NCNjb21tZW50XzM5Njk1NjQiIG9uY2xpY2s9ImNv +bW1lbnRGb3JtLm1vdmVGb3JtKCdyZXBseV9mb3JtXzM5Njk1NjQnKTsgcmV0dXJu +IGZhbHNlOyI+0L7RgtCy0LXRgtC40YLRjDwvYT48L3A+CgkJCQk8L2Rpdj4KCgkJ +CQk8ZGl2IGlkPSJyZXBseV9mb3JtXzM5Njk1NjQiIGNsYXNzPSJyZXBseV9mb3Jt +Ij4KCgkJCQkJCgkJCQk8L2Rpdj4KCQkJCgoJCQkKCQkJCgkJCQoKCQkJCgoJCTwv +bGk+CgkKPC91bD4KCgkJCQoKCQk8L2xpPgoJCjwvdWw+CgoJCQkKCgkJPC9saT4K +CQoJCTxsaSBpZD0iY29tbWVudF8zOTY4MjM4IiBjbGFzcz0iY29tbWVudF9ob2xk +ZXIgdm90ZV9ob2xkZXIiPgoJCQkKCQkJCTxkaXYgY2xhc3M9Im1zZy1tZXRhIj4K +CQkJCQk8ZGl2IGNsYXNzPSJmb2xkaW5nLWRvdC1ob2xkZXIiPjxkaXYgY2xhc3M9 +ImZvbGRpbmctZG90Ij48L2Rpdj48L2Rpdj4KCQkJCQk8dWwgY2xhc3M9Im1lbnUg +aW5mbyBhdXRob3IgaGNhcmQiPgoJCQkJCQk8bGkgY2xhc3M9ImF2YXRhciI+CgkJ +CQkJCQk8YSBocmVmPSJodHRwOi8vdmljdG9yaWFfY2hhaW4uaGFicmFoYWJyLnJ1 +LyIgdGl0bGU9InZpY3RvcmlhX2NoYWluIj4KCQkJCQkJCQk8aW1nIHNyYz0iaHR0 +cDovL2hhYnJhaGFici5ydS9pL2F2YXRhcnMvc3R1Yi11c2VyLXNtYWxsLmdpZiIg +YWx0PSJ2aWN0b3JpYV9jaGFpbiIgLz4KCQkJCQkJCQk8Yj48L2I+CgkJCQkJCQk8 +L2E+CgkJCQkJCTwvbGk+CgkJCQkJCTxsaSBjbGFzcz0iZm4gbmlja25hbWUgdXNl +cm5hbWUiPgoJCQkJCQkJPGEgaHJlZj0iaHR0cDovL3ZpY3RvcmlhX2NoYWluLmhh +YnJhaGFici5ydS8iIGNsYXNzPSJ1cmwiPnZpY3RvcmlhX2NoYWluPC9hPiwKCQkJ +CQkJPC9saT4KCQkJCQkJPGxpIGNsYXNzPSJkYXRlIj4KCQkJCQkJCTxhYmJyIGNs +YXNzPSJwdWJsaXNoZWQiIHRpdGxlPSIyMDExLTA2LTA4VDE4OjUyOjA5KzA0OjAw +Ij4gOCDQuNGO0L3RjyAyMDExLCAxODo1MjwvYWJicj4KCQkJCQkJPC9saT4KCQkJ +CQkJPGxpIGNsYXNzPSJib29rbWFyayI+CgkJCQkJCQk8YSBocmVmPSIjY29tbWVu +dF8zOTY4MjM4IiB0aXRsZT0i0KHRgdGL0LvQutCwINC90LAg0LrQvtC80LzQtdC9 +0YLQsNGA0LjQuSIgcmVsPSJib29rbWFyayI+IzwvYT4KCQkJCQkJPC9saT4KCQkJ +CQkJCgkJCQkJCTxsaSBjbGFzcz0idG8tZmF2cyBqcy10b19mYXZzX2hvbGRlciI+ +CgkJCQkJCQk8YSBocmVmPSIjIiBjbGFzcz0ianMtdG9fZmF2c19hZGQiIG9uY2xp +Y2s9ImZhdnNIYW5kbGVyLmZhdm9yaXRlc1NlbmQodGhpcywgJ2NvbW1lbnRzJywg +Mzk2ODIzOCk7IHJldHVybiBmYWxzZTsiIHRpdGxlPSLQlNC+0LHQsNCy0LjRgtGM +INCyINC40LfQsdGA0LDQvdC90L7QtSI+PC9hPgoJCQkJCQk8L2xpPgoJCQkJCQkK +CQkJCQkJCgkJCQkJCTxsaSBjbGFzcz0iZG93bi10by1jaGlsZCBoaWRkZW4iPjxh +IHRpdGxlPSLQntCx0YDQsNGC0L3QviIgb25jbGljaz0icmV0dXJuIGNvbW1lbnRG +b3JtLmdvVG9DaGlsZENvbW1lbnQodGhpcyk7IiBocmVmPSIjIj4mZGFycjs8L2E+ +PC9saT4KCQkJCQkJPCEtLTxsaSBjbGFzcz0ic2luZ2xlLXRyZWUiPgoJCQkJCQkJ +PGEgY2xhc3M9ImpzLXNlcnYganMtc2luZ2xlLXRyZWUiIGhyZWY9Jyc+0LLQtdGC +0LrQsDwvYT4KCQkJCQkJCTxhIGNsYXNzPSJqcy1zZXJ2IGpzLW11bHRpcGxheS10 +cmVlIiBocmVmPSIjY29tbWVudF8zOTY4MjM4Ij7QstC+0YHRgdGC0LDQvdC+0LLQ +uNGC0Yw8L2E+CgkJCQkJCTwvbGk+LS0+CgkJCQkJCQoJCQkJCQk8bGk+CgkJCQkJ +CQk8dWwgY2xhc3M9InZvdGUgdm90aW5nIHBvc2l0aXZlIGV4cGlyZWQiPgoJCQkJ +CQkJCTxsaSBjbGFzcz0ibWFyayI+PHNwYW4+KzI8L3NwYW4+PC9saT4KCQkJCQkJ +CQk8bGkgY2xhc3M9ImJ1dHRvbnMiPgoJCQkJCQkJCQk8YSByZXY9InZvdGVyLWZv +ci1jb21tZW50OjM5NjgyMzgiIGNsYXNzPSJ2b3RlX21pbnVzIHZvdGUtZm9yLWNv +bW1lbnQiIHRpdGxlPSLQn9C70L7RhdC+0Lkg0LrQvtC80LzQtdC90YLQsNGA0LjQ +uSI+PC9hPgoJCQkJCQkJCQk8YSByZXY9InZvdGVyLWZvci1jb21tZW50OjM5Njgy +MzgiIGNsYXNzPSJ2b3RlX3BsdXMgdm90ZS1mb3ItY29tbWVudCIgdGl0bGU9ItCl +0L7RgNC+0YjQuNC5INC60L7QvNC80LXQvdGC0LDRgNC40LkiPjwvYT4KCQkJCQkJ +CQk8L2xpPgoJCQkJCQkJPC91bD4KCQkJCQkJPC9saT4KCQkJCQkJCgkJCQkJPC91 +bD4KCgkJCQk8L2Rpdj4KCgkJCQk8ZGl2IGNsYXNzPSJlbnRyeS1jb250ZW50Ij4K +CQkJCQk8ZGl2IGNsYXNzPSJlbnRyeS1jb250ZW50LW9ubHkiPgoJCQkJCSAgICDR +hdC+0YLQtdC70L7RgdGMINCx0Ysg0LXRidC1INC00L7QsdCw0LLQuNGC0YwsINGH +0YLQviDQv9GA0Lgg0L7QsdGK0Y/QstC70LXQvdC40Lgg0Lgg0YDQtdCw0LvQuNC3 +0LDRhtC40Lgg0LHQu9C+0LrQsCDQvtGH0LXQvdGMINC/0L7QvNC+0LPQsNC10YIg +0L3QsNCx0YDQsNGC0YwgaW5saW5lQmxvY2sg0Lgg0L/QvtC70YPRh9C40YLRjCDR +gtCw0LrQvtC5INGF0LjQvdGCOiA8YnIvPg0KJmx0OyNSZXR1cm4gVHlwZSMmZ3Q7 +KF4mbHQ7I0Jsb2NrIE5hbWUjJmd0OykoJmx0OyNQYXJhbWV0ZXIgVHlwZXMjJmd0 +OykgPSBeKCZsdDsjUGFyYW1ldGVycyMmZ3Q7KSB7PGJyLz4NCiAmbHQ7I0NvZGUj +Jmd0Ozxici8+DQogfTsKCQkJCQk8L2Rpdj4KCQkJCQk8cCBjbGFzcz0icmVwbHki +PjxhIGNsYXNzPSJqcy1zZXJ2IiBocmVmPSI/cmVwbHlfdG89Mzk2ODIzOCNjb21t +ZW50XzM5NjgyMzgiIG9uY2xpY2s9ImNvbW1lbnRGb3JtLm1vdmVGb3JtKCdyZXBs +eV9mb3JtXzM5NjgyMzgnKTsgcmV0dXJuIGZhbHNlOyI+0L7RgtCy0LXRgtC40YLR +jDwvYT48L3A+CgkJCQk8L2Rpdj4KCgkJCQk8ZGl2IGlkPSJyZXBseV9mb3JtXzM5 +NjgyMzgiIGNsYXNzPSJyZXBseV9mb3JtIj4KCgkJCQkJCgkJCQk8L2Rpdj4KCQkJ +CgoJCQkKCQkJCgkJCQoKCQkJCgoJCTwvbGk+CgkKPC91bD4KDQoJCQkNCgkJCQ0K +DQoJCQkNCgkJCTxkaXYgY2xhc3M9ImFkZC1jb21tZW50Ij4NCgkJCQk8aDM+PGEg +aHJlZj0iI25ld19jb21tZW50IiBuYW1lPSJuZXdfY29tbWVudCIgb25jbGljaz0i +Y29tbWVudEZvcm0ubW92ZUZvcm0oJ3JlcGx5X2Zvcm1fMCcpOyByZXR1cm4gZmFs +c2U7Ij7QndCw0L/QuNGB0LDRgtGMINC60L7QvNC80LXQvdGC0LDRgNC40Lk8L2E+ +PC9oMz4NCgkJCQk8ZGl2IGlkPSJyZXBseV9mb3JtXzAiPg0KCQkJCQk8ZGl2IGlk +PSJqcy1maWVsZC1ob2xkZXItd2l0aC1oZWxwIj4NCgkJCQkJCTxkbCBjbGFzcz0i +Y29tbWVudC1oZWxwIiA+DQoJCQkJCQkJPCEtLTxkdD4NCgkJCQkJCQkJPGEgdGl0 +bGU9Im1vYm9yYiIgaHJlZj0iaHR0cDovL21vYm9yYi5oYWJyYWhhYnIucnUvIj4N +CgkJCQkJCQkJCTxpbWcgc3JjPSJodHRwOi8vaGFicmFoYWJyLnJ1L2kvYXZhdGFy +cy9zdHViLXVzZXItc21hbGwuZ2lmIiBhbHQ9Im1vYm9yYiIgY2xhc3M9InBob3Rv +IiBoZWlnaHQ9IjI0IiB3aWR0aD0iMjQiIC8+DQoJCQkJCQkJCTwvYT4NCgkJCQkJ +CQk8L2R0Pi0tPg0KCQkJCQkJCTxkZD4NCgkJCQkJCQkJPCEtLdCy0Ysg4oCUDQoJ +CQkJCQkJCTxhIGNsYXNzPSJuYW1lIiB0aXRsZT0ibW9ib3JiIiBocmVmPSJodHRw +Oi8vbW9ib3JiLmhhYnJhaGFici5ydS8iPm1vYm9yYjwvYT4tLT4NCgkJCQkJCQkJ +PHNwYW4+DQoJCQkJCQkJCQnQnNC+0LbQvdC+INC40YHQv9C+0LvRjNC30L7QstCw +0YLRjCA8YSBjbGFzcz0ianMtc2VydiIgb25jbGljaz0iJCgnaHRtbF90YWdzX2hl +bHAnKS50b2dnbGVDbGFzcygnaGlkZGVuJyk7cmV0dXJuIGZhbHNlOyIgaHJlZj0i +IyI+aHRtbC3RgtC10LPQuDwvYT4NCgkJCQkJCQkJPC9zcGFuPg0KCQkJCQkJCTwv +ZGQ+DQoJCQkJCQk8L2RsPg0KCQkJCQkJCQk8ZGl2IGNsYXNzPSJoZWxwX2hvbGRl +ciI+CgkJCTxkaXYgaWQ9Imh0bWxfdGFnc19oZWxwIiBjbGFzcz0icm91bmQgdGVy +bXMgYmxvY2sgaGlkZGVuIj4KCQkJCTxkaXYgY2xhc3M9ImNvbnRlbnQiPgoJCQkJ +CTxhIGhyZWY9IiMiIGlkPSJodG1sX3RhZ3NfaGVscF9jbG9zZSIgY2xhc3M9InN5 +c3RlbSIgb25jbGljaz0iJCgnaHRtbF90YWdzX2hlbHAnKS50b2dnbGVDbGFzcygn +aGlkZGVuJyk7cmV0dXJuIGZhbHNlOyI+0LfQsNC60YDRi9GC0Yw8L2E+CgoJCQkJ +CTxoNT7QotC10LPQuCDQpdCw0LHRgNCw0YXQsNCx0YDQsDwvaDU+CgkJCQkJPGRs +IGNsYXNzPSJibG9ja19zZW1pIj4KCQkJCQkJPGR0PiZsdDtzb3VyY2UgbGFuZz0i +0Y/Qt9GL0LoiJmd0OyZsdDsvc291cmNlJmd0OzwvZHQ+CgkJCQkJCTxkZCBjbGFz +cz0iZGVzY3JpcHRpb24iPtCf0L7QtNGB0LLQtdGH0LjQstCw0LXRgiDQutC+0LQg +0L/RgNC+0LPRgNCw0LzQvNGLICjQv9C+0LTQtNC10YDQttC40LLQsNC10YLRgdGP +IGJhc2gsIGNwcCwgY3MsIHhtbCwgaHRtbCwgamF2YSwgamF2YXNjcmlwdCwgbGlz +cCwgbHVhLCBwaHAsIHBlcmwsIHB5dGhvbiwgcnVieSwgc3FsLCBzY2FsYSwgdGV4 +KTwvZGQ+CgkJCQkJPC9kbD4KCQkJCQk8ZGwgY2xhc3M9ImJsb2NrX3NlbWkiPgoJ +CQkJCQk8ZHQ+Jmx0O3ZpZGVvJmd0OyZsdDsvdmlkZW8mZ3Q7PC9kdD4KCgkJCQkJ +CTxkZCBjbGFzcz0iZGVzY3JpcHRpb24iPtCS0YHRgtCw0LLQu9GP0LXRgiDQsiDQ +v9C+0YHRgiDQstC40LTQtdC+LCDQtNC+0L/Rg9GB0YLQuNC80YvQtSDRhdC+0YHR +gtC40L3Qs9C4OiBZb3VUdWJlLCBSdVR1YmUsIEdvb2dsZSB2aWRlbywgVmltZW8g +0Lgg0K8u0JLQuNC00LXQvjwvZGQ+CgkJCQkJPC9kbD4KCQkJCQk8ZGwgY2xhc3M9 +ImJsb2NrX3NlbWkiPgoJCQkJCQk8ZHQ+Jmx0O2hoIHVzZXI9JnF1b3Q7Li4uJnF1 +b3Q7IC8mZ3Q7PC9kdD4KCgkJCQkJCTxkZCBjbGFzcz0iZGVzY3JpcHRpb24iPtCS +0YvQstC+0LTQuNGCINC40LzRjyDRjtC30LXRgNCwINC/0L7RgdGA0LXQtNC4INGC +0LXQutGB0YLQsCwg0L7QsdGA0LDRgtC90YvQuSDRgdC70LXRiCAoLykg0LIg0LrQ +vtC90YbQtSDRgtC10LPQsCDQvtCx0Y/Qt9Cw0YLQtdC70LXQvTwvZGQ+CgkJCQkJ +PC9kbD4KCgkJCQkJPGg1PtCh0YLQsNC90LTQsNGA0YLQvdGL0LU8L2g1PgoJCQkJ +CTx0YWJsZSBjbGFzcz0id2lkZSI+CgkJCQkJCTx0cj4KCQkJCQkJCTx0ZD4KCQkJ +CQkJCQk8ZGwgY2xhc3M9ImJsb2NrX3NlbWkiPgoJCQkJCQkJCQk8ZHQ+Jmx0O2g0 +Jmd0OyZsdDsvaDQmZ3Q7PGJyLz4KCgkJCQkJCQkJCQkmbHQ7aDUmZ3Q7Jmx0Oy9o +NSZndDs8YnIvPgoJCQkJCQkJCQkJJmx0O2g2Jmd0OyZsdDsvaDYmZ3Q7CgkJCQkJ +CQkJCTwvZHQ+CgkJCQkJCQkJCTxkZCBjbGFzcz0iZGVzY3JpcHRpb24iPtCX0LDQ +s9C+0LvQvtCy0LrQuCDRgNCw0LfQvdC+0LPQviDRg9GA0L7QstC90Y88L2RkPgoJ +CQkJCQkJCTwvZGw+CgkJCQkJCQkJPGRsIGNsYXNzPSJibG9ja19zZW1pIj4KCgkJ +CQkJCQkJCTxkdD4mbHQ7aW1nIHNyYz0mcXVvdDsmcXVvdDsgLyZndDs8L2R0PgoJ +CQkJCQkJCQk8ZGQgY2xhc3M9ImRlc2NyaXB0aW9uIj7QmNC30L7QsdGA0LDQttC1 +0L3QuNC1LCDQsiDQsNGC0YDQuNCx0YPRgtC1IHNyYyDRg9C60LDQt9GL0LLQsNC5 +0YLQtSDQv9C+0LvQvdGL0Lkg0L/Rg9GC0Ywg0Log0LjQt9C+0LHRgNCw0LbQtdC9 +0LjRjjwvZGQ+CgkJCQkJCQkJPC9kbD4KCQkJCQkJCQk8ZGwgY2xhc3M9ImJsb2Nr +X3NlbWkiPgoJCQkJCQkJCQk8ZHQ+Jmx0O2EgaHJlZj0mcXVvdDsmcXVvdDsgJmd0 +OyZsdDsvYSZndDs8L2R0PgoKCQkJCQkJCQkJPGRkIGNsYXNzPSJkZXNjcmlwdGlv +biI+0KHRgdGL0LvQutCwLCDQsiDQsNGC0YDQuNCx0YPRgtC1IGhyZWYg0YPQutCw +0LbQuNGC0LUg0LbQtdC70LDQtdC80YvQuSDQuNC90YLQtdGA0L3QtdGCLdCw0LTR +gNC10YE8L2RkPgoJCQkJCQkJCTwvZGw+CgkJCQkJCQkJPGRsIGNsYXNzPSJibG9j +a19zZW1pIj4KCQkJCQkJCQkJPGR0PiZsdDtzdHJvbmcmZ3Q7Jmx0Oy9zdHJvbmcm +Z3Q7PC9kdD4KCQkJCQkJCQkJPGRkIGNsYXNzPSJkZXNjcmlwdGlvbiI+0JLRi9C0 +0LXQu9C10L3QuNC1INCy0LDQttC90L7Qs9C+INGC0LXQutGB0YLQsCwg0L3QsCDR +gdGC0YDQsNC90LjRhtC1INCy0YvQtNC10LvRj9C10YLRgdGPIDxzdHJvbmc+0LbQ +uNGA0L3Ri9C8PC9zdHJvbmc+INC90LDRh9C10YDRgtCw0L3QuNC10Lw8L2RkPgoJ +CQkJCQkJCTwvZGw+CgkJCQkJCQkJPGRsIGNsYXNzPSJibG9ja19zZW1pIj4KCgkJ +CQkJCQkJCTxkdD4mbHQ7ZW0mZ3Q7Jmx0Oy9lbSZndDs8L2R0PgoJCQkJCQkJCQk8 +ZGQgY2xhc3M9ImRlc2NyaXB0aW9uIj7QktGL0LTQtdC70LXQvdC40LUg0LLQsNC2 +0L3QvtCz0L4g0YLQtdC60YHRgtCwLCDQvdCwINGB0YLRgNCw0L3QuNGG0LUg0LLR +i9C00LXQu9GP0LXRgtGB0Y8gPGVtPtC60YPRgNGB0LjQstC+0Lw8L2VtPjwvZGQ+ +CgkJCQkJCQkJPC9kbD4KCQkJCQkJCQk8ZGwgY2xhc3M9ImJsb2NrX3NlbWkiPgoJ +CQkJCQkJCQk8ZHQ+CgkJCQkJCQkJCQkmbHQ7cyZndDsmbHQ7L3MmZ3Q7PGJyLz4K +CgkJCQkJCQkJCQkmbHQ7c3RyaWtlJmd0OyZsdDsvc3RyaWtlJmd0OwoJCQkJCQkJ +CQk8L2R0PgoJCQkJCQkJCQk8ZGQgY2xhc3M9ImRlc2NyaXB0aW9uIj7QktGL0LTQ +tdC70LXQvdC90YvQuSDRgtC10LPQvtC8ICZsdDtzJmd0OyDQuNC70Lgg0YLQtdCz +0L7QvCAmbHQ7c3RyaWtlJmd0OyDRgtC10LrRgdGCINC+0YLQvtCx0YDQsNC20LDQ +tdGC0YHRjywg0LrQsNC6IDxzPtC30LDRh9C10YDQutC90YPRgtGL0Lk8L3M+PC9k +ZD4KCQkJCQkJCQk8L2RsPgoKCQkJCQkJCQk8ZGwgY2xhc3M9ImJsb2NrX3NlbWki +PgoJCQkJCQkJCQk8ZHQ+CgkJCQkJCQkJCQkmbHQ7dSZndDsmbHQ7L3UmZ3Q7CgkJ +CQkJCQkJCTwvZHQ+CgkJCQkJCQkJCTxkZCBjbGFzcz0iZGVzY3JpcHRpb24iPtCS +0YvQtNC10LvQtdC90L3Ri9C5INGC0LXQs9C+0LwgJmx0O3UmZ3Q7INGC0LXQutGB +0YIg0L7RgtC+0LHRgNCw0LbQsNC10YLRgdGPLCDQutCw0LogPHU+0L/QvtC00YfQ +tdGA0LrQvdGD0YLRi9C5PC91PjwvZGQ+CgkJCQkJCQkJPC9kbD4KCgkJCQkJCQkJ +PGRsIGNsYXNzPSJibG9ja19zZW1pIj4KCQkJCQkJCQkJPGR0PgoJCQkJCQkJCQkJ +Jmx0O3VsJmd0OyZsdDsvdWwmZ3Q7PGJyLz4KCQkJCQkJCQkJCSZsdDtsaSZndDsm +bHQ7L2xpJmd0OwoJCQkJCQkJCQk8L2R0PgoJCQkJCQkJCQk8ZGQgY2xhc3M9ImRl +c2NyaXB0aW9uIj7QndC10L3Rg9C80LXRgNC+0LLQsNC90L3Ri9C5INGB0L/QuNGB +0L7Qujsg0LrQsNC20LTRi9C5INGN0LvQtdC80LXQvdGCINGB0L/QuNGB0LrQsCDQ +t9Cw0LTQsNC10YLRgdGPINGC0LXQs9C+0LwgJmx0O2xpJmd0Oywg0L3QsNCx0L7R +gCDRjdC70LXQvNC10L3RgtC+0LIg0YHQv9C40YHQutCwINC/0L7QvNC10YnQsNC5 +0YLQtSDQsiDRgtC10LMgJmx0O3VsJmd0OzwvZGQ+CgoJCQkJCQkJCTwvZGw+CgkJ +CQkJCQkJPGRsIGNsYXNzPSJibG9ja19zZW1pIj4KCQkJCQkJCQkJPGR0PgoJCQkJ +CQkJCQkJJmx0O29sJmd0OyZsdDsvb2wmZ3Q7PGJyLz4KCQkJCQkJCQkJCSZsdDts +aSZndDsmbHQ7L2xpJmd0OwoJCQkJCQkJCQk8L2R0PgoJCQkJCQkJCQk8ZGQgY2xh +c3M9ImRlc2NyaXB0aW9uIj7QndGD0LzQtdGA0L7QstCw0L3QvdGL0Lkg0YHQv9C4 +0YHQvtC6OyDQutCw0LbQtNGL0Lkg0Y3Qu9C10LzQtdC90YIg0YHQv9C40YHQutCw +INC30LDQtNCw0LXRgtGB0Y8g0YLQtdCz0L7QvCAmbHQ7bGkmZ3Q7LCDQvdCw0LHQ +vtGAINGN0LvQtdC80LXQvdGC0L7QsiDRgdC/0LjRgdC60LAg0L/QvtC80LXRidCw +0LnRgtC1INCyINGC0LXQsyAmbHQ7b2wmZ3Q7PC9kZD4KCgkJCQkJCQkJPC9kbD4K +CQkJCQkJCTwvdGQ+CgoJCQkJCQkJPHRkPgoJCQkJCQkJCTxkbCBjbGFzcz0iYmxv +Y2tfc2VtaSI+CgkJCQkJCQkJCTxkdD4KCQkJCQkJCQkJCSZsdDtociAvJmd0Ozxi +ci8+CgkJCQkJCQkJCQkmbHQ7YmxvY2txdW90ZSZndDsmbHQ7L2Jsb2NrcXVvdGUm +Z3Q7CgkJCQkJCQkJCTwvZHQ+CgkJCQkJCQkJCTxkZCBjbGFzcz0iZGVzY3JpcHRp +b24iPtCi0LXQsyAmbHQ7aHIgLyZndDsg0LLRi9Cy0L7QtNC40YIg0LPQvtGA0LjQ +t9C+0L3RgtCw0LvRjNC90YPRjiDQu9C40L3QuNGOOyDQtNC70Y8g0LLRi9C00LXQ +u9C10L3QuNGPINGG0LjRgtCw0YIg0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDRgtC1 +0LMgJmx0O2Jsb2NrcXVvdGUmZ3Q7OyDRgtC10LMgJmx0O3AmZ3Q7INC/0L7Qt9Cy +0L7Qu9GP0LXRgiDQvtGC0LTQtdC70Y/RgtGMINC00YDRg9CzINC+0YIg0LTRgNGD +0LPQsCDRhNGA0LDQs9C80LXQvdGC0Ysg0YLQtdC60YHRgtCwICjQv9Cw0YDQsNCz +0YDQsNGE0YspPC9kZD4KCgkJCQkJCQkJPC9kbD4KCgkJCQkJCQkJPGRsIGNsYXNz +PSJibG9ja19zZW1pIj4KCQkJCQkJCQkJPGR0PgoJCQkJCQkJCQkJJmx0O3N1cCZn +dDsmbHQ7L3N1cCZndDs8YnIvPgoJCQkJCQkJCQkJJmx0O3N1YiZndDsmbHQ7L3N1 +YiZndDsKCQkJCQkJCQkJPC9kdD4KCQkJCQkJCQkJPGRkIGNsYXNzPSJkZXNjcmlw +dGlvbiI+0KLQtdC60YHRgiwg0LfQsNC60LvRjtGH0LXQvdC90YvQuSDQsiDRgtC1 +0LMgJmx0O3N1cCZndDsg0L7RgtC+0LHRgNCw0LbQsNC10YLRgdGPINCyINCy0LjQ +tNC1INCy0LXRgNGF0L3QtdCz0L4g0LjQvdC00LXQutGB0LAsICZsdDtzdWImZ3Q7 +IC0g0L3QuNC20L3QtdCz0L4g0LjQvdC00LXQutGB0LA8L2RkPgoKCQkJCQkJCQk8 +L2RsPgoJCQkJCQkJCTxkbCBjbGFzcz0iYmxvY2tfc2VtaSI+CgkJCQkJCQkJCTxk +dD4KCQkJCQkJCQkJCSZsdDthYmJyIHRpdGxlPSZxdW90OyZxdW90OyAmZ3Q7Jmx0 +Oy9hYmJyJmd0Ozxici8+CgkJCQkJCQkJCQkmbHQ7YWNyb255bSB0aXRsZT0mcXVv +dDsmcXVvdDsgJmd0OyZsdDsvYWNyb255bSZndDsKCQkJCQkJCQkJPC9kdD4KCgkJ +CQkJCQkJCTxkZCBjbGFzcz0iZGVzY3JpcHRpb24iPtCi0LXQs9C+0LwgJmx0O2Fi +YnImZ3Q7INCy0YvQtNC10LvRj9C10YLRgdGPINCw0LHQsdGA0LXQstC40LDRgtGD +0YDQsCwg0LIg0LDRgtGA0LjQsdGD0YLQtSB0aXRsZSDRg9C60LDQt9GL0LLQsNC5 +0YLQtSDQtdGRINGA0LDRgdGI0LjRhNGA0L7QstC60YM7INC40YHQv9C+0LvRjNC3 +0YPQudGC0LUg0YLQtdCzICZsdDthY3JvbnltJmd0OyDQtNC70Y8g0YPRgdGC0L7R +j9Cy0YjQuNGF0YHRjyDQsNCx0LHRgNC10LLQuNCw0YLRg9GAPC9kZD4KCQkJCQkJ +CQk8L2RsPgoJCQkJCQkJCTxkbCBjbGFzcz0iYmxvY2tfc2VtaSI+CgkJCQkJCQkJ +CTxkdD4KCQkJCQkJCQkJCSZsdDtwcmUmZ3Q7Jmx0Oy9wcmUmZ3Q7CgoJCQkJCQkJ +CQk8L2R0PgoJCQkJCQkJCQk8ZGQgY2xhc3M9ImRlc2NyaXB0aW9uIj7QotC10LrR +gdGCLCDQv9C+0LzQtdGJ0LXQvdC90YvQuSDQsiDRgtC10LMgJmx0O3ByZSZndDss +INC90LUg0YTQvtGA0LzQsNGC0LjRgNGD0LXRgtGB0Y8g0LDQstGC0L7QvNCw0YLQ +uNGH0LXRgdC60Lg8L2RkPgoJCQkJCQkJCTwvZGw+CgkJCQkJCQkJPGRsIGNsYXNz +PSJibG9ja19zZW1pIj4KCQkJCQkJCQkJPGR0PgoJCQkJCQkJCQkJJmx0O25vYnIm +Z3Q7Jmx0Oy9ub2JyJmd0Ozxici8+CgoJCQkJCQkJCQkJJmx0O2JyIC8mZ3Q7CgkJ +CQkJCQkJCTwvZHQ+CgkJCQkJCQkJCTxkZCBjbGFzcz0iZGVzY3JpcHRpb24iPtCi +0LXQutGB0YIsINC/0L7QvNC10YnQtdC90L3Ri9C5INCyINGC0LXQsyAmbHQ7bm9i +ciZndDssINC90LUg0L/QtdGA0LXQvdC+0YHQuNGC0YHRjyDQvdCwINGB0YLRgNCw +0L3QuNGG0LU7INC00LvRjyDQv9GA0LjQvdGD0LTQuNGC0LXQu9GM0L3QvtCz0L4g +0L/QtdGA0LXQvdC+0YHQsCDRgtC10LrRgdGC0LAg0LjRgdC/0L7Qu9GM0LfRg9C5 +0YLQtSDRgtC10LMgJmx0O2JyIC8mZ3Q7PC9kZD4KCQkJCQkJCQk8L2RsPgoJCQkJ +CQkJPC90ZD4KCQkJCQkJPC90cj4KCgkJCQkJPC90YWJsZT4KCQkJCTwvZGl2PgoJ +CQk8L2Rpdj4KCQk8L2Rpdj4KDQoJCQkJCQk8ZGl2IGNsYXNzPSJqcy1maWVsZC1o +b2xkZXIiIGlkPSJqcy1maWVsZC1ob2xkZXIiPgoJPHAgY2xhc3M9ImpzLWZpZWxk +LWVycm9yLW1zZyI+PC9wPgoJPGRpdiBjbGFzcz0iZW50cnktY29udGVudCBjb21t +ZW50LXByZXZpZXcgaGlkZGVuIj48L2Rpdj4KCTxmb3JtIGFjdGlvbj0iI2FkZF9j +b21tZW50IiBtZXRob2Q9InBvc3QiIG5hbWU9ImNvbW1lbnRfZm9ybSIgaWQ9ImNv +bW1lbnRfZm9ybSI+CgkJPGZpZWxkc2V0PgoJCSAgCgkJCTxhIGlkPSJjb21tZW50 +X3R5cGUiIHRpdGxlPSJjb21tZW50Ij48L2E+CgkJCTxpbnB1dCB0eXBlPSJoaWRk +ZW4iIG5hbWU9ImNvbW1lbnRbdGFyZ2V0X3R5cGVdIiB2YWx1ZT0icG9zdCIgY2xh +c3M9ImpzLWZpZWxkLWRhdGEiIC8+CgkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5h +bWU9ImNvbW1lbnRbcGFyZW50X2lkXSIgdmFsdWU9IjAiIGNsYXNzPSJqcy1maWVs +ZC1kYXRhIiAvPgoJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ0aW1lZmll +bGQiIHZhbHVlPSIxMzA4MTI0NjQwIiBjbGFzcz0ianMtZmllbGQtZGF0YSIgLz4K +CQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY29tbWVudFt0YXJnZXRfaWRd +IiB2YWx1ZT0iMTIwODY5IiBjbGFzcz0ianMtZmllbGQtZGF0YSIgLz4KCQkJPGRp +diBjbGFzcz0iZWRpdG9yIj4KICAJCQk8ZGl2IGNsYXNzPSJwYW5lbCI+ICAJCQkK +ICAJCQkJCgkJCQk8YSBzdHlsZT0ibWFyZ2luLWxlZnQ6IDEwcHg7IiB0aXRsZT0i +0JbQuNGA0L3Ri9C5IiBvbmNsaWNrPSJyZXR1cm4gaGFicmFXWUcuaW5zZXJ0VGFn +V2l0aFRleHQodGhpcywgJ2InKTsiIGhyZWY9IiMiIHRhYmluZGV4PSItMSI+PGlt +ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIGFsdD0i0JYiIHNyYz0iL2kvcGFuZWwv +Ym9sZF9ydS5naWYiLz48L2E+CgoJCQkJPGEgdGl0bGU9ItCa0YPRgNGB0LjQsiIg +b25jbGljaz0icmV0dXJuIGhhYnJhV1lHLmluc2VydFRhZ1dpdGhUZXh0KHRoaXMs +ICdpJyk7IiBocmVmPSIjIiB0YWJpbmRleD0iLTEiPjxpbWcgd2lkdGg9IjIwIiBo +ZWlnaHQ9IjIwIiBhbHQ9ItCaIiBzcmM9Ii9pL3BhbmVsL2l0YWxpY19ydS5naWYi +Lz48L2E+CgoJCQkJPGEgdGl0bGU9ItCf0L7QtNGH0ZHRgNC60L3Rg9GC0YvQuSIg +b25jbGljaz0icmV0dXJuIGhhYnJhV1lHLmluc2VydFRhZ1dpdGhUZXh0KHRoaXMs +ICd1Jyk7IiBocmVmPSIjIiB0YWJpbmRleD0iLTEiPjxpbWcgd2lkdGg9IjIwIiBo +ZWlnaHQ9IjIwIiBhbHQ9Il9fIiBzcmM9Ii9pL3BhbmVsL3VuZGVybGluZV9ydS5n +aWYiLz48L2E+CgoJCQkJPGEgdGl0bGU9ItCX0LDRh9GR0YDQutC90YPRgtGL0Lki +IG9uY2xpY2s9InJldHVybiBoYWJyYVdZRy5pbnNlcnRUYWdXaXRoVGV4dCh0aGlz +LCAncycpOyIgaHJlZj0iIyIgdGFiaW5kZXg9Ii0xIj48aW1nIHdpZHRoPSIyMCIg +aGVpZ2h0PSIyMCIgYWx0PSLigJQiIHNyYz0iL2kvcGFuZWwvc3RyaWtldGhyb3Vn +aC5naWYiLz48L2E+CgoJCQkJPGEgc3R5bGU9Im1hcmdpbjogYXV0byAxMHB4OyIg +dGl0bGU9ItCa0L7QtCIgb25jbGljaz0icmV0dXJuIGhhYnJhV1lHLmluc2VydFRh +Z1dpdGhUZXh0KHRoaXMsICdjb2RlJyk7IiBocmVmPSIjIiB0YWJpbmRleD0iLTEi +IGNsYXNzPSJ0eHQiPjxpbWcgd2lkdGg9IjMwIiBoZWlnaHQ9IjIwIiBhbHQ9ItCa +0L7QtCIgc3JjPSIvaS9wYW5lbC9jb2RlLmdpZiIvPjwvYT4KCgkJCQk8YSB0aXRs +ZT0i0JLRgdGC0LDQstC40YLRjCDRgdGB0YvQu9C60YMiIG9uY2xpY2s9InJldHVy +biBoYWJyYVdZRy5pbnNlcnRMaW5rKHRoaXMpOyIgaHJlZj0iIyIgdGFiaW5kZXg9 +Ii0xIj48aW1nIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgYWx0PSJBIiBzcmM9Ii9p +L3BhbmVsL2xpbmsuZ2lmIi8+PC9hPgoKCQkJCTxhIHRpdGxlPSLQktGB0YLQsNCy +0LjRgtGMINC40LfQvtCx0YDQsNC20LXQvdC40LUiIG9uY2xpY2s9InJldHVybiBo +YWJyYVdZRy5pbnNlcnRJbWFnZSh0aGlzKTsiIGhyZWY9IiMiIHRhYmluZGV4PSIt +MSI+PGltZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIGFsdD0iSU1HIiBzcmM9Ii9p +L3BhbmVsL2ltYWdlLmdpZiIvPjwvYT4KCgogIAkJCTwvZGl2PgogIAkJCTxkaXYg +Y2xhc3M9InRleHQtaG9sZGVyIj4KICAgIAkJCTx0ZXh0YXJlYSBjb2xzPSI1MCIg +cm93cz0iMTAiIG5hbWU9ImNvbW1lbnRbbWVzc2FnZV0iIGlkPSJqcy1maWVsZC1j +b21tZW50IiBjbGFzcz0ianMtZmllbGQtZGF0YSBqcy1yZXF1aXJlZCIKICAgIAkJ +CW9ua2V5ZG93bj0icmV0dXJuIGhhYnJhV1lHLmluc2VydFRhYihldmVudCwgdGhp +cyk7IgogICAgCQkJb25rZXl1cD0icmV0dXJuIGhhYnJhV1lHLmluc2VydFRhYihl +dmVudCwgdGhpcyk7IgogICAgCQkJPjwvdGV4dGFyZWE+ICAgICAgCQkJCiAgCQkJ +PC9kaXY+CgkJCTwvZGl2PgoJCQk8aW5wdXQgY2xhc3M9InByZXZpZXciIHR5cGU9 +ImJ1dHRvbiIgdmFsdWU9ItC/0YDQtdC00L/RgNC+0YHQvNC+0YLRgCIvPgoJCQk8 +aW5wdXQgY2xhc3M9InBvc3QiIHR5cGU9InN1Ym1pdCIgdmFsdWU9ItC90LDQv9C4 +0YHQsNGC0YwiIG5hbWU9IndyaXRlX2NvbW1lbnQiLz4KCQk8L2ZpZWxkc2V0PgoJ +PC9mb3JtPgo8L2Rpdj4NCgkJCQkJPC9kaXY+DQoJCQkJPC9kaXY+DQoJCQk8L2Rp +dj4NCgkJCQ0KDQoJCQkNCgkJPC9kaXY+DQoJDQoJDQoKCg0KCQoNCgkKDQoJDQoJ +DQoJDQoNCgk8L2Rpdj4NCg0KCTxkaXYgaWQ9InNpZGViYXIiPg0KCSAgDQoJCjxk +aXYgY2xhc3M9ImxpdmUgYmxvZ2luZm8iPgoKCTxkaXYgY2xhc3M9ImJnLWJvdHQt +ciI+PCEtLSBmb3IgYm90dG9tIHJvdW5kZWQgY29ybmVycyAtLT4KCTxkaXYgY2xh +c3M9ImJnLWJvdHQtbCI+CgoJPGgzPtCY0L3RhNC+0YDQvNCw0YbQuNGPINC+INCx +0LvQvtCz0LU8L2gzPgoKCTxkaXYgY2xhc3M9ImJsb2ctYWJvdXQtdGV4dC1jb250 +ZW50Ij4KCSAKCQk8ZGl2IGNsYXNzPSJzdGF0cyI+CiAgICAgIDxkaXYgY2xhc3M9 +Im1lbWJlcnNfY291bnQiIGlkPSJtZW1iZXJzX2NvdW50Ij40MDczINGH0LjRgtCw +0YLQtdC70Y88L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icG9zdHNfY291bnQiPjE3 +NSDQv9C+0YHRgtC+0LI8L2Rpdj4gICAgCiAgICA8L2Rpdj4KICAgICAKCSAgPGRp +diBjbGFzcz0iam9pbiI+CSAgIAogIAkJCiAgCQkKICAJCSAgPGEgaWQ9ImpzLWFk +ZEJsb2dNZW1iZXIiIHRpdGxlPSLQv9GA0LjRgdC+0LXQtNC40L3QuNGC0YzRgdGP +INC6INCx0LvQvtCz0YMiIGNsYXNzPSJqcy1hZGRCbG9nTWVtYmVyIGhpZGRlbiIg +b25jbGljaz0iYmxvZ3NIYW5kbGVyLmpvaW5MZWF2ZUJsb2coJ2pvaW4nLCA1NDgp +OyByZXR1cm4gZmFsc2U7IiBocmVmPSIjIj7Qn9GA0LjRgdC+0LXQtNC40L3QuNGC +0YzRgdGPPC9hPgogIAkJICA8YSBpZD0ianMtcmVtb3ZlQmxvZ01lbWJlciIgdGl0 +bGU9ItC/0L7QutC40L3Rg9GC0Ywg0LHQu9C+0LMiIGNsYXNzPSJqcy1yZW1vdmVC +bG9nTWVtYmVyICIgb25jbGljaz0iIGJsb2dzSGFuZGxlci5qb2luTGVhdmVCbG9n +KCdsZWF2ZScsIDU0OCk7IHJldHVybiBmYWxzZTsiIGhyZWY9IiMiPtCf0L7QutC4 +0L3Rg9GC0Yw8L2E+ICAJCQogIAkJCQkgCgkJPC9kaXY+CgkJCgk8L2Rpdj4KCgk8 +L2Rpdj4KCTwvZGl2PjwhLS0gLy8gZm9yIGJvdHRvbSByb3VuZGVkIGNvcm5lcnMg +LS0+CjwvZGl2PgoNCgkKCgoNCg0KCSAgDQoJCQ0KDQoJCQkNCgkJCQ0KCQkJDQoN +CgkJCQ0KCQkJDQoJCQkNCgkJCQ0KCQkJDQoJCQkNCgkJCQ0KCQkJDQoJCQkNCgkJ +CQ0KDQoJCQkNCg0KCQkJDQoJCQkJPGRpdiBjbGFzcz0iYmFubmVyIj4NCgkJCQkJ +PHNjcmlwdD4NCgkJCQkJdmFyIG1iX3JhbmRvbSA9IE1hdGgucm91bmQoTWF0aC5y +YW5kb20oKSAqIDEwMDAwMCk7DQoJCQkJCWRvY3VtZW50LndyaXRlKCI8c2NyaXB0 +IHNyYz0naHR0cDovL3BpbmsuaGFicmFsYWIucnUvY2dpLWJpbi9pZnJhbWUvaGFi +cl9vdGhlcnNfMjQweDQwMD8iK21iX3JhbmRvbSsiJm9wdGlvbnM9RlQnPjwvc2Ny +IisiaXB0PiIpOw0KCQkJCQk8L3NjcmlwdD4NCgkJCQk8L2Rpdj4NCgkJCQ0KDQoJ +CQkNCgkJCQ0KCQkJDQoJCQkNCgkJCQkJCQ0KCQkNCg0KCQkNCgkNCgkJDQoJDQoJ +DQoJCTxkaXYgY2xhc3M9ImxpdmUgZGFpbHliZXN0Ij4NCg0KCQkJPGRpdiBjbGFz +cz0iYmctYm90dC1yIj48IS0tIGZvciBib3R0b20gcm91bmRlZCBjb3JuZXJzIC0t +Pg0KCQkJPGRpdiBjbGFzcz0iYmctYm90dC1sIj4NCgkNCgkJCTxoMz7Qm9GD0YfR +iNC10LUgPHN1cD7Qt9CwIDI0INGH0LDRgdCwPC9zdXA+Jm5ic3A7JiM4NTk1Ozwv +aDM+DQoNCgkJCQ0KCQkJCTxkbCBjbGFzcz0iYWlyLWNvbW1lbnQiPg0KCQkJCQk8 +ZGQ+DQoJCQkJCQk8ZGw+CQkJCQkJDQoJCQkJCQkJPGR0PjxhIGhyZWY9Imh0dHA6 +Ly9oYWJyYWhhYnIucnUvY29tcGFueS9ib29rbWF0ZS9ibG9nLzEyMDMxNS8jZ2lm +dCI+PGltZyBzcmM9Ii9pL3NwZWNpYWwvYm9va21hdGUvYmlnLnBuZyIgYWx0PSJC +b29rbWF0ZSIgc3R5bGU9InZlcnRpY2FsLWFsaWduOnRvcDtmbG9hdDpsZWZ0O2Rp +c3BsYXk6YmxvY2s7bWFyZ2luLXJpZ2h0OjEwcHg7bWFyZ2luLXRvcDo0cHg7IiAg +dGl0bGU9ItCa0LDQttC00YvQuSDQtNC10L3RjCDQsNCy0YLQvtGAINC70YPRh9GI +0LXQs9C+INC/0L7RgdGC0LAg0L/QvtC70YPRh9Cw0LXRgiDQv9C+0LTQsNGA0L7Q +ui4g0JrQu9C40LrQvdC40YLQtSDQvdCwINC40LrQvtC90LrRgywg0YfRgtC+0LHR +iyDRg9C30L3QsNGC0Ywg0LHQvtC70YzRiNC1LiIgY2xhc3M9ImhlbHAtdGlwIi8+ +PC9hPg0KCQkJCQkJCTxhIGNsYXNzPSJ3aGVyZSIgaHJlZj0iaHR0cDovL2hhYnJh +aGFici5ydS9ibG9ncy9ESVkvIj5ESVkg0LjQu9C4INCh0LTQtdC70LDQuSDQodCw +0Lw8L2E+Jm5ic3A7JnJhcnI7PC9kdD4NCgkJCQkJCQk8ZGQ+PGEgY2xhc3M9InRv +cGljIiBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1L2Jsb2dzL0RJWS8xMjEyOTIv +Ij4zRCDQutC40L3QviDRgdC80L7RgtGA0LjQvCDQtNC+0LzQsDwvYT4mbmJzcDs8 +L2RkPg0KCQkJCQkJPC9kbD4NCgkJCQkJPC9kZD4NCgkJCQk8L2RsPg0KCQkJDQoJ +CQkJPGRsIGNsYXNzPSJhaXItY29tbWVudCI+DQoJCQkJCTxkZD4NCgkJCQkJCTxk +bD4JCQkJCQkNCgkJCQkJCQk8ZHQ+DQoJCQkJCQkJPGEgY2xhc3M9IndoZXJlIiBo +cmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1L2Jsb2dzL3Byb2dyYW1taW5nLyI+0J/R +gNC+0LPRgNCw0LzQvNC40YDQvtCy0LDQvdC40LU8L2E+Jm5ic3A7JnJhcnI7PC9k +dD4NCgkJCQkJCQk8ZGQ+PGEgY2xhc3M9InRvcGljIiBocmVmPSJodHRwOi8vaGFi +cmFoYWJyLnJ1L2Jsb2dzL3Byb2dyYW1taW5nLzEyMTgzMC8iPtChINCy0L7Qt9GA +0LDRgdGC0L7QvCDRgNCw0LfRgNCw0LHQvtGC0YfQuNC60Lgg0YHRgtCw0L3QvtCy +0Y/RgtGB0Y8g0LvRg9GH0YjQtSwg0L3QviDQuNGFINGB0YLQsNC90L7QstC40YLR +gdGPINC80LXQvdGM0YjQtTwvYT4mbmJzcDs8L2RkPg0KCQkJCQkJPC9kbD4NCgkJ +CQkJPC9kZD4NCgkJCQk8L2RsPg0KCQkJDQoJCQkJPGRsIGNsYXNzPSJhaXItY29t +bWVudCI+DQoJCQkJCTxkZD4NCgkJCQkJCTxkbD4JCQkJCQkNCgkJCQkJCQk8ZHQ+ +DQoJCQkJCQkJPGEgY2xhc3M9IndoZXJlIiBocmVmPSJodHRwOi8vaGFicmFoYWJy +LnJ1L2Jsb2dzL2phdmFzY3JpcHQvIj5KYXZhU2NyaXB0PC9hPiZuYnNwOyZyYXJy +OzwvZHQ+DQoJCQkJCQkJPGRkPjxhIGNsYXNzPSJ0b3BpYyIgaHJlZj0iaHR0cDov +L2hhYnJhaGFici5ydS9ibG9ncy9qYXZhc2NyaXB0LzEyMTgwMy8iPtCi0L7Qvy0x +MSDRgdCw0LzRi9GFINGH0LDRgdGC0YvRhSDQvtGI0LjQsdC+0Log0LIgSmF2YVNj +cmlwdDwvYT4mbmJzcDs8L2RkPg0KCQkJCQkJPC9kbD4NCgkJCQkJPC9kZD4NCgkJ +CQk8L2RsPg0KCQkJDQoJCQkJPGRsIGNsYXNzPSJhaXItY29tbWVudCI+DQoJCQkJ +CTxkZD4NCgkJCQkJCTxkbD4JCQkJCQkNCgkJCQkJCQk8ZHQ+DQoJCQkJCQkJPGEg +Y2xhc3M9IndoZXJlIiBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1L2Jsb2dzL0RJ +WS8iPkRJWSDQuNC70Lgg0KHQtNC10LvQsNC5INCh0LDQvDwvYT4mbmJzcDsmcmFy +cjs8L2R0Pg0KCQkJCQkJCTxkZD48YSBjbGFzcz0idG9waWMiIGhyZWY9Imh0dHA6 +Ly9oYWJyYWhhYnIucnUvYmxvZ3MvRElZLzEyMTgxOS8iPtCU0L7RgNCw0LHQvtGC +0LrQsCDQutC40YLQsNC50YHQutC+0Lkg0LDQutGD0YHRgtC40LrQuCAoU1ZFTiBT +UFMtNjc4KTwvYT4mbmJzcDs8L2RkPg0KCQkJCQkJPC9kbD4NCgkJCQkJPC9kZD4N +CgkJCQk8L2RsPg0KCQkJDQoJCQkJPGRsIGNsYXNzPSJhaXItY29tbWVudCI+DQoJ +CQkJCTxkZD4NCgkJCQkJCTxkbD4JCQkJCQkNCgkJCQkJCQk8ZHQ+DQoJCQkJCQkJ +PGEgY2xhc3M9IndoZXJlIiBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1L2Jsb2dz +L2Nzcy8iPtCa0LDRgdC60LDQtNC90YvQtSDQotCw0LHQu9C40YbRiyDQodGC0LjQ +u9C10Lk8L2E+Jm5ic3A7JnJhcnI7PC9kdD4NCgkJCQkJCQk8ZGQ+PGEgY2xhc3M9 +InRvcGljIiBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1L2Jsb2dzL2Nzcy8xMjE4 +MTAvIj7Qn9C+0LPQvtCy0L7RgNC40Lwg0L4gbWFyZ2luLCDQvtC9INC20LUg0LzQ +sNGA0LPQuNC9KCDRh9Cw0YHRgtGMIDEt0Y8gKTwvYT4mbmJzcDs8L2RkPg0KCQkJ +CQkJPC9kbD4NCgkJCQkJPC9kZD4NCgkJCQk8L2RsPg0KCQkJDQoJCQkJPGRsIGNs +YXNzPSJhaXItY29tbWVudCI+DQoJCQkJCTxkZD4NCgkJCQkJCTxkbD4JCQkJCQkN +CgkJCQkJCQk8ZHQ+DQoJCQkJCQkJPGEgY2xhc3M9IndoZXJlIiBocmVmPSJodHRw +Oi8vaGFicmFoYWJyLnJ1L2Jsb2dzL3N5c2FkbS8iPtCh0LjRgdGC0LXQvNC90L7Q +tSDQsNC00LzQuNC90LjRgdGC0YDQuNGA0L7QstCw0L3QuNC1PC9hPiZuYnNwOyZy +YXJyOzwvZHQ+DQoJCQkJCQkJPGRkPjxhIGNsYXNzPSJ0b3BpYyIgaHJlZj0iaHR0 +cDovL2hhYnJhaGFici5ydS9ibG9ncy9zeXNhZG0vMTIxODAxLyI+0J7Qv9GL0YLQ +vdGL0LUg0LzQtdC70L7Rh9C4IFdpbmRvd3Mt0LDQtNC80LjQvdCwPC9hPiZuYnNw +OzwvZGQ+DQoJCQkJCQk8L2RsPg0KCQkJCQk8L2RkPg0KCQkJCTwvZGw+DQoJCQkN +CgkJCQk8ZGwgY2xhc3M9ImFpci1jb21tZW50Ij4NCgkJCQkJPGRkPg0KCQkJCQkJ +PGRsPgkJCQkJCQ0KCQkJCQkJCTxkdD4NCgkJCQkJCQk8YSBjbGFzcz0id2hlcmUi +IGhyZWY9Imh0dHA6Ly9oYWJyYWhhYnIucnUvYmxvZ3MvcXRfc29mdHdhcmUvIj5R +dCBTb2Z0d2FyZTwvYT4mbmJzcDsmcmFycjs8L2R0Pg0KCQkJCQkJCTxkZD48YSBj +bGFzcz0idG9waWMiIGhyZWY9Imh0dHA6Ly9oYWJyYWhhYnIucnUvYmxvZ3MvcXRf +c29mdHdhcmUvMTIxMTExLyI+0J/RgNC40L3RhtC40L/RiyDQv9GA0L7QtdC60YLQ +uNGA0L7QstCw0L3QuNGPIEFQSTwvYT4mbmJzcDs8L2RkPg0KCQkJCQkJPC9kbD4N +CgkJCQkJPC9kZD4NCgkJCQk8L2RsPg0KCQkJDQoJCQkJPGRsIGNsYXNzPSJhaXIt +Y29tbWVudCI+DQoJCQkJCTxkZD4NCgkJCQkJCTxkbD4JCQkJCQkNCgkJCQkJCQk8 +ZHQ+DQoJCQkJCQkJPGEgY2xhc3M9IndoZXJlIiBocmVmPSJodHRwOi8vaGFicmFo +YWJyLnJ1L2Jsb2dzL3N5c2FkbS8iPtCh0LjRgdGC0LXQvNC90L7QtSDQsNC00LzQ +uNC90LjRgdGC0YDQuNGA0L7QstCw0L3QuNC1PC9hPiZuYnNwOyZyYXJyOzwvZHQ+ +DQoJCQkJCQkJPGRkPjxhIGNsYXNzPSJ0b3BpYyIgaHJlZj0iaHR0cDovL2hhYnJh +aGFici5ydS9ibG9ncy9zeXNhZG0vMTIwMDA5LyI+0JrQsNC6INGB0YLQsNGC0Ywg +0YHQuNGB0YLQtdC80L3Ri9C8INCw0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGA0L7Q +vCDigJQg0L/QvtGB0L7QsdC40LUg0LTQu9GPINC90LDRh9C40L3QsNGO0YnQuNGF +ICjRh9Cw0YHRgtGMIDQpPC9hPiZuYnNwOzwvZGQ+DQoJCQkJCQk8L2RsPg0KCQkJ +CQk8L2RkPg0KCQkJCTwvZGw+DQoJCQkNCgkJCQk8ZGwgY2xhc3M9ImFpci1jb21t +ZW50Ij4NCgkJCQkJPGRkPg0KCQkJCQkJPGRsPgkJCQkJCQ0KCQkJCQkJCTxkdD4N +CgkJCQkJCQk8YSBjbGFzcz0id2hlcmUiIGhyZWY9Imh0dHA6Ly9oYWJyYWhhYnIu +cnUvYmxvZ3MvcGhwLyI+UEhQPC9hPiZuYnNwOyZyYXJyOzwvZHQ+DQoJCQkJCQkJ +PGRkPjxhIGNsYXNzPSJ0b3BpYyIgaHJlZj0iaHR0cDovL2hhYnJhaGFici5ydS9i +bG9ncy9waHAvMTIxODA5LyI+UGhpbmcg4oCUINGB0LHQvtGA0LrQsCBQSFAg0L/R +gNC+0LXQutGC0L7QsjwvYT4mbmJzcDs8L2RkPg0KCQkJCQkJPC9kbD4NCgkJCQkJ +PC9kZD4NCgkJCQk8L2RsPg0KCQkJDQoJCQkJPGRsIGNsYXNzPSJhaXItY29tbWVu +dCI+DQoJCQkJCTxkZD4NCgkJCQkJCTxkbD4JCQkJCQkNCgkJCQkJCQk8ZHQ+DQoJ +CQkJCQkJPGEgY2xhc3M9IndoZXJlIiBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1 +L2NvbXBhbnkvc2Ftc3VuZy9ibG9nLyI+0JHQu9C+0LMg0LrQvtC80L/QsNC90LjQ +uCBTYW1zdW5nPC9hPiZuYnNwOyZyYXJyOzwvZHQ+DQoJCQkJCQkJPGRkPjxhIGNs +YXNzPSJ0b3BpYyIgaHJlZj0iaHR0cDovL2hhYnJhaGFici5ydS9jb21wYW55L3Nh +bXN1bmcvYmxvZy8xMjEyODIvIj5TYW1zdW5nIENocm9tZWJvb2s6INCx0YvRgtGM +INC40LvQuCDQvdC1INCx0YvRgtGMPyDQndCw0Lwg0L3Rg9C20LXQvSDQstCw0Ygg +0LPQvtC70L7RgTwvYT4mbmJzcDs8L2RkPg0KCQkJCQkJPC9kbD4NCgkJCQkJPC9k +ZD4NCgkJCQk8L2RsPg0KCQkJDQoJCQk8ZGl2IGNsYXNzPSJhbGwiPiYjMTcxOyA8 +YSBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1L3RvcC8iPtCy0YHQtSDQu9GD0YfR +iNC40LU8L2E+PC9kaXY+DQoNCgkJCTwvZGl2Pg0KCQkJPC9kaXY+PCEtLSAvLyBm +b3IgYm90dG9tIHJvdW5kZWQgY29ybmVycyAtLT4NCgkJPC9kaXY+DQoJDQoNCg0K +CQkKCgo8ZGl2IGNsYXNzPSJsaXZlIG5ldy1mZWVkYmFja3MiPgoKCTxkaXYgY2xh +c3M9ImJnLWJvdHQtciI+Cgk8ZGl2IGNsYXNzPSJiZy1ib3R0LWwgc2ltaWxhci1w +b3N0cyI+CgoJPGgzPtCf0L7RhdC+0LbQuNC1INC/0L7RgdGC0YsmbmJzcDsmIzg1 +OTU7PC9oMz4KCgkJCTxkaXY+CgkJCQkKCQkJCTxkbD4KCQkJCQk8ZGQ+CgkJCQkJ +CTxkbD4KCQkJCQkJCTxkdD48c3BhbiBjbGFzcz0id2hlbiI+MTcuMDUuMjAxMTwv +c3Bhbj4mbmJzcDsmIzg1OTQ7IDxhIGNsYXNzPSJ3aGVyZSIgaHJlZj0iaHR0cDov +L2hhYnJhaGFici5ydS9ibG9ncy9tYWNvc3hkZXYvIj7QoNCw0LfRgNCw0LHQvtGC +0LrQsCDQv9C+0LQgQXBwbGUgaU9TPC9hPiZuYnNwOyYjODU5NDs8L2R0PgoJCQkJ +CQkJPGRkPjxhIGNsYXNzPSJ0b3BpYyIgaHJlZj0iaHR0cDovL2hhYnJhaGFici5y +dS9ibG9ncy9tYWNvc3hkZXYvMTE5NDcyLyI+0JjRgdC/0L7Qu9GM0LfRg9C10Lwg +0LHQu9C+0LrQuCDQsiBJT1MgJmx0OyA0LjA8L2E+PC9kZD4KCQkJCQkJPC9kbD4K +CQkJCQk8L2RkPgoJCQkJPC9kbD4KCQkJCQoJCQkJPGRsPgoJCQkJCTxkZD4KCQkJ +CQkJPGRsPgoJCQkJCQkJPGR0PjxzcGFuIGNsYXNzPSJ3aGVuIj4xMy4xMS4yMDEw +PC9zcGFuPiZuYnNwOyYjODU5NDsgPGEgY2xhc3M9IndoZXJlIiBocmVmPSJodHRw +Oi8vaGFicmFoYWJyLnJ1L2NvbXBhbnkvZXZlcm5vdGUvYmxvZy8iPtCR0LvQvtCz +INC60L7QvNC/0LDQvdC40LggRXZlcm5vdGUgQ29ycG9yYXRpb248L2E+Jm5ic3A7 +JiM4NTk0OzwvZHQ+CgkJCQkJCQk8ZGQ+PGEgY2xhc3M9InRvcGljIiBocmVmPSJo +dHRwOi8vaGFicmFoYWJyLnJ1L2NvbXBhbnkvZXZlcm5vdGUvYmxvZy8xMDgwNjQv +Ij7QntCx0L3QvtCy0LvQtdC90LjQtSBFdmVybm90ZSDQtNC70Y8gaVBob25lLCBp +UGFkINC4IGlQb2QgVG91Y2g8L2E+PC9kZD4KCQkJCQkJPC9kbD4KCQkJCQk8L2Rk +PgoJCQkJPC9kbD4KCQkJCQoJCQkJPGRsPgoJCQkJCTxkZD4KCQkJCQkJPGRsPgoJ +CQkJCQkJPGR0PjxzcGFuIGNsYXNzPSJ3aGVuIj4yOS4wOS4yMDEwPC9zcGFuPiZu +YnNwOyYjODU5NDsgPGEgY2xhc3M9IndoZXJlIiBocmVmPSJodHRwOi8vaGFicmFo +YWJyLnJ1L2Jsb2dzL0ZsYXNoX1BsYXRmb3JtLyI+Rmxhc2gt0L/Qu9Cw0YLRhNC+ +0YDQvNCwPC9hPiZuYnNwOyYjODU5NDs8L2R0PgoJCQkJCQkJPGRkPjxhIGNsYXNz +PSJ0b3BpYyIgaHJlZj0iaHR0cDovL2hhYnJhaGFici5ydS9ibG9ncy9GbGFzaF9Q +bGF0Zm9ybS8xMDUyMDAvIj7Ql9Cw0L/Rg9GB0LrQsNC10LwgRmxhc2gg0LjQtyBT +YWZhcmkg0L3QsCBpUGhvbmUvaVBhZDwvYT48L2RkPgoJCQkJCQk8L2RsPgoJCQkJ +CTwvZGQ+CgkJCQk8L2RsPgoJCQkJCgkJCQk8ZGw+CgkJCQkJPGRkPgoJCQkJCQk8 +ZGw+CgkJCQkJCQk8ZHQ+PHNwYW4gY2xhc3M9IndoZW4iPjExLjA4LjIwMTA8L3Nw +YW4+Jm5ic3A7JiM4NTk0OyA8YSBjbGFzcz0id2hlcmUiIGhyZWY9Imh0dHA6Ly9o +YWJyYWhhYnIucnUvYmxvZ3MvcGVyc29uYWwvIj7Qn9C10YDRgdC+0L3QsNC70YzQ +vdGL0LUg0LHQu9C+0LPQuDwvYT4mbmJzcDsmIzg1OTQ7PC9kdD4KCQkJCQkJCTxk +ZD48YSBjbGFzcz0idG9waWMiIGhyZWY9Imh0dHA6Ly9oYWJyYWhhYnIucnUvYmxv +Z3MvcGVyc29uYWwvMTAxNTA5LyI+0JrRgNGD0LPQu9GL0Lkg0YHRgtC+0LssINC/ +0L7RgdCy0Y/RidC10L3QvdGL0Lkg0LLQvtC/0YDQvtGB0LDQvCDQtNC40LfQsNC5 +0L3QsCDQuCDRjtC30LDQsdC40LvQuNGC0Lgg0L/RgNC40LvQvtC20LXQvdC40Lkg +0LTQu9GPIGlQaG9uZS9pUGFkPC9hPjwvZGQ+CgkJCQkJCTwvZGw+CgkJCQkJPC9k +ZD4KCQkJCTwvZGw+CgkJCQkKCQkJCTxkbD4KCQkJCQk8ZGQ+CgkJCQkJCTxkbD4K +CQkJCQkJCTxkdD48c3BhbiBjbGFzcz0id2hlbiI+MTQuMDcuMjAxMDwvc3Bhbj4m +bmJzcDsmIzg1OTQ7IDxhIGNsYXNzPSJ3aGVyZSIgaHJlZj0iaHR0cDovL2hhYnJh +aGFici5ydS9ibG9ncy9wZXJzb25hbC8iPtCf0LXRgNGB0L7QvdCw0LvRjNC90YvQ +tSDQsdC70L7Qs9C4PC9hPiZuYnNwOyYjODU5NDs8L2R0PgoJCQkJCQkJPGRkPjxh +IGNsYXNzPSJ0b3BpYyIgaHJlZj0iaHR0cDovL2hhYnJhaGFici5ydS9ibG9ncy9w +ZXJzb25hbC85OTA4Ni8iPtCa0LDQuiDQv9C+0LzQtdGB0YLQuNGC0YwgT25lTm90 +ZSDQvdCwIGlQaG9uZS9pUGFkLCDQuNC70Lgg0LjRgdGC0L7RgNC40Y8g0L/RgNC+ +0LXQutGC0LAgTW9iaWxlTm90ZXI8L2E+PC9kZD4KCQkJCQkJPC9kbD4KCQkJCQk8 +L2RkPgoJCQkJPC9kbD4KCQkJCQoJCQkJPGRsPgoJCQkJCTxkZD4KCQkJCQkJPGRs +PgoJCQkJCQkJPGR0PjxzcGFuIGNsYXNzPSJ3aGVuIj4wMy4wNS4yMDEwPC9zcGFu +PiZuYnNwOyYjODU5NDsgPGEgY2xhc3M9IndoZXJlIiBocmVmPSJodHRwOi8vaGFi +cmFoYWJyLnJ1L2Jsb2dzL21hY29zeGRldi8iPtCg0LDQt9GA0LDQsdC+0YLQutCw +INC/0L7QtCBBcHBsZSBpT1M8L2E+Jm5ic3A7JiM4NTk0OzwvZHQ+CgkJCQkJCQk8 +ZGQ+PGEgY2xhc3M9InRvcGljIiBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1L2Js +b2dzL21hY29zeGRldi85MjY0OC8iPtCV0YHRgtGMINCz0L7RgtC+0LLQvtC1IGlQ +aG9uZS9pUGFkINC/0YDQuNC70L7QttC10L3QuNC1PyDQo9GH0LDQstGB0YLQstGD +0LnRgtC1INCyIGlBcHBDb250ZXN0ITwvYT48L2RkPgoJCQkJCQk8L2RsPgoJCQkJ +CTwvZGQ+CgkJCQk8L2RsPgoJCQkJCgkJCQk8ZGw+CgkJCQkJPGRkPgoJCQkJCQk8 +ZGw+CgkJCQkJCQk8ZHQ+PHNwYW4gY2xhc3M9IndoZW4iPjI0LjA1LjIwMTE8L3Nw +YW4+Jm5ic3A7JiM4NTk0OyA8YSBjbGFzcz0id2hlcmUiIGhyZWY9Imh0dHA6Ly9o +YWJyYWhhYnIucnUvYmxvZ3MvbWFjb3N4ZGV2LyI+0KDQsNC30YDQsNCx0L7RgtC6 +0LAg0L/QvtC0IEFwcGxlIGlPUzwvYT4mbmJzcDsmIzg1OTQ7PC9kdD4KCQkJCQkJ +CTxkZD48YSBjbGFzcz0idG9waWMiIGhyZWY9Imh0dHA6Ly9oYWJyYWhhYnIucnUv +YmxvZ3MvbWFjb3N4ZGV2LzExOTg3Ny8iPtCeINCx0LvQvtC60LDRhSDQuCDQuNGF +INC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC4INCyIE9iamVjdGl2ZS1DINGH0LDR +gdGC0YwgMS3QsNGPPC9hPjwvZGQ+CgkJCQkJCTwvZGw+CgkJCQkJPC9kZD4KCQkJ +CTwvZGw+CgkJCQkKCQkJCTxkbD4KCQkJCQk8ZGQ+CgkJCQkJCTxkbD4KCQkJCQkJ +CTxkdD48c3BhbiBjbGFzcz0id2hlbiI+MjMuMDIuMjAxMTwvc3Bhbj4mbmJzcDsm +Izg1OTQ7IDxhIGNsYXNzPSJ3aGVyZSIgaHJlZj0iaHR0cDovL2hhYnJhaGFici5y +dS9ibG9ncy9hcHBsZS8iPkFwcGxlPC9hPiZuYnNwOyYjODU5NDs8L2R0PgoJCQkJ +CQkJPGRkPjxhIGNsYXNzPSJ0b3BpYyIgaHJlZj0iaHR0cDovL2hhYnJhaGFici5y +dS9ibG9ncy9hcHBsZS8xMTQzNzgvIj7QnNC+0Y8g0L/QtdGA0LLQsNGPIGlQaG9u +ZSDQuNCz0YDQsCDQsiAzRCAoQmFieWxvbiBUb3dlcik8L2E+PC9kZD4KCQkJCQkJ +PC9kbD4KCQkJCQk8L2RkPgoJCQkJPC9kbD4KCQkJCQoJCQkJPGRsPgoJCQkJCTxk +ZD4KCQkJCQkJPGRsPgoJCQkJCQkJPGR0PjxzcGFuIGNsYXNzPSJ3aGVuIj4xNy4x +Mi4yMDEwPC9zcGFuPiZuYnNwOyYjODU5NDsgPGEgY2xhc3M9IndoZXJlIiBocmVm +PSJodHRwOi8vaGFicmFoYWJyLnJ1L2NvbXBhbnkvbWFpbHJ1L2Jsb2cvIj7QkdC7 +0L7QsyDQutC+0LzQv9Cw0L3QuNC4IE1haWwuUnUgR3JvdXA8L2E+Jm5ic3A7JiM4 +NTk0OzwvZHQ+CgkJCQkJCQk8ZGQ+PGEgY2xhc3M9InRvcGljIiBocmVmPSJodHRw +Oi8vaGFicmFoYWJyLnJ1L2NvbXBhbnkvbWFpbHJ1L2Jsb2cvMTEwMjMzLyI+0J3Q +vtCy0YvQuSDQnNC+0LHQuNC70YzQvdGL0Lkg0JDQs9C10L3RgiDQtNC70Y8gaVBo +b25lINC4IGlQb2QgVG91Y2gg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCINC80L3Q +vtCz0L7Qt9Cw0LTQsNGH0L3QvtGB0YLRjCDQsiBpT1MgNCDQuC4uLmlQYWQhPC9h +PjwvZGQ+CgkJCQkJCTwvZGw+CgkJCQkJPC9kZD4KCQkJCTwvZGw+CgkJCQkKCQkJ +CTxkbD4KCQkJCQk8ZGQ+CgkJCQkJCTxkbD4KCQkJCQkJCTxkdD48c3BhbiBjbGFz +cz0id2hlbiI+MTAuMTIuMjAxMDwvc3Bhbj4mbmJzcDsmIzg1OTQ7IDxhIGNsYXNz +PSJ3aGVyZSIgaHJlZj0iaHR0cDovL2hhYnJhaGFici5ydS9ibG9ncy9tb25vLyI+ +TW9ubyDQuCBNb29ubGlnaHQ8L2E+Jm5ic3A7JiM4NTk0OzwvZHQ+CgkJCQkJCQk8 +ZGQ+PGEgY2xhc3M9InRvcGljIiBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1L2Js +b2dzL21vbm8vMTA5NzQzLyI+0J7RgtC60YDRi9GCINC60LDRgtCw0LvQvtCzINC/ +0YDQuNC70L7QttC10L3QuNC5IE1vbm9Ub3VjaCDQtNC70Y8gaVBob25lL2lQYWQ8 +L2E+PC9kZD4KCQkJCQkJPC9kbD4KCQkJCQk8L2RkPgoJCQkJPC9kbD4KCQkJCQoJ +CQk8L2Rpdj4KCTwvZGl2PgoJPC9kaXY+CjwvZGl2PgoKDQoJCQ0KCQkNCg0KPGRp +diBjbGFzcz0ibGl2ZSBuZXctZmVlZGJhY2tzIj4NCgkNCgkJPGRpdiBjbGFzcz0i +YmctYm90dC1yIj48IS0tIGZvciBib3R0b20gcm91bmRlZCBjb3JuZXJzIC0tPg0K +CQk8ZGl2IGNsYXNzPSJiZy1ib3R0LWwiPg0KCQ0KCQk8aDM+0J/RgNGP0LzQvtC5 +INGN0YTQuNGAJm5ic3A7JiM4NTk1OzwvaDM+DQoJCQ0KCQk8IS0tINCh0YLRgNC+ +0YfQutCwINCyINC/0YDRj9C80L7QvCDRjdGE0LjRgNC1IC0tPg0KCQkNCgkJPGRs +IGNsYXNzPSJhaXItY29tbWVudCI+DQoJCQk8ZHQgY2xhc3M9IndobyI+PGEgaHJl +Zj0iaHR0cDovL0RhcmtEZW55LmhhYnJhaGFici5ydS8iPkRhcmtEZW55PC9hPiZu +YnNwOyZyYXJyOzwvZHQ+DQoJCQk8ZGQ+DQoJCQkJPGRsPg0KCQkJCQk8ZHQ+PGEg +Y2xhc3M9IndoZXJlIiBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1L2NvbXBhbnkv +bmV0YXBwL2Jsb2cvIj7QkdC70L7QsyDQutC+0LzQv9Cw0L3QuNC4IE5ldEFwcDwv +YT4mbmJzcDsmcmFycjs8L2R0Pg0KCQkJCQk8ZGQ+PGEgY2xhc3M9InRvcGljIiBo +cmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1L2NvbXBhbnkvbmV0YXBwL2Jsb2cvMTIx +MjI3LyNjb21tZW50XzM5ODcxMzciPsKrVsK7IGZvciBWLXNlcmllczwvYT4mbmJz +cDs8c3BhbiBjbGFzcz0idG90YWwiPjE3PC9zcGFuPjwvZGQ+DQoJCQkJPC9kbD4N +CgkJCTwvZGQ+DQoJCTwvZGw+DQoJCQ0KCQk8ZGwgY2xhc3M9ImFpci1jb21tZW50 +Ij4NCgkJCTxkdCBjbGFzcz0id2hvIj48YSBocmVmPSJodHRwOi8vR01NLmhhYnJh +aGFici5ydS8iPkdNTTwvYT4mbmJzcDsmcmFycjs8L2R0Pg0KCQkJPGRkPg0KCQkJ +CTxkbD4NCgkJCQkJPGR0PjxhIGNsYXNzPSJ3aGVyZSIgaHJlZj0iaHR0cDovL2hh +YnJhaGFici5ydS9ibG9ncy92cy8iPlZpc3VhbCBTdHVkaW88L2E+Jm5ic3A7JnJh +cnI7PC9kdD4NCgkJCQkJPGRkPjxhIGNsYXNzPSJ0b3BpYyIgaHJlZj0iaHR0cDov +L2hhYnJhaGFici5ydS9ibG9ncy92cy8xMjE4NDMvI2NvbW1lbnRfMzk4NzEzNiI+ +RGVidWdnZXIgQ2FudmFzIOKAkyDQvdC+0LLRi9C5INGB0L/QvtGB0L7QsSDQvtGC +0LvQsNC00LrQuCDQutC+0LTQsCDQsiBWaXN1YWwgU3R1ZGlvPC9hPiZuYnNwOzxz +cGFuIGNsYXNzPSJ0b3RhbCI+MzI8L3NwYW4+PC9kZD4NCgkJCQk8L2RsPg0KCQkJ +PC9kZD4NCgkJPC9kbD4NCgkJDQoJCTxkbCBjbGFzcz0iYWlyLWNvbW1lbnQiPg0K +CQkJPGR0IGNsYXNzPSJ3aG8iPjxhIGhyZWY9Imh0dHA6Ly9TdGVyaGVsLmhhYnJh +aGFici5ydS8iPlN0ZXJoZWw8L2E+Jm5ic3A7JnJhcnI7PC9kdD4NCgkJCTxkZD4N +CgkJCQk8ZGw+DQoJCQkJCTxkdD48YSBjbGFzcz0id2hlcmUiIGhyZWY9Imh0dHA6 +Ly9oYWJyYWhhYnIucnUvYmxvZ3MvZ2FkZ2V0cy8iPtCT0LDQtNC20LXRgtGLLiDQ +o9GB0YLRgNC+0LnRgdGC0LLQsCDQtNC70Y8g0LPQuNC60L7QsjwvYT4mbmJzcDsm +cmFycjs8L2R0Pg0KCQkJCQk8ZGQ+PGEgY2xhc3M9InRvcGljIiBocmVmPSJodHRw +Oi8vaGFicmFoYWJyLnJ1L2Jsb2dzL2dhZGdldHMvMTIxODE0LyNjb21tZW50XzM5 +ODcxMzUiPtCd0L7Rg9GC0LHRg9C6INCyINGB0YLQuNC70LUg0YHRgtC40LzQv9Cw +0L3QujwvYT4mbmJzcDs8c3BhbiBjbGFzcz0idG90YWwiPjYxPC9zcGFuPjwvZGQ+ +DQoJCQkJPC9kbD4NCgkJCTwvZGQ+DQoJCTwvZGw+DQoJCQ0KCQk8ZGwgY2xhc3M9 +ImFpci1jb21tZW50Ij4NCgkJCTxkdCBjbGFzcz0id2hvIj48YSBocmVmPSJodHRw +Oi8vbmFkb2Vsby5oYWJyYWhhYnIucnUvIj5uYWRvZWxvPC9hPiZuYnNwOyZyYXJy +OzwvZHQ+DQoJCQk8ZGQ+DQoJCQkJPGRsPg0KCQkJCQk8ZHQ+PGEgY2xhc3M9Indo +ZXJlIiBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1L2NvbXBhbnkvbWVnYXBsYW4v +YmxvZy8iPtCR0LvQvtCzINC60L7QvNC/0LDQvdC40Lgg0JzQtdCz0LDQv9C70LDQ +vTwvYT4mbmJzcDsmcmFycjs8L2R0Pg0KCQkJCQk8ZGQ+PGEgY2xhc3M9InRvcGlj +IiBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1L2NvbXBhbnkvbWVnYXBsYW4vYmxv +Zy8xMjAyNzcvI2NvbW1lbnRfMzk4NzEzMyI+0J/QvtGH0LXQvNGDINCyINCc0LXQ +s9Cw0L/Qu9Cw0L3QtSDQv9GA0L7Qs9GA0LDQvNC80LjRgdGC0LDQvCDQttC40LLQ +tdGC0YHRjyDRhdC+0YDQvtGI0L4/PC9hPiZuYnNwOzxzcGFuIGNsYXNzPSJ0b3Rh +bCI+MjE8L3NwYW4+PC9kZD4NCgkJCQk8L2RsPg0KCQkJPC9kZD4NCgkJPC9kbD4N +CgkJDQoJCTxkbCBjbGFzcz0iYWlyLWNvbW1lbnQiPg0KCQkJPGR0IGNsYXNzPSJ3 +aG8iPjxhIGhyZWY9Imh0dHA6Ly9jcndpbi5oYWJyYWhhYnIucnUvIj5jcndpbjwv +YT4mbmJzcDsmcmFycjs8L2R0Pg0KCQkJPGRkPg0KCQkJCTxkbD4NCgkJCQkJPGR0 +PjxhIGNsYXNzPSJ3aGVyZSIgaHJlZj0iaHR0cDovL2hhYnJhaGFici5ydS9ibG9n +cy9jc3MvIj7QmtCw0YHQutCw0LTQvdGL0LUg0KLQsNCx0LvQuNGG0Ysg0KHRgtC4 +0LvQtdC5PC9hPiZuYnNwOyZyYXJyOzwvZHQ+DQoJCQkJCTxkZD48YSBjbGFzcz0i +dG9waWMiIGhyZWY9Imh0dHA6Ly9oYWJyYWhhYnIucnUvYmxvZ3MvY3NzLzEyMTgx +MC8jY29tbWVudF8zOTg3MTMyIj7Qn9C+0LPQvtCy0L7RgNC40Lwg0L4gbWFyZ2lu +LCDQvtC9INC20LUg0LzQsNGA0LPQuNC9KCDRh9Cw0YHRgtGMIDEt0Y8gKTwvYT4m +bmJzcDs8c3BhbiBjbGFzcz0idG90YWwiPjEwNzwvc3Bhbj48L2RkPg0KCQkJCTwv +ZGw+DQoJCQk8L2RkPg0KCQk8L2RsPg0KCQkNCgkJPGRsIGNsYXNzPSJhaXItY29t +bWVudCI+DQoJCQk8ZHQgY2xhc3M9IndobyI+PGEgaHJlZj0iaHR0cDovL0huSC5o +YWJyYWhhYnIucnUvIj5Ibkg8L2E+Jm5ic3A7JnJhcnI7PC9kdD4NCgkJCTxkZD4N +CgkJCQk8ZGw+DQoJCQkJCTxkdD48YSBjbGFzcz0id2hlcmUiIGhyZWY9Imh0dHA6 +Ly9oYWJyYWhhYnIucnUvYmxvZ3Mvc2VvX3Ntby8iPlNFTyAmIFNNTzwvYT4mbmJz +cDsmcmFycjs8L2R0Pg0KCQkJCQk8ZGQ+PGEgY2xhc3M9InRvcGljIiBocmVmPSJo +dHRwOi8vaGFicmFoYWJyLnJ1L2Jsb2dzL3Nlb19zbW8vMTIxODIxLyNjb21tZW50 +XzM5ODcxMzEiPtCh0LvRg9GH0LDQudC90L7RgdGC0Lgg0Lgg0LfQsNC60L7QvdC+ +0LzQtdGA0L3QvtGB0YLQuCDQv9GA0L7QtNCy0LjQttC10L3QuNGPIGZyZWV3YXJl +INCf0J46INGA0LXQsNC70YzQvdGL0Lkg0LzQsNGA0LrQtdGC0LjQvdCz0L7QstGL +0Lkg0LrQtdC50YE8L2E+Jm5ic3A7PHNwYW4gY2xhc3M9InRvdGFsIj43PC9zcGFu +PjwvZGQ+DQoJCQkJPC9kbD4NCgkJCTwvZGQ+DQoJCTwvZGw+DQoJCQ0KCQk8ZGwg +Y2xhc3M9ImFpci1jb21tZW50Ij4NCgkJCTxkdCBjbGFzcz0id2hvIj48YSBocmVm +PSJodHRwOi8vbTJtX3VhLmhhYnJhaGFici5ydS8iPm0ybV91YTwvYT4mbmJzcDsm +cmFycjs8L2R0Pg0KCQkJPGRkPg0KCQkJCTxkbD4NCgkJCQkJPGR0PjxhIGNsYXNz +PSJ3aGVyZSIgaHJlZj0iaHR0cDovL2hhYnJhaGFici5ydS9jb21wYW55L20ybS9i +bG9nLyI+0JHQu9C+0LMg0LrQvtC80L/QsNC90LjQuCBNMk0g0KPQutGA0LDQuNC9 +0LA8L2E+Jm5ic3A7JnJhcnI7PC9kdD4NCgkJCQkJPGRkPjxhIGNsYXNzPSJ0b3Bp +YyIgaHJlZj0iaHR0cDovL2hhYnJhaGFici5ydS9jb21wYW55L20ybS9ibG9nLzEy +MTg2NC8jY29tbWVudF8zOTg3MTMwIj7QktC40LTQtdC+0L3QsNCx0LvRjtC00LXQ +vdC40LUg0LfQsCBHUFMg0L7QsdGK0LXQutGC0LDQvNC4PC9hPiZuYnNwOzxzcGFu +IGNsYXNzPSJ0b3RhbCI+NTwvc3Bhbj48L2RkPg0KCQkJCTwvZGw+DQoJCQk8L2Rk +Pg0KCQk8L2RsPg0KCQkNCgkJPGRsIGNsYXNzPSJhaXItY29tbWVudCI+DQoJCQk8 +ZHQgY2xhc3M9IndobyI+PGEgaHJlZj0iaHR0cDovL3B5SklvSC5oYWJyYWhhYnIu +cnUvIj5weUpJb0g8L2E+Jm5ic3A7JnJhcnI7PC9kdD4NCgkJCTxkZD4NCgkJCQk8 +ZGw+DQoJCQkJCTxkdD48YSBjbGFzcz0id2hlcmUiIGhyZWY9Imh0dHA6Ly9oYWJy +YWhhYnIucnUvYmxvZ3MvcHJvZ3JhbW1pbmcvIj7Qn9GA0L7Qs9GA0LDQvNC80LjR +gNC+0LLQsNC90LjQtTwvYT4mbmJzcDsmcmFycjs8L2R0Pg0KCQkJCQk8ZGQ+PGEg +Y2xhc3M9InRvcGljIiBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1L2Jsb2dzL3By +b2dyYW1taW5nLzEyMTgzMC8jY29tbWVudF8zOTg3MTI5Ij7QoSDQstC+0LfRgNCw +0YHRgtC+0Lwg0YDQsNC30YDQsNCx0L7RgtGH0LjQutC4INGB0YLQsNC90L7QstGP +0YLRgdGPINC70YPRh9GI0LUsINC90L4g0LjRhSDRgdGC0LDQvdC+0LLQuNGC0YHR +jyDQvNC10L3RjNGI0LU8L2E+Jm5ic3A7PHNwYW4gY2xhc3M9InRvdGFsIj42Mjwv +c3Bhbj48L2RkPg0KCQkJCTwvZGw+DQoJCQk8L2RkPg0KCQk8L2RsPg0KCQkNCgkJ +PGRsIGNsYXNzPSJhaXItY29tbWVudCI+DQoJCQk8ZHQgY2xhc3M9IndobyI+PGEg +aHJlZj0iaHR0cDovL2FuZHJleXNtaW5kLmhhYnJhaGFici5ydS8iPmFuZHJleXNt +aW5kPC9hPiZuYnNwOyZyYXJyOzwvZHQ+DQoJCQk8ZGQ+DQoJCQkJPGRsPg0KCQkJ +CQk8ZHQ+PGEgY2xhc3M9IndoZXJlIiBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1 +L2NvbXBhbnkvc2Ftc3VuZy9ibG9nLyI+0JHQu9C+0LMg0LrQvtC80L/QsNC90LjQ +uCBTYW1zdW5nPC9hPiZuYnNwOyZyYXJyOzwvZHQ+DQoJCQkJCTxkZD48YSBjbGFz +cz0idG9waWMiIGhyZWY9Imh0dHA6Ly9oYWJyYWhhYnIucnUvY29tcGFueS9zYW1z +dW5nL2Jsb2cvMTIxMjgyLyNjb21tZW50XzM5ODcxMjgiPlNhbXN1bmcgQ2hyb21l +Ym9vazog0LHRi9GC0Ywg0LjQu9C4INC90LUg0LHRi9GC0Yw/INCd0LDQvCDQvdGD +0LbQtdC9INCy0LDRiCDQs9C+0LvQvtGBPC9hPiZuYnNwOzxzcGFuIGNsYXNzPSJ0 +b3RhbCI+MTAzPC9zcGFuPjwvZGQ+DQoJCQkJPC9kbD4NCgkJCTwvZGQ+DQoJCTwv +ZGw+DQoJCQ0KCQk8ZGwgY2xhc3M9ImFpci1jb21tZW50Ij4NCgkJCTxkdCBjbGFz +cz0id2hvIj48YSBocmVmPSJodHRwOi8vQW5kcmV5X1plbnRhdnIuaGFicmFoYWJy +LnJ1LyI+QW5kcmV5X1plbnRhdnI8L2E+Jm5ic3A7JnJhcnI7PC9kdD4NCgkJCTxk +ZD4NCgkJCQk8ZGw+DQoJCQkJCTxkdD48YSBjbGFzcz0id2hlcmUiIGhyZWY9Imh0 +dHA6Ly9oYWJyYWhhYnIucnUvYmxvZ3Mvbm9raWEvIj5Ob2tpYTwvYT4mbmJzcDsm +cmFycjs8L2R0Pg0KCQkJCQk8ZGQ+PGEgY2xhc3M9InRvcGljIiBocmVmPSJodHRw +Oi8vaGFicmFoYWJyLnJ1L2Jsb2dzL25va2lhLzEyMTg2NS8jY29tbWVudF8zOTg3 +MTI3Ij5BcHBsZSDQstGL0L/Qu9Cw0YLQuNGCIE5va2lhINC/0LDRgtC10L3RgtC9 +0YvQtSDQvtGC0YfQuNGB0LvQtdC90LjRjyDigJQg0L/QsNGC0LXQvdGC0L3Ri9C1 +INGB0L/QvtGA0Ysg0L/RgNC10LrRgNCw0YnQtdC90Ys8L2E+Jm5ic3A7PHNwYW4g +Y2xhc3M9InRvdGFsIj40PC9zcGFuPjwvZGQ+DQoJCQkJPC9kbD4NCgkJCTwvZGQ+ +DQoJCTwvZGw+DQoJCQ0KCQk8ZGwgY2xhc3M9ImFpci1jb21tZW50Ij4NCgkJCTxk +dCBjbGFzcz0id2hvIj48YSBocmVmPSJodHRwOi8vc2tpbTE3NzYuaGFicmFoYWJy +LnJ1LyI+c2tpbTE3NzY8L2E+Jm5ic3A7JnJhcnI7PC9kdD4NCgkJCTxkZD4NCgkJ +CQk8ZGw+DQoJCQkJCTxkdD48YSBjbGFzcz0id2hlcmUiIGhyZWY9Imh0dHA6Ly9o +YWJyYWhhYnIucnUvYmxvZ3MvcHJvZ3JhbW1pbmcvIj7Qn9GA0L7Qs9GA0LDQvNC8 +0LjRgNC+0LLQsNC90LjQtTwvYT4mbmJzcDsmcmFycjs8L2R0Pg0KCQkJCQk8ZGQ+ +PGEgY2xhc3M9InRvcGljIiBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1L2Jsb2dz +L3Byb2dyYW1taW5nLzEyMTg2OS8jY29tbWVudF8zOTg3MTI1Ij7QodGC0LDRgtGM +0Y8g0L3QsCDRgNGD0YHRgdC60L7QvCDQlNC20L7QtdC70LAg0KHQv9C+0LvRjNGB +0LrQuCDQviBVbmljb2RlINC4INC90LDQsdC+0YDQsNGFINGB0LjQvNCy0L7Qu9C+ +0LI8L2E+Jm5ic3A7PHNwYW4gY2xhc3M9InRvdGFsIj4yPC9zcGFuPjwvZGQ+DQoJ +CQkJPC9kbD4NCgkJCTwvZGQ+DQoJCTwvZGw+DQoJCQ0KCQk8ZGwgY2xhc3M9ImFp +ci1jb21tZW50Ij4NCgkJCTxkdCBjbGFzcz0id2hvIj48YSBocmVmPSJodHRwOi8v +ZGFua28uaGFicmFoYWJyLnJ1LyI+ZGFua288L2E+Jm5ic3A7JnJhcnI7PC9kdD4N +CgkJCTxkZD4NCgkJCQk8ZGw+DQoJCQkJCTxkdD48YSBjbGFzcz0id2hlcmUiIGhy +ZWY9Imh0dHA6Ly9oYWJyYWhhYnIucnUvYmxvZ3MvZ29vZ2xlLyI+R29vZ2xlPC9h +PiZuYnNwOyZyYXJyOzwvZHQ+DQoJCQkJCTxkZD48YSBjbGFzcz0idG9waWMiIGhy +ZWY9Imh0dHA6Ly9oYWJyYWhhYnIucnUvYmxvZ3MvZ29vZ2xlLzEyMTg1NS8jY29t +bWVudF8zOTg3MTIzIj7QndC+0LLRi9C1INGE0YPQvdC60YbQuNC4INC/0L7QuNGB +0LrQsDog0LPQvtC70L7RgSwg0LjQt9C+0LHRgNCw0LbQtdC90LjRjywg0LzQs9C9 +0L7QstC10L3QvdC+0LUg0L7RgtC60YDRi9GC0LjQtSDRgNC10LfRg9C70YzRgtCw +0YLQsDwvYT4mbmJzcDs8c3BhbiBjbGFzcz0idG90YWwiPjc3PC9zcGFuPjwvZGQ+ +DQoJCQkJPC9kbD4NCgkJCTwvZGQ+DQoJCTwvZGw+DQoJCQ0KCQk8ZGwgY2xhc3M9 +ImFpci1jb21tZW50Ij4NCgkJCTxkdCBjbGFzcz0id2hvIj48YSBocmVmPSJodHRw +Oi8vZmFrZWRyZWFtLmhhYnJhaGFici5ydS8iPmZha2VkcmVhbTwvYT4mbmJzcDsm +cmFycjs8L2R0Pg0KCQkJPGRkPg0KCQkJCTxkbD4NCgkJCQkJPGR0PjxhIGNsYXNz +PSJ3aGVyZSIgaHJlZj0iaHR0cDovL2hhYnJhaGFici5ydS9ibG9ncy90ZWxlY29t +LyI+0KLQtdC70LXQutC+0LzRizwvYT4mbmJzcDsmcmFycjs8L2R0Pg0KCQkJCQk8 +ZGQ+PGEgY2xhc3M9InRvcGljIiBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1L2Js +b2dzL3RlbGVjb20vMTIxMTQ1LyNjb21tZW50XzM5ODcxMjIiPtCv0L3QtNC10LrR +gS7QmtCw0YDRgtGLINGB0YLQsNC90YPRgiDQv9C70LDRgtC90YvQvNC4INC00LvR +jyDQsNCx0L7QvdC10L3RgtC+0LIg0JzQotChPC9hPiZuYnNwOzxzcGFuIGNsYXNz +PSJ0b3RhbCI+MTE1PC9zcGFuPjwvZGQ+DQoJCQkJPC9kbD4NCgkJCTwvZGQ+DQoJ +CTwvZGw+DQoJCQ0KCQk8ZGwgY2xhc3M9ImFpci1jb21tZW50Ij4NCgkJCTxkdCBj +bGFzcz0id2hvIj48YSBocmVmPSJodHRwOi8vQ2hlYXRFeC5oYWJyYWhhYnIucnUv +Ij5DaGVhdEV4PC9hPiZuYnNwOyZyYXJyOzwvZHQ+DQoJCQk8ZGQ+DQoJCQkJPGRs +Pg0KCQkJCQk8ZHQ+PGEgY2xhc3M9IndoZXJlIiBocmVmPSJodHRwOi8vaGFicmFo +YWJyLnJ1L2Jsb2dzL2ZhY2Vib29rLyI+RmFjZWJvb2s8L2E+Jm5ic3A7JnJhcnI7 +PC9kdD4NCgkJCQkJPGRkPjxhIGNsYXNzPSJ0b3BpYyIgaHJlZj0iaHR0cDovL2hh +YnJhaGFici5ydS9ibG9ncy9mYWNlYm9vay8xMjEyNTkvI2NvbW1lbnRfMzk4NzEx +NCI+RmFjZWJvb2sg0LPQvtGC0L7QstC40YLRgdGPINC6INGB0YLQvtC80LjQu9C7 +0LjQsNGA0LTQvdC+0LzRgyBJUE8g0LIg0L3QsNGH0LDQu9C1IDIwMTIg0LPQvtC0 +0LA8L2E+Jm5ic3A7PHNwYW4gY2xhc3M9InRvdGFsIj44MDwvc3Bhbj48L2RkPg0K +CQkJCTwvZGw+DQoJCQk8L2RkPg0KCQk8L2RsPg0KCQkNCgkJPGRsIGNsYXNzPSJh +aXItY29tbWVudCI+DQoJCQk8ZHQgY2xhc3M9IndobyI+PGEgaHJlZj0iaHR0cDov +L05vTWF4LmhhYnJhaGFici5ydS8iPk5vTWF4PC9hPiZuYnNwOyZyYXJyOzwvZHQ+ +DQoJCQk8ZGQ+DQoJCQkJPGRsPg0KCQkJCQk8ZHQ+PGEgY2xhc3M9IndoZXJlIiBo +cmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1L2Jsb2dzL3dpa2kvIj5XaWtpLdGC0LXR +hdC90L7Qu9C+0LPQuNGPPC9hPiZuYnNwOyZyYXJyOzwvZHQ+DQoJCQkJCTxkZD48 +YSBjbGFzcz0idG9waWMiIGhyZWY9Imh0dHA6Ly9oYWJyYWhhYnIucnUvYmxvZ3Mv +d2lraS8xMjEyNTIvI2NvbW1lbnRfMzk4NzExMiI+0J7RgtC60LvRjtGH0LDQtdC8 +INCx0LjQsdC70LjQvtGC0LXQutGDIGpRdWVyeSwg0LLRgdGC0YDQvtC10L3QvdGD +0Y4g0LLCoNC00LLQuNC20L7QuiBNZWRpYVdpa2nCoDEuMTYueCwg0LjCoNC30LDQ +vNC10L3Rj9C10LzCoNC10ZEg0L3QsMKg0YHQstC10LbRg9GOLCDQvtCx0L3QvtCy +0LvRj9C10LzRg9GOINC4wqDQv9C+0L/QvtC70L3Rj9C10LzRg9GOINCw0LTQvNC4 +0L3QuNGB0YLRgNCw0YLQvtGA0LDQvNC4wqDQstC40LrQuDwvYT4mbmJzcDs8c3Bh +biBjbGFzcz0idG90YWwiPjk8L3NwYW4+PC9kZD4NCgkJCQk8L2RsPg0KCQkJPC9k +ZD4NCgkJPC9kbD4NCgkJDQoJCTxkbCBjbGFzcz0iYWlyLWNvbW1lbnQiPg0KCQkJ +PGR0IGNsYXNzPSJ3aG8iPjxhIGhyZWY9Imh0dHA6Ly9SZWRfRHJhZ29uX0RWTC5o +YWJyYWhhYnIucnUvIj5SZWRfRHJhZ29uX0RWTDwvYT4mbmJzcDsmcmFycjs8L2R0 +Pg0KCQkJPGRkPg0KCQkJCTxkbD4NCgkJCQkJPGR0PjxhIGNsYXNzPSJ3aGVyZSIg +aHJlZj0iaHR0cDovL2hhYnJhaGFici5ydS9ibG9ncy9hZ2lsZS8iPkFnaWxlPC9h +PiZuYnNwOyZyYXJyOzwvZHQ+DQoJCQkJCTxkZD48YSBjbGFzcz0idG9waWMiIGhy +ZWY9Imh0dHA6Ly9oYWJyYWhhYnIucnUvYmxvZ3MvYWdpbGUvMTIwOTIwLyNjb21t +ZW50XzM5ODcxMTAiPtCd0L7QstCw0Y8g0LLRgdGC0YDQtdGH0LAgQWdpbGVQaXRl +ciwgMTQg0LjRjtC90Y86IMKr0JjQvdC20LXQvdC10YDQvdGL0LUg0L/RgNCw0LrR +gtC40LrQuCDQsiBBZ2lsZcK7PC9hPiZuYnNwOzxzcGFuIGNsYXNzPSJ0b3RhbCI+ +MTwvc3Bhbj48L2RkPg0KCQkJCTwvZGw+DQoJCQk8L2RkPg0KCQk8L2RsPg0KCQkN +CgkJPGRsIGNsYXNzPSJhaXItY29tbWVudCI+DQoJCQk8ZHQgY2xhc3M9IndobyI+ +PGEgaHJlZj0iaHR0cDovL3RvcmJhc293LmhhYnJhaGFici5ydS8iPnRvcmJhc293 +PC9hPiZuYnNwOyZyYXJyOzwvZHQ+DQoJCQk8ZGQ+DQoJCQkJPGRsPg0KCQkJCQk8 +ZHQ+PGEgY2xhc3M9IndoZXJlIiBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1L2Js +b2dzL2phdmFzY3JpcHQvIj5KYXZhU2NyaXB0PC9hPiZuYnNwOyZyYXJyOzwvZHQ+ +DQoJCQkJCTxkZD48YSBjbGFzcz0idG9waWMiIGhyZWY9Imh0dHA6Ly9oYWJyYWhh +YnIucnUvYmxvZ3MvamF2YXNjcmlwdC8xMjE4MDMvI2NvbW1lbnRfMzk4NzEwOSI+ +0KLQvtC/LTExINGB0LDQvNGL0YUg0YfQsNGB0YLRi9GFINC+0YjQuNCx0L7QuiDQ +siBKYXZhU2NyaXB0PC9hPiZuYnNwOzxzcGFuIGNsYXNzPSJ0b3RhbCI+MTM1PC9z +cGFuPjwvZGQ+DQoJCQkJPC9kbD4NCgkJCTwvZGQ+DQoJCTwvZGw+DQoJCQ0KCQk8 +ZGwgY2xhc3M9ImFpci1jb21tZW50Ij4NCgkJCTxkdCBjbGFzcz0id2hvIj48YSBo +cmVmPSJodHRwOi8vc2xpay5oYWJyYWhhYnIucnUvIj5zbGlrPC9hPiZuYnNwOyZy +YXJyOzwvZHQ+DQoJCQk8ZGQ+DQoJCQkJPGRsPg0KCQkJCQk8ZHQ+PGEgY2xhc3M9 +IndoZXJlIiBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1L2Jsb2dzL2hvc3Rpbmcv +Ij7QpdC+0YHRgtC40L3QszwvYT4mbmJzcDsmcmFycjs8L2R0Pg0KCQkJCQk8ZGQ+ +PGEgY2xhc3M9InRvcGljIiBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1L2Jsb2dz +L2hvc3RpbmcvMTIxMDgwLyNjb21tZW50XzM5ODcxMDUiPkNsb2RvLnJ1INC4INC+ +0YfQtdGA0LXQtNC90L7QtSDQt9Cw0LPQsNC00L7Rh9C90L7QtSDQv9Cw0LTQtdC9 +0LjQtTwvYT4mbmJzcDs8c3BhbiBjbGFzcz0idG90YWwiPjI0ODwvc3Bhbj48L2Rk +Pg0KCQkJCTwvZGw+DQoJCQk8L2RkPg0KCQk8L2RsPg0KCQkNCgkJPGRsIGNsYXNz +PSJhaXItY29tbWVudCI+DQoJCQk8ZHQgY2xhc3M9IndobyI+PGEgaHJlZj0iaHR0 +cDovL3Jla3ViLmhhYnJhaGFici5ydS8iPnJla3ViPC9hPiZuYnNwOyZyYXJyOzwv +ZHQ+DQoJCQk8ZGQ+DQoJCQkJPGRsPg0KCQkJCQk8ZHQ+PGEgY2xhc3M9IndoZXJl +IiBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1L2Jsb2dzL2NwcC8iPkMrKzwvYT4m +bmJzcDsmcmFycjs8L2R0Pg0KCQkJCQk8ZGQ+PGEgY2xhc3M9InRvcGljIiBocmVm +PSJodHRwOi8vaGFicmFoYWJyLnJ1L2Jsb2dzL2NwcC8xMjE4MTEvI2NvbW1lbnRf +Mzk4NzEwMyI+TGl0dGxlLUVuZGlhbiDQv9GA0L7RgtC40LIgQmlnLUVuZGlhbjwv +YT4mbmJzcDs8c3BhbiBjbGFzcz0idG90YWwiPjYyPC9zcGFuPjwvZGQ+DQoJCQkJ +PC9kbD4NCgkJCTwvZGQ+DQoJCTwvZGw+DQoJCQ0KCQk8ZGwgY2xhc3M9ImFpci1j +b21tZW50Ij4NCgkJCTxkdCBjbGFzcz0id2hvIj48YSBocmVmPSJodHRwOi8vU1RB +Ui5oYWJyYWhhYnIucnUvIj5TVEFSPC9hPiZuYnNwOyZyYXJyOzwvZHQ+DQoJCQk8 +ZGQ+DQoJCQkJPGRsPg0KCQkJCQk8ZHQ+PGEgY2xhc3M9IndoZXJlIiBocmVmPSJo +dHRwOi8vaGFicmFoYWJyLnJ1L2Jsb2dzL0RJWS8iPkRJWSDQuNC70Lgg0KHQtNC1 +0LvQsNC5INCh0LDQvDwvYT4mbmJzcDsmcmFycjs8L2R0Pg0KCQkJCQk8ZGQ+PGEg +Y2xhc3M9InRvcGljIiBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1L2Jsb2dzL0RJ +WS8xMjE4MTkvI2NvbW1lbnRfMzk4NzEwMiI+0JTQvtGA0LDQsdC+0YLQutCwINC6 +0LjRgtCw0LnRgdC60L7QuSDQsNC60YPRgdGC0LjQutC4IChTVkVOIFNQUy02Nzgp +PC9hPiZuYnNwOzxzcGFuIGNsYXNzPSJ0b3RhbCI+Njc8L3NwYW4+PC9kZD4NCgkJ +CQk8L2RsPg0KCQkJPC9kZD4NCgkJPC9kbD4NCgkJDQoJCTwhLS0gLy8g0KHRgtGA +0L7Rh9C60LAg0LIg0L/RgNGP0LzQvtC8INGN0YTQuNGA0LUgLS0+DQoJCTxkaXYg +Y2xhc3M9ImFsbCI+JiMxNzE7IDxhIGhyZWY9Ii9saXZlLyI+0LLQtdGB0Ywg0L/R +gNGP0LzQvtC5INGN0YTQuNGAPC9hPjwvZGl2Pg0KCQkNCgkJCQ0KCQk8L2Rpdj4N +CgkJPC9kaXY+PCEtLSAvLyBmb3IgYm90dG9tIHJvdW5kZWQgY29ybmVycyAtLT4N +CjwvZGl2Pg0KDQogDQoNCg0KDQoNCgkgIAoKCTxkaXYgY2xhc3M9ImxpdmUgYmVz +dF9jb21wYW55Ij4KCgkJPGRpdiBjbGFzcz0iYmctYm90dC1yIj48IS0tIGZvciBi +b3R0b20gcm91bmRlZCBjb3JuZXJzIC0tPgoJCTxkaXYgY2xhc3M9ImJnLWJvdHQt +bCI+CgoJCTxoMz7QmtC+0LzQv9Cw0L3QuNGPINC00L3RjyA8aW1nIHNyYz0iL2kv +YmdfY2ljbGVfaGVscC5wbmciIHRpdGxlPSLQmtC+0LzQv9Cw0L3QuNGPLCDRh9C1 +0Lkg0L/QvtGB0YIg0L3QsNCx0YDQsNC7INC80LDQutGB0LjQvNCw0LvRjNC90L7Q +tSDQutC+0LvQuNGH0LXRgdGC0LLQviDQsdCw0LvQu9C+0LIg0YHRgNC10LTQuCDQ +stGB0LXRhQrQvtC/0YPQsdC70LjQutC+0LLQsNC90L3Ri9GFINCyINC60L7RgNC/ +0L7RgNCw0YLQuNCy0L3Ri9GFINCx0LvQvtCz0LDRhSDQv9C+0YHRgtCw0YUg0LfQ +sCDQv9GA0L7RiNC10LTRiNC40LUg0YHRg9GC0LrQuC4g0KPRh9C40YLRi9Cy0LDR +jtGC0YHRjyDQv9C+0YHRgtGLLCDQtNC70Y8g0LrQvtGC0L7RgNGL0YUg0LjRgdGC +0LXQuiDRgdGA0L7QuiDQs9C+0LvQvtGB0L7QstCw0L3QuNGPIDxicj4oMyDQtNC9 +0Y8g0YEg0LzQvtC80LXQvdGC0LAg0L/Rg9Cx0LvQuNC60LDRhtC40LgpLiIgY2xh +c3M9ImhlbHAtdGlwIj48L2gzPgoJCTxkaXYgY2xhc3M9ImNvbXBhbnlfaW5mbyI+ +CgkJCTxkaXYgY2xhc3M9Im5hbWUiPgoJCQkgPGltZyBjbGFzcz0iZmF2aWNvbiIg +c3JjPSIvbWVkaWEvY29tcGFueS9mYXZpY29uLzEyL2Zhdmljb25fMTIwMi5pY28i +IGFsdD0iU29ueSBFcmljc3NvbiIgaGVpZ2h0PSIxNiIgd2lkdGg9IjE2IiAvPgoJ +CQkgPGEgaHJlZj0iaHR0cDovL2hhYnJhaGFici5ydS9jb21wYW55L3Nvbnllcmlj +c3Nvbi8iIGNsYXNzPSJ0aXRsZSI+U29ueSBFcmljc3NvbjwvYT4KCQkJPC9kaXY+ +CgoJCQk8cD7Qn9C+0YHQu9C10LTQvdC40Lkg0L/QvtGB0YI6CgkJCQk8YSBocmVm +PSJodHRwOi8vaGFicmFoYWJyLnJ1L2NvbXBhbnkvc29ueWVyaWNzc29uL2Jsb2cv +MTIxMTMwLyI+0J/QtdGA0LLRi9C1INCy0L/QtdGH0LDRgtC70LXQvdC40Y8g0L7R +giBTb255IEVyaWNzc29uIFhwZXJpYSBtaW5pIDIwMTE8L2E+CgkJCTwvcD4KCQkJ +PGRpdiBjbGFzcz0ibGlrZSI+CiAgCQkJPGRpdiBpZD0iZmFuc19jb3VudCI+MTA4 +INC/0L7QutC70L7QvdC90LjQutC+0LI8L2Rpdj4KICAJCQkKICAJCQkJPGEgaHJl +Zj0iIyIgaWQ9ImpzLWFkZEZhbiIgY2xhc3M9ImpzLWFkZEZhbi1Db21wYW55ICIg +dGl0bGU9ItCc0L3QtSDQvdGA0LDQstC40YLRgdGPINC60L7QvNC/0LDQvdC40Y8i +IG9uY2xpY2s9ImNvbXBhbmllc0hhbmRsZXIuZmFuU2VuZCgxMjAyLCB0cnVlKTsg +dGhpcy5hZGRDbGFzcygnaGlkZGVuJyk7ICQoJ2pzLXJlbW92ZUZhbicpLnJlbW92 +ZUNsYXNzKCdoaWRkZW4nKTsgcmV0dXJuIGZhbHNlOyI+0J/RgNC40YHQvtC10LTQ +uNC90LjRgtGM0YHRjzwvYT4KICAJCQkJPGEgaHJlZj0iIyIgaWQ9ImpzLXJlbW92 +ZUZhbiIgY2xhc3M9ImpzLXJlbW92ZUZhbi1Db21wYW55IGhpZGRlbiIgdGl0bGU9 +ItCa0L7QvNC/0LDQvdC40Y8g0LzQvdC1INCx0L7Qu9GM0YjQtSDQvdC1INC90YDQ +sNCy0LjRgtGB0Y8iIG9uY2xpY2s9ImNvbXBhbmllc0hhbmRsZXIuZmFuU2VuZCgx +MjAyLCBmYWxzZSk7IHRoaXMuYWRkQ2xhc3MoJ2hpZGRlbicpOyAkKCdqcy1hZGRG +YW4nKS5yZW1vdmVDbGFzcygnaGlkZGVuJyk7IHJldHVybiBmYWxzZTsiPtCe0YLQ +v9C40YHQsNGC0YzRgdGPINC+0YIg0LHQu9C+0LPQsCDRjdGC0L7QuSDQutC+0LzQ +v9Cw0L3QuNC4PC9hPgogIAkJCQoJCQk8L2Rpdj4KCQk8L2Rpdj4KCgoJCTwvZGl2 +PgoJCTwvZGl2PjwhLS0gLy8gZm9yIGJvdHRvbSByb3VuZGVkIGNvcm5lcnMgLS0+ +Cgk8L2Rpdj4KCgoKDQoJCQ0KPGRpdiBjbGFzcz0ibGl2ZSBuZXctZmVlZGJhY2tz +Ij4NCgkNCgkJPGRpdiBjbGFzcz0iYmctYm90dC1yIj48IS0tIGZvciBib3R0b20g +cm91bmRlZCBjb3JuZXJzIC0tPg0KCQk8ZGl2IGNsYXNzPSJiZy1ib3R0LWwiPg0K +CQ0KCQk8aDM+USZhbXA7QSZuYnNwOyYjODU5NTs8L2gzPg0KCQkNCgkJPCEtLSDQ +odGC0YDQvtGH0LrQsCDQsiDQv9GA0Y/QvNC+0Lwg0Y3RhNC40YDQtSAtLT4NCgkJ +DQoJCTxkbCBjbGFzcz0iYWlyLWNvbW1lbnQiPg0KCQkJPGR0IGNsYXNzPSJ3aG8i +PjxhIGhyZWY9Imh0dHA6Ly9zdGVwYW5nby5oYWJyYWhhYnIucnUvIj5zdGVwYW5n +bzwvYT4mbmJzcDsmcmFycjs8L2R0Pg0KCQkJPGRkPg0KCQkJCTxkbD4NCgkJCQkJ +PGRkPjxhIGNsYXNzPSJ0b3BpYyIgaHJlZj0iaHR0cDovL2hhYnJhaGFici5ydS9x +YS83ODgvI2Fuc3dlcl8zNjQyNCI+QW5kcm9pZCBTREs6INC60LDQuiDQv9C+0LvR +g9GH0LjRgtGMINC90LXRgdC20LDRgtGD0Y4g0YTQvtGC0L7Qs9GA0LDRhNC40Y4/ +PC9hPiZuYnNwOzxzcGFuIGNsYXNzPSJ0b3RhbCI+NDwvc3Bhbj48L2RkPg0KCQkJ +CTwvZGw+DQoJCQk8L2RkPg0KCQk8L2RsPg0KCQkNCgkJPGRsIGNsYXNzPSJhaXIt +Y29tbWVudCI+DQoJCQk8ZHQgY2xhc3M9IndobyI+PGEgaHJlZj0iaHR0cDovL3Rh +bGliYW4uaGFicmFoYWJyLnJ1LyI+dGFsaWJhbjwvYT4mbmJzcDsmcmFycjs8L2R0 +Pg0KCQkJPGRkPg0KCQkJCTxkbD4NCgkJCQkJPGRkPjxhIGNsYXNzPSJ0b3BpYyIg +aHJlZj0iaHR0cDovL2hhYnJhaGFici5ydS9xYS84NTYzLyNhbnN3ZXJfMzY0MjMi +PtCf0YDQvtC00LjQstC40LbQtdC90LjQtSDQs9GA0YPQv9C/0Ysg0LLQutC+0L3R +gtCw0LrRgtC10LPQtTwvYT4mbmJzcDs8c3BhbiBjbGFzcz0idG90YWwiPjI8L3Nw +YW4+PC9kZD4NCgkJCQk8L2RsPg0KCQkJPC9kZD4NCgkJPC9kbD4NCgkJDQoJCTxk +bCBjbGFzcz0iYWlyLWNvbW1lbnQiPg0KCQkJPGR0IGNsYXNzPSJ3aG8iPjxhIGhy +ZWY9Imh0dHA6Ly8zZHMuaGFicmFoYWJyLnJ1LyI+M2RzPC9hPiZuYnNwOyZyYXJy +OzwvZHQ+DQoJCQk8ZGQ+DQoJCQkJPGRsPg0KCQkJCQk8ZGQ+PGEgY2xhc3M9InRv +cGljIiBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1L3FhLzg1NDIvI2NvbW1lbnRf +NDQzMTQiPtC90LDRgdGC0YDQvtC50LrQsCBnaXRvc2lzPC9hPiZuYnNwOzxzcGFu +IGNsYXNzPSJ0b3RhbCI+NTwvc3Bhbj48L2RkPg0KCQkJCTwvZGw+DQoJCQk8L2Rk +Pg0KCQk8L2RsPg0KCQkNCgkJPGRsIGNsYXNzPSJhaXItY29tbWVudCI+DQoJCQk8 +ZHQgY2xhc3M9IndobyI+PGEgaHJlZj0iaHR0cDovL0FydG91aXJvcy5oYWJyYWhh +YnIucnUvIj5BcnRvdWlyb3M8L2E+Jm5ic3A7JnJhcnI7PC9kdD4NCgkJCTxkZD4N +CgkJCQk8ZGw+DQoJCQkJCTxkZD48YSBjbGFzcz0idG9waWMiIGhyZWY9Imh0dHA6 +Ly9oYWJyYWhhYnIucnUvcWEvODU0Ny8jY29tbWVudF80NDMxMyI+0K3Qu9C10LrR +gtGA0L7QvdC90LDRjyDQutC90LjQs9CwLCDQv9C+0LzQvtCz0LjRgtC1INCy0YvQ +sdGA0LDRgtGMPC9hPiZuYnNwOzxzcGFuIGNsYXNzPSJ0b3RhbCI+MTA8L3NwYW4+ +PC9kZD4NCgkJCQk8L2RsPg0KCQkJPC9kZD4NCgkJPC9kbD4NCgkJDQoJCTxkbCBj +bGFzcz0iYWlyLWNvbW1lbnQiPg0KCQkJPGR0IGNsYXNzPSJ3aG8iPjxhIGhyZWY9 +Imh0dHA6Ly9jaGFyb24uaGFicmFoYWJyLnJ1LyI+Y2hhcm9uPC9hPiZuYnNwOyZy +YXJyOzwvZHQ+DQoJCQk8ZGQ+DQoJCQkJPGRsPg0KCQkJCQk8ZGQ+PGEgY2xhc3M9 +InRvcGljIiBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1L3FhLzI5Ny8jY29tbWVu +dF80NDMxMiI+0J/QvtGB0L7QstC10YLRg9C50YLQtSBlLWJvb2sg0LTQu9GPINGC +0LXRhdC90LjRh9C10YHQutC+0Lkg0LvQuNGC0LXRgNCw0YLRg9GA0Ys8L2E+Jm5i +c3A7PHNwYW4gY2xhc3M9InRvdGFsIj4xNDwvc3Bhbj48L2RkPg0KCQkJCTwvZGw+ +DQoJCQk8L2RkPg0KCQk8L2RsPg0KCQkNCgkJPGRsIGNsYXNzPSJhaXItY29tbWVu +dCI+DQoJCQk8ZHQgY2xhc3M9IndobyI+PGEgaHJlZj0iaHR0cDovL2sxMnRoLmhh +YnJhaGFici5ydS8iPmsxMnRoPC9hPiZuYnNwOyZyYXJyOzwvZHQ+DQoJCQk8ZGQ+ +DQoJCQkJPGRsPg0KCQkJCQk8ZGQ+PGEgY2xhc3M9InRvcGljIiBocmVmPSJodHRw +Oi8vaGFicmFoYWJyLnJ1L3FhLzg1NTYvI2NvbW1lbnRfNDQzMTEiPkphdmFzY3Jp +cHQg0L/QvtC70YPRh9C10L3QuNC1INC00LDQvdC90YvRhSDQuNC3INC60L7QvdGB +0L7Qu9C4PC9hPiZuYnNwOzxzcGFuIGNsYXNzPSJ0b3RhbCI+MTwvc3Bhbj48L2Rk +Pg0KCQkJCTwvZGw+DQoJCQk8L2RkPg0KCQk8L2RsPg0KCQkNCgkJPGRsIGNsYXNz +PSJhaXItY29tbWVudCI+DQoJCQk8ZHQgY2xhc3M9IndobyI+PGEgaHJlZj0iaHR0 +cDovL2themthZC5oYWJyYWhhYnIucnUvIj5rYXprYWQ8L2E+Jm5ic3A7JnJhcnI7 +PC9kdD4NCgkJCTxkZD4NCgkJCQk8ZGw+DQoJCQkJCTxkZD48YSBjbGFzcz0idG9w +aWMiIGhyZWY9Imh0dHA6Ly9oYWJyYWhhYnIucnUvcWEvODU0NC8jY29tbWVudF80 +NDMwNyI+0JrRgtC+INC30L3QsNC10YIsINGH0YLQviDRjdGC0L4g0LfQsCBBbmRy +b2lkLdC/0YDQuNC70L7QttC10L3QuNC1PzwvYT4mbmJzcDs8c3BhbiBjbGFzcz0i +dG90YWwiPjI8L3NwYW4+PC9kZD4NCgkJCQk8L2RsPg0KCQkJPC9kZD4NCgkJPC9k +bD4NCgkJDQoJCTxkbCBjbGFzcz0iYWlyLWNvbW1lbnQiPg0KCQkJPGR0IGNsYXNz +PSJ3aG8iPjxhIGhyZWY9Imh0dHA6Ly9HQU5HVEEuaGFicmFoYWJyLnJ1LyI+R0FO +R1RBPC9hPiZuYnNwOyZyYXJyOzwvZHQ+DQoJCQk8ZGQ+DQoJCQkJPGRsPg0KCQkJ +CQk8ZGQ+PGEgY2xhc3M9InRvcGljIiBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1 +L3FhLzM3NTMvI2Fuc3dlcl8zNjQyMCI+0JrQsNC60LjRhSDQsdC70L7Qs9C+0LIg +0L3QtSDRhdCy0LDRgtCw0LXRgiDQvdCwINCl0LDQsdGA0LU/PC9hPiZuYnNwOzxz +cGFuIGNsYXNzPSJ0b3RhbCI+NTg8L3NwYW4+PC9kZD4NCgkJCQk8L2RsPg0KCQkJ +PC9kZD4NCgkJPC9kbD4NCgkJDQoJCTxkbCBjbGFzcz0iYWlyLWNvbW1lbnQiPg0K +CQkJPGR0IGNsYXNzPSJ3aG8iPjxhIGhyZWY9Imh0dHA6Ly9ib25kYmlnLmhhYnJh +aGFici5ydS8iPmJvbmRiaWc8L2E+Jm5ic3A7JnJhcnI7PC9kdD4NCgkJCTxkZD4N +CgkJCQk8ZGw+DQoJCQkJCTxkZD48YSBjbGFzcz0idG9waWMiIGhyZWY9Imh0dHA6 +Ly9oYWJyYWhhYnIucnUvcWEvODU2MS8jYW5zd2VyXzM2NDE5Ij7QntC/0YvRgiDR +gNCw0LHQvtGC0Ysg0YEg0JDQotChPC9hPiZuYnNwOzxzcGFuIGNsYXNzPSJ0b3Rh +bCI+Mjwvc3Bhbj48L2RkPg0KCQkJCTwvZGw+DQoJCQk8L2RkPg0KCQk8L2RsPg0K +CQkNCgkJPGRsIGNsYXNzPSJhaXItY29tbWVudCI+DQoJCQk8ZHQgY2xhc3M9Indo +byI+PGEgaHJlZj0iaHR0cDovL0dBTkdUQS5oYWJyYWhhYnIucnUvIj5HQU5HVEE8 +L2E+Jm5ic3A7JnJhcnI7PC9kdD4NCgkJCTxkZD4NCgkJCQk8ZGw+DQoJCQkJCTxk +ZD48YSBjbGFzcz0idG9waWMiIGhyZWY9Imh0dHA6Ly9oYWJyYWhhYnIucnUvcWEv +MTA5LyNhbnN3ZXJfMzY0MTgiPtCa0LDQuiDQv9C10YDQtdGB0YLQsNGC0Ywg0YfQ +uNGC0LDRgtGMINCl0LDQsdGAPzwvYT4mbmJzcDs8c3BhbiBjbGFzcz0idG90YWwi +PjYzPC9zcGFuPjwvZGQ+DQoJCQkJPC9kbD4NCgkJCTwvZGQ+DQoJCTwvZGw+DQoJ +CQ0KCQk8ZGwgY2xhc3M9ImFpci1jb21tZW50Ij4NCgkJCTxkdCBjbGFzcz0id2hv +Ij48YSBocmVmPSJodHRwOi8vU3RlcmhlbC5oYWJyYWhhYnIucnUvIj5TdGVyaGVs +PC9hPiZuYnNwOyZyYXJyOzwvZHQ+DQoJCQk8ZGQ+DQoJCQkJPGRsPg0KCQkJCQk8 +ZGQ+PGEgY2xhc3M9InRvcGljIiBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1L3Fh +Lzg0NjEvI2NvbW1lbnRfNDQzMDMiPtCa0LDRgNC80LAg0Lgg0L/QtdGA0LLRi9C5 +INGF0LDQsdGA0LDRgtC+0L/QuNC6PC9hPiZuYnNwOzxzcGFuIGNsYXNzPSJ0b3Rh +bCI+NTwvc3Bhbj48L2RkPg0KCQkJCTwvZGw+DQoJCQk8L2RkPg0KCQk8L2RsPg0K +CQkNCgkJPGRsIGNsYXNzPSJhaXItY29tbWVudCI+DQoJCQk8ZHQgY2xhc3M9Indo +byI+PGEgaHJlZj0iaHR0cDovL0dBTkdUQS5oYWJyYWhhYnIucnUvIj5HQU5HVEE8 +L2E+Jm5ic3A7JnJhcnI7PC9kdD4NCgkJCTxkZD4NCgkJCQk8ZGw+DQoJCQkJCTxk +ZD48YSBjbGFzcz0idG9waWMiIGhyZWY9Imh0dHA6Ly9oYWJyYWhhYnIucnUvcWEv +ODI1Mi8jYW5zd2VyXzM2NDE2Ij7Qn9C+0LTRgdC60LDQttC40YLQtSDQv9GA0LjQ +u9C+0LbQtdC90LjQtSDQtNC70Y8gQW5kcm9pZCDQutC+0YLQvtGA0L7QtSDRh9C4 +0YLQsNC70L4g0LHRiyDRhNC+0YDQvNCw0YLRiyBXb3JkLCBQREYg0LIg0YHRgtC4 +0LvQtSDQutC90LjQttC60Lg8L2E+Jm5ic3A7PHNwYW4gY2xhc3M9InRvdGFsIj4z +PC9zcGFuPjwvZGQ+DQoJCQkJPC9kbD4NCgkJCTwvZGQ+DQoJCTwvZGw+DQoJCQ0K +CQk8ZGwgY2xhc3M9ImFpci1jb21tZW50Ij4NCgkJCTxkdCBjbGFzcz0id2hvIj48 +YSBocmVmPSJodHRwOi8vUHlqYW1lYy5oYWJyYWhhYnIucnUvIj5QeWphbWVjPC9h +PiZuYnNwOyZyYXJyOzwvZHQ+DQoJCQk8ZGQ+DQoJCQkJPGRsPg0KCQkJCQk8ZGQ+ +PGEgY2xhc3M9InRvcGljIiBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1L3FhLzg1 +NTEvI2NvbW1lbnRfNDQyOTkiPlZrb250YWt0ZSBBUEkgZm9yIEFuZHJvaWQ8L2E+ +Jm5ic3A7PHNwYW4gY2xhc3M9InRvdGFsIj42PC9zcGFuPjwvZGQ+DQoJCQkJPC9k +bD4NCgkJCTwvZGQ+DQoJCTwvZGw+DQoJCQ0KCQk8ZGwgY2xhc3M9ImFpci1jb21t +ZW50Ij4NCgkJCTxkdCBjbGFzcz0id2hvIj48YSBocmVmPSJodHRwOi8vdGFsaWJh +bi5oYWJyYWhhYnIucnUvIj50YWxpYmFuPC9hPiZuYnNwOyZyYXJyOzwvZHQ+DQoJ +CQk8ZGQ+DQoJCQkJPGRsPg0KCQkJCQk8ZGQ+PGEgY2xhc3M9InRvcGljIiBocmVm +PSJodHRwOi8vaGFicmFoYWJyLnJ1L3FhLzg1NTcvI2NvbW1lbnRfNDQyOTciPtCa +0LDQuiDQvtGE0L7RgNC80LjRgtGMINC00LvQuNC90L3Ri9C5INC70LjRgdGC0LjQ +vdCzINCyINGC0L7Qv9C40LrQtTwvYT4mbmJzcDs8c3BhbiBjbGFzcz0idG90YWwi +PjM8L3NwYW4+PC9kZD4NCgkJCQk8L2RsPg0KCQkJPC9kZD4NCgkJPC9kbD4NCgkJ +DQoJCTxkbCBjbGFzcz0iYWlyLWNvbW1lbnQiPg0KCQkJPGR0IGNsYXNzPSJ3aG8i +PjxhIGhyZWY9Imh0dHA6Ly9HQU5HVEEuaGFicmFoYWJyLnJ1LyI+R0FOR1RBPC9h +PiZuYnNwOyZyYXJyOzwvZHQ+DQoJCQk8ZGQ+DQoJCQkJPGRsPg0KCQkJCQk8ZGQ+ +PGEgY2xhc3M9InRvcGljIiBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1L3FhLzg0 +NjgvI2Fuc3dlcl8zNjQxMyI+0JLQvtC/0YDQvtGBINC/0L4g0YDQsNCx0L7RgtC1 +IEFwcFN0b3JlPC9hPiZuYnNwOzxzcGFuIGNsYXNzPSJ0b3RhbCI+Mjwvc3Bhbj48 +L2RkPg0KCQkJCTwvZGw+DQoJCQk8L2RkPg0KCQk8L2RsPg0KCQkNCgkJPGRsIGNs +YXNzPSJhaXItY29tbWVudCI+DQoJCQk8ZHQgY2xhc3M9IndobyI+PGEgaHJlZj0i +aHR0cDovL3NvbG92amVmZi5oYWJyYWhhYnIucnUvIj5zb2xvdmplZmY8L2E+Jm5i +c3A7JnJhcnI7PC9kdD4NCgkJCTxkZD4NCgkJCQk8ZGw+DQoJCQkJCTxkZD48YSBj +bGFzcz0idG9waWMiIGhyZWY9Imh0dHA6Ly9oYWJyYWhhYnIucnUvcWEvODU1NC8j +YW5zd2VyXzM2NDEyIj7QodC+0LvQvdC10YfQvdCw0Y8g0LHQsNGC0LDRgNC10Y8g +MTAwINCS0YIg0LHQtdC3INCy0LDRgNCy0LDRgNGB0LrQvtC5INC90LDRhtC10L3Q +utC4IC0tINCz0LTQtSDQutGD0L/QuNGC0Yw/PC9hPiZuYnNwOzxzcGFuIGNsYXNz +PSJ0b3RhbCI+NTwvc3Bhbj48L2RkPg0KCQkJCTwvZGw+DQoJCQk8L2RkPg0KCQk8 +L2RsPg0KCQkNCgkJPGRsIGNsYXNzPSJhaXItY29tbWVudCI+DQoJCQk8ZHQgY2xh +c3M9IndobyI+PGEgaHJlZj0iaHR0cDovL0dBTkdUQS5oYWJyYWhhYnIucnUvIj5H +QU5HVEE8L2E+Jm5ic3A7JnJhcnI7PC9kdD4NCgkJCTxkZD4NCgkJCQk8ZGw+DQoJ +CQkJCTxkZD48YSBjbGFzcz0idG9waWMiIGhyZWY9Imh0dHA6Ly9oYWJyYWhhYnIu +cnUvcWEvODUwMy8jYW5zd2VyXzM2NDExIj7Qp9GC0L4g0YHQtNC10LvQsNGC0Ywg +0YHQviDRgdGC0LDRgNGL0Lwgd2lmaS3RgNC+0YPRgtC10YDQvtC8PzwvYT4mbmJz +cDs8c3BhbiBjbGFzcz0idG90YWwiPjk8L3NwYW4+PC9kZD4NCgkJCQk8L2RsPg0K +CQkJPC9kZD4NCgkJPC9kbD4NCgkJDQoJCTxkbCBjbGFzcz0iYWlyLWNvbW1lbnQi +Pg0KCQkJPGR0IGNsYXNzPSJ3aG8iPjxhIGhyZWY9Imh0dHA6Ly9HQU5HVEEuaGFi +cmFoYWJyLnJ1LyI+R0FOR1RBPC9hPiZuYnNwOyZyYXJyOzwvZHQ+DQoJCQk8ZGQ+ +DQoJCQkJPGRsPg0KCQkJCQk8ZGQ+PGEgY2xhc3M9InRvcGljIiBocmVmPSJodHRw +Oi8vaGFicmFoYWJyLnJ1L3FhLzg1NjAvI2NvbW1lbnRfNDQyOTMiPtCS0YvRgdGC +0YPQv9C70LXQvdC40LUg0L3QsCDQutC+0L3RhNC10YDQtdC90YbQuNGP0YU8L2E+ +Jm5ic3A7PHNwYW4gY2xhc3M9InRvdGFsIj4xPC9zcGFuPjwvZGQ+DQoJCQkJPC9k +bD4NCgkJCTwvZGQ+DQoJCTwvZGw+DQoJCQ0KCQk8ZGwgY2xhc3M9ImFpci1jb21t +ZW50Ij4NCgkJCTxkdCBjbGFzcz0id2hvIj48YSBocmVmPSJodHRwOi8vU2FiTWFr +Yy5oYWJyYWhhYnIucnUvIj5TYWJNYWtjPC9hPiZuYnNwOyZyYXJyOzwvZHQ+DQoJ +CQk8ZGQ+DQoJCQkJPGRsPg0KCQkJCQk8ZGQ+PGEgY2xhc3M9InRvcGljIiBocmVm +PSJodHRwOi8vaGFicmFoYWJyLnJ1L3FhLzg1NTgvI2Fuc3dlcl8zNjQwOCI+0J7Q +vdC70LDQudC9INC80LDQs9Cw0LfQuNC9INGA0LDQtNC40L7QtNC10YLQsNC70LXQ +uSDQsiDQo9C60YDQsNC40L3QtTwvYT4mbmJzcDs8c3BhbiBjbGFzcz0idG90YWwi +PjI8L3NwYW4+PC9kZD4NCgkJCQk8L2RsPg0KCQkJPC9kZD4NCgkJPC9kbD4NCgkJ +DQoJCTxkbCBjbGFzcz0iYWlyLWNvbW1lbnQiPg0KCQkJPGR0IGNsYXNzPSJ3aG8i +PjxhIGhyZWY9Imh0dHA6Ly95YWtzYS5oYWJyYWhhYnIucnUvIj55YWtzYTwvYT4m +bmJzcDsmcmFycjs8L2R0Pg0KCQkJPGRkPg0KCQkJCTxkbD4NCgkJCQkJPGRkPjxh +IGNsYXNzPSJ0b3BpYyIgaHJlZj0iaHR0cDovL2hhYnJhaGFici5ydS9xYS84NTU5 +LyNjb21tZW50XzQ0MjgyIj7QktC40LTQtdC+0LTRgNCw0LnQstC10YAg0L3QsCDQ +stC40YDRgtGD0LDQu9GM0L3QvtC5INC80LDRiNC40L3QtTwvYT4mbmJzcDs8c3Bh +biBjbGFzcz0idG90YWwiPjI8L3NwYW4+PC9kZD4NCgkJCQk8L2RsPg0KCQkJPC9k +ZD4NCgkJPC9kbD4NCgkJDQoNCgkJPGRpdiBjbGFzcz0iYWxsIj4mIzE3MTsgPGEg +aHJlZj0iL3FhLyI+0LLRgdC1INCy0L7Qv9GA0L7RgdGLPC9hPjwvZGl2Pg0KCQk8 +L2Rpdj4NCgkJPC9kaXY+PCEtLSAvLyBmb3IgYm90dG9tIHJvdW5kZWQgY29ybmVy +cyAtLT4NCjwvZGl2Pg0KDQoJCQoJCgkKCTxkaXYgY2xhc3M9InJhdGluZyBsaXZl +IGJsb2dzIGNhdGVnb3J5X2Jsb2dzIj4KCQkKCTxkaXYgY2xhc3M9ImJnLWJvdHQt +ciI+PCEtLSBmb3IgYm90dG9tIHJvdW5kZWQgY29ybmVycyAtLT4KCTxkaXYgY2xh +c3M9ImJnLWJvdHQtbCI+CgkKCQk8aDM+0J/RgNC+0LPRgNCw0LzQvNC40YDQvtCy +0LDQvdC40LUg4oaTPC9oMz4KCQoJCTx0YWJsZT4KCQkKCQkJPHRib2R5Pjx0cj4K +CQkJCTwhLS0gPHRoIHdpZHRoPSI1JSI+PC90aD4gLy8tLT4KCQkJCTx0aD48L3Ro +PgoJCQkJPHRoIHdpZHRoPSIyMiUiPtCg0LXQudGC0LjQvdCzPC90aD4KCQkJPC90 +cj4KCQkJCgkJCTx0cj4KCQkJCTwhLS0gPHRkIGNsYXNzPSJyYXRpbmctZHluIHVw +Ij48L3RkPiAvLy0tPgoJCQkJPHRkIGNsYXNzPSJ0aXRsZSI+CgkJCQkJPGEgaHJl +Zj0iaHR0cDovL2hhYnJhaGFici5ydS9ibG9ncy9hbGdvcml0aG0vIj7QkNC70LPQ +vtGA0LjRgtC80Ys8L2E+CgkJCQk8L3RkPgoJCQkJPHRkIGNsYXNzPSJ2YWx1ZSI+ +CgkJCQkJPHNwYW4+MzMyLDQzPC9zcGFuPgoJCQkJPC90ZD4KCQkJPC90cj4KCQkJ +CgkJCTx0cj4KCQkJCTwhLS0gPHRkIGNsYXNzPSJyYXRpbmctZHluIHVwIj48L3Rk +PiAvLy0tPgoJCQkJPHRkIGNsYXNzPSJ0aXRsZSI+CgkJCQkJPGEgaHJlZj0iaHR0 +cDovL2hhYnJhaGFici5ydS9ibG9ncy9jcmF6eWRldi8iPtCd0LXQvdC+0YDQvNCw +0LvRjNC90L7QtSDQv9GA0L7Qs9GA0LDQvNC80LjRgNC+0LLQsNC90LjQtTwvYT4K +CQkJCTwvdGQ+CgkJCQk8dGQgY2xhc3M9InZhbHVlIj4KCQkJCQk8c3Bhbj4yNzks +Njg8L3NwYW4+CgkJCQk8L3RkPgoJCQk8L3RyPgoJCQkKCQkJPHRyPgoJCQkJPCEt +LSA8dGQgY2xhc3M9InJhdGluZy1keW4gdXAiPjwvdGQ+IC8vLS0+CgkJCQk8dGQg +Y2xhc3M9InRpdGxlIj4KCQkJCQk8YSBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1 +L2Jsb2dzL3JlZ2V4LyI+0KDQtdCz0YPQu9GP0YDQvdGL0LUg0LLRi9GA0LDQttC1 +0L3QuNGPPC9hPgoJCQkJPC90ZD4KCQkJCTx0ZCBjbGFzcz0idmFsdWUiPgoJCQkJ +CTxzcGFuPjI2NSwzMTwvc3Bhbj4KCQkJCTwvdGQ+CgkJCTwvdHI+CgkJCQoJCQk8 +dHI+CgkJCQk8IS0tIDx0ZCBjbGFzcz0icmF0aW5nLWR5biB1cCI+PC90ZD4gLy8t +LT4KCQkJCTx0ZCBjbGFzcz0idGl0bGUiPgoJCQkJCTxhIGhyZWY9Imh0dHA6Ly9o +YWJyYWhhYnIucnUvYmxvZ3Mvc3lzdGVtX3Byb2dyYW1taW5nLyI+0KHQuNGB0YLQ +tdC80L3QvtC1INC/0YDQvtCz0YDQsNC80LzQuNGA0L7QstCw0L3QuNC1PC9hPgoJ +CQkJPC90ZD4KCQkJCTx0ZCBjbGFzcz0idmFsdWUiPgoJCQkJCTxzcGFuPjIzMiw1 +Nzwvc3Bhbj4KCQkJCTwvdGQ+CgkJCTwvdHI+CgkJCQoJCQk8dHI+CgkJCQk8IS0t +IDx0ZCBjbGFzcz0icmF0aW5nLWR5biB1cCI+PC90ZD4gLy8tLT4KCQkJCTx0ZCBj +bGFzcz0idGl0bGUiPgoJCQkJCTxhIGhyZWY9Imh0dHA6Ly9oYWJyYWhhYnIucnUv +YmxvZ3Mvd2ViZGV2LyI+0JLQtdCxLdGA0LDQt9GA0LDQsdC+0YLQutCwPC9hPgoJ +CQkJPC90ZD4KCQkJCTx0ZCBjbGFzcz0idmFsdWUiPgoJCQkJCTxzcGFuPjIxNSww +NDwvc3Bhbj4KCQkJCTwvdGQ+CgkJCTwvdHI+CgkJCQoJCQk8dHI+CgkJCQk8IS0t +IDx0ZCBjbGFzcz0icmF0aW5nLWR5biB1cCI+PC90ZD4gLy8tLT4KCQkJCTx0ZCBj +bGFzcz0idGl0bGUiPgoJCQkJCTxhIGhyZWY9Imh0dHA6Ly9oYWJyYWhhYnIucnUv +YmxvZ3MvR2l0LyI+R2l0PC9hPgoJCQkJPC90ZD4KCQkJCTx0ZCBjbGFzcz0idmFs +dWUiPgoJCQkJCTxzcGFuPjIxMyw0Njwvc3Bhbj4KCQkJCTwvdGQ+CgkJCTwvdHI+ +CgkJCQoJCQk8dHI+CgkJCQk8IS0tIDx0ZCBjbGFzcz0icmF0aW5nLWR5biB1cCI+ +PC90ZD4gLy8tLT4KCQkJCTx0ZCBjbGFzcz0idGl0bGUiPgoJCQkJCTxhIGhyZWY9 +Imh0dHA6Ly9oYWJyYWhhYnIucnUvYmxvZ3Mvc3BoaW54LyI+U3BoaW54PC9hPgoJ +CQkJPC90ZD4KCQkJCTx0ZCBjbGFzcz0idmFsdWUiPgoJCQkJCTxzcGFuPjIwOSww +Mzwvc3Bhbj4KCQkJCTwvdGQ+CgkJCTwvdHI+CgkJCQoJCQk8dHI+CgkJCQk8IS0t +IDx0ZCBjbGFzcz0icmF0aW5nLWR5biB1cCI+PC90ZD4gLy8tLT4KCQkJCTx0ZCBj +bGFzcz0idGl0bGUiPgoJCQkJCTxhIGhyZWY9Imh0dHA6Ly9oYWJyYWhhYnIucnUv +YmxvZ3MvY29udHJvbGxlcnMvIj7Qn9GA0L7Qs9GA0LDQvNC80LjQvdCzINC80LjQ +utGA0L7QutC+0L3RgtGA0L7Qu9C70LXRgNC+0LI8L2E+CgkJCQk8L3RkPgoJCQkJ +PHRkIGNsYXNzPSJ2YWx1ZSI+CgkJCQkJPHNwYW4+MjA3LDA4PC9zcGFuPgoJCQkJ +PC90ZD4KCQkJPC90cj4KCQkJCgkJCTx0cj4KCQkJCTwhLS0gPHRkIGNsYXNzPSJy +YXRpbmctZHluIHVwIj48L3RkPiAvLy0tPgoJCQkJPHRkIGNsYXNzPSJ0aXRsZSI+ +CgkJCQkJPGEgaHJlZj0iaHR0cDovL2hhYnJhaGFici5ydS9ibG9ncy9oaS8iPtCS +0YvRgdC+0LrQsNGPINC/0YDQvtC40LfQstC+0LTQuNGC0LXQu9GM0L3QvtGB0YLR +jDwvYT4KCQkJCTwvdGQ+CgkJCQk8dGQgY2xhc3M9InZhbHVlIj4KCQkJCQk8c3Bh +bj4xOTMsODQ8L3NwYW4+CgkJCQk8L3RkPgoJCQk8L3RyPgoJCQkKCQkJPHRyPgoJ +CQkJPCEtLSA8dGQgY2xhc3M9InJhdGluZy1keW4gdXAiPjwvdGQ+IC8vLS0+CgkJ +CQk8dGQgY2xhc3M9InRpdGxlIj4KCQkJCQk8YSBocmVmPSJodHRwOi8vaGFicmFo +YWJyLnJ1L2Jsb2dzL2RldmVsb3BtZW50LyI+0KDQsNC30YDQsNCx0L7RgtC60LA8 +L2E+CgkJCQk8L3RkPgoJCQkJPHRkIGNsYXNzPSJ2YWx1ZSI+CgkJCQkJPHNwYW4+ +MTg4LDQ3PC9zcGFuPgoJCQkJPC90ZD4KCQkJPC90cj4KCQkJCgkJPC90Ym9keT48 +L3RhYmxlPgoJCQoJCTxkaXYgY2xhc3M9ImFsbCI+wqsgPGEgaHJlZj0iL2Jsb2ds +aXN0L3Byb2dyYW1taW5nLyI+0LLRgdC1ICDQsdC70L7Qs9C4PC9hPjwvZGl2PgoJ +Cgk8L2Rpdj4KCTwvZGl2PjwhLS0gLy8gZm9yIGJvdHRvbSByb3VuZGVkIGNvcm5l +cnMgLS0+CgogIDwvZGl2PgoJCgoNCgkJDQoNCg0KCQkJCgkJCg0KCQ0KCQ0KDQoJ +PC9kaXY+DQoNCjwvZGl2Pg0KPC9kaXY+DQoNCjxkaXYgaWQ9ImZvb3RlciI+Cgk8 +ZGl2IGNsYXNzPSJmb290ZXItY29udHRlbnQiPgoJCTxkaXYgY2xhc3M9ImJvdHRv +bV9tZW51Ij4KCQkJCgkJCTxkbCBjbGFzcz0idXNlciI+CgkJCQk8ZHQ+PGEgaHJl +Zj0iaHR0cDovL21vYm9yYi5oYWJyYWhhYnIucnUvIj5tb2JvcmI8L2E+PC9kdD4K +CQkJCTxkZD48YSBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1L2FkZC90b3BpYy8i +PtCd0LDQv9C40YHQsNGC0Yw8L2E+PC9kZD4KCQkJCTxkZD48YSBocmVmPSJodHRw +Oi8vaGFicmFoYWJyLnJ1L2xlbnRhL2lobC8iPtCl0LDQsdGA0LDQu9C10L3RgtCw +Jm5ic3A7My4wPC9hPjwvZGQ+CgkJCQk8ZGQ+PGEgaHJlZj0iaHR0cDovL21vYm9y +Yi5oYWJyYWhhYnIucnUvbWFpbC8iPkPQvtC+0LHRidC10L3QuNGPPC9hPjwvZGQ+ +CgkJCQk8ZGQ+PGEgaHJlZj0iaHR0cDovL2hhYnJhaGFici5ydS9zZXR0aW5ncy8i +PtCd0LDRgdGC0YDQvtC50LrQuDwvYT48L2RkPgoJCQkJPGRkPjxhIGhyZWY9Imh0 +dHA6Ly9oYWJyYWhhYnIucnUvcHBhLyI+0J/Qn9CQPC9hPjwvZGQ+CQkJCQoJCQk8 +L2RsPgoJCQkKCQkJCgkJCTxkbCBjbGFzcz0ic2VjdGlvbnMiPgoJCQkJPGR0PtCg +0LDQt9C00LXQu9GLPC9kdD4KCQkJCTxkZD48YSBocmVmPSJodHRwOi8vaGFicmFo +YWJyLnJ1L2Jsb2dsaXN0LyI+0JHQu9C+0LPQuDwvYT48L2RkPgoJCQkJPGRkPjxh +IGhyZWY9Imh0dHA6Ly9oYWJyYWhhYnIucnUvcGVvcGxlLyI+0JvRjtC00Lg8L2E+ +PC9kZD4KCQkJCTxkZD48YSBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1L2NvbXBh +bmllcy8iPtCa0L7QvNC/0LDQvdC40Lg8L2E+PC9kZD4KCQkJCTxkZD48YSBocmVm +PSJodHRwOi8vaGFicmFoYWJyLnJ1L2pvYi8iPtCg0LDQsdC+0YLQsDwvYT48L2Rk +PgoJCQkJPGRkPjxhIGhyZWY9Imh0dHA6Ly9oYWJyYWhhYnIucnUvdG9wLyI+4oaR +4oaT4oaR4oaTPC9hPjwvZGQ+CgkJCTwvZGw+CgkJCTxkbD4KCQkJCTxkdD7QkdC7 +0L7Qs9C4PC9kdD4KCQkJCTxkZD48YSBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1 +LyI+0JLRgdC1PC9hPjwvZGQ+CgkJCQk8ZGQ+PGEgaHJlZj0iaHR0cDovL2hhYnJh +aGFici5ydS9ibG9ncy8iPtCi0LXQvNCw0YLQuNGH0LXRgdC60LjQtTwvYT48L2Rk +PgoJCQkJPGRkPjxhIGhyZWY9Imh0dHA6Ly9oYWJyYWhhYnIucnUvY29ycG9yYXRp +dmUvIj7QmtC+0YDQv9C+0YDQsNGC0LjQstC90YvQtTwvYT48L2RkPgoJCQkJPCEt +LWRkPjxhIGhyZWY9Imh0dHA6Ly9oYWJyYWhhYnIucnUvcGVyc29uYWwvIj7Qm9C4 +0YfQvdGL0LU8L2E+PC9kZC0tPgoJCQkJPGRkPjxhIGhyZWY9Imh0dHA6Ly9oYWJy +YWhhYnIucnUvc2FuZGJveC8iPtCf0LXRgdC+0YfQvdC40YbQsDwvYT48L2RkPgoJ +CQk8L2RsPgoJCQk8ZGw+CgkJCQk8ZHQ+0JjQvdGE0L48L2R0PgoJCQkJPGRkPjxh +IGhyZWY9Imh0dHA6Ly9oYWJyYWhhYnIucnUvaW5mby9hYm91dC8iPtCeINGB0LDQ +udGC0LU8L2E+PC9kZD4KCQkJCTxkZD48YSBocmVmPSJodHRwOi8vaGFicmFoYWJy +LnJ1L2luZm8vaGVscC9ydWxlcy8iPtCf0YDQsNCy0LjQu9CwPC9hPjwvZGQ+CgkJ +CQk8ZGQ+PGEgaHJlZj0iaHR0cDovL2hhYnJhaGFici5ydS9pbmZvL2hlbHAvIj7Q +n9C+0LzQvtGJ0Yw8L2E+PC9kZD4KCQkJCTxkZD48YSBocmVmPSJodHRwOi8vaGFi +cmFoYWJyLnJ1L2luZm8vYWdyZWVtZW50LyI+0KHQvtCz0LvQsNGI0LXQvdC40LU8 +L2E+PC9kZD4KCQkJCTxkZD48YSBocmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1L2lu +Zm8vc3RhdHMvIj7QodGC0LDRgtC40YHRgtC40LrQsDwvYT48L2RkPgoJCQk8L2Rs +PgoJCQk8ZGw+CgkJCQk8ZHQ+0KPRgdC70YPQs9C4PC9kdD4KCQkJCTxkZD48YSBo +cmVmPSJodHRwOi8vaGFicmFoYWJyLnJ1L2luZm8vYWR2ZXJ0aXNpbmcvIj7QoNC1 +0LrQu9Cw0LzQsDwvYT48L2RkPgoJCQkJPGRkPjxhIGhyZWY9Imh0dHA6Ly9oYWJy +YWhhYnIucnUvaW5mby9hZHZlcnRpc2luZy9jb3Jwb3JhdGUvIj7QmtC+0YDQv9C+ +0YDQsNGC0LjQstC90YvQtSDQv9Cw0LrQtdGC0Ys8L2E+PC9kZD4KCQkJPC9kbD4K +CQk8L2Rpdj4KCgkJPGEgY2xhc3M9ImZvb3Rlcl9sb2dvIiBocmVmPSJodHRwOi8v +dGhlbWF0aWNtZWRpYS5ydS8iPtCi0LXQvNCw0YLQuNGH0LXRgdC60LjQtSDQnNC1 +0LTQuNCwPC9hPgoJCTxkaXYgaWQ9ImFib3V0Ij4KCQkJPHNwYW4gc3R5bGU9Im1h +cmdpbi1sZWZ0OjRweDsiPsKpIDIwMDYmIzgyMTE7MjAxMTwvc3Bhbj4gPGJyLz7C +qzxhIGhyZWY9Imh0dHA6Ly93d3cudGhlbWF0aWNtZWRpYS5ydS8iPtCi0LXQvNCw +0YLQuNGH0LXRgdC60LjQtSDQnNC10LTQuNCwPC9hPsK7PGJyLz4KCQkJPGRpdiBz +dHlsZT0ibWFyZ2luLXRvcDogMTBweDsgbWFyZ2luLWxlZnQ6NnB4OyI+CgkJCQnQ +odC70YPQttCx0LAg0L/QvtC00LTQtdGA0LbQutC4Ojxici8+CgkJCQk8YSBocmVm +PSJtYWlsdG86c3VwcG9ydEBoYWJyYWhhYnIucnUiIHRpdGxlPSLQsNC00YDQtdGB +INGB0LvRg9C20LHRiyDQv9C+0LTQtNC10YDQttC60Lgg0L/QvtC70YzQt9C+0LLQ +sNGC0LXQu9C10LkiPnN1cHBvcnRAaGFicmFoYWJyLnJ1PC9hPjxici8+PGJyLz48 +YnIvPgoJCQkJPGEgaHJlZj0iaHR0cDovL20uaGFicmFoYWJyLnJ1Ij7QnNC+0LHQ +uNC70YzQvdCw0Y8g0LLQtdGA0YHQuNGPPC9hPgoJCQk8L2Rpdj4gCgkJPC9kaXY+ +CgkJCgk8L2Rpdj4KCQo8L2Rpdj4NCg0KPGRpdiBpZD0iZmF2b3VyaXRlc19hZGRf +aGlkZGVuIj4KCTxkaXYgY2xhc3M9ImZhdm91cml0ZXNfYWRkIiBpZD0iZmF2b3Vy +aXRlc19hZGQiPgoJCTxkaXYgY2xhc3M9ImZhdm91cml0ZXNfYWRkX2lubmVyIj4K +CQkJPGZvcm0gYWN0aW9uPSIvYWpheC9mYXZvcml0ZXMvIiBjbGFzcz0idG0tZm9y +bSBhamF4IiBtZXRob2Q9InBvc3QiIGlkPSJmYXZvdXJpdGVzX2FkZF9mb3JtIj4K +CQkJCTxkaXY+PGEgcmV2PSJmYXZvdXJpdGVzX2FkZCIgY2xhc3M9ImZvcm0tZXh0 +ZW5kZXIiPjwvYT48L2Rpdj4KCQkJCTxkbD4KCQkJCQk8ZHQ+PGxhYmVsIGZvcj0i +ZmF2b3VyaXRlc19hZGRfdGFncyI+0J/QvtC80LXRgtGM0YLQtSDRgtC+0L/QuNC6 +INC/0L7QvdGP0YLQvdGL0LzQuCDQstCw0Lwg0LzQtdGC0LrQsNC80LgsINC10YHQ +u9C4INGF0L7RgtC40YLQtTwvbGFiZWw+PC9kdD4KCQkJCQk8ZGQ+CgkJCQkJCTxk +aXYgY2xhc3M9ImpzLWF1dG9zdWdnZXN0LWhvbGRlciI+CgkJCQkJCQk8ZGl2PgoJ +CQkJCQkJCTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ0YWdzX3N0cmluZyIgY2xh +c3M9ImpzLWF1dG9zdWdnZXN0LWZpZWxkIiBpZD0iZmF2b3VyaXRlc19hZGRfdGFn +cyIgLz4KCQkJCQkJCTwvZGl2PgoJCQkJCQkJPGRpdiBjbGFzcz0ianMtYXV0b3N1 +Z2dlc3Qtb3V0cHV0LWNvbnRhaW5lciI+CgkJCQkJCQkJPGRpdiBjbGFzcz0ianMt +YXV0b3N1Z2dlc3Qtb3V0cHV0Ij48L2Rpdj4KCQkJCQkJCTwvZGl2PgoJCQkJCQk8 +L2Rpdj4KCQkJCQk8L2RkPgoJCQkJCTxkZCBjbGFzcz0iZGVzYyI+0JzQtdGC0LrQ +uCDQu9GD0YfRiNC1INGA0LDQt9C00LXQu9GP0YLRjCDQt9Cw0L/Rj9GC0L7QuS4g +0J3QsNC/0YDQuNC80LXRgDogPGVtPtC+0LHRidC10L3QuNC1LCDRgdC+0YbQuNCw +0LvRjNC90YvQtSDRgdC10YLQuCwgbXlzcGFjZS5jb20sINC/0L7QtNGA0L7RgdGC +0LrQuCwg0LzQtdGA0LTQvtC6PC9lbT48L2RkPgoJCQkJPC9kbD4KCQkJCTxkaXYg +Y2xhc3M9ImZhdm91cml0ZXNfYWRkX2Zvb3RlciI+CgkJCQkJPGlucHV0IHR5cGU9 +ImhpZGRlbiIgbmFtZT0idGFyZ2V0X2lkIiB2YWx1ZT0iIiBpZD0iZmF2b3VyaXRl +c19hZGRfaWQiIC8+CgkJCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idGFy +Z2V0X3R5cGUiIHZhbHVlPSJwb3N0cyIgLz4KCQkJCQk8aW5wdXQgdHlwZT0iaGlk +ZGVuIiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJhZGQiIC8+CgkJCQkJPGlucHV0IHR5 +cGU9InN1Ym1pdCIgdmFsdWU9ItCU0L7QsdCw0LLQuNGC0Ywg0LIg0LjQt9Cx0YDQ +sNC90L3QvtC1IiBpZD0iZmF2b3VyaXRlc19hZGRfc3VibWl0IiAvPiDQuNC70Lgg +PGEgaHJlZj0iIyIgaWQ9ImZhdm91cml0ZXNfYWRkX2NhbmNlbCI+0L7RgtC80LXQ +vdC40YLRjDwvYT4KCQkJCTwvZGl2PgoJCQk8L2Zvcm0+CgkJPC9kaXY+Cgk8L2Rp +dj4KPC9kaXY+DQoNCg0KDQoJDQoNCg0KCQ0KDQo8c2NyaXB0IHR5cGU9InRleHQv +amF2YXNjcmlwdCI+DQovKjwhW0NEQVRBWyovDQp2YXIgX2dhcSA9IF9nYXEgfHwg +W107DQpfZ2FxLnB1c2goDQogICAgWydfc2V0QWNjb3VudCcsICdVQS03MjYwOTQt +MSddLA0KICAgIFsnX3NldERvbWFpbk5hbWUnLCAnLmhhYnJhaGFici5ydSddLA0K +ICAgIFsiX2FkZE9yZ2FuaWMiLCAibWFpbC5ydSIsICJxIl0sDQogICAgWyJfYWRk +T3JnYW5pYyIsInJhbWJsZXIucnUiLCAid29yZHMiXSwNCiAgICBbIl9hZGRPcmdh +bmljIiwibmlnbWEucnUiLCAicyJdLA0KICAgIFsiX2FkZE9yZ2FuaWMiLCJibG9n +cy55YW5kZXgucnUiLCAidGV4dCJdLA0KICAgIFsiX2FkZE9yZ2FuaWMiLCJ3ZWJh +bHRhLnJ1IiwgInEiXSwNCiAgICBbIl9hZGRPcmdhbmljIiwiYXBvcnQucnUiLCAi +ciJdLA0KICAgIFsiX2FkZE9yZ2FuaWMiLCJha2F2aXRhLmJ5IiwgInoiXSwNCiAg +ICBbIl9hZGRPcmdhbmljIiwibWV0YS51YSIsICJxIl0sDQogICAgWyJfYWRkT3Jn +YW5pYyIsImJpZ21pci5uZXQiLCAicSJdLA0KICAgIFsiX2FkZE9yZ2FuaWMiLCJ0 +dXQuYnkiLCAicXVlcnkiXSwNCiAgICBbIl9hZGRPcmdhbmljIiwiYWxsLmJ5Iiwg +InF1ZXJ5Il0sDQogICAgWyJfYWRkT3JnYW5pYyIsImkudWEiLCAicSJdLA0KICAg +IFsiX2FkZE9yZ2FuaWMiLCJvbmxpbmUudWEiLCAicSJdLA0KICAgIFsiX2FkZE9y +Z2FuaWMiLCJhLnVhIiwgInMiXSwNCiAgICBbIl9hZGRPcmdhbmljIiwidWtyLm5l +dCIsICJzZWFyY2hfcXVlcnkiXSwNCiAgICBbIl9hZGRPcmdhbmljIiwic2VhcmNo +LmNvbS51YSIsICJxIl0sDQogICAgWyJfYWRkT3JnYW5pYyIsInNlYXJjaC51YSIs +ICJxdWVyeSJdLA0KICAgIFsiX2FkZE9yZ2FuaWMiLCJwb2lzay5ydSIsICJ0ZXh0 +Il0sDQogICAgWyJfYWRkT3JnYW5pYyIsImttLnJ1IiwgInNxIl0sDQogICAgWyJf +YWRkT3JnYW5pYyIsImxpdmVpbnRlcm5ldC5ydSIsICJhc2siXSwNCiAgICBbIl9h +ZGRPcmdhbmljIiwiZ29nby5ydSIsICJxIl0sDQogICAgWyJfYWRkT3JnYW5pYyIs +ImdkZS5ydSIsICJrZXl3b3JkcyJdLA0KICAgIFsiX2FkZE9yZ2FuaWMiLCJxdWlu +dHVyYS5ydSIsICJyZXF1ZXN0Il0sDQogICAgWydfdHJhY2tQYWdldmlldyddDQop +Ow0KZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmZpcnN0Q2hpbGQuYXBwZW5kQ2hp +bGQoZ2EpOw0KLyogXV0+Ki8NCjwvc2NyaXB0Pg0KDQoNCg0KDQoNCg0KPHNjcmlw +dD4NCnZhciBtYl9yYW5kb20gPSBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAx +MDAwMDApOw0KZG9jdW1lbnQud3JpdGUoIjxzY3JpcHQgc3JjPSdodHRwOi8vcGlu +ay5oYWJyYWxhYi5ydS9jZ2ktYmluL2lmcmFtZS9HZW1pdXNfb3RoZXI/IittYl9y +YW5kb20rIiZvcHRpb25zPUZUJz48L3NjciIrImlwdD4iKTsNCjwvc2NyaXB0Pg0K +DQoNCg0KDQogIDxkaXYgaWQ9ImhlbHAtdGlwLXRleHQiICBjbGFzcz0iIj4NCgkJ +PGRpdiBpZD0iaGVscC10aXAtdGV4dC1jb250ZW50Ij48L2Rpdj4NCgkJPGRpdiBp +ZD0iaGVscC10aXAtdGV4dC1hcnJvdyI+PC9kaXY+DQoJPC9kaXY+DQoJDQo8L2Jv +ZHk+DQo8L2h0bWw+DQo= + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-page-nav-left.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhCgAKALMAAPf49/P08/j4+PDy8Ovt6+3v7f7+/vHz8fj5+Ozu7P///+rs +6gAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAKAAoAAAQeUElpwEhrKoCXn4EnZko4 +fsgpKp0qqOIBe8W8EHYEADs= + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-page-nav-current-left.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhCgAKAMQAAOPt9tbk8dbk8e3z+O3z+P7+/uHr9P3+/t/q9Njk8v7+/u70 ++tjm8u/0+tXk8f///9Pi8IqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqK +ioqKioqKioqKioqKiiwAAAAACgAKAAAFI+AjiseABND4EALkpo8CvK840+7T4G+R +8K4F0GUYQhhGhzEEADs= + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-page-nav-right.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhCgAKAKIAAPLz8vDy8P7+/vf39+zu7P///+rs6gAAACH5BAAAAAAALAAA +AAAKAAoAAAMaaBQj9c9INWCZE0CcI5fVJxGCCJpGgBKokQAAOw== + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-page-nav-current-right.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhCgAKAPcAAOPt9tbk8dbk8e3z+O3z+P7+/uHr9P3+/t/q9Njk8v7+/u70 ++tjm8u/0+tXk8f///9Pi8IqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqK +ioqKioqKioqKioqKigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAKAAoAAAgyAB0wMLBAwYODByEohJCg +AcIHCxcCMAgxokIACS0qJFBRo4ADGhcSCKkQAUkIAk5CCAgAOw== + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-page-subnav-corner-bottom-left.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhCgAKAPcAAOPt9tbk8dbk8e3z+O3z+P7+/uHr9P3+/t/q9Njk8v7+/u70 ++tjm8u/0+tXk8f///9Pi8IqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqK +ioqKioqKioqKioqKigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAKAAoAAAgtACEIHEhQAMGDCA4SJKBw +4AGDDR8wjPgAAEUFFg8+2PigQQKCHDcqWGCAgYOAADs= + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-page-subnav-corner-bottom-right.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhCgAKAPcAAOPt9tbk8dbk8e3z+O3z+P7+/uHr9P3+/t/q9Njk8v7+/u70 ++tjm8u/0+tXk8f///9Pi8IqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqK +ioqKioqKioqKioqKigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAKAAoAAAgwACEIHDjQAcGDDA4SNKBw +4IKGEBIogNjgQUMADyweBKAgI0EBBDJ6FICAwAGRGQMCADs= + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/png +Content-Location: http://habrahabr.ru/i/icon_asterisk_24.png +Content-Transfer-Encoding: Base64 + +iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2Fy +ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAA +AAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5U +Y3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6 +eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8w +Mi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRw +Oi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpE +ZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRv +YmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv +bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20v +eGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRv +YmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9Inht +cC5paWQ6OUJFNDFFODU1M0NCMTFFMDg4MzdEMjY1MEM4OTlCREEiIHhtcE1NOkRv +Y3VtZW50SUQ9InhtcC5kaWQ6OUJFNDFFODY1M0NCMTFFMDg4MzdEMjY1MEM4OTlC +REEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlp +ZDo5QkU0MUU4MzUzQ0IxMUUwODgzN0QyNjUwQzg5OUJEQSIgc3RSZWY6ZG9jdW1l +bnRJRD0ieG1wLmRpZDo5QkU0MUU4NDUzQ0IxMUUwODgzN0QyNjUwQzg5OUJEQSIv +PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94 +cGFja2V0IGVuZD0iciI/PrQg4+wAAAJaSURBVHjabFNNbxJRFL3zwZuBUEQSgRrQ +0DRCu6D1NxCMstAdG5u0OxduXGjSxJgYjYkL0/gLDKzVjSYijvwGTcF+bAopRiAV +BjIDMwzM1LlTp+GJL7nJeeece++8O+8x8M/6IklPzKl5mxDPdiaTqSBXqVQyhjF5 +yfHchxvZ7PNZP+MCNOljo+D1+mI+rxd6cu8gd+vmCmqfSp/3QxdDqZGmgaaNfooC +2XKL826BydTcCAQCsVQyCZZlgqIqKUn6ev+sDZNKJK4Cy3JwcHgYGw6HG9gTJdYt +4OG5HVnugyzLMB6PIR6Lgd3xGQZi5FBDD3rdvPMC9idVeZ4t1BsN0HUdRFEEv98f +wkCMHGroQe9cAVyiIGyriqp3uz07QYPLi1EnECOHGnqoIb59916zrFNxlhQEAlfi +cfD5vM5+NNLguNm0j2FQf4xlGZ23SfH6eho4jqNEVVVBUZS/M2QglbxG6aZpwrfv +uyJvGGfDmUymlIFh6PuhKCq193h4wFzevjT6brUm0iKxzx6hEn61OnYT+giCIOhU +H0mSont7+/XEUkKcGAb0+wOHDwYvgIcQqB/V9dXVlUQ2m23/9y+0251XhBDx1LKc +83e7XScQI4caeqhBuqBcLqcbjcbdcPiSk3Ry8humU3OAgRg51NBTKpXW5wrYhoeE +CM6wBoOBc+OWl5eeYiBGDjX0tFrtR3MFgsFg0b4w7WqtBq12BxYW/Ef5fP41BmLk +UENPNBp54+adP6ZcLoePY7FQLL5oHjfvrK2lH7iaje/Vaj92wpHwx63NzcezM/gj +wAAc5D2eLLpI7AAAAABJRU5ErkJggg== + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-user2.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhDAAMAOYAANPe5Pz//4KkutDb4szY3/b+/5u5z/3//3KWrfn//8rk8naa +sYGkuszY4Mbg8qG+0dzv9tXg5sTg8t/o7vP8/4iqv9ft9NPe5qfD1Mfc56O/0YKl +u+Lr8M3Z4JCwxuj2/Of0+eDz9+rw9Z68z8/n8sHe8sbT3Ju6zuDv96nE1Onw9Nbh +6cvX39Hq89Hq8u77/srW3tbh54Kku8ba56TD1u37/vL8/vL8/9ft9ebu8+Ps8bzM +1Ymsw7XR4Nnj6Yanvsnj8qrI2Or2/NTf5tvl68vY3+r3/HqdtNji6OXt8eDz+dLc +477c7bDO3t7n7d7v9s3Z4dbs9N/y98Pd6PX+/8/b4f7//+Hp7tDo8vv//+fu84Gj +unKWro6uxHqctOfu9P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAMAAwAAAeEgCJfg4RfWlo5KlpgjI2O +OklWBwcBAVmXCQlXHAUFVBkGBjMUNzZOEy81IF2sXUZCH0QrDyhPGzICAkohUj4X +HhoQKQsLGDgWUTFIJxUjUy0uWNIkQxE9W9gMDD9BCgpLAEBNXl5H5F40DlUDEkxc +71wICDwlDQBQHQ0EBEUsJjswBgQCADs= + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/png +Content-Location: http://habrahabr.ru/i/icon_asterisk_16.png +Content-Transfer-Encoding: Base64 + +iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAGXRFWHRTb2Z0d2Fy +ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAA +AAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5U +Y3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6 +eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8w +Mi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRw +Oi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpE +ZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRv +YmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv +bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20v +eGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRv +YmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9Inht +cC5paWQ6OUJFNDFFODE1M0NCMTFFMDg4MzdEMjY1MEM4OTlCREEiIHhtcE1NOkRv +Y3VtZW50SUQ9InhtcC5kaWQ6OUJFNDFFODI1M0NCMTFFMDg4MzdEMjY1MEM4OTlC +REEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlp +ZDo5QkU0MUU3RjUzQ0IxMUUwODgzN0QyNjUwQzg5OUJEQSIgc3RSZWY6ZG9jdW1l +bnRJRD0ieG1wLmRpZDo5QkU0MUU4MDUzQ0IxMUUwODgzN0QyNjUwQzg5OUJEQSIv +PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94 +cGFja2V0IGVuZD0iciI/Pgl861QAAAHoSURBVHjaLJFBb9MwGIY/x3bStIEmXUFs +tOk4sAOCA2ckfgASEkiIG2f+AkxwA1TxDzhxg8uk9oDEgf0CLggh7TA0RjcgJcua +hCRtVccxnwOWLNmf38fv+9lk98Mu4OBlJa8RII8IIUvcP4R/45VSqqFADZlBv+Be +MBRAKeV1xs1R/2JvI0liiOP4nVZ7nvfAdT04/vnjhhTiLqP0I1uuVsAYywlA0mza +G7ZtwSyOhxpYX78AhBigz3CR19qiKIBzcw+Ntg++Hbz2+763tta5pIGylHB0fBhn +WbatFOwJgQDWn+V5YXNOnTBcKYTh/Llu3UAwnUIYnqiqqm4JIW9aFl+Q0Wi82twc +cCkVAMGJVxmGUQMoxBoGUgQoJfD9cCLYfD6HKIqgFBJ0WMY5cEZrQGCkUggEdJ3C +fDEHlqTpy5Mosp0zjiNLec/z3A797yDRYRYnM86MnSwrcsuyFqzVaj3RAs75HSHE +fQMjTCZHNeD7fWjZtmFy/p5RNpYVxnXbZwGf80qa/nmBidwgmIKUcqJnEAS6BTdO +0iFeeLVp24B/QbFP5WA+FP8CdIGtrcuPtcP+/tc3p6czaLfbbrfbaeF/AdMvgtAn +0+S3semnvV5v2Wg0xhoYDPy3we/Q5iZ/juLPGvgrwAAFU9Nnla+h0wAAAABJRU5E +rkJggg== + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/png +Content-Location: http://habrahabr.ru/i/bg-folding-dot-light.png +Content-Transfer-Encoding: Base64 + +iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAIAAADKYVtkAAAAGXRFWHRTb2Z0d2Fy +ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFFJREFUeNpi/P//PwMDw88/f9lZmBlI +BCxAvPfa46tPX2tLizpryZKkmQlo59UnrwW5OYDk15+/SdMMdK22rOj7Lz+AJDc7 +K0maGSnxM0CAAQBHCiEG+qfxeAAAAABJRU5ErkJggg== + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/comments/bar/refresh.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhHAA6AOYAAN7yzV+1GajqcajfemC1GkF8E37GRHrDP0t8JG6JWpGWjT17 +DJHZVnaMZYSSeo7XUnS8OoPORen522GvIur63OT21sTfsIuUhTl1CXTEMo+VikmC +HJrgYZjeXpbdXJ3iZEZ6HmO1IeL30Wm8JVSqDpXcW0WFE2qHUpPbWZaYk+f42YnT +TJSXkYKQdnKKX6TnbKDlaarKj1itFFqBO1eMLW7ALEaAGZiZl5/kZ1qxE1+DQzt3 +DDx2DoCPc4TQRmS4H0R5GZzhY32PcGWFTKPnbHrIOn7MP4OtYUuZDLfdmXyObj6B +CE6SF3G3OE+GJJDOXYW+V2iuMN/1zlCcE0B3FT53ETh3B1umIIvOVa/QlGe6JGuz +L4/FYtDnvZXUYHjHN2uIVLDTk7fUn7PaklR/MsrpsUyKG+P11Njtxsfgs+X318/p +u4fBV4rBW2iZQY3LWqDDhHekU12RNFqPMFihHX7LPmSWPIXOSW+7Mm2gRYHIR7nW +orzYpr7aqDd0B5mZmSH5BAAAAAAALAAAAAAcADoAAAf/gH+Cg4SFhoeIiYqLjI2O +j5CRghoOF40JIH6am5o6Ghs0TiAgJwqICjZpFWoqKhIUsH5/Fxt5YXtHBSeICQsG +JR0fMC8CFLKzvRN4XHNDiC4LeigdQThEEseCLnIQORM2LYcNJncP09XYhTxjATlT +M4cIED4rDwweHCp+NzeDIH0jAsigYqiFmSJGItRjUEKNHwwYeggCYuHADwLZBs24 +kqFInQhRIDCo4KdAjB1CGtAAYGBECB6GgISokeFLG4hNzpSUAmUHBjFlMtSYgMAQ +hh8jamCx00AIhpMFpDBgAweAlyIZ6OgolMIKgR9akmDo1wNiARElGAwYEMFIERMO +/wxVkRFASxeYgm6kWCCCgwcGD1b42ELm0AwkOX6gKcCCkB81OIJ0QPEgQgElhxws +IJFjjZsEjiUQiTzZwAIXiIYsITGGTwEwpv74oSDgBYwPHUq8sQH60AkrTLJYiFPA +1GwBtW9zKPFkgwZELBIgAALKhgIdnDiB6L2IUmxJ4MOLH0++vPnz6NOrP0/JEiNM +2Td52jDHCRBS3wsp2NAFln//slzgRBxppJHLLockUMAASSRRxoNlUICBIBcoyAWD +djhzCDQMCpCEABFOOIgLdozxgRdOhGNIA2aACKKDxqhTxlpQwGMIAl4IMIaLSRjD +jz9pDPDBE1UURMMAO35YRtwxGPgk0R9AoDHGWhkJMgMUa+34hBchFpAFSipJsJYX +eBEChBcDIBcDDzw8YUwBFMDhUx8ijFlUIRisxWAeDSjxEw9wThkDBUmsFcdWhKSw +wwtrobFACn+UhQGcSYzxoI4C0KAiIVV4wSgAZeq1AKEfNiiAF4UZMkMcaErAGCEY +0HbpGGNsgFlBZnjxwRmfwUrBpWUUugRqhwyRaxdp2FCKILMt6ayOGyTQjyEn8OCG +BV3EYd0fsULo7JTOQScddXNYpwMGS6Sb7gILIMCdIt79MW0hP65n7734RhIIADs= + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-tags2.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhDAAPAOYAAP3///j//83r9czp9c7s9Yuqv9Tx9b7b4b/X5vH//+H4+tr0 +9t72+Ov8/bjY4cvo9fX//9Lv9fT///n//8fm9eH1/+L1/7PT4dPx9cbl9cXk9ef6 +/LnY4cnm9b/d4ej7/N/2+Zi2yoyrwI+tw7/X57rZ4bjR4e36/bLR4Zq3yr3b4ZWy +x+T2/9Dt9ejw9ZGwxNTy9eXx+YurwNHt9ej7/5e0x6/J29v1+LfP4Ov8/6rF2Njz +9eL2/9Hu9abD1bXN3snc6vv8/cDe4tfz9bPS4cTi9e37/Yqqv9n09py5zaS/07LM +3KjD1qvG2LXU4eDu9qXA08LY6OX5/87h7cXa58DY55Wzx5+90MTb6ebu9LLS4crf +65OwxLfX4eL5+snn9fv//77W5fH8//L//6C7z/f6/NPv9djl7525zcrn9dbj7dvx +9ez9/+f6/+v7/e///5Gwxdby9dLu9aO/0uD0/42swf///wAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAMAA8AAAetgHZ2QVhVJAgIUWWCgkAx +jHZPVIxnU3YAmBMBW2p2LmEQAWIFKWAJbiZZOCdjCUZQPwEfG2tLNhMNsxIQDQog +DDpNEl6+DDcLSDtDPkxvC0IeHgcHKgYYc0pscTDWZhFyPTNkVzkRJRwcDg5dBAJo +STQtBO0CAwMPDyEhbQNOFxdEtKDoQGGFFSlpvhDMkEGDhiIv4LDgYcFChQp0MtKp +U2PEiDogRYiQUeAIl0AAOw== + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/icos/entry-info-t-l.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhBQAFALMAAPv7+/X19fz8/Ozs7Pn5+enp6fr6+vT09P7+/vDw8Orq6v// +/wAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAFAAUAAAQQcC0UxhIqEVSMPIm0KIAY +AQA7 + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/icos/entry-info-t-r.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhBQAFALMAAPv7+/X19fz8/Ozs7Pn5+enp6fr6+vT09P7+/vDw8Orq6v// +/wAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAFAAUAAAQPcAS0FklK1GUKrcmxAUoE +ADs= + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/icos/entry-info-b-l.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhBQAFALMAAPHx8fv7++zs7Pn5+fPz8/Dw8Orq6vT09P7+/vz8/Onp6f// +/wAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAFAAUAAAQP0KRFCaALqYCTKgOFHEIE +ADs= + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/icos/entry-info-b-r.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhBQAFALMAAPHx8fv7++zs7Pn5+fPz8/Dw8Orq6vT09P7+/vz8/Onp6f// +/wAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAFAAUAAAQQcMlk5AJEBoVGUckiHIgU +AQA7 + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/icos/icons_vote_posts.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhIQAeAOZ/AOjo6PHx8cjIyPT09O3t7fr6+sXFxeXl5fj4+N7e3urq6vLy +8sPDw/b29s3NzdjY2NXV1dDQ0O7u7s7Ozs3o8fb+/9Lr8ev6+4fKVdnyxrzS4Zi0 +xq3G1pKvw/2JWLy8vJ65zOTt89H+fdvb2+fn5/v//9Hc5aO9z8nm8ajB0t7x9rTL +25Syxd3u+P1iMf+dfMb5bfS5s2atOdfw8/yEaO9lTs3Z4v+yf3udsr71YuxaReH2 +9+by+Of3+lukLv99Rfd7Wdzp8XK5QuHw+4fSF5fdI5LSYNLS0qDcbuRJNJjVaavp +QMHW5P+kcPGxrP+Tc4Kitoyrv/++kP/Kn/ZTKP+WY3zBTP+kg8Xi8ZveMLfxUaPk +M/39/fD7/Mb4d8v8cvxtPb/d8ez3+6zmdOhEJ+lVPv/Yr5u3yf9xOrPuRO+uqev3 +4vP+//RiOdf/i5Csv9n/lPhfM/JuVN06KYakurjnkaXjbd9cVcbZ58fa6M7f6/D1 ++MP2X9Tg5////////yH5BAEAAH8ALAAAAAAhAB4AAAf/gH+Cfxl1GYOIVy+LV4iD +BCMSBY6EY3Bjh45XZlNTT5QSIwiRjhlIcG5udpmDL2ZSUp+IoQgFCAkBg2tIIr0i +Xkqsfy9TNzc0iAMjAwXNCA8Kf7teX18w1zlGrE9STU3IggMPAQPl5QEQBEpevjnu +1kaDNDdVVUCDEAvNBQEB+gMRlGDAYASGFi0DCcq74cGDHHwRIkBAQICAg4sRBmHg +s2QJBkpAmvz4UYNShAYAADighEHLli1W5NWY+QMNGh04Hwo6mdIAJStpihQRMqhG +lR8ukiYF40HHoAkDFCjw6QioUKKCYpTxAIaK1zgeysR4GnUqJSFLiBCRgShGEg9t +/8iATTJ2kIABBw4wOLtFLdu2SYC0AULGiSMDC/J+oCQji2MflJzMkTPH8OEFmBc7 +kuGj819Hau6oofTng2nTpEPoCeGHEhMNsDVQSkCbNqUQeUrgCeHaj+8Vs337eeAo +hIYKfkow4Y1IQ/ISwB0l8MOFC/FBezSIqcC9y4ogzUtUYMOB0gguzSBgX8Hjgnv3 +KjiAF7SigvsUlB4UaNDgyCAOPHBXwQ479MAGD/gJwkEXBJ5ACQQFYOafgiecsOAM +M4CgoYMKXoAhCA82UNFKjqRwgQUWnEFJCj2guAElRzQglQCUnCAGBRSwMEgKG7Cw +wQwostBBByAcIcCRBMxogJQBJP4BQg84djBIB0GogOOVFqiwgQEEBJDSlwoEQKMg +Z/SAAgpRDNJHB1meiQIFWpoAAJdefikmCYNswAMWWNCBiAlRBNECFhS0wIIJgpDA +QJckAHAnIh0MEUYYUDhiAgstZNoBooOQIEA/ARiAJyJvDGEqDpTY8IYFUdhAiV4E +MHAAJVDgYGulqW7gKmkHCDDrIIEAADs= + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/gif +Content-Location: data:image/gif;base64,R0lGODlhDwAaAOZ/APr7/LnO3bXL2uK7Vvz58NLu9friZ/z69arD0tXl7eHr8uL1+tLv89v09921Uf3phfzjcMra5dvl68nX4ef1+fz589rt9e79/+v7/Ka+zs7h6tny9d3EmqjAz+rQc+ft8d/1+PTjttSycvb///f6+/vx0rzR3vL2+P/////4rub5+/3qjf/zlu/0+fH5/MmdQtLh7PfYWP3oe83a4u/jzdi9ke3Ma8aaSbvN2r/T4PXdfunXs+LGivHWh/jbWuT4+a7K2dy2X8qbO8PW4sTc6fjaX/bUU/fUXOr6+9+5Y9bx89u1V//ukOLz9v/2usfV3uTAZ/z369GmQv/yr9yyRNDr9c3r87+RPP/4pPjgbPHWfOfCW8ygQ/zsl+jMc+jKeN719vLZgPjdXPP//7nL19yzUP/wjdCtbvzmcuXIb///x9Ho8vjkou/WgJy3x/HUafznd/nlh9WmPLXQ3fv48t67XdDj7P3pgPnx4Mrd6fjcWtewW/fw3/z46+LCcwAAACH5BAEAAH8ALAAAAAAPABoAAAf/gH+Cgy0KLYOIiTAuMImOJBEoESSOiAoJIwkKjkMmAZ8UF00CpAI5gjkuIxhIKio/CyAYFAGCJwEJYz9gDRsNFxoCJ4MAESYgSgwMGwETAIkACAwFDQVWGc+JEnMFC3YLVUASjjhrFgg4CBZEZI4dGh0ffx8ZeW6OMzPZfwATT5WCSrApARBRDyc9CgrqY0ONjSgKQ4RJoSVEIgJfBmgcsIJFHAcgy/ghQADKlBRMVjy4IwMOBDNdghD4gydJGywyIBjYycLDHj6DDvCog0aMHh9ZlvCokKiClBg+IMQwIoSOox1Uijzw8OCInB2ORLzRwUXECx1bzghCMeiFlxs0EP7QuJHmiiMOHA4ErVFjUCAAOw== +Content-Transfer-Encoding: Base64 + +R0lGODlhDwAaAOZ/APr7/LnO3bXL2uK7Vvz58NLu9friZ/z69arD0tXl7eHr8uL1 ++tLv89v09921Uf3phfzjcMra5dvl68nX4ef1+fz589rt9e79/+v7/Ka+zs7h6tny +9d3EmqjAz+rQc+ft8d/1+PTjttSycvb///f6+/vx0rzR3vL2+P/////4rub5+/3q +jf/zlu/0+fH5/MmdQtLh7PfYWP3oe83a4u/jzdi9ke3Ma8aaSbvN2r/T4PXdfunX +s+LGivHWh/jbWuT4+a7K2dy2X8qbO8PW4sTc6fjaX/bUU/fUXOr6+9+5Y9bx89u1 +V//ukOLz9v/2usfV3uTAZ/z369GmQv/yr9yyRNDr9c3r87+RPP/4pPjgbPHWfOfC +W8ygQ/zsl+jMc+jKeN719vLZgPjdXPP//7nL19yzUP/wjdCtbvzmcuXIb///x9Ho +8vjkou/WgJy3x/HUafznd/nlh9WmPLXQ3fv48t67XdDj7P3pgPnx4Mrd6fjcWtew +W/fw3/z46+LCcwAAACH5BAEAAH8ALAAAAAAPABoAAAf/gH+Cgy0KLYOIiTAuMImO +JBEoESSOiAoJIwkKjkMmAZ8UF00CpAI5gjkuIxhIKio/CyAYFAGCJwEJYz9gDRsN +FxoCJ4MAESYgSgwMGwETAIkACAwFDQVWGc+JEnMFC3YLVUASjjhrFgg4CBZEZI4d +Gh0ffx8ZeW6OMzPZfwATT5WCSrApARBRDyc9CgrqY0ONjSgKQ4RJoSVEIgJfBmgc +sIJFHAcgy/ghQADKlBRMVjy4IwMOBDNdghD4gydJGywyIBjYycLDHj6DDvCog0aM +Hh9ZlvCokKiClBg+IMQwIoSOox1Uijzw8OCInB2ORLzRwUXECx1bzghCMeiFlxs0 +EP7QuJHmiiMOHA4ErVFjUCAAOw== + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-comments2.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhDAAOAOYAANDf6tbt9oWludPi7NHg6sPh8Mvb59Li7IiovLnM2bjM2NHh +6+Pq74SjuNLh64GhtcDV47fL17LG0+jv9cfY47/V46m+zMLT37vO2+rx9oCgtuju +8fz//83d56zBzvv//+ju8uPz+rjM2b/c8M/e6rzP2+/z9dvv+ouou8LV4OPz+4uo +vNXr+srb5sbX4sPY5LXI1sjZ5Njt+omovIinu+Hp7r/R3YmpvNTv8szn8Oz6++r3 +/sHU2q7L0qbE0cjk8N/09tDr8Pf//////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAMAA4AAAdwgBkDAwcOCwQEAAAkEwAc +Q5CRkB8GHUKXmJkxLTo6PJ+gnS4UQKWmpxcpODg9ra6rNiVBs7S1GCI5OT67vLkK +CQE/wsPCATARKjvKJwUFyiESDDczCDQvMiMCAg01kiArECwakpIbKBUP5JImHhaR +gQA7 + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-author-link.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhBQAHAIABAJ2dnf///yH5BAEAAAEALAAAAAAFAAcAAAIKDA5ht8ioTFRJ +FQA7 + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-icon-twitter.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhDgAQAOZGAP///3PU/HLU/HHU/HDU/NfX12/T/Nvb2+jo6Nzc3NbW1t7e +3t3d3d/f39LS0u/v79ra2oHZ/O7u7tPT04jb/fz+/+bm5uPj4/r6+n3X/PT09PHx +8dXV1efn5/z8/Pj4+Pf39+3t7djY2Ljp/enp6eLi4v3+/+Xl5cDs/u35/5zh/f39 +/dHx/uTk5Ob3/vb29qbk/evr65Pe/W7T/Pn5+cnu/tfz/qvm/ZHd/f7+/tnZ2XjW +/OX3/nXV/OHh4Ynb/Ozs7PX19eT3/o/d/fX8/43c/f///wAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAACH5BAEAAEYALAAAAAAOABAAQAeigEYIDRAJIUaIiYgFAAIC +MgCRkR8nB0aMBgYUkpEYHRCCFigBpKWkMA8XCzQRMyobJYqJjAO1trY3QC0iHhmk +NRWSQRcMiBoKJB4pwZErMRwYCB1EQhsLh7JGCgCZFCA6B+EMCIsABOfo5xE2DQ+M +jvDwPy4Q7jk9AUMvnAkWiAwgipgqhYNHAgnaTIzwZWoHCx8IjWhowEHEBAcYJyz4 +YCQQADs= + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/png +Content-Location: http://habrahabr.ru/i/bg-icon-facebook.png +Content-Transfer-Encoding: Base64 + +iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAA +AJ9JREFUOMtjYKAQMDIwMDAkVq75f+vBG5I0qimIMMxvD2FkYmBgYCBVM7IeFmIU +q8oLM3SXeTKICHIzMDAwMNhEzYTLMRFjALJmdECUC7DZTJIL8AG8LjiyLB0rH9kl +eA148/4rihdgfKJdEJC9BMVmGJ+qYUCdQOTiZGPQUBIjqNhIWwbOvnHvFRVdICPO +x3Du6hOcirAlIDUFEQaqAAAnVClioBN0DAAAAABJRU5ErkJggg== + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/link_icon2.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhFAAUAOYAAIGiu+ft8o2xy8nm9YmtxcLe7KnL3u3///r+/5G0zYisyYWp +xnyivc7i79Lu+53B2NLm9Nvt9tHs87nW6pa60mSKpJ3B1pS20PT2+OX8/3ufu+D5 +/+j+/9jy/nCVr7nZ6dXx/s/r+Zi40d74//P+/4+uw8Lh8Zq81Lza7Z2/1rXR5r/b +667N4KLF2uf7/qPB17ra7fX4+pi808nd64ClwL7e7u/z9q7D0YKow8Hg767O5bHT +7dr0/4mqwPb//8Xi8cbg7qnG256909/1/8Ph9LTU5bLT5a/Q4naeuf3///T5/tzl +6qTG28Da8LDR4snW37XW5snl74eow6TD2b7S4L/X5qa8yrfY57/g8rnY55WuwZ67 +0OD4+W2TrOX6+7fZ68vo+sXk8931+Iimu+r8/XmZsMTX5rnO3bHN5JKtv8Th9Mfl ++Mfl9NTx9IOoxXabtczn9qnL5Njz9a/L4LfR6LXW74uyx6PA2L/d66PH3bPH1rTJ +17DM3pSzx7rX4v///yH5BAAAAAAALAAAAAAUABQAAAf/gH+CgkoQTTuIO00QSoOO +ghB1YBsHlQdDazsQj38ITUQcBxwZG6WlQzATCI4TaqOlIzw8HR0gDh0TKoMNKC4j +YEREWFg1MDBfWHAhOjN/MXFDPCA6jZx5Jjk/DxgzKB0OITUtDQgISYMPKB8fLGZz +cHADbGE5Dw1/PuZ/FFBFRkUvZIT4kSNHjSJV8B0gkU+AkyMsjAigAAQFjA9X+Pxx +wcULmYUEDIhkQeACnn5GWkTw0UaOGD8HyOBg0qKFARwCsjxkkeBPBAkS7CChcoDB +gxQpDNDYwkLkzSRRoljAkQJJAAYyKFBI0eeMCJotaJAoAIQGBRkJNGi4kOAEAT02 +b2gEOUojwooVDC6wVaBAgAAhb2z82UPgDgUFQYBMWOBXAF8FIhjcGFSixwkBDJqo +uLCgsxvIGsY4itEDgIgFGuigSUBjQQIhHgDE4HSjCwApAATcmSKkRwUrjjBgCBBg +yRMtZSoor1AmzZMlxIUHAgA7 + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/double-lock.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhIgAUAOZ/AN/t9s7o9tnv+qnI3L7Z6ZG1ztru9s7m8L/h8+36//r//7TG +0rrS4pq60cre7IGlv8rp+M7h7bzY6LnO3LrZ6eP0+6C+04qrwqjI2pa81KHA1bPP +35WzyXieuPX8/7PP4ef2/Of1+6vH267C0cji7rXQ4KfG2/f///X+/5Kzy93x+93w ++Mfn97fT5J6/1M3q+nGXsWSKpGqQqqbF28Tc7V6Fn4mtx1qBmuXu9dLp9LrW5+n3 +/LDN3eDz+oWmvcTZ6KXF2qfF2Orw9bDL3Mvn9dbk7uT0/czq+LjU5rvV5qHB2KPE +2aTC2bTI16bG3XSYsnCVrvD6/vH9/77W5L/U4bTJ2M/n86zL263L3KfC1fj6/P7/ +/4+uxniaspy808Dh8a7N4Nvw+t/x/ODz/Nrm7qXE2Ze3zaXG2uP1/KbG2Zi3zbXS +4bTS467M3LjS4X+kvsLb6L7S4Oj0+pGwxu3z+N/x+4KkvLLJ2rfQ4dXg6NXt+LHO +3Zq+2FZ8lv///////yH5BAEAAH8ALAAAAAAiABQAAAf/gH+CgnQOhg4Ag4qLhYeJ +i4IAAwAKfpYALRGQkZOVl5mLRQ6WCh4eJ1t+AAyQoqSmqKqsgloiKFFUHBcXc3dy +Hj9CirW3ubu9v8GCZBE7WU2KeVwhAHGKzM7Qg9LU1n8TBiF2in5/PiEGHIrg4uTm +6OrfBxVPkCMrB2/r8/WL9/mCqhCoAMUeCAIdFAkkaBChoAk0EnSBtMAIjXGDIEqk +aHEcDj58nIAcSRIkDkEfQ5ZciaMAAhYQIBx5QfPFEQgsWCAoIMglTJk1beLUWcDG +lwB6BKioM0aMijACchD5YkOQUaRKmTqFKpXqgwxnsGwo4aYsng08BizJ8EDQ17Bj +w8u6OZt27YMOFKysAJFAyokTKBKAWGGFQsI/ePXy9QtYMGHDMApowNBm7JoSG/Zc +SeOiAAxBkSdXLnE58+bOMGQMIEAih4EVFdD0MJCDhIQBMgSpZu0atmzatnHH8DLg +Q4skEpLrQMIGjIkGMQQNL348uYTlzZ/HqJGigQYmQGaYMDGjjBIXDVLUEMTdO3jx +5M2jV3/jghkLQYa4mQInyQYRGqhxwQ2C1Hdffvv191+AAy7Qx4MQRhjhAoI4KOGF +Dy4QCAA7 + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/gif +Content-Location: data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIFjA8QqVwAOw== +Content-Transfer-Encoding: Base64 + +R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIFjA8QqVwAOw== + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/gif +Content-Location: data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIGjANgqRwFADs= +Content-Transfer-Encoding: Base64 + +R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIGjANgqRwFADs= + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/gif +Content-Location: data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIGhGOAGt0FADs= +Content-Transfer-Encoding: Base64 + +R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIGhGOAGt0FADs= + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/gif +Content-Location: data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIFDG6YwVEAOw== +Content-Transfer-Encoding: Base64 + +R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIFDG6YwVEAOw== + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/add_comment.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhEgAMAIAAAK+lav///yH5BAAAAAAALAAAAAASAAwAAAIgDI4Jwb0NXXwR +Unarmdryjn1gllUl4iTjU3bHBk4vWAAAOw== + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/comments.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhEgAMAIAAAK+lav///yH5BAAAAAAALAAAAAASAAwAAAIiDI4Jwb0NXXzq +sCfj3KZermVZRYGhoSFOcnZfC1kYfFltAQA7 + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg_avatar_mask_mini.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhGAAYAIABAPn5+QAAACH5BAEAAAEALAAAAAAYABgAQAIdBIKpu8YPo5y0 +2ouz3rx7dHSO+JXmiabqmo6aUQAAOw== + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/webp +Content-Location: http://habrahabr.ru/i/icos/icons_vote_comments_4modes.png +Content-Transfer-Encoding: Base64 + +UklGRmABAABXRUJQVlA4IFQBAABwBwCdASoaADQABIcIhYWIhYSIIwIDOwf/qY5V +PFJY+iVbJQjoL9N5LWGQGu2o69DHOGL3nNhrVemaC1cUevUUUvr5oAD+1w8lDT+P +grWvNh8Gclmyl+s2tpErshZgn5aWfMxrEhI3mUdlVspCJYMLphiyU/Q8lmKv3/UA +ydEe+OST/eOicZLohC9cT+zq5TgKlE4rPwrtuCca3b3V6Y8aephX290owirC5+n8 +t5DmPDR1PdnnBCwGT6eNF9nOAUcVTRgfa8E7Ya0CJNM58ye1wySJzBSb0R5a3Uxe +iJH3vJ/OoxDK1D6NeONm7d2Ri052MZ3ogzhS5gilXPUzbRm4ZKM+rBG8LQFTvOSE +j8/7xPtvsrUFuCWmzB9pREhGUU4Vl1oPpiUUtJJslfIFzPdGGLnpEtcufHT3QJgP +twwvkg2lECyn3Vj+ThKvMMqCTTjwoAAA + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/png +Content-Location: http://habrahabr.ru/i/bg-button-enter.png +Content-Transfer-Encoding: Base64 + +iVBORw0KGgoAAAANSUhEUgAAACAAAACDCAMAAADbLOmGAAAAGXRFWHRTb2Z0d2Fy +ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGBQTFRF8vLy5+fns7Oz////ysrKz8/P +0dHRzs7O09PTx8fHycnJ0NDQyMjI0tLS3NzczMzMzc3N4uLi2dnZy8vL3t7e4ODg +39/f4+Pj5OTk1dXV5ubm+vr6+/v7/v7+/f39////yswFHgAAACB0Uk5T//////// +/////////////////////////////////wBcXBvtAAABWElEQVR42uzW23KDMAwE +UNlgnBYINOn9xv//ZQkhgGQhFwf8xL5yJpNMFs1C8/6R3WLaWHt4aiaBt5fvBOfr +dSrg8As0nwaBxAHqfmAFoJeDMgTUU2AYkAYD7QGaBTYZn18igO4TQALgBcCB6scF +xRQcnxXN8TQFzTHt8tjm4ZoT6mTjCfyj1c53IK1Wzq8Asz2wAtDLQRkCcKsZkAYD +7QGaBVY5rZ4DQ6tnAXgBcKBiAGm183xv9d7qvdVLWp33Mdd0BWcWCB4j3AJBY4Tb +D2hr3A3sCqAMA7c/XtUxQCaDKgbIZXDeAmgCyJbrX9ABpM7Y0+NLzoLxFZ8DQIGV +CxMFMGMP7T5u7KHdhw5Im6LPcEtWOSDSd7gcECX9CjDbA7sCKMPAUKs6BshkUMUA +uQzOWwBNABkY5IBA6iwQfEBcQA4IA4ACKxcmCqhkUHALBI0R7wH5E2AAR7t7jEpR +hqMAAAAASUVORK5CYII= + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg_avatar_mask.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhMAAwAIABAP///////yH5BAEAAAEALAAAAAAwADAAQAJDhBGpy+2/DoK0 +2ouz3rz7D4biSJbmiabdpFpGe7HwTNf2jef6zvfKu5PwDj6Z74hMKpfMpvMJjUqn +1KrVZsxJsjBJAQA7 + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/png +Content-Location: http://habrahabr.ru/i/tags/habred.png +Content-Transfer-Encoding: Base64 + +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 +4OCheEP7PydxA3UapgnrAAAAAElFTkSuQmCC + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/form/loader_button.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhDAAMAIABAJqamv///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAAABACwA +AAAADAAMAAACGQweeaDY3JJxUy4LZ74aQ96FIgWSpoeOSAEAIfkECQAAAQAsAAAA +AAwADAAAAhpMgHa5oOjaY2vGauC0XGamfVHoYSVFoipQAAAh+QQJAAABACwAAAAA +DAAMAAACGYyBFgiX3taTkSnr7txcRwp54YiB2SiJTgEAIfkECQAAAQAsAAAAAAwA +DAAAAhoEgna5oejaY2vGauC0XGamfVHoYSVFompQAAAh+QQJAAABACwAAAAADAAM +AAACGYSDBhiX3taTkSnr7txcRwp54YiB2SiJTgEAIfkEBQAAAQAsAAAAAAwADAAA +AhkMHnmg2NyScVMuC2e+GkPehSIFkqaHjkgBADs= + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/form/loader_field.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhDAAMAIABAO3t7f///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAAABACwA +AAAADAAMAAACGQweeaDY3JJxUy4LZ74aQ96FIgWSpoeOSAEAIfkECQAAAQAsAAAA +AAwADAAAAhpMgHa5oOjaY2vGauC0XGamfVHoYSVFoipQAAAh+QQJAAABACwAAAAA +DAAMAAACGYyBFgiX3taTkSnr7txcRwp54YiB2SiJTgEAIfkECQAAAQAsAAAAAAwA +DAAAAhlEDnmh2NyScVMuC2e+GkPehSIFkqaHjkgBACH5BAkAAAEALAAAAAAMAAwA +AAIaBIJ2uaHo2mNrxmrgtFxmpn1R6GElRaJqUAAAIfkEBQAAAQAsAAAAAAwADAAA +AhmEgwYYl97Wk5Ep6+7cXEcKeeGIgdkoiU4BADs= + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-corner-top-left.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIFjA8QqVwAOw== + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/tm_logo_sharp.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhHwA8ANU6AKqqqsUrhaKiot2IuqOjo////+4vmtLT08zMzJ2dnctDk+Lk +5P79/P3s9bGxsfHx8u3s6/Xb6+u61p+envX49Pj5+Z+gn/34+sHBwd3d3Jycm+es +zvvk57i4uNRmpsrKyu3D24+Pj/70+uOdxZiYmZqbm8fHx5eWl/jJ3f/5/dxcpsTE +xJGRkf6m1P7//b6+vvz9/v3+/pWWlZWUlPv8+6CgoKKhor0idqWlpcAjfP///wAA +AAAAAAAAAAAAAAAAACH5BAEAADoALAAAAAAfADwAQAb/wITNJiAah0XkcMlU2jQ1 +nHQqFVgFhCxWmqVSa1Gv1NIpHBKTBQRToWAYCI0YLK7bpywZAgHR3XKAgYKDhIU5 +N3+FAYuMOYuAj4WIhjcKBQOIEhwKMA2WmISThqOCiIgGLTo6NnetrTZhYiUOBQgn +GhkMFQ4vDLUJc7F1AlNdXcQEUgAOAAITCUlKSUXR1Es4CKrafqTdlImhCi6YN5oR +HgMcF6CDot7fpwYGAcKu9lJ09/o4sGIJbwwo6MpwgMICCzggVPgwQUy/OmTMJEiw +4MGCAxkWVEAAzMtDhw42JrCQAQIAiwAoMHTIal8dEiFCYDhAs55LKTZmmHiwrafP +/59At4F7984dUW9GAykAESEGBwkDNhRosIhGCnalhpYSR05ChBFMB4jAGijpoACB +Ft14hFaS1qOATN2QZwDFW7inUGyz6SqZnWQW+N70km/wnY+G6xSmAqDxMhyOAShr +rNhmjQ5qClg0kaEABRwOfMUJZueymRIWKj7A8OEBnI5fWs4pc0BDGggHIOAWSbqO +DVoHSqR5QIsCLQQNCQuerKw5ZMnF8C2/R+AEiRofEGAAMP1eDRYhVhxA8KD7vRAA +cquK4veO3/ZcSKygELS+/Z5y8+vfz98sXLf/IXVXgFnBY8ohZQ1o1g0eXHBBAyKk +MMIIDUjwRwQNkBWXggqsg1DIBgx4ooIvGh7C4SWZRABCVBKM9ZZ/h3ySYoMNNFgi +jJVk+GEEAXAAQgA6hjKgkHEhKAhaBxKY4Fx0DUmUKfKk4mRRc22gTX9YypWDCj4F +AQA7 + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/webp +Content-Location: http://habrahabr.ru/i/bg-multilogo.png +Content-Transfer-Encoding: Base64 + +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 +JXgWgAAA + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/topic_edit.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhEAAQAOZTAM3p+OLp7nmar4eovMLY56jC0+H4/N3l6s7m8ezx9fT2+Ojt +8Xear8La5+T7/9Tv+sLi8+nv87zQ3fX//5q3ycLZ6Ovw89Dc5J67za/H2Ji5zXmc +suvy97PM3ompvvn//+j//4urv9ri6d3z/bfa7uX1+7zT4brZ7d72/fH//+f6/42s +v46sv9ft+IKit+f2+6/T6568zYepvsno9fP3+qzJ2dLr+d/1/YqrwrPG06vQ6dvy +/N/v9o6rvs3r9KvG2Nzl7PH9/+n4/Mrn9czc5pWyxbPO3rXX6MDR3M7o89ry/Iqq +vszr9rDL2+f5/8nX4L7h8t7o8Nrz+////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAACH5BAEAAFMALAAAAAAQABAAAAeRgFOCg4I0BA0mRISLUxwV +BhM8EoyEBAYpQgUJlIMdIEGaUxcePZQ/Dj4YEUg4LSuMUUYoM0cyGidKA4tRTVJM +UCQwOjYIAoS8vlBDNzsjCAwBg8i/AE4UIQMC0YLTUNVLT7C91E7g4snf4YwZUg8Q +6Zw1SRsq5eqUMSUfL+acU0AsirjIIeLAgQALFlhQoEBQIAA7 + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=all.css +Content-Type: text/css; name=all.css +Content-Location: http://habrahabr.ru/css/1307631427/all.css +Content-Transfer-Encoding: 8bit + + + +/* layout */ +#header-wrapper { + position:relative; + /*overflow:hidden;*/ + min-width:760px; + } + +#wrapper { + width: 95%; + min-width: 725px; + clear: both; + margin:0 auto; +/* overflow: hidden;*/ +} +#inner { + margin:0 auto; + max-width: 1200px; +} + + #main-content { + float: left; + width: 66%; + clear: left; + margin-right: 2%; +/* overflow: hidden;*/ + } + #sidebar { + float: left; + width: 31%; + } + + + + + +/* main */ +body, html { + height: 100%; +} +body { + font: .75em Verdana, sans-serif; /*12px is font-size for main content. Base font size*/ + color:#000; + background:#fff; +} +a{color: #6da3bd;} +a.serv{ + text-decoration:none; + border-bottom:1px solid #6DA3BD; + } +.input-row{ + margin-bottom:9px; +} +a.js-serv{ + border-bottom: 1px dashed #6DA3BD; + text-decoration:none; + cursor:pointer; + } +a.silentlink{ + text-decoration:none; + color:#343434; + } + a.silentlink:hover{ + color:#343434; + } +a:hover{ color:#4D7285;} +.hentry .content a:visited,.entry-content a:visited{ + color:#990099; +} + .hentry .content a:visited:hover,.entry-content a:visited:hover{ + color:#C266C2; + } + .hentry .content .habracut a:visited{ + color:#6DA3BD; + } + .hentry .content .habracut a:visited:hover{ + color:#939393; + } + + .entry-title a.topic:visited{ + color:#B0B0B0; + } + .entry-title a.topic:visited:hover{ + color:#939393; + } +a img { + border:none; +} + +address { + font-style:normal; +} + +fieldset {border:0 solid transparent;} +input, select, textarea { + font-size: 100%; + font-family: verdana, sans-serif; +} + +ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,body,html,blockquote,fieldset,dl,dt,dd,caption {margin:0; padding:0;} +ul,ol {list-style: none;} +pre,code {font-size: 1em;} + +ol{list-style-type: decimal; + list-style-position: inside; + } +.published, +time{ + text-transform: lowercase; +} +h1, h2, h3, h4, h5, h6 { + color:#999999; + font-family:Verdana,sans-serif; + font-weight:normal; + margin:0 0 0 0; + padding:0; +} + +h1 { + font-size:162.5%; + letter-spacing:-1px; + margin-bottom:0.7em; +} + +h2 { + font-size:150%; +} + +h3 { + font-size: 137.5%; +} + +h4 { + font-size: 120%; +} + +h5 { + font-size: 110%; +} + +h6 { + font-size: 100%; +} + +table {border-collapse: collapse;} + +blockquote { + border-left:2px solid #bbb; + margin: .83em 0; + padding-left:15px; + clear: both; +} + +img[align="center"] { + display: block; + margin: 0 auto !important; +} + +.hidden { display: none !important;} +.error{color:red;} + + +/*Header*/ + +/* Sligtly modified code first coded by Aleksey Rybakov (http://flack.ru/temp/habr/head.html) */ + +#header-inner { + margin-right:255px; + } +#nav-adv { + margin-left:240px; + } +#logo { + width:240px; + float:left; + } +#info-search { + width:255px; + float:right; + } + + #logo img { + width:240px; + height:130px; + } + + #main-nav { + padding-top:14px; + text-transform:lowercase; + font:1.75em 'Lucida Grande',Verdana,sans-serif; /*21px*/ + } + #main-nav li { + display:inline; + margin-right:1px; + } + #main-nav li a { + position:relative; + padding:0 3px; + border-bottom:1px solid #b2b2b2; + text-decoration:none; + color:#b2b2b2; + } + #main-nav li.current a { + color: #000; + font-weight: normal; + border-bottom:none; + } + #main-nav li.current a span { + color: #F60; + font-weight: normal; + border-bottom:1px solid #000; + } + #main-nav li .top-Link { + vertical-align: top; + color: #ff9600; + letter-spacing: -1px; + } + #main-nav li .top-link span { + color: #8d8b8b; + } + + /* Subnavigation (nearest menu level) */ + + #sub-nav { + clear: both; + margin-bottom: 20px; + + } + #sub-nav li { + display: inline; + margin-right: 3px; + } + #sub-nav .create-blog, #sub-nav #recommend { + margin-left: 15px; + } + #sub-nav li a { + font-family: Arial, sans-serif; + font-size:1.083em; /*13px*/ + text-decoration: none; + color:#093; + padding: 0 2px; + } + #sub-nav .current a { + color:#fff; + background-color: #ff9525; + padding: 0 5px;} + + /* // Subnavigation (nearest menu level) */ + + + + /*Text advert*/ + + + #head-text-adv { + margin: 2.5em 0 1.5em 0; +/* float: left;*/ + width: 98%; + } + .profile #head-text-adv { + margin: 5em 0 0 0; +/* float: left;*/ + width: 98%; + } + #main-page #head-text-adv { + margin-top: 1.2em; + } + #head-text-adv iframe { + margin: 0; + width: 100%; + } + + /* // Text advert*/ + + + + #info-search { + text-align:right; + width: 255px; + font:.917em Tahoma,Verdana,Helvetica,sans-serif; /*11px*/ + } + #info-search .avatar { + float:right; + width:48px; + height:48px; + margin:7px 19px 0 0; + border:1px solid #DDD; + } + #info-search dl { + float:right; + padding:11px 13px 0 0; + text-transform:lowercase; + width: 170px; + } + #info-search dl a { + color:#999; + } + #info-search dd { + margin-top:1px; + } + #info-search dt { + width: 170px; + } + #info-search dd ul { + color:#000; + } + #info-search dd ul li { + display:inline; + padding:0 5px; + background: url(/i/bg-info-search.gif) no-repeat 100% 100%; + } + #info-search dd ul li.last { + padding:0; + background:none; + } + #info-search dd ul li a { + color:#000; + } + #info-search .habrauser { + text-transform:none; + font-weight:bold; + color:#666; + } + #info-search #last-shot {margin-bottom: -1px;} + #info-search form { + float:left; + margin-top:11px; + margin-right:6px; + } + #info-search fieldset div { + float:left; + width:176px; + padding:3px; + background:#C9D6DE; + } + #info-search fieldset div input { + width:170px; + padding:1px 0 1px 3px; + } + #info-search fieldset .submit { + float:left; + width:49px; + margin:2px 0 0 5px; + } + + .new-mail-indicator {margin-bottom: -1px; margin-left: 2px;} + + /* Menu for unlogined visitors */ + + #info-search ul.guest_panel { + margin: 2em 4.2em 1em 1em; + } + #info-search ul.guest_panel li { + display: inline; + } + +/* // Header */ + +.company_admin #sidebar{ + padding-top:46px; + } +.help .company-help{ + margin:0 20px 20px 20px; +} + +/* Main content */ + +/* Горизонтальное меню над постами */ + + +.page-navigation { + overflow:hidden; + width:100%; + clear:both; + margin-bottom: 20px; + } + + +ul.page-menu{ + overflow:hidden; + } + .page-menu li { + width:20%; + float:left; + } + .page-menu li { + padding: 0; + text-align: center; + background: #eaecea url(/i/bg-page-nav-left.gif) no-repeat 0 0; + vertical-align: top; + } + .page-menu li.current { + background-color: #d3e2f0; + background-image: url(/i/bg-page-nav-current-left.gif); + } + .page-menu li b{ + display:block; + font-weight:400; + height: 28px; + position:relative; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + padding-top: 7px; + background: url(/i/bg-page-nav-right.gif) no-repeat 100% 0; + } + + .page-menu li.current b { + background-image: url(/i/bg-page-nav-current-right.gif); + } +.unlogged-menu{ + padding-left:35px; + } +.blog-menu{ + } + .blog-menu + .page-menu td, + .blog-menu + .page-menu td.current{ + border-bottom-width:0; + } +.top-page-menu{ + padding-left:35px; +} +.page-menu { + width: 100%; + clear: both; + font-size: 1.33em; + border-collapse: collapse; +} + .page-menu td { + padding: 0; + height: 2.19em;/*35px*/ + text-align: center; + background: #eaecea url(/i/bg-page-nav-left.gif) no-repeat 0 0; + vertical-align: top; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + } + .page-menu td.last { + border-right: none; + } + .page-menu td.current { + background-color: #d3e2f0; + background-image: url(/i/bg-page-nav-current-left.gif); + border-bottom: 1px solid #d3e2f0; + } + + .page-menu td div { + padding-top: .5em; + background: url(/i/bg-page-nav-right.gif) no-repeat top right; + } + .page-menu a,.page-menu label { + color: #666; + cursor:pointer; + text-decoration:underline; + } + + + .page-menu a:hover,.page-menu label:hover{ + color:#A3A3A3; + } + .page-menu .current a,.page-menu .current label { + text-decoration: none; + color:#000; + } + #company-index .page-menu td { + background: none; + } + #company-index .page-menu td div { + background: url(/i/bg-page-nav-right-company.gif) no-repeat top right; + background: none; + } + #company-index .page-menu td div a { + color: #b2b2b2; + } + #company-index .page-menu .current div a { + color: #696969; + } + #company-index .page-menu td div .add { + margin-left: .5em; + } + + .profile .page-menu .current, .profile .page-menu .own { + width: 50%; + } + body#top .page-menu .current { + border-bottom-color: #fff; + } + #company-index .page-menu td.current { + background: #f0f0e7 url(/i/corner_3.gif) no-repeat 0 0; + /* border-bottom: 1px solid #f0f0e7; */ + } + .page-menu td.current div { + background: url(/i/bg-page-nav-current-right.gif) no-repeat top right; + } + #company-index .page-menu td.current div { + background: url(/i/corner_1.gif) no-repeat top right; + } + + + .page-menu .top img { + margin-top: .1em; + } + + .page-menu #write { + height: 35px; + width: 34px; + margin: 0; + background: #fff; + } + .page-menu #write img { + margin: 0; + outline: none; + } + + .page-menu sup {font-size:70%; color:#999; vertical-align:baseline; position: relative; top: -8px;line-height:0;} + + /*Tabled page-menu*/ + + .page-menu td { + text-align: center; + } + + + /*2 линия*/ + + .page-submenu { + font-size: 1em; /*12px*/ + float: left; + clear: both; + background: #D3E2F0 url(/i/bg-page-subnav-corner-bottom-left.gif) no-repeat bottom left; + border-right: 1px solid #fff; + } + + .logged { + border-left: 35px solid #fff; + } + + .right { + float: right; + } + + .page-submenu ul { + padding: .5em 20px .5em 0; + background: url(/i/bg-page-subnav-corner-bottom-right.gif) no-repeat bottom right; + } + .page-submenu li { + display: inline; + margin: 0 0 0 10px; + } + .page-submenu li.create-new-blog { + padding-left: 25px; + background: none; + } + + .page-submenu li.current a {text-decoration: none;color:#000 !important;} + + .page-menu td .new, + .page-submenu li .new { + color: #390; + } + .page-submenu li a { + color: #666; + } + .page-submenu li a:hover { + color:#A3A3A3; + } + .page-submenu li .rss img { + margin-bottom: -2px; + } + + +/*Простые табы (без круглых уголков и т.п., см. страницу приглашения в блог)*/ + +.two-simple-tabs { + width: 100%; + float: left; + clear: both; + margin: 20px 0 10px 0; + font-size: 1.58em; /*19/12*/ + white-space: nowrap; +} + .two-simple-tabs li { + float: left; + width: 49%; + text-align: center; + } + .two-simple-tabs li.last { + float: right; + } + .two-simple-tabs div { + padding: .5em .5em; width: 95%; margin: 0 auto; + } + .two-simple-tabs .current div { + background: #faeee2; + } + .two-simple-tabs div, .two-simple-tabs div a { + color: #999; + } + .two-simple-tabs div .new { + font: normal .89em/100% Verdana, sans-serif; /*17/19*/ + color: #390; + } + .two-simple-tabs div a:hover{ + color:#333; + } + + + + + +/* Archive section */ + +.archive-navbar { + margin: 30px auto -10px auto; + text-align: center; +} + .archive-navbar a { + display: inline; + font: 2.17em/100% Verdana, sans-serif; + color: #996; + } + .archive-navbar h1 { + display: inline; + font: normal 2.17em/100% Verdana, sans-serif; + letter-spacing: -1px; + margin: 0 .8em; + color: #69c; + } + + + +/* Информация о блоге */ + + + /* Новые стили 24 апреля 2008 */ + + .blog-descr {clear:both; font-size:14px;} + .blog-text-descr {margin: 10px 0 0;} + .blog-descr .bg-top-r h3 { + clear: both; + margin-bottom: 10px; + font-size: 1.63em; /*26/16*/ + font-weight: normal; + letter-spacing: -1px; + color: #999; + } + .blog-descr .bg-top-r div, .blog-descr .bg-top-r p {font-size: 14px;} + + /* Админы, соавторы и читатели блога */ + + .blog-descr #admins ul, .blog-descr #coauthors ul { + float: left; + width: 100%; + margin: .83em 0; + text-align: center; + } + .blog-descr #admins li, .blog-descr #coauthors li { + float: left; + clear: right; + list-style: none; + margin: 0 5px; + } + .blog-descr #admins dl dt a img, .blog-descr #coauthors dl dt a img { + display: block; + margin: 0 auto; + border: 1px solid #ddd; + } + .blog-descr #admins a, .blog-descr #coauthors a { + font-size: 12px; + } + + .people { + margin: 10px 0; + } + .people ul { + margin-top: 10px; + font-size: 12px; + } + .people ul li { + display: block; + float: left; + margin-right: 5px; + font-size:1em; + font-family:arial; + line-height: 130%; + } + .people ul li, .people ul li a { + color:#999; + } + .people ul li a { + padding: 0 0 0 15px; + background: url(/i/small_default_userpic.gif) 0 50% no-repeat; + } + + + /* // Новые стили 24 апреля 2008 */ + + + +#viva-la-w3c { + width:149%; + } + .blog-title { + overflow:hidden; + padding-top:10px; + margin-top:-20px; + min-height: 48px; + padding-bottom:8px; + padding-left:35px; + } + #viva-la-w3c .blog-title .avatar {border: 1px solid #ddd;float:left;} + +.blog-info { + clear: both; + padding:35px 0 20px 0; +} + .blog-info .title a { + color: #008cd2; + } + .blog-info .title img { + border: 1px solid #ddd; + } + .blog-info .title .avatar { + margin: 0 .83em -.45em 0; + } + .blog-info #buttons { + margin-left: 10px; + white-space: nowrap; + } + .blog-info #buttons img { + margin: 0 .83em -.2em 0; + border: 1px solid #ddd; + } + + .blog-info .more-info { + margin-left: 45px; + } + + .blog-info .more-info .subscribers { + font-size: 1em;/*12/16*/ + position: relative; + top: -.5em; + } + + .blog-info .more-info .rating, + .blog-info .more-info .subscribers { + margin: .2em .1em 0 .1em; + } + .blog-panel #sidebar{ + margin-top:46px; + } + .blogs #viva-la-w3c h2.blog-header { + + margin-top: 0; + float:left; + margin-right:30px; + font: normal 300%/120% Verdana, sans-serif; + letter-spacing: -1px; + color:#333; + + } + .blogs #viva-la-w3c h2.blog-header .silentlink{ + position:relative; + display:block; + float:left; + margin-right:5px; + } + .blogs #viva-la-w3c h2.blog-header .profiled_blog{ + cursor: help;width:16px;height:16px;float:left;margin-left:2px;margin-top:10px;background: transparent url(/i/icon_asterisk_24.png) left top no-repeat; + } + .blogs #viva-la-w3c h2.blog-header .edit{ + display:block;float:left;margin-left:10px;margin-top:18px; + } + .blogs h2.blog-header .blog-whois{ + position:absolute; + font-size:33%; + line-height:1em; + top:-5px; + right:-20px; + color:#66ccff; + + } + .blogs h2.blog-header .blog-whois:hover{ + color:#4890b4; + } + dl.blog-index { + float:left; + margin-right:19px; + position:relative; + } + dl.blog-index dt{ + position:absolute; + width:100%; + text-align:center; + top:-6px; + font-size:83%; + color:#ccc; + } + dl.blog-index dd{ + color:#CC66CC; + font-size:300%; + } + .blog-info .more-info .rating { + font-family:Arial; + font-weight: bold; + padding: 0 .2em; + color:#fff; + background-color: #d479b3; + } + .blog-about-text{ + position:absolute; + padding:27px 27px 30px; + width:550px; + top:200px; + left:47%; + z-index:99; + background:#fff; + border: 1px solid #999; + + } + #js-blog_info.tipBox-too-mach-right{ + margin-left:-575px; + } + .blog-about-text + .close-blog-info{ + position:absolute; + top:10px; + left:10px; + text-decoration:none; + color:#999; + } + .blog-about-text + .close-blog-info:hover{ + color:#ccc; + } + #js-blog_info.tipBox-too-mach-right + .close-blog-info{ + right:10px; + left:auto; + } + .blog-about-text h2{ + color:#333; + font-size:216%; + margin:0 0 13px; + } + .blog-about-text + .blog-about-text-content{ + max-height:440px; + overflow-y:auto; + } + .blog-about-text #js-admins_moderators_holder #admins img, + .blog-about-text #js-admins_moderators_holder #coauthors img, + .blog-about-text #js-admins_moderators_holder span{ + display:none !important; + } + .blog-about-text #js-admins_moderators_holder h3{ + clear:left; + font-size:100%; + float:left; + color:#000; + text-transform:lowercase; + margin-bottom:5px; + margin-right:5px; + } + .blog-about-text #js-admins_moderators_holder #admins, + .blog-about-text #js-admins_moderators_holder #coauthors, + .blog-about-text #js-admins_moderators_holder p{ + float:left; + } + .blog-about-text #js-admins_moderators_holder p{ + margin:0; + color:#ccc; + } + #js-admins_moderators_holder #admins *, #js-admins_moderators_holder #coauthors *{ + display:inline; + padding:0; + margin:0; + } + .blog-about-text .blog-text-descr{ + clear:left; + padding-top:6px; + } + #cool-numbers { + margin: -3.6em 0 2.5em 13.33em; + } + + .blog-counts{ + clear:left; + font-size:133%; + color:#999 ; + margin-bottom:10px; + } + .blog-info #description { + font-size: 1.33em; /*16/12*/ + float: left; + width: 95%; + padding: 0 10px; + background: #dfe9e8 url(/i/bg-description-top-left.gif) no-repeat 0 0; + } + + .blog-info #description #inner { + padding: 20px 10px; + } + .blog-info #description p { + width: 100%; + clear: both; + margin: 0 0 .83em 0; + padding: 0; + } +/* Найти в поисковых системах: Яндекс, Google, bing. */ +.alter_search{padding-left:35px;} + + /* List of blog admins and readers */ +.blogs-search{ + padding-left:35px; +} +.blogs-search +.popular-blogs{ + + margin-left:-2%; +} +.bloglist-suggest-form { font-size: 22px; padding:0; } + #bloglist_suggest_form_input { height: 28px; float: left; width: 99%; } +.blogs-search-side +.side-rubrikator{ + padding:62px 0 17px 37px; + } +.side-rubrikator { margin: 0; line-height:200%;font-size:133%; font-family:Arial,sans-serif;} + .side-rubrikator li { margin: 0; padding: 1px 0; margin:0 6px 0 0;white-space: nowrap;color:#ccc; } + .side-rubrikator li.active{ } + .side-rubrikator li a{padding:0 4px;margin-left:-4px;} + .side-rubrikator li .side-rubrikator-counter{color:#999;} + .side-rubrikator li.active a { color: #333; text-decoration: none; background: #C5DAE5; } + + /* Приглашение в блог */ + + /*(Таблица юзеров, их предпочтений, плюс кнопки Пригласить как читателя, как писателя etc.)*/ + + /*Визуал: хабраникнейм и буллет юзера слева от неё.*/ +.corplist-suggest-form { font-size: 22px; padding:20px 0 0 35px;} + .corplist-suggest-form #corplist_suggest_form_input{height: 28px; float: left; width: 99%;} +.invitation .intro { + clear: both; + margin-top: 20px; +} +.h-user { + padding: 0 0 0 15px; + background: url(/i/bg-user2.gif) 0 90% no-repeat; + color:#999; +} + +.td-h-user { + width: 70%; + font-family: Verdana, Arial, Helvetica, sans-serif; + vertical-align: top; + padding: 10px 0; +} + .td-h-user .avatar { + margin-left: 10px; + margin-right: 10px; + border: 1px solid #ddd; + float: left; + } +.live .td-h-user dl { + margin: 0 0 0 58px; + padding-right: 10px; +} + .td-h-user dl a { + color: #666; + } + .td-h-user dl dd { + font: .83em Verdana, sans-serif; + color: #666; + } + + .td-interests { + display: inline; + } + .td-interests li { + display: inline; + font-weight: normal; + } + .candidates .controls { + padding-right: 10px; + vertical-align: middle; + text-align: center; + } + .candidates .controls li { + margin: 12px 0; + } + .candidates .controls a { + padding: 10px 0 10px 25px; + background: url(/i/corporate_icon.gif) 0 65% no-repeat; + } +.dailybest h3 sup { + font-size: 65%; +} + + + + + + /* Top section, filtrator */ + + #filtrator { + margin: 3.33em 0; + padding-left:35px; + } + #filtrator select { + font-size: 1.67em; /*20/12*/ + color: #333; + width: 100%; + } + + /* // Top section, filtrator */ + + /* Поиск по тегам */ + + .tag-search { + margin: 0 0 14px; + padding-left:35px; + width: 100%; + font: 26px/36px Verdana, sans-serif; + color: #996; + } + /* + .tag-search a {height: 36px; float:left; width: 20px;} + .tag-search a img {margin: 11px 0 0 0;} + */ + .tag-search .bullet {margin: 11px 0 0 0; float:left;} + .tag-search div.rarr {height: 36px; padding-left: 10px; float:left;} + .tag-search .inpt-text { + margin: 0 10px; + padding-left:6px; + float: left; + color: #996; + border: 1px solid #996; + } + .tag-search input.inpt-text {width: 50%;} + + + + /* Поиск habr.ru/search/ */ +.people-section .corps-list{ + padding-top:0; +} +.bloglist .searched-item, +.corps-list .searched-item{ + background:#F0E9AA; +} +.bloglist a .searched-item, +.corps-list a .searched-item{ + text-decoration:inherit; +} +.search-header { + margin: 35px 0 20px 0; +} + .search-header h1 { + margin: 0; + font: 2em/100% Verdana, sans-serif; + color: #69c; + } + .search-header form { + margin: 6px 0 0 20px; + float: left; + } + .search-header p { + float: left; + clear: both; + width: 100%; + margin: 20px 0 0 0; + } + + .searched-item { + background: #fffacd;/* Выделение поискового запроса в тексте выдачи*/ + } + + .search-results { + margin-top:30px; + overflow: hidden; + } + .search-results + .search-content-pad{ + padding-left:35px; + } + .search-results + .items{ + padding-left:35px; + } + /*Меню фильтрации результатов поиска*/ + .search-results-bar {font-size: 1em; margin-bottom: 30px;} + .search-results-bar h2, .search-results-bar #sub-nav { + display: inline; + float: none; + } + .search-results-bar h2 {margin-right: 10px;} + + /*Выдача найденных комментариев*/ + .search .items { + margin: 30px 0 0 0; + } + + /* Выдача найденных компаний */ + + .searched-companies {margin-top: 40px; clear: both;} + .searched-companies .item {margin-bottom: 20px;} + .searched-companies .summary { + margin: -20px 0 0 40px; + } + .searched-companies .summary .name a { + font: 2em/110% Verdana, sans-serif;/*24/12*/ + letter-spacing: -1px; + color: #aeaeae; + } + .searched-companies .summary .ceo, + .searched-companies .summary .url { + margin: 5px 0; + } + + + .search .tag-search { + margin: 60px 0; + } + .search .tag-search .inpt-text { + width: 100%; margin: auto 0; + } + .search .tag-search .inpt-btn { + margin: 20px 0; + background: #996; + color: #fff; + } + +.live-block-page, +.mail-page-content{ + padding-left:35px; +} +.user_profile_edit_holder{ + padding-left:35px; +} +.profile #main-content .userinfo, +.company #main-content .userinfo { + width:auto; + padding-left:35px; +} +.profile #main-content .user-recommend-user{padding-left:35px;} +.profile #main-content .items, +.profile #main-content .live{ + margin-left:35px !important; + width:auto; +} +.site-settings{ + padding-left:35px; +} +#main-content +.hentry +.summary{ + + margin-left:35px !important; +} +.profile #main-content .items +.entry-title , +.profile #main-content .items +.content, +.profile #main-content .items +.entry-info{ + + padding-left:0; + margin-left:0; +} +.profile #main-content .items +.tags{ + margin-left:0; +} +.i-am-your-father-luke{ + padding-left:35px !important; +} +#js-topic-form-title{ + padding-left:35px; +} +#js-topic-form-swither{ + padding-left:35px; +} +#js-topic-form-holder,.add-new-blog #main-content{ + padding-left:35px; +} +.job-content, +.fans-content, +.d-block{ + padding-left:35px; +} +#comments{ + padding-left:35px; +} +/* Пост в блоге */ + +div.hentry { + width: 100%; + float:left; + clear:both; + margin: 0 0 40px; +} + div.hentry + .page-menu, + .message-page-menu{ + margin-bottom:30px; + } +.message-page-menu{ + padding-left:35px; + width:auto; + margin-bottom:0; +} +.message-page-menu li{ + width:50%; +} +h2.single-entry-title{ + padding-left:35px; +} +h2.inbox-message-header{ + color:#000 !important; + margin-top:27px; + margin-bottom:7px !important; +} +h2.entry-title { + font: 2.167em/118% normal Verdana, Tahoma, sans-serif; /*26px*/ + margin-bottom: 20px; + color: #767676; + padding-left:35px; + padding-right:30px; +} + h2.entry-title span{ + color:#333; + } + +.post h2.entry-title { + clear: both; + font: 2.833em/110% Verdana, sans-serif; /*34/26*/ /*Размер заголовка в посте раздела Персональные*/ +} +.post .personal h2.entry-title, +.post .podcast h2.entry-title { + color: #c99; /*Цвет заголовка в посте раздела Персональные*/ +} +.post .translation h2.entry-title { + color: #c99; /*Ц. з. в переводном посте раздела Персональные*/ +} +.post .corporative h2.entry-title { + color: #8277a3; /*Ц. з. в посте раздела Корпоративные*/ +} + +.post .link h2.entry-title { + color: #749f79; /*Ц. з. в переводном посте раздела Персональные*/ + padding-left: 28px; +} + + + + + .entry-title a { + color: #666; + } + .entry-title a:hover{ + color:#A3A3A3; + } + .entry-title a.blog { + color: #6da3bd; + } + .entry-title a.blog:hover{ + color:#4D7285; + } + .entry-title .profiled_blog{cursor: help;padding:0 8px;height:16px;margin-left:5px;font-size:19px;background: transparent url(/i/icon_asterisk_16.png) left top no-repeat;} + + .corporative .entry-title a.blog { + color: #8277a3; + } + .corporative .entry-title a.blog:hover{ + color:#ABA4C2; + } + + .entry-title .remove { + margin: 0 0 0 10px; /*Удаление из избранного*/ + } + + + /* Стили для топика-события */ + + .vevent .entry-title {margin-bottom: 10px;} + /* + .vevent .entry-title a {color:#666; text-decoration:none;} + .entry-title a.event-name {padding: 0 .3em .1em .3em; color:#f0f0e7 !important; background: #8bb0ad; } + */ + .vevent .summary { + margin-bottom: 20px; + padding: .1em 10px; + font: 14px/140% Arial,sans-serif; + color:#666; + background:#f0f0e7; + } + + + + + /* Стили для основного контента внтури любой записи блога */ + .comments { + position:relative; + } + .hentry .content { + font: 1.083em/1.54em Verdana, sans-serif;/*13px*/ + margin-left: 35px; + margin-bottom:0.83em; + overflow:hidden; + } + + .hentry .content, + .tags, + .entry-info { + margin-left: 35px; + } + .comment_holder { + float:left; + width:100%; + } + + .hentry .hentry { + margin-left:20px; + } + + .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry { + margin-left:0; + } + .hentry .reply_form .js-field-holder, + .hentry .reply_form .help_holder, + .hentry .reply_form .comment-help{ + padding-left: 20px; + } + + .msg-meta { + position:relative; + } +li:hover > .msg-meta > .folding-dot-holder{ + display:block; +} + .msg-meta + .folding-dot-holder{ + display:none; + position:absolute; + top:0; + left:0; + width:1px; + height:1px; + } + + .msg-meta + .folding-dot{ + width:500px; + height:5px; + background:red; + right:0px; + top:11px; + position:absolute; + background: url(/i/bg-folding-dot-light.png) repeat-x 100% 0; + } + + .new-reply { + background: #E8E8FF; + } + .new-reply-old { + background: #F3F3FF; + } + .my-reply { + background: #FDF5E6; + } + + .hentry .content p, + .profile .summary p, .profile .summary img, + .user-flow .summary p, .user-flow .summary img + { + margin: 0 0 .83em 0; + } + .hentry .content img[align=left] { + margin-right: 30px; + margin-top: 5px; + margin-bottom: 5px; + } + .hentry .content img[align=right] { + margin-left: 30px; + margin-top: 5px; + margin-bottom: 5px; + } + .hentry .content img { + max-width: 100%; + vertical-align:bottom; + } + .hentry .content pre { + white-space: pre-wrap; + white-space: -o-pre-wrap; + + } + .hentry .content table { + clear: both; + width: 100%; + margin: 1.5em 0; + border: 1px solid #ccc; + } + .hentry .content table caption { + text-align: left; + text-indent: 1em; + } + .hentry .content table td, .hentry .content table th { + padding: .3em; + border: 1px solid #ccc; + } + .hentry .content ol, .hentry .content ul, + .profile .summary ul, .profile .summary ol, + .user-flow .summary ul, .user-flow .summary ol, + .info-page ul { + margin: 1.5em 1em 1.5em 3em; + padding: 0; + } + .hentry .content ol, + .profile .summary ol, + .user-flow .summary ol { + list-style: decimal; + } + .hentry .content ul, + .profile .summary ul, + .user-flow .summary ul, + .info-page ul { + margin-left: 2.65em; + list-style: disc; + } + + .habraplayer { + margin-bottom: 10px; + } + +.info-page { padding-left: 35px; } + + +ul#xsidebar { + width:32px; + float:right; + position:fixed; + top:43%; + right:0; + background:#999999; +} +ul#xsidebar.left { + left:0; +} +ul#xsidebar .mover { + padding: 0px; + text-align: center; +} +ul#xsidebar .mover a { + color: #dddddd; + text-decoration: none; +} + +ul#xsidebar li { + padding-top: 2px; + padding-bottom: 2px; + padding-left: 2px; +} + +/* Refresh comments button */ +ul#xsidebar #refresh-comments-button .new-messages { + text-align: center; +} +ul#xsidebar #refresh-comments-button a.button { + display: block; + height: 29px; + width: 28px; + background:url(/i/comments/bar/refresh.gif) no-repeat left top; +} +ul#xsidebar #refresh-comments-button a.button:hover { + background:url(/i/comments/bar/refresh.gif) no-repeat left bottom; +} +ul#xsidebar #refresh-comments-button a.button.loading { + background:url(/i/comments/bar/refresh-loading.gif) no-repeat left top; +} +ul#xsidebar #refresh-comments-button a.button.loading:hover { + background:url(/i/comments/bar/refresh-loading.gif) no-repeat left top; +} +ul#xsidebar #refresh-comments-button .divider { + border-top: solid 1px #5c5c5c; + border-bottom: solid 1px #dddddd; + width: 28px; + height: 0px; + margin-top: 1px; +} +ul#xsidebar #refresh-comments-button .new-messages { + text-align: center; +} +ul#xsidebar #refresh-comments-button .new-messages a.count { + color: white; + text-decoration: none; + font-weight: normal; + display: block; + padding: 4px 0px; +} +ul#xsidebar #refresh-comments-button .new-messages a.count:hover { + color: #ffff55; +} + +.tags { + padding: .2em 0 .1em 18px; + clear:both; + list-style: none; + background: #fff url(/i/bg-tags2.gif) no-repeat 0 50%; +} + .tags li { + display: inline; + } + .tags li a { + font-size: .83em; /*10px*/ + } + .tags li a{ + color: #666; + } + .tags li a:hover { + color:#A3A3A3; + } + +.entry-info { + font: .75em/2em Arial, sans-serif; /*9px/16px*/ + margin-top: 2.22em; /*20*/ + float:left; + clear: both; + padding: 0 0 5px; + border: 1px solid #e5e5e5; + z-index:20; + position:relative; +} + + /* Rounded corners */ + + /*.corners { + clear:both; + height:5px; + }*/ + + .corner { + width:5px; + height:5px; + overflow:hidden; + position:absolute; + font-size:0; + } + + .tl { + float:left; + left:-1px; + top:-1px; + background:url(/i/icos/entry-info-t-l.gif) no-repeat 0 0; + } + .tr { + float:left; + right:-1px; + top:-1px; + background:url(/i/icos/entry-info-t-r.gif) no-repeat 0 0; + } + .bl { + float:left; + left:-1px; + bottom:-1px; + background:url(/i/icos/entry-info-b-l.gif) no-repeat 0 0; + } + .br { + float:left; + right:-1px; + bottom:-1px; + background:url(/i/icos/entry-info-b-r.gif) no-repeat 0 0; + } + + .entry-info-wrap {clear:both;padding-left:0.56em;} + .entry-info-wrap .novote {margin-left:5px;} + + + + .entry-info .entry-info-wrap div { + padding: 5px .56em 0; + margin-right: 12px; + float: left; + } + .entry-info div.voting { + padding:0 0 0 3px; + margin-left:-0.56em; + } + .entry-info div.voting div {margin-right: 0;} + .entry-info div.voting .mark { + padding:5px .1em 0; + font-size: 1.3333em; /*12/9*/ + font-weight: bold; + color: #a9a9a9; + } + .entry-info div.voting .mark a{ + color:#6DA3BD; + } + .entry-info div.voting .mark a:hover{ + color:#4D7285; + } + + body.guest .entry-info div.voting .mark a{ + color:#999; + cursor:default; + } + .entry-info div.positive .mark { + color: #390; + } + .entry-info div.negative .mark { + color: #c00; + } + .entry-info div.voting a.vote_plus, .entry-info div.voting span.vote_plus, + .entry-info div.voting a.vote_minus, .entry-info div.voting span.vote_minus { + margin:1px 3px 0; + float:left; + width:11px; + height:15px; + font-size:0; + } + .entry-info div.voting div { + height: 12px; + border: none; + } + .entry-info div.voting .vote_plus { + background:url(/i/icos/icons_vote_posts.gif) no-repeat left bottom; + } + .entry-info div.voting .vote_minus { + background:url(/i/icos/icons_vote_posts.gif) no-repeat -11px bottom; + padding-right: 0 !important; + } + body.guest .entry-info div.voting .vote_plus, + .entry-info div.voting.expired .vote_plus, + .entry-info div.voting.mine .vote_plus{ + background:url(/i/icos/icons_vote_posts.gif) no-repeat -22px top; + cursor:default; + } + body.guest .entry-info div.voting .vote_minus, + .entry-info div.voting.expired .vote_minus, + .entry-info div.voting.mine .vote_minus { + background:url(/i/icos/icons_vote_posts.gif) no-repeat -22px bottom; + cursor:default; + } + .entry-info div.voting.mine a, + .entry-info div.voting.no_auth a, + .entry-info div.voting.voted a { + cursor: default; + } + .cannot-vote { + display: none; + } + .entry-info div.voting.mine .cannot-vote, + .entry-info div.voting.no_auth .cannot-vote, + .entry-info div.voting.voted .cannot-vote, + .entry-info div.voting.expired .cannot-vote { + display: block; + } + .entry-info div.voting.mine .can-vote, + .entry-info div.voting.no_auth .can-vote, + .entry-info div.voting.voted .can-vote, + .entry-info div.voting.expired .can-vote { + display: none; + } + .entry-info div.voting.voted_plus a.vote_plus, .entry-info div.voting.voted_plus span.vote_plus { + background:url(/i/icos/icons_vote_posts.gif) no-repeat left top !important; + } + .entry-info div.voting.voted_minus a.vote_minus, .entry-info div.voting.voted_minus span.vote_minus { + background:url(/i/icos/icons_vote_posts.gif) no-repeat -11px top !important; + } + .entry-info div a { + text-decoration: none; + font-weight: 700; + } + + /* Fav star */ + ul.hentry .fav_added a, + ul.hentry .to-favs a, + .entry-info .to-favs a, + .entry-info .fav_added a { + background: url(data:image/gif;base64,R0lGODlhDwAaAOZ/APr7/LnO3bXL2uK7Vvz58NLu9friZ/z69arD0tXl7eHr8uL1+tLv89v09921Uf3phfzjcMra5dvl68nX4ef1+fz589rt9e79/+v7/Ka+zs7h6tny9d3EmqjAz+rQc+ft8d/1+PTjttSycvb///f6+/vx0rzR3vL2+P/////4rub5+/3qjf/zlu/0+fH5/MmdQtLh7PfYWP3oe83a4u/jzdi9ke3Ma8aaSbvN2r/T4PXdfunXs+LGivHWh/jbWuT4+a7K2dy2X8qbO8PW4sTc6fjaX/bUU/fUXOr6+9+5Y9bx89u1V//ukOLz9v/2usfV3uTAZ/z369GmQv/yr9yyRNDr9c3r87+RPP/4pPjgbPHWfOfCW8ygQ/zsl+jMc+jKeN719vLZgPjdXPP//7nL19yzUP/wjdCtbvzmcuXIb///x9Ho8vjkou/WgJy3x/HUafznd/nlh9WmPLXQ3fv48t67XdDj7P3pgPnx4Mrd6fjcWtewW/fw3/z46+LCcwAAACH5BAEAAH8ALAAAAAAPABoAAAf/gH+Cgy0KLYOIiTAuMImOJBEoESSOiAoJIwkKjkMmAZ8UF00CpAI5gjkuIxhIKio/CyAYFAGCJwEJYz9gDRsNFxoCJ4MAESYgSgwMGwETAIkACAwFDQVWGc+JEnMFC3YLVUASjjhrFgg4CBZEZI4dGh0ffx8ZeW6OMzPZfwATT5WCSrApARBRDyc9CgrqY0ONjSgKQ4RJoSVEIgJfBmgcsIJFHAcgy/ghQADKlBRMVjy4IwMOBDNdghD4gydJGywyIBjYycLDHj6DDvCog0aMHh9ZlvCokKiClBg+IMQwIoSOox1Uijzw8OCInB2ORLzRwUXECx1bzghCMeiFlxs0EP7QuJHmiiMOHA4ErVFjUCAAOw==) no-repeat; + } + + .entry-info .to-favs, + .entry-info .fav_added { padding-top: 3px; margin-right: 0 !important; padding-right: 0 !important; } + .entry-info .to-favs a, + .entry-info .fav_added a { + display: block; + margin-top:2px; + width:15px; + height:13px; + font-size:0; + background-position: left top; + } + + .entry-info .to-favs a:hover, + .entry-info .fav_added a { + background-position: left bottom; + } + .entry-info .published{ + margin-left:-2px; + } + .entry-info .published a, .entry-info .mark-as-spam a {color:#369;} + .entry-info .published a { + display: block; + padding-left: 17px; + background: url(/i/bg-published2.gif) no-repeat 0 50%; + } + .entry-info .published a:hover { + background-image: url(/i/bg-published2.gif); + } + + + .entry-info .vcard a { + color:#CF0000; + padding:2px 0 3px; + background:transparent; + } + .entry-info .vcard.full a{ + padding-left:17px; + background: url(/i/bg-user2.gif) no-repeat 0 50%; + } + + .entry-info div.author { + } + .entry-info div.vote-for-user{ + padding: 8px 0px 3px; + } + .entry-info div.vote-for-user a, + .entry-info div.vote-for-user span{ + background:#74C262; + color:#fff; + display:block; + line-height:1em; + font-size:1em; + } + .entry-info div.vote-for-user a{ + width:11px; + height:12px; + background:#74C262 url(/i/bg-user-vote-up.gif) no-repeat 50% 2px; + } + .entry-info div.vote-for-user a:hover{ + background-color:#96D189; + background-position:50% -8px; + } + .entry-info div.vote-for-user span{ + padding:1px + } + .entry-info div.comments {margin-right: 5px;} + .entry-info a { + color:#CF0000; + } + .entry-info a:hover { + color: #F17D7D; + } + .entry-info1 .vcard a:visited{ + color:#F17D7D; + } + .entry-info1 .vcard a:visited:hover{ + color:#CF0000; + } + .entry-info .comments a { + display: block; + margin-top:-1px; + padding: 1px 0 0px 17px; + background: url(/i/bg-comments2.gif) 0 70% no-repeat; + } + .entry-info .comments a .new { + color: #390; + } + + .entry-info .comments a:hover .new { + color: #85C266; + } + .entry-info original-author{ + max-width:100px; + } + .entry-info .original-author a, + .entry-info .downloaded a, + .entry-info .link a + { + padding-left: 8px; + background: url(/i/bg-author-link.gif) no-repeat 0 .08em; + } + + .entry-info .twitter { margin-right: -2px !important; } + .entry-info .twitter a { display: -moz-inline-stack; display: inline-block; background: url(/i/bg-icon-twitter.gif) 0 0 no-repeat; width: 14px; height: 16px; position: relative; top: 1px; } + .entry-info .facebook { opacity: 0.5; } + .entry-info .facebook:hover { opacity: 1; } + .entry-info .facebook a { display: -moz-inline-stack; display: inline-block; background: url(/i/bg-icon-facebook.png) 0 0 no-repeat; width: 14px; height: 16px; position: relative; top: 1px; } + + /** icons for topics **/ + .translation .topic,.podcast .topic,.link .topic { + padding-left:29px; + background: no-repeat 0 6px; + } + .translation .topic{ + background-image: url(/i/translation_icon2.gif); + } + .podcast .topic{ + background-image: url(/i/podcast_icon2.gif); + } + .link .topic{ + background-image: url(/i/link_icon2.gif); + } + + .corporative .blog { + background: #fff no-repeat 0 60% ; + } + + .podcast .topic, + .post .podcast h2.entry-title { +/* background: #fff url(/i/podcast_icon2.gif) 0 60% no-repeat;*/ + } + + .podcast .topic{ + background-image: url(/i/podcast_icon2.gif); + } + .podcast .details { + font: .5em/1.92em Arial,sans-serif; + color:#767676; + white-space:nowrap; + letter-spacing:-1px; + } + /* .personal .topic { + color: #c99; + } */ + + .link .topic, + .post .link h2.entry-title { + color: #749f79; + /*background: #fff url(/i/link_icon2.gif) 0 60% no-repeat;*/ + } + .link .topic:hover, + .post .link h2.entry-title:hover{ + color:#84B18A !important; + } + .link .topic:visited, + .post .link h2.entry-title:visited{ + color:#A3C0A7 !important; + } + .link .topic:visited:hover, + .post .link h2.entry-title:visited:hover{ + color:#84B18A !important; + } + +/*Опросы*/ +.poll {margin-top:2em;} +.poll:first-child {margin-top:0em;} +.poll dl { + float: left; + clear: both; + width: 100%; + border: .5em solid #fff;/*<- just a little trick*/ +} + + .poll dl dt { + float: left; + width: 12%; + font-size: 97.6%; + text-align: right; + margin-left: -20px; + color: #ccc; + } + .poll dl dt strong { + color:#404040; + text-align: right; + } + .poll dl dd { + width: 87%; + float: left; + margin-left: 20px; + } + +.poll .total { + font-size: 97.6%; + clear: both; + margin-top: 1em; + color: #999; +} + +.poll fieldset { + +} + .poll table.answer-container { + margin: 0; + margin-bottom: 10px; + border: none; + } + .poll .answer-container td.input, .poll .answer-container td.label { + border: none; + padding: 5px 0; + } + .poll .answer-container td.input { + width: 25px; + } + .poll .answer-container input { + padding: 5px 0; + } + + /*обёртка для блока с вариантами ответа*/ + .poll-item { + float: left; + clear:both; + width: 100%; + margin-bottom: 20px; + } + + + .poll-item h3 { + margin-bottom: 5px; + color: #666; + } + + .poll-item dl { + margin: 0; + padding:0; + } + .poll-item dd div { + height: 5px; + background: #dadacd; + } + .poll-item dd div.winner { + background: #7fa0b0; + } + +.sphinx-baner{ + line-height:2em; + margin-bottom:33px; +} +/* Внутренний голос */ + +.i-am-your-father-luke { + display: block; + clear:both; + padding:.6em 0; + border: none; + font: normal 40px/110% Arial,sans-serif; + color: #cc9; + letter-spacing: -2px; + } + +/* НЛО прилетело и написало */ + +.ufo-was-here { + margin-left:35px; + margin-bottom: 20px; + font: normal 16px/110% Verdana,sans-serif; + color:#666; + } + + +/*Класс для подзамочных записей*/ + +.locked { + padding-left: 28px; + background: #fff url(/i/lock.gif) no-repeat 5px 65%; +} + +.double_locked { + padding-left: 43px; + background: #fff url(/i/double-lock.gif) no-repeat 5px 60%; +} + + .hentry .edit img, .user-vacancies .edit img, .profile-title .edit img, + .blog-title .edit img { + border: 1px solid #ccc; + margin-bottom: -2px; + } + .profile-title .edit img {margin-bottom: 0; } + + +/*Листалка по страницам*/ + + /* Вперёд-назад */ + +.page-nav { + overflow:hidden; + clear: both; + margin: 1.88em 0 .63em 0; +} + +.company .live .page-nav { + margin: 0; + padding: .83em 1.67em; + width: 80%; +} + +.next-prev { + font:2em/100% Tahoma, sans-serif; + color:#000; +} + .next-prev li { + display: inline; + padding-right: .3em; + } + + + /* Список предыдущих страниц */ + +#nav-pages { + font: 1.2em/100% arial; + padding: 0 1em 2em 0; + margin: 1em 0; + list-style: none; + clear: both; + } + + #nav-pages li { + float: left; + } + + #nav-pages a, #nav-pages em { + margin:0 0.2em 0 0.1em; + padding: .3em .4em; + display: block; + } + #nav-pages a:hover{ + background:#c5dae5; + } + + #nav-pages em { + background:#7A9BAC; + font-weight: 400; + font-style: normal; + color: #fff; + } +.blogs +#main-content +.page-nav, +.company +#main-content +.page-nav, +.profile +#main-content +.page-nav, +.users-list-container{ + padding-left:35px; +} + /*Страница со всеми тегами*/ + +.all-tags-page #main-content { + width: 100%; + margin-bottom:120px; +} + .all-tags-page #main-content h2 { + font: 26px/110% Verdana, sans-serif; + color: #999; + margin-bottom: 10px; + } + #cloud-for-blogs, #cloud-for-comps {width: 49%;} + #cloud-for-blogs { + float: left; + } + #cloud-for-comps { + float: right; + } + + + + /*Страница со всеми тегами*/ + + +/*// Main content*/ + + + + + + + + + +/* Sidebar. Right column */ + + .banner { + margin: 0 auto 20px auto; + width: 240px; + height: 400px; + clear:both; + } + + .context-note {line-height:150%;} + + + + + /* Live section */ + + + +.live { + font-size:1em; /*12px*/ + font-family:tahoma,arial; + float: left; + width: 100%; + margin: 0 0 20px; + background: #f0f0e7 url(data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIFjA8QqVwAOw==) no-repeat 0 0; +} + .live p { + margin-left: 20px; + margin-right: 20px; + } + .live dl { + margin: 0 1.67em .42em 1.67em; + } + + /* Похожие публикации. Переписать эту лажу. Наложение со стилями из forms.css */ + .live .similar-posts div {margin: 0 0 20px 0;} + .profile .live .similar-posts div {margin: 0 20px 20px 20px;} + .profile .live .similar-posts div dl {margin: 0 0 .42em 0;} + .profile .live .similar-posts div dl dt a {padding:0; background-image:none;} + + + .live h3, + #top-flooders h3 { + font-size: 2em; /*28px*/ + font-weight: normal; + line-height: 1.1em; + letter-spacing: -1px; + text-decoration: none; + margin:0 0 .71em .71em; + padding-top: .54em; + color: #999; + background: url(data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIGjANgqRwFADs=) no-repeat top right; + } + + .live dt, + .live dd, + .live dd dl, + .live dl dd dl dt { + margin: 0; + display: inline; + color:#999; + } + .live dl.air-comment{ + padding:2px 0; + margin:0 1.67em 0.42em !important; + } + + .live span.who a, .live .where, .live .topic { + margin-bottom: 1ex; + line-height: 1.35em; + } + .live .who { + padding-left: 17px; + background: url(/i/bg-user2.gif) 1px 50% no-repeat; + display: inline; + } + .live .who a, .live .where { + color:#999; + } + .live .topic { + color:#666; + } + + /* Live' links behaviour */ + + + + .live .total { + color: #C00; + } + .live .all { + position: relative; + top: 0; + right: 0; + margin: 0 .83em .83em 0; + text-align: right; + color:#999; + } + /*Rounded corners*/ + + .live .bg-top-r { + background: url(data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIGjANgqRwFADs=) no-repeat top right; + float: left; + width: 100%; + } + .live .bg-bott-l { + background: url(data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIGhGOAGt0FADs=) no-repeat bottom right; + float: left; + width: 100%; + } + .live .bg-bott-r { + float: left; + width: 100%; + background: url(data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIFDG6YwVEAOw==) no-repeat bottom left; + } + .live .bg-top-r,.profile .live div.bg-top-r{ + margin-left:0 !important; + background: url(data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIGjANgqRwFADs=) no-repeat top right; + } + div.live .bg-top-r, div.live .bg-top-r div{ + margin-bottom:0 !important; + } + /* // Live section */ + + + /* Best Writers */ + .best_writers{} + .best_writers ul{margin: 0 1.67em 1.67em} + .best_writers ul li{overflow:hidden;margin-bottom:10px;} + .best_writers ul li:last-child{margin-bottom:0px;} + .best_writers ul li .avatar{float:left;margin-right:10px;display:block;border:1px solid #999;} + .best_writers ul li .login{float:left;display:block;margin-right:10px;margin-top:3px;} + .best_writers ul li .name{float:left;display:block;font-size:91%;color:#666666;margin-top:5px;} + + + /* Tag cloud */ + +.tag-cloud { + float: left; + width: 90%; + padding: 0px; + margin-top: 10px; + margin-bottom: 10px; + margin-left: 5%; + margin-right: 5%; + text-align: center; +} + +.profile .tag-cloud { + width: 98%; + float:none; + margin:0 auto; + } + + .tag-cloud ul { + white-space: normal; + } + .tag-cloud ul, + .tag-cloud ul li { + display: inline; + } + .tag-cloud a { + font-size: .83em; + color: #369; + text-decoration: none; + line-height:1.4em; + } + .tag-cloud a:hover { + color: #85A3C2; + } + +/* .tag-cloud a {white-space:nowrap;}*/ + .tag-cloud a.w1 { font-size: 80%; } + .tag-cloud a.w2 { font-size: 100%; } + .tag-cloud a.w3 { font-size: 120%; } + .tag-cloud a.w4 { font-size: 140%; } + .tag-cloud a.w5 { font-size: 160%; } + .tag-cloud a.w6 { font-size: 180%; } + .tag-cloud a.w7 { font-size: 200%; } + .tag-cloud a.w8 { font-size: 220%; } + .tag-cloud a.w9 { font-size: 240%; } + .tag-cloud a.w10 { font-size: 260%; } + + + + + /* // Tag cloud */ + + /* Ratings (companies, blogs) */ + + +.rating table { + font-size: 1.33em; /*16px*/ + width: 90%; + clear: both; + margin:0 0 0.71em 1.2em; + border:none; + border-collapse: collapse; +} + .rating table td { + font-family: Arial, sans-serif; + vertical-align: middle; + padding: .3em 0; + } +.rating table th { + font-size: .75em; /*12px*/ + font-weight: normal; + padding-bottom: .5em; + letter-spacing: -1px; + color: #999; +} +.rating table td { + /*padding-left: 5px;*/ +} + .rating .title a { + font: bold .94em/1.13em 'Lucida Grande', Verdana, Sans-Serif; + color:#666; + } + .rating .title a:hover{ + color:#A3A3A3; + } + .rating .karma-value { + font-size:.94em; + font-family:arial; + text-align: center; + color:#6c6; + font-weight:bold; + } + .rating .value { + text-align: center; + } + .rating .value span { + font: normal normal bold .88em Arial, sans-serif; + padding: .1em .5em; + color: #CC66CC; + } + div.companies .value span{ + color:#CC66CC; + } + + .company .rating .title a { + font-size: 1.25em; /*20/16*/ + font-weight: normal; + } + .company .rating .title a.new-feedback { + font-size: 11px; + } + .company .first { + margin-top: 0; + background-image: none; + } + + + + + /* // Ratings (companies, blogs) */ + + + /* Jobs */ + +.jobs { + width: 100%; +} + .jobs dl dt a { + font: 1.17em Arial, sans-serif; /*12/14*/ + color: #663; + + } + .jobs dl dt a:hover{ + color:#A3A350; + } + .jobs dl dt a:visited{ + color:#BEBE84; + } + .jobs dl dt a:visited:hover{ + color:#A3A350; + } + .jobs dl dd { + font: bold 1.33em/1.4em Arial, sans-serif; /*12/16*/ + padding: 0 .2em; + display:inline; + white-space: nowrap; + color: #fff; + background: #99cccc; + } + .live .job_item dt, + .live .job_item dd { + display: inline; + } + + /*// Jobs*/ + + /*Top flooders*/ + + #top-flooders { + font-size: .83em; /*10/16*/ + clear: both; + width: 100%; + margin: 10px 10px 10px 20px; + } + + #top-flooders h3 { + font-size: 280%; + margin-left: 0; + } + + #top-flooders dl, #top-flooders dl dt, #top-flooders dl dd { + margin: 0; + padding: 0; + } + + #top-flooders dl { + margin-bottom: 15px; + } + + #top-flooders dl .flooder { + margin: -2.5em 10px 1em 3em; + } + #top-flooders dl dd dl dt a { + color:#999; + } + #top-flooders dl dd dl dt a:hover{ + color:#333; + } + .flooder dd a { + line-height: 140%; + color:#f60; + } + + /* // Top flooders */ + + + /* Calendar */ + + .calendar-table table { + font-size: .92em; /*11/12*/ + font-family: Arial, Helvetica, sans-serif; + margin: 5px 0; + text-align: center; + } + .calendar-table th { + font-weight: normal; + } + .calendar-table .date { + font-size: 160%; + /*font-weight: bold;*/ + color: #999; + } + .calendar-table .nav th, .calendar-table .nav td { + padding-bottom: 5px; + } + .calendar-table .nav a { + color: #909090; + font-weight: bold + } + /* // Calendar */ + + +/* // Sidebar. Right column*/ + + + + + + + /* Карма. Общие стили для таблиц */ + +.starr { + padding-right: 15px; + background: url(/i/starr.gif) right 70% no-repeat; +} +.rating-dyn { + font-size:.75em; + font-family:arial; + line-height: 110%; + text-align: center; +} +.up { + color:#33cc00; +} +.down { + color:#ff0033; +} + + +/*Прилепляем футер книзу, введя див-обёртку, охватывающую всё кроме подвала*/ + +#nonFooter {position: relative;min-height: 100%;} +* html #nonFooter {height: 100%;} /*для IE*/ +.footerest #wrapper {padding-bottom: 10em;} +.footerest #footer {position: relative;margin-top: -9em;} + + + + + + + + + + + + + +/* Comments */ + + + +/* Форма отправки коммента (или отзыва о компании) */ + +.add-comment { + float: none; + clear: both; + width: 100%; + margin-top: 10px; + padding-bottom:5px; +} + .add-comment h3 { + padding: 0 0 0 20px; + /*margin: 0 0 10px;*/ + margin: 0; + font: 1.67em Verdana, sans-serif; /*20/12*/ + letter-spacing: -1px; + color: #afa56a; + background: url(/i/add_comment.gif) 0 .5em no-repeat; + } + .add-comment > div, + .comment_holder .reply_form + { + position: relative; + } + .add-comment h3 a {color: #afa56a;text-decoration:none; border-bottom: 1px dashed #afa56a;} + .add-comment dl, + dl.comment-help { + float: left; + width: 100%; + font: .92em/100% Arial, sans-serif; /*11/12*/ + /*padding: 10px 0;*/ + } + dl.comment-help{ + padding-top:0; + } + .add-comment dt, + .add-comment dd, + dl.comment-help dt, + dl.comment-help dd { + float: left; + } + .add-comment dt img, + dl.comment-help img { + border: 1px solid #ddd; + } + .add-comment dd, + dl.comment-help dd { + margin: 5px 0 0 10px; + color: #999; + } + .add-comment dd .name, + dl.comment-help dd .name { + font: 1em Tahoma, sans-serif; + font-weight: 700; + color:#666; + } + .add-comment dd span , + dl.comment-help dd span{ + margin-left: 5px; + } + dl.comment-help dd span{ + position: absolute; + right: 0px; + top: -8px; + z-index: 3000; + } + .add-comment form { + clear: both; + width: 100%; + } + .reply_form form { + clear: both; + width: 99%; + margin-bottom: 10px; + } + + .add-comment input, + .reply_form input { + margin: 10px 0; + } + + .add-comment textarea, + .reply_form textarea { + border: 1px solid #c8d2df; + width: 99%; + resize: none; + outline:none; + } + .editor .add-comment textarea, + .editor .reply_form textarea{ + border: 0px solid #c8d2df; + } + .add-comment .post, + .reply_form .post { + margin-left: 7px; + } + .add-comment .js-field-error-msg { color:#ff0000; } + +/* // Форма отправки коммента (или отзыва о компании) */ + + +#comments { + clear: both; + overflow:hidden; +} + .comments-header-mail{ + display:none; + } + .comments-header-visible{ + display:block; + } + #comments h2.comments-header { + margin: 0px 0 20px; + padding-left: 23px; + font: normal 1.67em/105% Verdana, sans-serif; /*20/12*/ + letter-spacing: -1px; + color: #afa56a; + background: #fff url(/i/comments.gif) 0 90% no-repeat; + } + + ul.hentry {clear: both;width: auto;} + ul.hentry ul.author{ + overflow: hidden; + } + ul.hentry ul.author + li{ + vertical-align:baseline !important; + } + ul.hentry ul li{ + line-height:18px; + } + ul.hentry .avatar { + float: left; + width:24px; + height:24px; + list-style: none; + position:relative; + margin-right:10px; + } + + ul.hentry .avatar b{ + position:absolute; + top:0; + left:0; + height:24px; + width:24px; + background:url(/i/bg_avatar_mask_mini.gif) no-repeat 0 0; + } + ul.hentry .avatar img { + display:block; + height:24px; + width:24px; + } + + ul.hentry .fn, + ul.hentry .date, + ul.hentry .bookmark, + ul.hentry .to-favs, + ul.hentry .fav_added, + ul.hentry .up-to-parent, + ul.hentry .down-to-child, + ul.hentry .vote-for-user, + ul.hentry .single-tree{ + font-family:tahoma; + float: left; + color: #666; + padding-top: 5px; + margin-right: 10px; + } + ul.hentry .vote-for-user{ + padding-top: 8px; + margin-right:12px; + margin-left: -7px; + } + ul.hentry .vote-for-user a, + ul.hentry .vote-for-user span{ + background:#74C262; + color:#fff; + + text-decoration:none; + display:block; + line-height:1em; + font-size:1em; + } + ul.hentry .vote-for-user a{ + width:11px; + height:12px; + background:#74C262 url(/i/bg-user-vote-up.gif) no-repeat 50% 2px; + } + ul.hentry .vote-for-user a:hover{ + background-color:#96D189; + background-position:50% -8px; + } + ul.hentry .vote-for-user span{ + padding:1px; + font-size:0.83em; + } + + ul.hentry .up-to-parent a, + ul.hentry .down-to-child a + { + display:block; + float:left; + height:15px; + line-height:15px; + text-decoration: none; + border-bottom: dotted 1px #79B1D4; + } + + ul.hentry .to-favs a, + ul.hentry .fav_added a { + display:block; + margin-top:3px; + width:15px; + height:13px; + font-size:0; + background-position: left top; + } + + ul.hentry .to-favs a:hover, + ul.hentry .fav_added a { + background-position: left bottom; + } + + + ul.hentry .fn a { + font-size: .92em; /*11px/12*/ + font-weight: bold; + color: #666; + } + ul.hentry .fn a:hover{ + color:#333; + } + ul.hentry .fn a:visited{ + + } + ul.hentry .fn a:visited:hover{ + + } + ul.hentry .date, + ul.hentry .bookmark { + + } + ul.hentry .bookmark a, + ul.hentry .date abbr { + border: none; + font-size: .83em; /*10/16*/ + } + ul.hentry .vote { + float: right; + margin-top: .4em; + } + ul.hentry .vote li { + float: left; + font: bold 1.08em/100% Arial, Helvetica, sans-serif; + color: #a9a9a9; + background: none; + } + ul.hentry .vote.positive li { + color: #390; + } + ul.hentry .vote.negative li { + color: #c00; + } + + ul.hentry .vote .buttons, + ul.hentry .vote .buttons .vote-for { + margin-left: 5px; + padding-right: 5px; + } + ul.hentry .vote .buttons a { + margin-top:-11px; + float:left; + width:13px; + height:13px; + font-size:0; + cursor:pointer; + } + ul.hentry .vote .buttons a{ + background:url(/i/icos/icons_vote_comments_4modes.png) no-repeat + } + ul.hentry .vote .buttons a.vote_plus { + margin-left:5px; + background-position: -13px 0; + } + ul.hentry .vote .buttons a.vote_plus:hover{ + background-position:-13px -13px ; + } + ul.hentry .vote .buttons a.vote_minus { + background-position:0 0; + } + ul.hentry .vote .buttons a.vote_minus:hover { + background-position:0 -13px; + } + ul.hentry .vote.expired a.vote_plus, + ul.hentry .vote.mine a.vote_plus, + ul.hentry .vote.no_auth a.vote_plus, + ul.hentry .vote.voted a.vote_plus { + background-position:-13px -39px !important; + cursor:default; + } + ul.hentry .vote.expired a.vote_minus, + ul.hentry .vote.mine a.vote_minus, + ul.hentry .vote.no_auth a.vote_minus, + ul.hentry .vote.voted a.vote_minus { + background-position:0 -39px !important; + cursor:default; + } + ul.hentry .vote.voted_plus a.vote_plus { + background-position:-13px -26px !important; + } + ul.hentry .vote.voted_minus a.vote_minus { + background-position:0 -26px !important; + } + + + ul.hentry .entry-content, + .comment-preview { + font: 1.08em Arial, sans-serif;/*13/12*/ + margin: 0; + padding: 10px 0 10px 0; + clear: both; + + margin-bottom:10px; + } + ul.hentry .entry-content img, + .comment-preview img{ + display: block; + max-width: 100%; + } + + ul.hentry .entry-content .entry-content-only{ + overflow-x:auto; + padding-right:5px; + } + ul.hentry .entry-content .entry-content-only ul, + .comment-preview ul{ + margin: 1px 0 10px 20px; + list-style: inside disc; + } + ul.hentry .entry-content .entry-content-only ol, + .comment-preview ol{ + margin: 1px 0 10px 20px; + list-style: inside decimal; + } + + ul.hentry .bad5 { opacity: 0.2 } + ul.hentry .bad4 { opacity: 0.35 } + ul.hentry .bad3 { opacity: 0.5 } + ul.hentry .bad2 { opacity: 0.65 } + ul.hentry .bad1 { opacity: 0.8 } + + ul.hentry .entry-content-only { + transition: opacity 700ms linear; + -webkit-transition: opacity 700ms linear; + } + ul.hentry .entry-content-only:hover { + opacity: 1; + } + + /* http://bolknote.ru/2008/07/18/~1787 */ + @-moz-document url-prefix(){ + ul.hentry .entry-content .entry-content-only { + line-height:15.1px; + padding:2px 1px; + margin:-2px 0; + } + } + + + + ul.hentry .entry-content .entry-content-only img{ + max-width:100%; + display:block; + } + ul.hentry .entry-content p, .comment-preview p { + margin: 0 0 10px 0; + padding: 0; + } + ul.hentry p.reply, .comment-preview p.reply { + margin: 5px 0 0; + font: .85em Tahoma,Arial, sans-serif;/*11/13*/ + } + ul.hentry .entry-content .bad a { /*Ссылка Показать плохой комментарий*/ + color: #ccc; + } + + /*JS-based show-hide comments*/ + + .show-hide-comments { + font-size: 90%; /*14/12*/ + color: #999; + margin-bottom: 10px; + padding: .1em 0 .2em 10px; + background: #FAEBD7; + } + .show-hide-comments a { + padding: 0 5px 0 0; + background: #FAEBD7; + /*text-decoration: none;*/ + } + .show-hide-comments a:hover { + color: #666; + } + + + /*for JavaScript comments extender*/ + + .extended { + float: left; + padding: 10px 10px 0 10px; + background: #FFFAF0; + } + +/* // Comments */ + + + + + + + + + + + + + + + + + + +/* Популярные комментарии и Прямой эфир + some code from Live section. */ + +/*.live-section #comments { + margin-top: 40px; +} + .live-section #comments h1 { + font: normal 2em/110% Verdana, sans-serif; + letter-spacing: -1px; + color: #69c; + } + .live-section #comments h1 .rss { + margin-left: 5px; + } + .live-section .stat { + margin: 10px 0 30px 0; + } */ + +.popular-comment { + width: 100%; + clear: both; + overflow: hidden; +} + .comment-body { + float:left; + width:80%; + } + .comment-descr { + font: .83em/130% Tahoma, sans-serif; /*10/12*/ + vertical-align: top; + width:15%; + margin-right: 5%; + float:left; + } + .comment-descr dt, + .comment-descr dd { + display: inline; + } + .comment-descr dd { + color:#f00; + } + + + .live .who a, .live .where, + .comment-descr .where { + color:#999; + } + + .live .who a:hover, .live a.where:hover, + .comment-descr .where:hover { + color:#333; + } + + + .live .topic, + .comment-descr .topic, + .side-side a { + color:#666; + } + .live a.topic:hover, + .comment-descr .topic:hover, + .side-side a:hover{ + color:#A3A3A3; + } + .live a.topic:visited, + .comment-descr .topic:visited, + .side-side a:visited { + color:#B5B5B5; + } + .live a.topic:visited:hover, + .comment-descr .topic:visited:hover, + .side-side a:visited:hover { + color:#A3A3A3; + } + .live .total { + color: #C00; + } + .live .all { + position: relative; + top: 0; + right: 0; + margin:20px 25px 10px 0px; + text-align: right; + color:#999; + } + + +/*Блок с мозаикой из юзерпиков с подписями. Офигенная штука. Любите её*/ + +.people-mosaic {margin-top: 10px;} +.people-mosaic ul {float: none;} + .people-mosaic ul li { + float: left; + margin: 10px 10px 0 0; + } + .people-mosaic dl { + display: block; + text-align: center; + } + .people-mosaic dl dd a { + font: 1em Arial, sans-serif; + color: #008cd2; + } + .people-mosaic dl dt a img { + padding: 1px; + background: #ddd; + } + +.img-border { + border: 1px solid #ddd; +} + + + + + + + +.declaration { + font-size:2em; + font-family:arial; + line-height:140%; + color:#404040; +} +.declaration p { + margin-bottom:1em; +} + + +.alert { + color:#f00; +} + +/*Вывод юзеров по странам и городам в разделе "Люди". Код используется также для вывода компаний и блогов в + +результатах поиска.*/ + +.user-flow { + clear:both; + float:left; + margin:30px 0; +} + + +.user-flow-item { + margin: 0 0 40px 0; +} + .user-flow-item dt img { + border: 1px solid #ccc; + } + .user-flow-item .summary { + margin: -50px 0 0 60px; + font-size: 1.08em; /*13/12*/ + } + .search .user-flow-item .summary { + margin-top: -45px; + } + +.who-n-when { + margin: 0 0 10px 0; + color: #aeaeae; +} + .who-n-when a { + letter-spacing: -1px; + color: #aeaeae; + } + .who-n-when .blog-name { + color: #79b1d4; + } + .who-n-when dt { + font: 2em/110% Verdana, sans-serif;/*24/12*/ + } + .who-n-when dd { + margin-top: 5px; + font: .83em/100% Verdana, sans-serif;/*10/12*/ + } + + +/*Выделение особого сообщения (системного, например. Цвет фона как у слова в поиске)*/ + +.special-msg { + background: #fffacd; +} + +/* Сообщение о том, что по тегу ничего не найдено */ + +.no-found {margin-top: 20px; font-size: 150%;padding-left:35px;} +.main-search{ + width:auto !important; + padding-left:35px; + } + .main-search form{ + position:relative; + margin-bottom:30px; + } + + .main-search form .page-menu { + margin-top:35px; + } + .main-search form .page-menu li label{ + + + } + .main-search form .page-menu li input{ + height:0;width:0;border:none;padding:0;position: absolute;background:transparent; + overflow:hidden; + } + .main-search fieldset{ + overflow:hidden; + } + .main-search .inpt-text { + margin: 0 10px 0 0; + padding:0 0 0 6px; + font-size:22px; + float: left; + height:30px; + color: #996; + line-height:30px; + border: 1px solid #996; + } + .main-search input.inpt-text { + width: 78%; + } + .main-search .inpt-btn{ + float:left; + height:32px; + width:32px; + padding:0; + margin:0; + overflow:hidden; + border:none; + background:transparent url(/i/bg-button-enter.png) no-repeat scroll 0 -66px; + } + .main-search .inpt-btn:active{ + background-position:0 -99px; + } + + .main-search { + position:relative; + } + + +#fbPanel { + position: absolute; + background-color: #F0F0E7; + width: 400px; + border: 1px silver solid; + padding: 10px 10px 10px 10px; + z-index: 30; +} +#fbPanel textarea { + width: 100%; + margin-bottom: 20px; +} + +.info-text { + font-size: 16px; + padding-top: 20px; + float: left; +} + +#html_tags_help { + margin-top: 20px; + width:96%; + background-color:#F0F0F0; + color: black; + font-size:0.9em; + padding:15px 20px 20px 10px; + z-index:9999; + position: relative; + float: left; +} +#html_tags_help h4 { + cursor:default; + color: black; + font-size: 18px; + margin-bottom: 10px; + font-weight: bold; +} +#html_tags_help h5 { + cursor:default; + color: black; + font-size: 16px; + font-weight: bold; +} +#html_tags_help dt { + color:#000; + font-weight: bold; +} +#html_tags_help dd { + color:#000; + margin-bottom: 10px; +} +#html_tags_help #html_tags_help_content { + width:290px; + height:465px; + overflow:auto; + background-color:#fff4cd; + padding:10px; +} +#html_tags_help_close { + top:1em; + right:10px; + position: absolute; +} +a#html_tags_help_close, a#html_tags_help_close:hover, a#html_tags_help_close:visited { + color: gray; + font-size: 0.8em; + border-bottom: 1px dashed gray; +} +div#godmode { + left: 0px; + top: 0px; + width: 100%; + height: 100%; + position: fixed; + text-align: center; + vertical-align: middle; + background-image: url(/i/halfvisible.gif); + z-index: 10000; +} +div#godmode span { + color: white; + font-size: 72px; + font-weight: bold; + display: block; + margin-top: 30%; +} + +/* */ + + +/* Advert */ + +.advert-page .fright_holder{ + width:188px; + float:left; + margin: 0px 15px 15px 0px; +} +.advert-page .fright_holder .fright_bg_top{ + background:url(/i/adv/fright_bg_top.gif) no-repeat top; + width:188px; + height:22px; +} +.advert-page .fright_holder .fright_bg_bottom{ + background:url(/i/adv/fright_bg_bottom.gif) no-repeat top; + width:188px; + height:22px; +} +.advert-page .fright_holder .fright_bg_center{ + background:#e5e5e5; +} +.advert-page .fright_holder .fright_bg_center p{ + padding: 0px 20px; + margin: 0px; + color: #9e9e9e; + font-size: 11px!important; +} + +.advert-page .rightcolumn2, .rightcolumn3{ + float: right; + width: 478px; + padding-left: 30px; + padding-bottom: 20px; +} +.advert-page .rightcolumn2 img#screen { + margin-top: 1em; + border: solid #CCC 1px; + margin-left: 2px; +} + + + /* Оформление текста в рекламном разделе */ + +.advert-page h1 { + font: 2.5em/100% Verdana,sans-serif; /*30px/12px*/ + } +.advert-page h2 { + clear:left; + color:#FF6000; + font-family:Arial,sans-serif; + font-size:23px; + font-weight:normal; + padding-top:0.5em; +} + +.advert-page p { + line-height: 1.54em; +} + +#buy_package_form { + opacity: 0.97; + display:none; + left: 50%; + margin-left: -212px; + position:absolute; + z-index: 50; + } + #buy_package_form #form-arrow-down{ + display: none; + border-top:7px solid #EFEFEF; + border-left:7px solid transparent; + border-right:7px solid transparent; + width:1px; + margin:0 0 0 20px; + + } + #buy_package_form.package-form-too-much-right .ex_middle{ + margin-left: -355px; + } + #buy_package_form.package-form-too-much-right #form-arrow-down{ + margin-left: 379px; + } +#buy_package_form .habrablock{ + + margin-bottom: 0; + } +#buy_package_form .ex_middle{ + width: 425px; + } +#buy_package_form .js-close-buy-package{ + position: absolute; + cursor: pointer; + top: 10px; + right: 14px; + font-size: 1.5em; + } + + +.advert-page .habrablock { + background:#EFEFEF none repeat scroll 0 50%; + font-size:13px; + margin-bottom:20px; + vertical-align: middle; +} +.advert-page ul.nice { + list-style-image:none; + list-style-position:outside; + list-style-type:none; + margin:0 0 0 4ex; + padding:0; +} +.advert-page ul.nice li { + margin-bottom:1ex; + padding-left:3ex; + background:transparent url(/i/adv/list-style.gif) no-repeat scroll 0 5px; + font-size:12px; + line-height: 1.54em; +} +.price-table input{ + background:#8BBF76; + color:#FFFFFF; + font-size:1.15em; +} +.advert-logos{ + text-align:center; + overflow:hidden; + margin:0 auto; + width:610px; +} +.advert-logos +.adv-logo{ + float:left; + overflow: hidden; + margin-right: 16px; +} +.advert-text{ + font-size:1.2em; + margin:2em 0; + } + .advert-corps{ + text-align:center; + } +.features-trial{ + text-align:center; + padding:7px 18px; + font-size:25px; + } + .features-trial span{ + color:#5A5A5A; + background:#E7FAEC; + padding:7px 18px; + } +.advert-page p.intro { + font-size:17px; +} +.advert-page .info_line { + padding:10px 20px; +} +.advert-page .info_line .captcha-holder{overflow:hidden;} +.advert-page .info_line .captcha-holder img{float:left;margin-right:10px;} +.advert-page .info_line .captcha-holder a{float:left;margin-top:25px;} +.advert-page .info_line .captcha-input{padding-left:120px;padding-top:5px;} + +.advert-page .first_line { + padding-top:28px; +} +.advert-page .label { + float:left; + width:120px; +} +.advert-page .type_ch { + height:50px; +} +.advert-page .button_holder { + padding:10px 22px; +} +.advert-page img.stat { + float: left; + margin-right: 20px; +} +.ponchiki #main-content { + width: 95%; +} +.ponchiki .checkbox, .ponchiki .radio { + border:0 none !important; + bottom:-2px; + padding-right:12px; + position:relative; + width:15px !important; +} +.advert-page .input input, .advert-page .input textarea { + border:1px solid #DDDDDD; + padding:2px 4px; + width:250px; +} +.advert-page .tm-form dl { + margin-bottom: 0px !important; +} +#advert-form { + vertical-align: middle; +} + #advert-form fieldset {margin:0;padding:0;} + + +.advert-page .result { + display: block; + font-size: 17px; + margin-left: 30px; + margin-right: 30px; + /* margin-top: 40%; */ + text-align: center; +} + + +.price-table { + width:100%; +} + .price-table tr.even {background: #eaf1f5;} + .price-table th { + padding-bottom: .5em; + font: normal 150%/110% Arial,sans-serif; + text-align:left; + border-bottom: 1px solid #000; + } + .price-table td { + font: 120%/150% Arial,sans-serif; + vertical-align: middle; + padding: .6em 4px; + } + + .price-table td em { + margin-left: -.05em; + font-size:300%; + color:#69c; + } + .price-table td span { + color:#999; + } + + + +/* Stat */ + +#flashcontent1, #flashcontent2, #flashcontent3, #flashcontent4, #flashcontent5, #flashcontent6 { + float: left; +} + +#help-shortcuts { + margin-left: 20px; +} +#help-shortcuts dt { + font-weight: bold; +} +#help-shortcuts dd { + margin-left: 20px; + margin-bottom: 10px; +} + + +/* Help */ + + /* Оформление текста в разделе "Помощь" */ + +.help h1, .company h1, .live-block-page h1 { + font: 2.5em/100% Verdana,sans-serif; /*30px/12px*/ + } +.help h2 { + clear:left; + color:#FF6000; + font-family:Arial,sans-serif; + font-size:23px; + font-weight:normal; + padding-top:0.5em; +} + +.help p { + line-height: 1.54em; +} +.help ol{margin-top:1em;} +.help li { + line-height: 1.54em; + margin-bottom:0.5em; +} + +.help #main-content ul { + line-height: 1.54em; +} + + + + + + + + + + + + + + + + + + + + + + + +/* Habralenta */ + +.habralenta-settings .my-blogs { + margin: auto 20px 1em 20px; +} +.habralenta-settings .btn-holder { + padding: 20px; +} +.habralenta-settings .btn {margin: auto 20px 10px 20px;} + +#invite-page { + margin: 40px; +} +#invite-count-label { + margin-bottom: 20px; + display: block; +} +#add-invite { + float: left; + width: 300px; +} +#add-invite .field { + width: 270px; +} +#add-invite dl.required dt { + font-weight: bold; +} +#add-invite .btn-bar { + text-align: right; + padding-right: 30px; +} +#invite-list { + float: left; + width: 320px; +} +#invite-list li { + margin-bottom: 10px; +} +input.money { + background:#E3A2A0 none repeat scroll 0 0; + color:#FFFFFF; + font-size:32px; + letter-spacing:-2px; + width: 130px; +} +span.money { + color:#E3A2A0; + font-size:32px; + letter-spacing:-2px; +} +.event-subscribe-form .unsubscribe { + text-decoration: none; + border-bottom: dashed 1px #79B1D4; +} +.event-subscribe-form .unsubscribe.disabled { + text-decoration: none; + border-bottom: dashed 1px silver; + color: silver; +} +.event-subscribe-form fieldset { + height: 30px; +} + + +.event { + margin-left: 35px; +} + .event .nonfriends { + margin-top: 20px; + } + .event h3.participants { + margin: 0; + font: 1.67em Verdana, sans-serif; /*20/12*/ + letter-spacing: -1px; + color: #afa56a; + } + +.salary-type label { + display: inline; +} +.privacy-persnal-info{ + display:none; + color:red; +} +.privacy-persnal +.privacy-persnal-info{ + display:block; + } +.privacy-persnal +span{ + display:none; +} + +.privacy-offtop { + color: gray; +} +.field-privacy .info { + display: none; +} +.privacy-offtop .info { + display: block !important; + color: red; +} +.privacy-offtop #js-field_privacy_text, .privacy-offtop input { + display: none; +} + +@media print { + + body { + background: white; + color:#000; + font-size: 12pt; + } + ul.hentry .entry-content{ + padding-bottom:30px; + } + .blog-title,.yandex-direct,.yandex{ + display:none; + } + a:link, a:visited { + color: #000; + background: transparent; + font-weight: bold; + text-decoration: underline; + } + .hentry .content a:link:after, .hentry .content a:visited:after { + content: " (" attr(href) ") "; + font-size: 90%; + } + + + #header-wrapper,.header, #sidebar, #footer, + .page-navigation, .sub-nav, .page-nav, + .buttons, p.reply, .add-comment, + li.bookmark, li.to-favs, li.down-to-child,.up-to-parent + {display:none;} + + + #wrapper, #main-content { + width: auto; + border: 0; + margin: 0 2%; + padding: 0; + float: none !important; + } + + + div.hentry { + clear:both; + float:none; + margin:0 0 40px; + width:auto; + } +} +.habrauserava{ + height:48px; + width:48px; + position:relative; + } + .habrauserava img{ + width:48px; + height:48px; + } + .habrauserava + b{ + position:absolute; + top:0; + left:0; + height:48px; + width:48px; + background:url(/i/bg_avatar_mask.gif) no-repeat 0 0; + } +.yandex-direct{ + margin:10px 0;clear:left;margin-left:35px +} +.oauth{ + padding-left:35px; + margin:0 0 100px; +} +.oauth-app-block{ + margin:30px 0; +} + +.oauth-app-block dl{ + overflow:hidden; + margin:0 0 3px; +} +.oauth-app-block dl dt{ + font-weight:700; + float:left; + width:164px; +} +.oauth-simple-auth{ + padding-top:50px; + float:left; + width:600px; + } + .oauth-simple-auth h1{ + font-size:2.17em; + } + .oauth-simple-auth form, + .oauth-simple-auth .result{ + padding-top:10px; + } + .oauth-simple-auth form .error{ + color:red; + } + .oauth-simple-auth form p {overflow:hidden;padding:2px 0;} + .oauth-simple-auth form p label{ + float:left; + width:160px; + font-weight:700; + } + .oauth-simple-auth .oauth-finish{ + margin-top:1.5em; + font-size:1.5em; + } +#comments > ul > li > .msg-meta .single-tree {display:none;} +ul li:nth-child(1) > .msg-meta .single-tree{display:none;} +.single-threading .comment_holder{display:none;} + +li.single-tree-node-last > .msg-meta{background:#eef3f3;} + +.comment_holder li.single-tree-node, +.comment_holder li.single-tree-node-last{display:block;} + li.single-tree-node-last li {display:block;} +.single-threading > .msg-meta .js-single-tree, +.single-threading li.single-tree-node > .msg-meta .js-single-tree, +.single-threading li.single-tree-node-last > .msg-meta .js-single-tree {display:none;} + +li > .msg-meta .js-multiplay-tree {display:none;} + +.single-threading li.single-tree-node-last > .msg-meta .js-multiplay-tree{display:block;} + +@media only screen and (max-device-width: 480px) and (-webkit-min-device-pixel-ratio:0) { + #comments .hentry li .msg-meta .folding-dot-holder{ + display:none !important; + } +} +img.help-tip{ + position:relative; + top:3px; +} +#help-tip-text.help-tips-too-much-left{ + margin-left:-15px; + } + #help-tip-text.help-tips-too-much-left + #help-tip-text-arrow{ + margin-left:15px; + } +#help-tip-text{ + position:absolute; + width:375px; + margin-left:-187px; + margin-top:-8px; + display:none; + color:#fff; + z-index:500; + opacity:0.95; + } + #help-tip-text-content{ + position:absolute; + bottom:7px; + padding:15px; + background:#46688b; + -moz-border-radius-topleft:4px; + -webkit-border-top-left-radius:4px; + -moz-border-radius-topright:4px; + -webkit-border-top-right-radius:4px; + -moz-border-radius-bottomleft:4px; + -webkit-border-bottom-left-radius:4px; + -moz-border-radius-bottomright:4px; + -webkit-border-bottom-right-radius:4px; + border-radius:4px; + } + #help-tip-text-arrow{ + border-top:7px solid #46688b; + border-left:7px solid transparent; + border-right:7px solid transparent; + width:1px; + margin:0 auto; + } +.search-ads{ + margin-top:50px +} +.search-ads #yandex_direct{padding:10px;} +.company_admin #sidebar form .wide-wide-inputs{ + border-bottom:1px solid #aaa; + padding-bottom:9px; + margin:8px 0 12px; +} +.company_admin #sidebar form p{ + margin-top:1em; + margin-bottom:1em; +} +.company #sidebar{ + margin-top:46px; +} +.side-side { + padding: 0 20px 20px; + } +.side-side h3{ + margin:0 -20px 0.71em 0; + } + .side-side li{ + + margin:9px 0; + } + .side-side li small{ + color:#999; + font-size:0.9em; + } +.wide-wide-inputs dl,.company_admin #sidebar form .wide-wide-inputs dl{ + margin:0; +} + + .wide-wide-inputs dt,.company_admin #sidebar form .wide-wide-inputs dt{ + font-size:0.9em; + margin:0; + } + .wide-wide-inputs dd{ + padding-right:5px; + } + .wide-wide-inputs dd input{ + width:100%; + } +.js-do-more-inputs{ + font-size:0.9em; +} +#js-field-holder-with-help{ + overflow:hidden; +} +.ponchiki #wrapper{ + overflow: hidden; + } +#john_black{ + display: none; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: #000; + opacity: 0.5; + z-index: 40; + } + /* Сайдбар с кармаграфом и т.п. */ + + +.karma-n-statistic p { + margin: 15px 0; + font-size:100%; + color:#666; + } +.karma-n-statistic h3 { + margin: 15px 0; + font: normal 1.5em/120% Verdana, sans-serif;/*18/12*/ + letter-spacing: -1px; + color: #999; + } +.karma-n-statistic h2{ + color: #999; + font-size:233% ; + margin:0 0 20px; + } +.karma-n-statistic .stats { + margin: 10px 0 35px; + color:#666; + overflow:hidden; + font-size:116%; + + } +.karma-n-statistic +.karma-stat{ + margin-bottom:50px; + } +.karma-n-statistic .stats dt{ + float:left; + clear:left; + margin-right:4px; + } +.karma-n-statistic .stats dd{ + float:left; + } +.karma-n-statistic .stats dd.global{ + margin-bottom:30px; +} +.karma-n-statistic { + font-family: Verdana, sans-serif; + + overflow: hidden; +} +.karma-n-statistic +.tag-cloud{ + text-align:left; + margin-left:0; + float:none; + } +.search-results-title{ + padding-left: 35px; + margin-bottom:16px; + + } + + +#people-tags{ + float: left; + margin-top: 38px; + width: 140px; + } + #people-tags li{ + padding-bottom: 17px; + transition: opacity 200ms linear; + -webkit-transition: opacity 200ms linear; + } + #people-tags a{ + display: block; + height: 46px; + width: 116px; + font: 13px/13px Helvetica, Arial, sans-serif; + text-decoration: none; + position: relative; + overflow: hidden; + background: no-repeat 0 50%; + } + #people-tags a span{ + visibility: hidden; + } +#people-tags:hover li{ + opacity: 0.6; +} +#people-tags:hover li.active, #people-tags:hover li:hover{ + opacity: 1; +} +#table-people-rating #people-tags li { + width: 140px; + } + #table-people-rating #people-tags li a{ + height: 46px; + width: 140px; + background-position: 50% 50%; + background-color: #ebf0f5; + border-top-left-radius: 23px; + border-bottom-left-radius: 23px; + -webkit-border-top-left-radius: 23px; + -webkit-border-bottom-left-radius: 23px; + -moz-border-radius-topleft: 23px; + -moz-border-radius-bottomleft: 23px; + } + #table-people-rating #people-tags li.active a{ + background-color: #92b3d2; + } + #table-people-rating #people-tags a.podcaster { + background-position: 34px 50%; + } + #table-people-rating #people-tags li a.se_gamer { + margin-top: 20px; + } +#people-tags a.author { background-image: url(/i/tags/author.png); } +#people-tags a.star { background-image: url(/i/tags/star.png); } +#people-tags a.legend { background-image: url(/i/tags/legend.png); } +#people-tags a.oldresident{ background-image: url(/i/tags/oldresident.png); } +#people-tags a.commentator{ background-image: url(/i/tags/commentator.png); } +#people-tags a.podcaster { background-image: url(/i/tags/podcaster.png); } +#people-tags a.translator { background-image: url(/i/tags/translator.png); } +#people-tags a.statistic { background-image: url(/i/tags/statistic.png); } +#people-tags a.humorist { background-image: url(/i/tags/humorist.png); } +#people-tags a.habred { background-image: url(/i/tags/habred.png); } +#people-tags a.unhabred { background-image: url(/i/tags/unhabred.png); } +#people-tags a.troll { background-image: url(/i/tags/troll.png); } +#people-tags a.evangelist { background-image: url(/i/tags/evangelist.png); } +#people-tags a.reader { background-image: url(/i/tags/reader.png); } + +#people-tags a.se_gamer, #people-tags a.se_supergamer, #people-tags a.se_turbogamer { + background-position: 52% 5px !important; + position: relative; +} +#people-tags a.se_gamer { + background-position: 56% 5px !important; + position: relative; +} +#people-tags a.se_gamer span, #people-tags a.se_supergamer span, #people-tags a.se_turbogamer span { + visibility: visible; + position: absolute; + display: block; + text-align: center; + width: 100%; + bottom: 5px; + color: #284fa2; +} +#people-tags a.se_gamer { background-image: url(/i/special/se/tags/gamer.png); } +#people-tags a.se_supergamer { background-image: url(/i/special/se/tags/supergamer.png); } +#people-tags a.se_turbogamer { background-image: url(/i/special/se/tags/turbogamer.png); } + +.userinfo #people-tags{ + overflow: hidden; + float: none; + width: auto; + margin-top: 0; + padding-top: 6px; + } + .userinfo #people-tags li{ + float: left; + margin-bottom: 10px; + } + .userinfo #people-tags li a{ + background-position: 50% 100%; + } +.habr-button{ + font: 19px Arial, sans-serif; + color: #fff; + text-decoration:none; + border:2px outset #F0F0F0; + background: #cc9; + padding:0 6px; + display:inline-block; +} +.habr-button:active{ + padding-left:8px; + padding-right:4px; + border-style:inset; +} +a.habr-button:hover{ + background-color:#6DA3BD; + color:#fff; +} +.side-button{ + margin-bottom: 20px; +} +.big-nice-text{ + + color:#E3A2A0; + font-size:32px; + letter-spacing:-2px; + } + .nice-time{ + text-transform: lowercase; + } + .big-nice-text + input{ + position: relative; + top: -6px; + } + +#karma-reset-games{ + padding-left: 35px; + +} +.karma-reseting .karma-reset-form-reseting { + display: block; +} +.karma-noreseting .karma-reset-form-noreseting{ + display: block; +} +.karma-reset-game{ + display: none; +} +.karma-reset-form{ + + } +.karma-reset-button{ + margin-top: 28px; + text-align: center; + font-size:32px; +} +.karma-reset-button input{ + + font-size: 32px; +} + +input.disabled{ + background-color: #ddd; + color: #eee; + border-style: solid ; +} +.tab-sun{ + margin-top:-3px; +} +.sandbox .page-nav{ + + padding-left: 35px; +} +#js-topic-version-prototype{ + display: none; +} +.topic-preview-content{ + margin-left: -35px; +} +.topic-preview-content .hentry{ + margin-bottom: 0; +} +.topic-preview{ +margin-top: 5px; + padding: 15px; + border: 5px solid #D6D6D6; +} +.post-title{ + font: 2.17em/100% Verdana, sans-serif; + letter-spacing: -1px; + padding:11px 0 22px; + margin: -11px 0 0; + width: 100%; + position: relative; + z-index: 15; + height: 26px; + + } + .post-title .post-title-header{ + color: #7fb084; + float: left; + font-size: 100%; + + margin: 0 ; + } + .post-title .post-title-list{ + position: relative; + float: left; + } + + .post-title .post-title-list ul{ + border: 1px solid #fff; + position: absolute; + top: -11px; + left: 0; + background: #fff; + list-style: none; + margin-left:4px; + padding: 10px 10px 10px 8px; + } + .post-title .post-title-list li{ + display: none; + margin-bottom: 12px; + } + .post-title .post-title-list ul li.current{ + display: block; + /*float: left;*/ + } + .post-title .post-title-list ul a{ + text-decoration: none; + font-size: 100%; + } + .post-title .can-select ul{ + border-color: #ddd; + + + } + .post-title .can-select ul li{ + display: block; + } +#js-topic-form-holder{ + overflow: hidden; +} + + + + +/*Плашка с кнопками визуального редактирования текста*/ +.editor {} + .editor .panel { + background: #eaecea; + float: left; + width: 100%; + padding: 2px 0; + } + .editor .panel a { + display: block; + width: 20px; + height: 20px; + overflow:hidden; + float: left; + margin-left:2px; + text-decoration:none; + } + .editor .panel a:hover { + background: #fff; + } + .editor .panel a.txt { + width:auto; + padding:0 2px; + } + .editor .panel a span { + color:#4d4d4d; + position:relative; + top:3px; + font-size:12px; + font-weight:bold; + letter-spacing:-1px; + } + .editor .panel select { + float: left; + margin-left:2px; + } + + .editor .text-holder { + clear:both; + border-color:#d4d0c8; + border-style:inset; + border-width:2px 1px 1px 2px; + padding:2px 2px 2px 3px; + } + .editor .text-holder textarea { + overflow:auto; + border:none; + } + +.emply_lenta{margin-left:35px;} + + + + + +/* Nokia special */ +#special_nokia{margin-left:35px;margin-bottom:20px;clear:both;background: #f0f0e7;padding:20px;position:relative;-webkit-border-radius: 10px;-moz-border-radius: 10px;border-radius: 10px;} +#special_nokia .logo{display:block;width:105px;height:66px;position:absolute;left:20px;top:20px;background: url(/i/special/nokia/after_post_html_block/logo.png) no-repeat; } +#special_nokia .ovi{display:block;width:68px;height:67px;position:absolute;right:20px;top:20px;background: url(/i/special/nokia/after_post_html_block/ovi.png) no-repeat; } +#special_nokia .text{margin-left:150px;margin-right:100px;font-size:10px;font-fimily:Arial;color:#555555;} +#special_nokia .text span{font-size:18px;} +#special_nokia .text .links{overflow:hidden;margin-top:15px;font-size:10px;} + + + + + +/* common */ +.hidden { display:none !important; } +del.robots-noindex{display:none;} + +.has-two-inputs{ + width:103%; +} +dd.has-two-inputs{ + width:102%; +} +#comment_form input.loading { + background: url(/i/form/loader_button.gif) repeat; +} +#comment_form.loading input.post { + background: url(/i/form/loader_button.gif) repeat; +} + +span.two-inputs{ + float:left; + margin-right:3%; +} +/* Forms */ +input.wide, select.wide, textarea.wide { + width:99%; +} +.input-row{ + overflow:hidden; +} +.two-inputs{width:47%;margin-right:1%;} +.wide-me{ + overflow:hidden; + } + .wide-me input.two-inputs{ + width:98%; + } +.right-stick{ + float:right; + margin-left:10px; + } +input.wide-half, select.wide-half, textarea.wide-half { + width:50%; +} + +input.checkbox {vertical-align:middle;} +input.textfield {} + +input.large { + font-size:3em; +} + + + +textarea.large { + height:40em; +} +textarea.medium { + height:7em; +} +textarea.small { + height:3em; +} + +select.with-title option { + background:#eaecea; +} +select.with-title option.title { + background:#fff; +} + +input.btn-big { + font-size:2em; +} + +.achtung-minen { + color: #f00; + display:none; +} +.js-marked-error .achtung-minen { + display:block; +} + + + +form input.btn { + background:#d4d0c8 url(/i/form/loader_field.gif) no-repeat -1000px 0; + outline:none; +} +form.save-loading input.btn-save, +form.blogSave-loading input.btn-save { + background:#d4d0c8 url(/i/form/loader_field.gif) repeat 0 0; +} +form.preview-loading input.btn-preview { + background:#d4d0c8 url(/i/form/loader_field.gif) repeat 0 0; +} +form.draft-loading input.btn-draft { + background:#d4d0c8 url(/i/form/loader_field.gif) repeat 0 0; +} + +form .loading input.textfield { + background:url(/i/form/loader_field.gif) repeat 0 0; +} + + +.topic-autosave { + padding:5px; +} +form.autosave-loading .topic-autosave { + background:url(/i/form/loader_field.gif) repeat 0 0; +} + +.clear { + clear:both; +} + +.sublabel { + margin: 2px 0 3px; + font-size: 11px; + color: #999; + overflow:hidden; +} + +.block { + margin-bottom:2em; +} +.block-semi { + margin-bottom:1em; +} +.block-super { + margin-bottom:4em; +} + + +.block-tr td { + padding-bottom:2em; +} +.block-semi-tr td { + padding-bottom:1em; +} +.block-super-tr td { + padding-bottom:4em; +} + + + + +.system { + text-decoration:none; +} +.system em { + font-style:normal; + line-height:140%; + border-bottom:1px dashed #79B1D4; +} +h2.forms .system { + font-size:0.6em; +} + +fieldset legend { + padding:5px 5px 1.5em 5px; + margin-left:-5px; +} + + +.topic-preview { + display:none; +} + +.topic-preview .habracut { + padding-bottom:0.8em; + margin-bottom:0.8em; + border-bottom:1px dotted #999; + position:relative; +} +.topic-preview .habracut .scissors { + position:absolute; + left:30px; + bottom:-0.8em; + padding:0 3px; + color:#999; + background:#fff; + font-weight:bold; + letter-spacing:-1px; +} + + + + +/* Rounded corners blocks */ + +.round-corner-box { + margin-bottom: 20px; + font-size:1em; /*12px*/ + font-family:tahoma,arial; + background: #f0f0e7 url(/i/bg-corner-top-left.gif) no-repeat 0 0; +} + .round-corner-box .bg-bott-r { + width: 100%; + background: url(/i/bg-corner-bottom-left.gif) no-repeat bottom left; + } + .round-corner-box .bg-bott-l { + background: url(/i/bg-corner-bottom-right.gif) no-repeat bottom right; + width: 100%; + } + .round-corner-box .bg-top-r { + background: url(/i/bg-corner-top-right.gif) no-repeat top right; + padding: 10px 20px; + } + + /* Header inside */ + + .round-corner-box .bg-top-r h3 { + display: block; + margin:0 0 20px 0; + font-size: 2.33em; /*28px*/ + font-weight: normal; + line-height: 1.1em; + letter-spacing: -1px; + text-decoration: none; + color: #999; + } + + .round-corner-box .all { + text-align: right; + color:#999; + } + + + /* Blocks inside rounded corners */ + + + /* Live comments */ + + .live-wrapper {margin-bottom: 10px;} + + .live-comment {margin: 0 0 5px 0;} + .live-comment dt, + .live-comment dd, + .live-comment dd dl, + .live-comment dl dd dl dt { + margin: 0; + display: inline; + color:#999; + } + + .live-comment span.who a, .live-comment .where, .live-comment .topic { + margin-bottom: 1ex; + line-height: 1.35em; + } + .live-comment .who { + padding-left: 16px; + background: url(/i/bg-user.gif) 0 50% no-repeat; + display: inline; + } + .live-comment .who a {color:#999;} + + + + + .live-comment .where{color:#666 ;} + + .live-comment .topic {color:#666;} + + /* Live' links behaviour */ + + .live-comment .who a:hover, .live-comment a.where:hover { + text-decoration: none; + background: #f66; + color:white; + } + .live-comment a.topic:hover { + text-decoration: none; + background: #6c6; + color:#fff; + } + + .live-comment .total {color: #C00;} + + + /* Live popular companies */ + + .rating .title .new-feedback { + padding: 0 0 0 2px; + font: 11px/100% normal Arial,sans-serif; + color: #fff; + background: #6cf; + text-decoration: none; + } + + + + + + + + + + + + + /* Recommendations (habraprofile) */ + + .round-corner-box .recommendation { + margin: auto 0; + padding: 10px 20px; + font: 1em/150% Arial, sans-serif; /*12/12*/ + } + .round-corner-box .recommendationl dt a { + padding-left: 16px; + color: #666; + background: url(/i/bg-blogs.gif) 0 80% no-repeat; + } + .round-corner-box .recommendation dd { + color: #000; + } + + /* // Recommendations (habraprofile) */ + + + + + /* Blocks inside rounded corners */ + + + + + + + + + + + + +/* // Rounded corners */ + + +/* Company card */ + form#company-card { + margin-left: 20px; + } + + form#company-card h1 { + margin-bottom:1em; + width:100%; + clear:both; + font-size:2.167em; + color: #767676; + font-weight: normal; + margin-left: -20px; + } + form#company-card dl { + margin-bottom:1em; + width:100%; + clear:both; + } + form#company-card dl input, + form#company-card dl select, + form#company-card dl label { + width:100%; + display:block; + } + form#company-card dl label { margin-bottom:0.3em; } + + form#company-card dl#tariff-holder { + margin:0 5% 2em 0; + width:50%; + float:left; + clear:none; + } + form#company-card dl#actuality-holder { + width:15.7em; + float:right; + clear:none; + line-height:1.5em; + } + form#company-card dl#actuality-holder dt { float:left; } + + form#company-card dl#actuality-holder dd { float:right; } + + form#company-card dl#actuality-holder * { vertical-align:middle; } + + form#company-card dl#actuality-holder label { display:inline; } + + form#company-card dl#actuality-holder input { + width:6.5em; + display:inline; + } + + form#company-card dl#rss-holder { margin-top:3em; } + + form#company-card dl dd.error { color:#cc0000; } + + form#company-card input.submit { float:right; margin-right: -6px; } + +.zebra {text-decoration:none; border-bottom: 1px dashed #79B1D4;} /* Подчёркивание JavaScript-ссылок */ + +#getInviteYounger_text { color: #519500; } + + +.sort-order a { + margin-left:3px; + text-decoration:none;border-bottom:#77a3bb 1px dashed; + } + a.sort-order_lnk_Sel { + text-decoration:none; padding:0px 4px 2px 4px; + background:#e8e9eb; border-color:#e8e9eb; color:#000; + } +.sort-order_Srch { + margin:0 35px; + } +.answer-sort { + margin-top:50px; + } + .answer-sort .comments-header { + display:inline; + } + .answer-sort .sort-order { + padding-left:5px; + } + + + +/* futu_alert */ + +/* +.futu_alerts_holder { + position:fixed; + _position:absolute; + + top:0; + _top: expression( + eval(document.documentElement.scrollTop) + "px" + ); + left:50%; + width:450px; + z-index:9999; + margin-left:-225px; +} +*/ +.futu_alert_outer { + position: fixed; + top: 0; left: 0; + width: 100%; + + z-index:9999; +} +.futu_alert_outer .frame { + position:relative; + z-index:9999; +} +.futu_alerts_holder { + position:absolute; + left:69%; top:0; + width:30%; + z-index:9999; +} + +.futu_alerts_holder .futu_alert { + position:absolute; + top:-1000px; + background-color:#FFEBA0; + font:1em Tahoma, sans-serif; + border:1px solid #FFFFFF; + margin-left:60px; +} +.futu_alerts_holder .futu_alert .futu_alert_header { + font-size:1em; + margin:10px 20px 0; +} +.futu_alerts_holder .futu_alert .futu_alert_text { + font-size:0.8em; + margin:10px 20px; +} +.futu_alerts_holder .futu_alert .futu_alert_close_button { + position:absolute; + padding:10px; + top:0; + right:0; + outline:none; +} +.futu_alerts_holder .message { + color:#FFF; + background-color:#6690C9; +} +.futu_alerts_holder .error { + color:#FFF; + background-color:#ed6060; +} +.futu_alerts_holder .save { + color:#FFF; + background-color:#73a168; +} + + + + + + +/* form */ +form.tm-form dl { + margin-bottom: 20px; +} + +form.tm-form dl dd.desc { + color: gray; +} + +form.tm-form dl.required dt label { + font-weight: bold; +} + +form.tm-form dl dd.error { + color: red; + display: none; +} + +form.tm-form dl.invalid dd.error { + display: block; +} + +form.tm-form .unknown-error { + margin-top: 20px; + margin-bottom: 20px; + color: red; +} + +form.tm-form .error-list { + display: none; +} + +form.tm-form input.loading, +input.loading, +button.loading { + background: url(/i/form/loader_button.gif) repeat; +} + +form.tm-form label { + display: inline; +} +form.tm-form dl dd.categories{ + overflow:hidden; + margin:7px 0; +} +form.tm-form dl dd.categories label{ + float:left; + width:49%; +} + + + +/* xl */ +.xl-little div.hentry { margin-bottom: 10px; } + +.xl-panel { padding: 3px 7px; background: #f7f7f2; margin-bottom: 2em; clear: both; overflow: hidden; margin-left:35px;} + .xl-panel ul { list-style: none; float: left; width: 72px; height: 20px; padding: 0; margin: 0; background: transparent url(/i/xl.gif) -112px 0 no-repeat; cursor: pointer; } + .xl-panel ul li { margin: 0; padding: 0; width: 24px; height: 20px; float: left; } + .xl-panel li.little:hover { background: transparent url(/i/xl.gif) -184px 0 no-repeat; } + .xl-panel li.xl_view_radio_little_active { background: transparent url(/i/xl.gif) -256px 0 no-repeat !important; } + .xl-panel li.medium:hover { background: transparent url(/i/xl.gif) -208px 0 no-repeat; } + .xl-panel li.xl_view_radio_medium_active { background: transparent url(/i/xl.gif) -280px 0 no-repeat !important; } + .xl-panel li.full:hover { background: transparent url(/i/xl.gif) -232px 0 no-repeat; } + .xl-panel li.xl_view_radio_full_active { background: transparent url(/i/xl.gif) -304px 0 no-repeat !important; } + .xl-panel .help { float: left; color: #999; padding-left: 10px; } + .xl-panel .rss { float: right; display: block; width: 16px; height: 1.7em; overflow: hidden; text-indent: -1000px; background: transparent url(/i/feed_icon_16x16.gif) 0 50% no-repeat; } + +.xl_updown, .xl_hide { cursor: pointer; display: -moz-inline-stack; display: inline-block; width: 21px; height: 20px; background: transparent url(/i/xl.gif) 0 50% no-repeat; } +.xl_updown:hover { background-position: -21px 50%; } +.xl_downarrow { background-position: -42px 50%; } +.xl_downarrow:hover { background-position: -63px 50%; } +.xl_hide { width: 14px; background-position: -84px 50%; } +.xl_hide:hover { background-position: -98px 50%; } + + + +/* footer */ +#footer a { color: #6da3bd; } +#footer a:hover{color:#4D7285;} +#about { float: left; } +a.footer_logo { + margin: 0 1.1em 0 2%; + float:left; + display:block; + width:31px; + height:29px; + background:url(/i/tm_logo_sharp.gif) no-repeat 0 0; + outline:none; + text-indent:-9999px; +} +a.footer_logo:hover { + background-position:0 -31px; +} + + #copyright-and-footer-nav { + float: right; + margin-right: 20px; + } + #copyright-and-footer-nav li { + display: inline; + } + +#footer { + width: 95%; + min-width: 725px; + max-width: 1200px; + clear: both; + margin: 10px auto 0; + + + font:.917em/120% Tahoma, Arial; /*11px/12px*/ + color:#949494; + position: relative; + top: 20px; + overflow: hidden; +} + +#footer .footer-conttent{ + + border-top: 1px solid #ccc; + padding: 30px 0; + overflow: hidden; + margin-left:35px; +} +.bottom_menu { width: 80%; position: relative; overflow: hidden; float: left; } +.bottom_menu dl { float: left; width: 16.5%; font-size: 1em;} + .bottom_menu dl.user { width: 18%; } + .bottom_menu dl.sections { width: 15%; } + .bottom_menu dl dt { margin-bottom: .6em; font-size: 1.2em; } + .bottom_menu dl dt a { font-weight: bold; } + .bottom_menu dl.user dt a { border: 0; font-weight: bold; } + .bottom_menu dl dd { margin-bottom: .4em; line-height: 1.6em; } + + + +/* favourites_add */ +#favourites_add_hidden { display: none; } + #favourites_add { position: relative; height: 0; clear: left; z-index: 10; margin-left: 35px; } + #favourites_add .favourites_add_inner { background: #f0f0e7; padding: 1em; position: absolute; top: 1em; left: 0; width: 95%; z-index: 10; } + #favourites_add label { font-size: 1.1em; padding-bottom: .1em; } + #favourites_add #favourites_add_tags { width: 99%; } + #favourites_add dd.desc { font-size: .9em; color: #666; } + #favourites_add .favourites_add_footer { margin-top: 1em; color: #666; } + #favourites_add #favourites_add_cancel { color: #000; text-decoration: none; border-bottom: 1px dashed; } + + + +/* misc */ +.top-tags { list-style: none; margin-bottom: 15px; } + .top-tags strong { font-weight: normal; } + .top-tags em { font-style: normal; float: right; text-align: right; color: #999; text-decoration: none; } + .top-tags a { display: block; padding: 4px 20px; overflow: hidden; text-decoration: none; } + .top-tags a strong { text-decoration: underline; } + .top-tags a:hover, .top-tags a.current { background: #d2d2c9; color: #fff; } + .top-tags a:hover strong, .top-tags a.current strong { text-decoration: none; } + .top-tags a:hover em, .top-tags a.current em { color: #fff; } + +ul.tags li.fav a { color:#339900;} + ul.tags li.fav a:hover{ + color:#85C266; + } +.tags li.favourites_edit_tags { margin-left: 10px; } + .tags li.favourites_edit_tags a, .tags li.favourites_edit_tags a:link, .tags li.favourites_edit_tags a:visited { color: #ccc; background: none; } + .tags li.favourites_edit_tags a:hover { color: #666; } + +.sub-nav { clear: both; margin-bottom: 20px; } + .sub-nav li { display: inline; margin-right: 3px; } + .sub-nav li a { color: #093; font-size: 1.083em; padding: 0 2px; text-decoration: none; } + .sub-nav li.current a { color: #fff; background: #ff9525; } + +/* re:store banner margins fix for opera */ +@media all and (min-width: 0px) { + #iStoreMenuBanner { margin-top: -2px; margin-bottom: 0; } +} + + + +/* header */ +/** There is new habraheader bellow; Gleb Arestov, july 09**/ +.header{ + padding:10px 0 0; + overflow:hidden; + width: 95%; + margin:0 auto; + min-width: 725px; + max-width: 1200px; + } + .header + .panel-personal{ + float:left; + } + .header + .panel-tools{ + float:right; + } + .header + .logo{ + text-align: center; + width:110px; + height:110px; + display:block; + margin:10px auto; + background:url(/i/bg-multilogo.png) no-repeat 50% -144px; + } + .header + .logo:hover{ + background-position:50% -274px; + } + .header + a.root{ + margin:0 auto; + width:240px; + height:130px; + background-position:0 0 !important; + } +.panel-personal, .panel-tools { + font-family: Arial, Helvetica, sans-serif; + } +.panel-personal{ + padding-left:35px; + width:250px; + color:#999; + line-height:1.33em; + } + .panel-personal dt a{ + margin-right:10px; + } + .panel-personal + .habrauser-charge{ + margin-top:0.4em; + font-size: 91%; + line-height:1.2em; + } + .panel-personal + a{ + color:#999; + } + .panel-personal + a:hover{ + color:#333; + } + .panel-personal + dd + a{ + margin-right:10px; + } + .panel-personal + a.habrauser{ + color:#343434; + font-weight: 700; + } + .panel-personal + a.habrauser:hover{ + color:#858585; + } + .panel-personal + .habrauser-newmail{ + background:url(/i/icos/new-message.gif) no-repeat 0 2px; + padding-left:21px; + margin-left:-21px; + } +.panel-tools{ + padding-right:1%; + width:271px; + + } + .panel-tools + .panel-settings{ + padding-right:28px; + margin-bottom:0.66em; + } + .panel-settings{ + text-align: right; + } + .panel-settings + a{ + color:#999; + } + .panel-settings + a:hover{ + color:#333; + } + .panel-settings + small{ + color:#ccc; + font-size:1em; + } + .panel-tools + .panel-search{ + float:right; + width:auto; + } + .panel-search{ + text-align: right; + margin-top:-2px; + padding:2px 0 2px 2px; + } + .panel-search + .panel-search-label{ + position:relative; + float:left; + } + .panel-search + .panel-search-label + span{ + position:absolute; + left:5px; + top:3px; + color:#ccc; + display:none; + cursor:pointer; + } + .panel-search + label.input-placeholding + span{ + display:block; + } + .panel-search + .in-text{ + border:1px solid #D1D1D1; + padding:2px; + float:left; + width:230px; + margin-right:5px; + height:15px; + padding:2px; + } + .panel-search + .in-text:focus{ + outline:1px solid #6DA3BD; + } + .panel-search + .in-submit{ + float:left; + padding:0; + margin:0; + border:none; + height:21px; + width:21px; + overflow:hidden; + background:transparent url(/i/bg-button-enter.png) no-repeat scroll 0 0; + } + .panel-search.enter-button-hightlight + input.in-submit, + .panel-search + input.in-submit:active{ + outline:none; + background-position: 0px -22px; + } + .panel-search + p{ + margin: 0; + } + .panel-search + .input-placeholding{ + color:#ccc; + } +.panel-nav-top{ + padding:30px 0 25px 35px; + overflow:hidden; + margin-top:-15px; + min-width:1000px; + text-transform: lowercase; + } + .panel-nav-top + li{ + height:36px; + line-height:1.2em; + float:left; + font-size:250%; + margin-right:26px; + color:#343434; + } + .panel-nav-top + li + a{ + color:#6da3bd; + } + .panel-nav-top + li + a:hover{ + color:#4D7285; + } + .panel-nav-top + li.current + a{ + color:#343434; + } + + .panel-nav-top + li.current-full + a{ + color:#000; + text-decoration: none; + cursor: default; + } + .panel-nav-top + li.current + a.disabled{ + text-decoration:none; + } + .panel-nav-top + li.current + a:hover{ + color:#000000; + } + .panel-nav-top + li span a{ + float:left; + font-size:0.5em; + line-height:1.2em; + max-width:140px; + } + +.panel-personal { width: 350px; } +.panel-personal iframe { display: -moz-inline-stack; display: inline-block; *display: inline; *zoom: 1; margin-left: 10px; position: relative; top: 3px; } + + + + +/* user_profile */ +.profile-header{ + float:left; + width:149%; + padding-left:35px; + margin:-8px 0 6px; + height:48px; + } + .profile-header h1{ + float:left; + margin-right:5px; + } + .profile-header h1 .favicon{ + margin-top:14px; + } + + .profile-header .profile-actions{ + float:left; + margin-right:10px; + position:relative; + } + .profile-header .profile-actions dt{ + float:left; + overflow: hidden; + color:#333333; + padding:0; + line-height:1em; + height:42px; + font-size:300%; + + } + .profile-header .profile-actions dt .habrauser{ + line-height:1em; + padding:2px 6px 9px ; + float:left; + } + + .profile-header + .profile-actions + dd.menu-arr{ + position:relative; + z-index:2; + float:left; + display:none; + cursor:pointer; + font-size:175%; + font-weight:400; + line-height:46px; + width:15px; + padding:0 11px 0 7px; + margin-left:-6px; + text-align:center; + vertical-align:middle; + height:40px; + color:#ccc; + } + + .profile-header + .profile-actions + dd.menu-arr + .press-done{ + display:none; + } + + .profile-header + .profile-actions + dd.menu-arr:hover{ + color:#333; + } + .profile-header + .profile-actions + .profile-actions-menu-container{ + display:none; + + position:absolute; + + width:200px; + right:0; + top:5px; + } + .company-header + .profile-actions-menu-too-left + .profile-actions-menu-container{ + right:0; + left:-21px; + } + .profile-header + .profile-actions + .profile-actions-menu{ + float:right; + padding:0; + background:#fff; + border:1px solid #333; + background:#fff; + margin-top:3px; + + } + .profile-header + .profile-actions + .profile-actions-menu + .cor-1px{ + padding:1px 0; + border:2px solid #333; + border-width:0 2px; + background:#fff; + margin:0 -2px; + } + .profile-header + .profile-actions + .profile-actions-menu + ul{ + background:#fff; + margin:0 -1px; + padding:7px 40px 7px 14px; + } + .profile-header + .profile-actions + .profile-actions-menu + li{ + padding:5px 0; + line-height:1.2em; + overflow:hidden; + font-size:108%; + } + .profile-header + .profile-actions + .profile-actions-menu + li + a{ + + } + .profile-actions-menu + li + a.js-cancel{ + float:right; + font-size:0.8em; + line-height:1.2em; + padding-top:2px; + } + .js-you-love-this-corp .js-prof-company-addfan, + .js-you-work-here .js-prof-company-worker, + .js-prof-company-notworker, + .js-prof-company-removefan{ + display:none; + } + .js-you-love-this-corp .js-prof-company-removefan, + .js-you-work-here .js-prof-company-notworker{ + display:block; + } + .company-header + .profile-actions + .profile-actions-menu + ul{ + padding:22px 14px 7px 14px; + } + + .company-header + .profile-actions + .profile-actions-menu-container{ + width:258px; + } + .company-header + .profile-actions + .profile-actions-menu{ + float:none; + } + + .profile-header + .profile-actions.profile-actions-usable + dd.menu-arr{ + display:block; + } + .profile-header + .profile-actions.profile-actions-usable + dt:hover{ + border-color:#B7D0E5; + } + .profile-header + .profile-actions.active + dt{ + border-color:transparent !important; + } + .profile-header + .profile-actions.active + dd.menu-arr{ + color:#333; + } + .profile-header + .profile-actions.active + dd.menu-arr + .press-can{ + display:none; + } + .profile-header + .profile-actions.active + dd.menu-arr + .press-done{ + display:inline; + } + .profile-actions.active + .profile-actions-menu-container{ + display:block; + } + + .profile-header + .profile-karma-holder{ + float:left; + margin-top:-9px; + margin-left: 10px; + } + .profile-header + .profile-karma-holder + dl{ + text-align:center; + } + .profile-header + .karma{ + padding:0; + margin-right:15px; + } + .profile-header + .habraforce{ + margin:0; + padding:0; + } + .profile-header + .profile-adm{ + padding: 0 0 0; + float:left; + margin-left:20px; + } + .profile-header + .profile-adm + a{ + display:block; + float:left; + margin:0 5px; + width:24px; + height:24px; + line-height:24px; + vertical-align:bottom; + text-align:center; + padding:6px; + } + .profile-header + .profile-adm + a.invitogiver{ + background: url(/i/img-icon-invite.png) no-repeat 50% 50%; + } + .profile-header + .profile-adm + a.profedit{ + background: url(/i/topic_edit.gif) no-repeat 50% 50%; + } + + .profile-header + .profile-adm + a:hover{ + background-color:#eee; + } +.profile-header +.karma, +.profile-header +.habraforce{ + font-family: Verdana, sans-serif; + } +.profile-header .karma a{ + margin-top:9px; + width:15px; + height:26px; + } +.profile-header .karma .vote_plus { + background:url(/i/icos/icons_vote_karma_big.gif) no-repeat 0 0 !important; + } +.profile-header .karma .vote_minus { + background:url(/i/icos/icons_vote_karma_big.gif) no-repeat -16px 0 !important; + } + +.profile-header .karma.voted_plus .vote_plus { + background:url(/i/icos/icons_vote_karma_big.gif) no-repeat 0 -27px !important; + } + +.profile-header .karma.voted_minus .vote_minus { + background:url(/i/icos/icons_vote_karma_big.gif) no-repeat -16px -27px !important; + } + + + +.profile-header .karma dd.vote{ + display:block; + } +.profile-header +.karma .mark, +.profile-header +.habraforce .number, +.profile-header +.habraindex .number{ + background:transparent; + font-size:300%; + } + .profile-header + .karma .mark{ + color:#6c6; + padding:0; + } + .profile-header + .habraforce .number{ + color:#CC66CC; + } +.profile-header .karma dt, +.profile-header .karma .total, +.profile-header .habraforce dt, +.profile-header .habraindex dt{ + color:#ccc; + } +.profile-header dt{ + margin-bottom:-6px; + } +.profile-header .karma .total{ + margin-top:-4px; + } + +.company .page-navigation{ + float:none; + width:auto; + padding-left:35px; + } +.profile-header .habraindex .number{ + color:#CC66CC; + } +.profile .profile-header{} + +.profile #sidebar{ + margin-top:46px; +} + + + + +/* autosuggest */ +/* autosuggest */ +.js-autosuggest-holder { + width:100%; + position:relative; + z-index:10; +} +.js-autosuggest-holder .js-autosuggest-output { + width:100%; + overflow:hidden; + position:absolute; + z-index:10; + cursor:pointer; + padding-bottom:1px; + +} +.js-autosuggest-holder .js-autosuggest-output iframe { + display:none; + display/**/:block; + position:absolute; + top:0; + left:0; + z-index:-1; + width:3000px; + height:3000px; +} +.js-autosuggest-output-container { + position: relative; height: 0; + } + .js-autosuggest-output div { + text-align:left; + position:relative; + padding: 3px 0 3px 3px; + font-size:0.9em; + border:1px solid #dadada; + line-height:1.4em; + margin-bottom:-1px; + background-color: #fff; + cursor: pointer; + } + .js-autosuggest-output div em { + font-style:normal; + font-weight:bold; + } + .js-autosuggest-output div.active { + background-color:#fdf5e6; + z-index:5; + border-color:#eee; + } +.js-autosuggest-holder .js-autosuggest-output .js-autosuggest-item { + padding:3px; + + border-bottom:1px solid #7992b2; +} +.js-autosuggest-holder .js-autosuggest-output .current { + background-color:#7992b2; +} +.js-autosuggest-holder .js-autosuggest-output .js-autosuggest-item em { + font-weight:bold; + font-style:normal; +} + + + + + + + + .panel-search + .js-autosuggest-holder{ + width:100%; + } + .panel-search .js-autosuggest-output-container{ + clear:both; + width:236px; + z-index:1; + } + .panel-search p{ position:relative;z-index:3;} + /* Autosuggest в форме поиска */ + #info-search .js-autosuggest-holder { + position:relative; + } + #info-search .js-autosuggest-output { + width:100.3%; + left:0; + top: 22px; + margin-left: -3px; + text-align:left; + } + + + + /* Autosuggest в форме поиска по тегам*/ + .tag-search { + position:relative; + } + .tag-search .js-autosuggest-output { + width:51%; + left:97px; + top: 37px; + z-index:30; + } + .tag-search .js-autosuggest-output div { + padding:0 6px; + } + + .main-search .js-autosuggest-output { + width: 78%; + padding-right:8px; + } + .main-search .js-autosuggest-output div{ + margin-right:-8px; + } + + + + /* Autosuggest в форме поиска по тегам*/ + #favourites_add .js-autosuggest-holder div{ + z-index:3; + position:relative; + } + #favourites_add .js-autosuggest-holder .js-autosuggest-output-container{ + z-index:1; + } + #favourites_add .js-autosuggest-output { + left:0; + top: 000; + z-index:30; + } + + + + + /* autosuggest */ + #js-topic-form-holder .js-autosuggest-holder { + position:relative; + } + #js-topic-form-holder .js-autosuggest-output { + width:100.3%; + left:0; + } + + + + /* //autosuggest */ + + + + + + #write-post .js-autosuggest-holder { + position:relative; + } + #write-post .js-autosuggest-output { + padding:0; + width:101%; + margin-top: -10px; + } + + +/* //autosuggest */ + + + +/* top_companies */ +.corps-list-top{ + +} + .corps-list-top + .page-nav, + .corps-list-top + .corps-list-top-menu{ + padding-left:35px; + } +.corps-list{ + padding-top:17px; + color:#7d7c7c; + font-family:Tahoma, sans-serif; + } + .corps-list + .corps-listhead{ + margin:0 0 7px; + line-height:1.2em; + } + .corps-list + .corps-listhead + dt.corp-name{ + height:1px; + } + .corps-list + .corps-listhead + dd.copr-habraindex{ + font-family:Arial,sans-serif; + font-size:100%; + color:inherit; + + padding-left:4px; + margin-right:-4px; + } + .corps-list li{ + overflow:hidden; + padding-left:35px; + margin:0 0 20px; + line-height:31px; + } + .corps-list li dt, + .corps-list li dd{ + float:left; + } + + + .corps-list li dt.corp-name{ + font-size:208%; + width:63%; + } + .corps-list li dt.corp-name + img{ + line-height:1em; + height:16px; + width:16px; + float:left; + margin:9px 12px 0 -28px; + font-size:33%; + } + .corps-list li dd.corp-descripton{ + padding-top:1px; + float:none; + clear:left; + width:47%; + line-height:1.2em; + font-size:108%; + } + .corps-list li dd.corp-descripton + p{ + margin:0; + } + .corps-list li dd.corp-descripton + p + a{ + color:#666; + font-size:107%; + } + .corps-list li dd.corp-descripton + p + a:hover{ + color:#A3A3A3; + } + .corps-list li dd.copr-habraindex{ + width:21%; + color:#CC66CC; + float:right; + } + .corps-list li dd.copr-habraindex, + .corps-list li dd.copr-habraindex-change{ + font-family:Verdana, sans-serif; + font-size:158%; + } + .corps-list li dd.habraindex-up{ + color:#74c262; + } + .corps-list li dd.habraindex-down{ + color:#ff0033; + } +.corps-list-page-description{ + color:#999; + } + .corps-list-page-description + p{ + font-size:133%; + margin:0 0 1em; + } + +.corps-list-side +.side-rubrikator{ + margin-top:35px ; + } +.corps-list-side +a.add{ + color:#999; + font-size:133%; + } + .corps-list-side + a.add:hover{ + color:#333; + } +.corps-list-side +.alfikator { + margin:30px 0; + } + .alfikator + ul{ + font-size:166%; + overflow:hidden; + color:#ccc; + padding:1px 1px; + padding-left:4px; + margin-left:4px; + margin:0 0 30px; + } + .alfikator + ul + li{ + float:left; + width:10%; + margin-right:8px; + } + .alfikator + ul + li + a{ + color:#666; + text-decoration:none; + } + .alfikator + ul + li + a:hover{ + color:#A3A3A3; + } + .alfikator + ul + li.active + a{ + padding:2px 4px; + margin-left:-4px; + color:#333; + background:#C5DAE5; + } + + + +/* users-lists */ +h1.users-list-geo{ + color:#999 ; + margin:-10px 0 3px !important; +} +h1.users-list-geo a{color:#999;} +h1.users-list-geo a:hover{color:#333;} + +.lion-king{ + background:url(/i/bg_lion_king.png) no-repeat 0px 0px; + width:23px; + height:20px; + position:absolute; + top:-21px;left:12px; +} +#people-list{ + margin-left:-18px; +} +#people-wrapper .corplist-suggest-form{margin-bottom:10px;padding-top:0;padding-left:0;} +table.users-list{ + width:100%; + } + + table.users-list th { + font: normal 1em/180% Arial,sans-serif; + color:#999; + overflow:hidden; + padding:0 !important; + margin:0; + text-align:left; + } + + table.users-list td { + vertical-align: top; + padding:0 0 26px; + } + table.users-list .rating-dyn { + vertical-align: top; + font-size: 1em; + width:18px; + text-align:left; + } + table.users-list .rating-dyn .rating-dyn-con{ + position:relative; + width:18px; + margin-top:30px; + z-index:5; + } + table.users-list .rating-dyn .rating-dyn-con .rating-dyn-text{ + position:absolute; + z-index:12; + top:-7px; + background:#fff; + padding-right:2px; + padding-top:1px; + right:5px; + text-align:right; + white-space:nowrap; + } + table.users-list .userava{ + width:48px; + vertical-align: top; + } + table.users-list .userava .habrauserava{margin-top:5px;position:relative;} + table.users-list .user { + text-align: left; + padding-left: 14px; + line-height:1.2em; + color:#999; + } + table.users-list .user dl{ + padding-right:3px; + } + table.users-list .user .lifetime{ + font-size: 100% ; + color:#999; + } + table.users-list .user .last_post{ + font-size: 100% ; + color:#999; + padding-right:20px; + } + table.users-list .user .last_post a{ + color: #666666; + font-size: 100% ; + } + table.users-list .user .last_post a:hover{ + color: #333; + } + + table.users-list .user a { + + } + table.users-list .user dt{ + margin-bottom:5px; + font-size:200%; + line-height: 1em; + } + table.users-list .userkarma{ + color:#74c262; + width:15%; + font-size:150%; + } + table.users-list .userrating{ + color:#CC66CC; + font-size:150%; + width:10%; + } + + + +/* yandex_direct */ +#yandex_direct{padding:1.67em;} +.y5_vertical { padding: 1em 1.4em; margin-bottom: 0; } + .y5_vertical .y5_all a, + .y5_vertical .y5_how a, + #y5_direct2 .y5_all a, + #y5_direct2 .y5_how a { color: #F0F0E7 !important; } + + + + + +/* highlight */ +pre code { + font-size: 12px; + padding: 0.5em; + background: #f8f8f8; + display: block; + } + pre .subst, + pre .title { + font-weight: normal; + color: #000; + } + + pre .comment, + pre .template_comment, + pre .javadoc, + pre .diff .header { + color: #808080; + } + + pre .annotation, + pre .decorator, + pre .preprocessor, + pre .doctype, + pre .pi, + pre .chunk, + pre .shebang, + pre .apache .cbracket { + color: #808000; + } + + pre .tag, + pre .tag .title, + pre .pi + pre .id, + pre .attr_selector, + pre .pseudo, + pre .literal, + pre .keyword, + pre .hexcolor, + pre .css .function, + pre .ini .title, + pre .css .class, + pre .list .title, + pre .tex .command { + color: #4d7386; + } + + pre .attribute, + pre .rules .keyword, + pre .number, + pre .date, + pre .regexp, + pre .tex .special { + color: #2f98ff; + } + + pre .number, + pre .regexp { + font-weight: normal; + } + + pre .string, + pre .value, + pre .filter .argument, + pre .css .function .params, + pre .apache .tag { + color: #339900; + } + + pre .symbol, + pre .ruby .symbol .string, + pre .ruby .symbol .keyword, + pre .ruby .symbol .keymethods, + pre .char, + pre .tex .formula { + color: #968e5b; + } + + pre .phpdoc, + pre .yardoctag, + pre .javadoctag { + text-decoration: underline; + } + + pre .variable, + pre .envvar, + pre .apache .sqbracket, + pre .nginx .built_in { + color: #968e5b; + } + + pre .addition { + background: #baeeba; + } + + pre .deletion { + background: #ffc8bd; + } + + pre .diff .change { + background: #bccff9; + } + + + + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=favicon.ico +Content-Type: image/x-icon; name=favicon.ico +Content-Location: http://habrahabr.ru/i/favicon.ico +Content-Transfer-Encoding: Base64 + +AAABAAIAICAAAAEAIACoEAAAJgAAABAQAAABACAAaAQAAM4QAAAoAAAAIAAAAEAA +AAABACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAsKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/r556/7Cgfv+woH7/sqKA/7OkgP+zpIH/sqSB/7KjgP+woHz/sKB+/7Cg +fv+woH7/sqOA/7Kkgf+zpIH/s6SA/7Cgfv+woH7/sKB+/7Cgfv+woH7/rp53/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+unXj/sKB+/7Cg +fv///////////////////////////7Cgfv+woH7/sKB+/7Cgfv////////////// +/////////////7Cgfv+woH7/sKB+/7Cgfv+vn3v/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+//////////////////// +////////sKB+/7Cgfv+woH7/sKB+//n69///////////////////////sKB+/7Cg +fv+woH7/sKB+/6+fe/+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7///////////////////////////+woH7/sKB+/7Cg +fv+woH7/+vr3//////////////////////+woH7/sKB+/7Cgfv+woH7/r597/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv///////////////////////////7Cgfv+woH7/sKB+/7Cgfv/29O////////// +/////////////7Cgfv+woH7/sKB+/7Cgfv+vn3v/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+//////////////////// +////////sKB+/7Cgfv+woH7/sKB+//b18P//////////////////////sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7///////////////////////////+woH7/sKB+/7Cg +fv+woH7/9fTv//////////////////////+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv///////////////////////////7Cgfv+woH7/sKB+/7Cgfv////////////// +/////////////7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+//////////////////// +////////////////////////////////////////////////////////sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/////////////////////////////////+vn2//// +///8+/r//v7+//////////////////////+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv////////////////////////////////////////////////////////////// +/////////////7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+//////////////////// +////////////////////////////////////////////////////////sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7///////////////////////////////////////// +//////////////////////////////////+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv///////////////////////////7Cgfv+woH7/sKB+/7Cgfv////////////// +/////////////7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+//////////////////// +////////sKB+/7Cgfv+woH7/sKB+////////////////////////////sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7///////////////////////////+woH7/sKB+/7Cg +fv+woH7///////////////////////////+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv///////////////////////////7Cgfv+woH7/sKB+/7Cgfv////////////// +/////////////7Cgfv+woH7/sKB+/7Cgfv+vn3r/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+//////////////////// +////////sKB+/7Cgfv+woH7/sKB+////////////////////////////sKB+/7Cg +fv+woH7/sKB+/6+fev+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7///////////////////////////+woH7/sKB+/7Cg +fv+woH7///////////////////////////+woH7/sKB+/7Cgfv+woH7/r596/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv///////////////////////////7Cgfv+woH7/sKB+/7Cgfv////////////// +/////////////7Cgfv+woH7/sKB+/7Cgfv+woHv/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/wAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAABAAAAAgAAAAAQAgAAAA +AABABAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwoH//sKB//7Cgf/+woH//sKB//7Cg +f/+woH//sKB//7Cgf/+woH//sKB//7Cgf/+woH//sKB//wAAAAAAAAAAsKB//7Cg +f/+woH//sKB//7Cgf/+woH//sKB//7Cgf/+woH//sKB//7Cgf/+woH//sKB//7Cg +f/8AAAAAAAAAALCgf/+woH//sKB//////////////////7Cgf/+woH////////// +////////sKB//7Cgf/+woH//AAAAAAAAAACwoH//sKB//7Cgf/////////////// +//+woH//sKB//////////////////7Cgf/+woH//sKB//wAAAAAAAAAAsKB//7Cg +f/+woH//////////////////sKB//7Cgf/////////////////+woH//sKB//7Cg +f/8AAAAAAAAAALCgf/+woH//sKB//////////////////7Cgf/+woH////////// +////////sKB//7Cgf/+woH//AAAAAAAAAACwoH//sKB//7Cgf/////////////// +/////////////////////////////7Cgf/+woH//sKB//wAAAAAAAAAAsKB//7Cg +f/+woH////////////////////////////////////////////+woH//sKB//7Cg +f/8AAAAAAAAAALCgf/+woH//sKB///////////////////////////////////// +////////sKB//7Cgf/+woH//AAAAAAAAAACwoH//sKB//7Cgf/////////////// +//+woH//sKB//////////////////7Cgf/+woH//sKB//wAAAAAAAAAAsKB//7Cg +f/+woH//////////////////sKB//7Cgf/////////////////+woH//sKB//7Cg +f/8AAAAAAAAAALCgf/+woH//sKB//////////////////7Cgf/+woH////////// +////////sKB//7Cgf/+woH//AAAAAAAAAACwoH//sKB//7Cgf/+woH//sKB//7Cg +f/+woH//sKB//7Cgf/+woH//sKB//7Cgf/+woH//sKB//wAAAAAAAAAAsKB//7Cg +f/+woH//sKB//7Cgf/+woH//sKB//7Cgf/+woH//sKB//7Cgf/+woH//sKB//7Cg +f/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAAgAEAAIAB +AACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAP// +AAD//wAA + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=karma.css +Content-Type: text/css; charset=utf-8; name=karma.css +Content-Location: http://habrahabr.ru/css/1307631427/karma.css +Content-Transfer-Encoding: 8bit + +.karma-holder { + position: relative; + clear: both; + width: 100%; + height: 4em; + float: left; + border-bottom: 20px solid #fff; /*trick for IE 6*/ + white-space: nowrap; + background: url(/i/bg-profile-center-line.gif) left center repeat-x; +} + + .blogs h1 a { + position: relative; + font: 2.83em/2.17em Verdana, sans-serif; /*34/12*/ + text-decoration: none; + } + + body.blogs #main-content h1 a img { + float: left; + margin: 15px 10px 0 0; + border: 1px solid #ddd; + } + + +.karma, +.habraforce, +.blog-rating, +.habramoney { + font-family: Arial, Helvetica, sans-serif; + text-align: center; + float: left; + /*border: 1px solid red;*/ + background: #fff; +} + +.karma { + padding: 0 .83em 0 55px; +} + +.karma-holder .infinity .vote { + display: none; +} + +.karma-holder .infinity-sign { + display: none; + font-size: 1.83em; + font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; + margin-top: -5px; + color: gray; +} + +.karma-holder .infinity .infinity-sign { + display: block; +} + +.habraforce, +.blog-rating, +.habramoney { + padding: 0 1em; +} + +.habraforce, +.blog-rating { + margin: 0 20px 0 20px; + padding-bottom: 1.1em; +} + +.karma dl {float:left;} + .karma dd.vote { + margin:0 auto; + width:auto; + overflow:hidden; + display:inline; + } + .karma dt, .karma .total { + font-size: .83em; + } + .karma .total { + clear:left; + } + .karma a { + margin:3px 3px 0; + float:left; + width:9px; + height:20px; + } + .karma .mark { + float:left; + } + .karma strong { + font-weight:normal; + } + .karma .vote_plus { + background:url(/i/icos/icons_vote_karma.gif) no-repeat left top; + } + .karma .vote_minus { + background:url(/i/icos/icons_vote_karma.gif) no-repeat right top; + } + .karma.no_voting .vote_plus, + .karma.no_auth .vote_plus, + .karma.mine .vote_plus, + .karma.voted_minus .vote_plus { + background:url(/i/icos/icons_vote_karma.gif) no-repeat left bottom; + } + .karma.no_voting .vote_minus, + .karma.no_auth .vote_minus, + .karma.mine .vote_minus, + .karma.voted_plus .vote_minus { + background:url(/i/icos/icons_vote_karma.gif) no-repeat right bottom; + } + .habraforce dt, + .blog-rating dt, + .habramoney dt, .habramoney .pay { + font-size: .83em; + float: none; + } + .karma .total em { + font-style:normal; + } + .karma .mark, + .habraforce .number, + .blog-rating .number, + .habramoney .number { + font-size: 1.83em; /*22/12*/ + padding: 0 .15em; + color: #fff; + } + .karma .mark { + background-color:#74c262; + } + .habraforce .number { + background: #25a8ff; + } + .blog-rating .number { + background: #d479b3; + } + .habramoney .number { + background: #ef7f35; + } + + .buttons { + padding: .83em 0 0 .83em; + white-space: nowrap; + float: right; + background: #fff; + } + .blogs .buttons { + padding-left: 0; + } + .karma-holder .buttons a {margin-right:8px;} + + .blogs .buttons img { + border: 1px solid #ddd; + } + .blogs .karma-holder .buttons a {margin-right:0px;margin-top:4px !important;} + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/png +Content-Location: http://habrahabr.ru/i/icos/blog-small-open.png +Content-Transfer-Encoding: Base64 + +iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAMAAAAolt3jAAAABGdBTUEAAK/INwWK +6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFQUExURfT9 +/8/o/N3w+LTP4J+/17PO4PP2+LjR47nZ8/j6+3OXrpu1yXGWrrDQ63KXrn2Zq16E +nnybr6DD2Iyswb/d84qsw+v2/bbQ4Mba6vb///X+/3aXr2uPqN/v9t7r8q66wYam +vZ290Z680KPA1oGkvdzw/KPA0uX1/KvG2XyetI6xyJmvvsHQ2H6gtNjt/GKDmcnf +7MLLz+Dz+qXA0TdDTZ67zzE3PLHO3tDf6ODz/Oz7/vz//7bR44uwyd/w+K3O39To +86fE2K3P453A1qWoq3uEjmWKo93k6dfn78PJzszW3c3m88HV5J23yqPB2Ze70ez6 +/lZqeo6rwY2xy5+90NLn8q7K3Ji1yuXm59Do9HKWrZKxxtLr/LXQ4Oz6/abI36XB +1m+Uq5m80oKhuPT+/7PO33mRpavG18bj87rQ283c5NHq8+j4/f7//////////0ah +peUAAABwdFJOU/////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////// +/////////////////////////////////wC3YWLSAAAAsUlEQVR42mKQYGe3EY9l +ZmZN9cnPz2dgzYMBDRA3LC8XChJAXEdrhiwQYGAI4eTMZ1BLyYECblElLwZTK6ZM +EGAylFeOF2QIV88GA0VfuYg0fYZoS+90INDyNzDScfVkEFbNAIIkIYeA0CCXfAYF +PREWFlsnO0nZYH62fIbkGA4OXmOpXDFnATagvZqMjIx+FnGR9jyJIGfocvFFBXqY +q7jJSIO4QJxvZqLtng8GAAEGAFBLNxR9F8JmAAAAAElFTkSuQmCC + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline +Content-Type: image/jpeg +Content-Location: http://habrahabr.ru/i/join_button_bg.png +Content-Transfer-Encoding: Base64 + +/9j/2wBDABELDA8MChEPDg8TEhEUGSobGRcXGTMkJh4qPDU/Pjs1OjlDS2BRQ0da +SDk6U3FUWmNma2xrQFB2fnRofWBpa2f/2wBDARITExkWGTEbGzFnRTpFZ2dnZ2dn +Z2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2f/wAAR +CAAaAAEDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAIBBv/EABUQAQEA +AAAAAAAAAAAAAAAAAAAR/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/EABQRAQAAAAAA +AAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/AOzomgJowB//2Q== + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=profile.css +Content-Type: text/css; name=profile.css +Content-Location: http://habrahabr.ru/css/1307631427/profile.css +Content-Transfer-Encoding: 8bit + +/* Profile header */ + +.profile-header { + float: left; + font-size: 12px; +} + .nick-holder { + float: left; + width: 100%; + clear: both; + } + .profile-header h1 { + color: #666; + padding: 0; + font-size: 1em; + } + .profile-header h1 a { + font: 2.83em/135% Verdana, sans-serif; /*34px/12px*/ + text-decoration: none; + color: #666; + } + + .nick-holder .avatar-link { + float: left; + padding-right: 15px; + } + .nick-holder .avatar-link img, .nick-holder .edit img, .hresume .edit img { + border: 1px solid #DCDCDC; + } + + .hresume .edit img {margin-left:10px;} + + .nick-holder div { + float: left; + } + .nick-holder .twitter { + font: .9em/100% Arial, sans-serif; + font-weight: 400; + color: #999; + margin-bottom: 10px; + margin-top: -10px; + display: block; + float: left; + } + + +/* Userinfo+microformats */ + +.userinfo { + width: 100%; +} + +.company .userinfo { + float: left; + clear:both; + margin-top: 20px; +} + +.userinfo dl { + margin: 0 0 10px 0; + padding:0; + clear:left; + font-size: 1.33em; /*16/12*/ + } +.userinfo dl.fn { + float: left; + clear: both; +} + .userinfo dl dt { + margin: 0; + padding: 0 .5em 0 0; + float: left; + width: 11em; + color:#666; + font-size: 83%; + font-weight:bold; + text-align: right; + } + + .userinfo dl dd { + margin: 0 0 0 11em; + padding: 0 0 7px 12px; + text-align: left; + font-size: 83%; + } + + /* Так выводится в профайле заголовок имя юзера */ + + .userinfo dl.user-name { + float: none; + clear: both; + margin: 0 0 1em 9.85em; + padding-top: 1em; + } + .userinfo + .leader-position{ + font-size:0.8em; + color:#999; + } + .userinfo dl.user-name dt, .userinfo dl.user-name dd { + display: block; + float: none; + width: auto; + margin: 0; + padding: 0; + text-align: left; + color: rgb(119, 119, 119); + } + .userinfo dl.user-name dt { + font-size: 156%; + font-weight: normal; + } + .userinfo dl.fn dd a { + color: rgb(119, 119, 119); + } + .userinfo dl.user-name dd.twitter{ + font-family: Arial, sans-serif; + font-size:68%; + margin:1.5em 0 1.5em -22px; + padding-left:22px; + color:#999; + + background:url(/i/bg-icon-twitter.gif) no-repeat; + } + .userinfo dl.user-name dd.twitter #js-twitter-status-live{ + padding-top:3px; + } + + /* // Так выводится в профайле заголовок имя юзера */ + + /** + * Секретные заметки о пользователе + */ + .userinfo .note{} + .userinfo .note .add_note{cursor:pointer;color: green;border-bottom:1px dashed green;} + .userinfo .note .add_note.hide{display:none;} + .userinfo .note .current_note.hide{display:none;} + .userinfo .note .edit_note{display:none;} + .userinfo .note .edit_note.show{display:block;} + .userinfo .note .edit_note .description{color: #999999;font-size: 11px;margin: 2px 0 3px;overflow: hidden;} + .userinfo .note .edit_note input.text{width: 32em;} + .userinfo .note .edit_note input.btn{margin-right:0.2em;margin-top:0.5em;} + .userinfo .note .edit_note .cancel_note{cursor:pointer;color:#6DA3BD;border-bottom:1px dashed #6DA3BD;margin-left:0.2em;} + + +.dl_logic_wrap { + margin: 0 0 20px 0; + float: left; + width: 100%; +} + +.friends_list, .blogs_list, +#favorite_companies_list, #working_in, #staff, .interests { + width: 100%; + } + + + .friends_list ul li, .blogs_list ul li, + #favorite_companies_list ul li, #working_in ul li, #staff ul li { + + display: inline-block; + padding-left: 18px; + } + .interests ul li { + display: inline; + } + .friends_list ul li a, .blogs_list ul li a, + #favorite_companies_list ul li a, #working_in ul li a, #staff ul li a, + .interests ul li a { + margin-right: 11px; + color:#666; + font: normal 92.4%/1.5em arial; + } + .friends_list ul li a:hover, .blogs_list ul li a:hover, + #favorite_companies_list ul li a:hover, #working_in ul li a:hover, #staff ul li a:hover, + .interests ul li a:hover{ + color:#A3A3A3 + + } + .interests ul li a { + margin: 0; + } + .friends_list ul li, #staff ul li { + background: url(/i/bg-user2.gif) 0 50% no-repeat; + } + .blogs_list ul li { + background: url(/i/icos/blog-small-open.png) 0 60% no-repeat; + line-height: 150%; + } + #favorite_companies_list ul li, #working_in ul li { + padding-left: 20px; + background: url(/i/icos/company-small.png) 0 60% no-repeat; + line-height: 150%; + } + .ICQ a, .Skype a { + text-decoration: none; + } + .ICQ a img { + margin: -.1em 3px 0 0; + } + .ICQ a > img { + margin-top: -.5em; + } + .Skype a img { + margin-right: 3px; + } + .Skype a > img { + margin-top: -.5em; + } + + /* Marking links to user's mutual friends and groups */ + + .friends_list ul li a.cross, .blogs_list ul li a.cross, + #favorite_companies_list ul li a.cross, #working_in ul li a.cross, + #staff ul li a.cross, + .interests ul li a.cross { + font-weight: bold; + } + + +.profile .banner { + margin-top: 2em; +} +.profile . +.company .userinfo { + margin: 20px 0 20px 0; +} + + + +/* Recommendations (user to user) */ + + +.user-recommend-user {clear:both;} + + +/* // Recommendations (user to user) */ + + + + + + + + + + +/* Companies section */ + +.profile .live, .company .tag-cloud { + background: #f0f0e7 url(/i/bg-corner-top-left.gif) no-repeat 0 0; + padding: 0; +} + .company .tag-cloud ul { + float: left; + margin: 0 20px 20px; + } + + +.company .live ol { + margin: 0 1.67em; +} + .company .live ol li { + line-height: 130%; + margin-bottom: .42em; /*5px*/ + color: #999; + } + .company .live ol li a:hover { + text-decoration: none; + color: #fff; + background: #6c6; + } + .company .new-feedbacks div div { + padding-bottom: .84em; /*10px*/ + } + +#stats h2 { + font: normal 2.17em/110% Verdana, sans-serif; /*26/12*/ + color: #999; + padding-bottom: .38em; +} + +#stats dl { + margin: .83em 0; +} + #stats dl dt, #stats dd, #stats dl ul, #stats dl ul li { + display: inline; + } + #stats dl dt { + font: normal 1.5em/110% Verdana, sans-serif; + margin-right: .3em; + letter-spacing: -1px; + color: #ccc; + } + #stats dd { + line-height: 190%; + color: #666; + } + #stats dd li { + margin-right: .3em; + } + #stats dd a { + color: #999; + } +.friends_list ul .empty_spaces, #staff ul .empty_spaces { + margin-left:-0.7em; + background:none; + padding-left:0; + font-size:92.4%; + line-height:1.5em; +} + + /* Шапка профайла компании */ + .profile-title {margin: 0 0 20px 0;} + .profile-title .favicon {float: left; clear:both; margin: .75em 23px 0 23px;} + .profile-title h1 { + font: 2.5em/100% Verdana,sans-serif; /*30px/12px*/ + } + .profile-title h1 a {color: #666; text-decoration: none;} + .profile-title h1 a.admin-link {color: #ccc; font-size: 70%;text-decoration: none;} + .profile-title h1 a.admin-link:hover {color: green;} + +/* Отзывы пользователей о компании */ +.company-comments {float:left; clear:both; width:100%;} + + +/* Resume */ + + .hresume h2 { + font: 1.67em Arial, sans-serif; /*20/12*/ + margin-top: 30px; + margin-left: 7.75em; + margin-bottom: 20px; + letter-spacing: -1px; + color: #333; + float: none; + clear: both; + } + .hresume dl dd { + line-height: 100%; + } + +#habrastat { + margin-top: 40px; +} + .hresume .price_block { + padding-top:1em; + } + .hresume .price_block span { + color:#666633; + font-size:2.8em; + letter-spacing:-1px; + line-height: 120%; + } + .hresume .price_block span.price { + color:#fff; + background-color:#9CC; + font-size:1.1em; + } + + .hresume .user-name { + padding-top:0; + } + + .hresume .hire_block span { + color:#E3A2A0; + font-family:arial,sans-serif; + font-size:2.6em; + letter-spacing:-1px; + line-height:40px; + } + .hresume .hire_block input.hire_button { + background-color:#E3A2A0; + color:#FFF; + font-size:1.1em; + } + + +.resume .vevent {margin-bottom:30px;} + + +/* Форма выборки постов в разделе "Моё" профайла */ + +.filter-form ul { + margin: 0 0 0 15px; + padding-bottom: 10px; +} + .filter-form li {float: left; clear: both; margin-bottom: 5px;} + .filter-form input, .filter-form label {float: left;} +input.show { + float: right; + clear: both; + margin: -10px 10px 10px 0; +} + +/*Вакансии пользователя*/ + +.user-vacancies ol { + list-style: decimal; + margin: 0 10px 20px 40px; + color: #999; +} + .user-vacancies {line-height: 170%;} + +/* Блок с выводом Избранного, постов и комментов юзера. Отступы для топиков и комментов */ + + +.comments .items { + float: left; + clear: both; + width: 100%; + margin-top: 30px; +} + + +/* Юзернеймы и компании внутри хабратопиков и комментариев */ + +a.user_link { + padding-left:14px; + color:#666; + font: normal 92.4%/1.5em arial; + background: url(/i/bg-user2.gif) 0 60% no-repeat; +} + +.company_link { + padding-left:14px; + color:#666; + font: normal 92.4%/1.5em arial; + background: url(/i/bg-company.gif) 0 60% no-repeat; +} + +.company-header .js-addFan, +.company-header .js-removeFan, +#js-addWorker, +#js-removeWorker, +span#js-companyWorkerInactive, +span#js-companyFanInactive { + margin-top: 15px; + display: block; + width: 30px; + float: left; + background-repeat: no-repeat; +} + +.company-header .js-addFan.hidden, +.company-header .js-removeFan.hidden, +#js-addWorker.hidden, +#js-removeWorker.hidden { + display: none; +} +.company-header a.js-addFan { + background-image: url('/i/company-fav.gif'); + height: 19px; + margin-left: 27px; +} +.company-header a.js-removeFan { + background-image: url('/i/company-fav.gif'); + background-position: left -19px; + height: 19px; + margin-left: 27px; +} +span#js-companyFanInactive { + background-image: url('/i/company-fav.gif'); + background-position: left -57px; + height: 19px; + width: 24px; +} + +a#js-addWorker { + background-image: url('/i/company-work.gif'); + height: 20px; +} +a#js-removeWorker { + background-image: url('/i/company-work.gif'); + background-position: left -20px; + height: 20px; +} +span#js-companyWorkerInactive { + background-image: url('/i/company-work.gif'); + background-position: left -60px; + height: 20px; + width: 28px; +} + +a#js-blogInfoSwitcher, +a.js-addBlogMember, +a.js-removeBlogMember { + height: 20px; + display: block; + float: left; + background-repeat: no-repeat; + background-color: white; +} +a.js-addBlogMember, +a.js-removeBlogMember { + padding: 5px; + height:16px; + display: block; + background: #dbdbdb url(/i/join_button_bg.png) repeat-x left top; + text-shadow: 0 1px #ededed; + color: #6b6b6b; + text-decoration:none; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + border-style: solid; + border-width: 1px; + font-weight:bold; + border-color: #afafaf #a9a9a9 #a3a3a3; +} +a:hover.js-addBlogMember, +a:hover.js-removeBlogMember{color:#5b5b5b} + + +a.js-addBlogMember.hidden, +a.js-removeBlogMember.hidden { + display: none; +} +a#js-blogInfoSwitcher { + width: 22px; + background-image: url(/i/icos/blog-info.gif); +} +a#js-blogInfoSwitcher.regular { + background-position: left top; +} +a#js-blogInfoSwitcher.regular:hover { + background-position: left bottom; +} +a#js-blogInfoSwitcher.active { + background-position: left bottom; +} +#js-invitationList { + height: 300px; + margin-left: 10px; + margin-right: 10px; + overflow: auto; + overflow-x: hidden; +} + + +.bloginfo{} +.bloginfo .blog-about-text-content{margin:0 1.67em 1.67em !important;overflow:hidden;} +.bloginfo .blog-about-text-content .join{float:left;overflow:hidden;margin-top:6px;} +.bloginfo .blog-about-text-content .stats{float:left;overflow:hidden;color:#999999;font-size:133%;margin-right:20px;} +.bloginfo .blog-about-text-content .is_banned{float:left;overflow:hidden;width: 180px;color:#999999;font-size:133%;} +.bloginfo .blog-about-text-content .is_banned img{float:left;margin-right:10px;} +.bloginfo .blog-about-text-content .is_banned span{float:left;margin-top:2px;} + + + +#user-contacts .label { + display: block; + width: 270px; + float: left; +} +#user-contacts .end { + display: block; +} +#user-contacts .achtung-minen { + clear: both; +} +#user-contacts .js-field-holder input { + display: block; + float: left; +} +#user-contacts .label .name { + display: block; + width: 100px; + font-weight: bold; + float: left; +} +#user-contacts .label .begin { + display: block; + width: 170px; + float: right; + text-align: right; +} +#user-contacts .end, #user-contacts .begin { + font-size: 10px; + vertical-align: middle; + padding-top: 3px; + color: gray; +} + +#invite-list {margin-top: 15px;} + #invite-list ul li {clear: both; padding-bottom: 10px;} + #invite-list ul li img {float:left; width: 24px; margin-right: 5px;} + #invite-list ul li a {line-height: 24px;} + #invite-list ul li a.idontlikeyouanymore { color: #c00; text-decoration: none;} + #invite-list .delete {color: #ddd; text-decoration: none;} + #invite-list .delete:hover {color: red;} + +.friends_list ul li.banned a {text-decoration: line-through;} + +.profile-buttons { + margin: 8px 0 0 20px; + } + .profile-buttons a { + margin-left: 10px; + } + + +.notes{margin-left:35px;} +.notes table{} +.notes table tr{} +.notes table tr th{text-align:left;padding:5px;border-bottom:2px solid #aaa;} +.notes table tr td{text-align:left;padding:5px;border-bottom:1px solid #eee;} +.notes table tr td.date{color:#666666;font-size:11px;} +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=category_blogs.css +Content-Type: text/css; name=category_blogs.css +Content-Location: http://habrahabr.ru/css/1307631427/sidebar/category_blogs.css +Content-Transfer-Encoding: 8bit + +/** + * Блок - Другие блоги из выбранной категории. + */ +.category_blogs{} +.category_blogs h3{} +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=best_company.css +Content-Type: text/css; name=best_company.css +Content-Location: http://habrahabr.ru/css/1307631427/sidebar/best_company.css +Content-Transfer-Encoding: 8bit + +/** + * Блок - компания недели + */ +.best_company{} +.best_company h3{} +.best_company h3 .help-tip{margin-bottom:2px;cursor:pointer;} +.best_company .company_info{margin-bottom:20px;} +.best_company .company_info .name{overflow:hidden;margin-left: 20px;margin-right: 20px;} +.best_company .company_info .name img{float:left;font-size:33%;height:16px;margin:8px 10px 0px 0px;line-height: 1em;width: 16px;} +.best_company .company_info .name a{float:left;font-size: 208%;} +.best_company .company_info p{} +.best_company .company_info p a{color:#666666} +.best_company .company_info p a:hover{color:#a3a3a3} +.best_company .company_info .like{overflow:hidden;margin-left:20px;} + +.best_company .company_info #fans_count{float:left;margin-right:10px;color: #999999;font-size: 133%;margin-top:3px;} + + + + +a.js-addFan-Company, +a.js-removeFan-Company { + height: 20px; + display: block; + float: left; + background-repeat: no-repeat; + background-color: white; + padding: 5px; + height:16px; + display: block; + background: #dbdbdb url(/i/join_button_bg.png) repeat-x left top; + text-shadow: 0 1px #ededed; + color: #6b6b6b; + text-decoration:none; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + border-style: solid; + border-width: 1px; + font-weight:bold; + border-color: #afafaf #a9a9a9 #a3a3a3; +} +a:hover.js-addFan-Company, +a:hover.js-removeFan-Company{color:#5b5b5b} +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=mootools-1.2-core-yc.js +Content-Type: application/x-javascript; charset=utf-8; name=mootools-1.2-core-yc.js +Content-Location: http://habrahabr.ru/js/1307631427/mootools-1.2-core-yc.js +Content-Transfer-Encoding: Base64 + +Ly9Nb29Ub29scywgPGh0dHA6Ly9tb290b29scy5uZXQ+LCBNeSBPYmplY3QgT3Jp +ZW50ZWQgKEphdmFTY3JpcHQpIFRvb2xzLiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAw +OCBWYWxlcmlvIFByb2lldHRpLCA8aHR0cDovL21hZDRtaWxrLm5ldD4sIE1JVCBT +dHlsZSBMaWNlbnNlLgoKdmFyIE1vb1Rvb2xzPXt2ZXJzaW9uOiIxLjIuMCIsYnVp +bGQ6IiJ9O3ZhciBOYXRpdmU9ZnVuY3Rpb24oSil7Sj1KfHx7fTt2YXIgRj1KLmFm +dGVySW1wbGVtZW50fHxmdW5jdGlvbigpe307dmFyIEc9Si5nZW5lcmljcztHPShH +IT09ZmFsc2UpO3ZhciBIPUoubGVnYWN5Owp2YXIgRT1KLmluaXRpYWxpemU7dmFy +IEI9Si5wcm90ZWN0O3ZhciBBPUoubmFtZTt2YXIgQz1FfHxIO0MuY29uc3RydWN0 +b3I9TmF0aXZlO0MuJGZhbWlseT17bmFtZToibmF0aXZlIn07aWYoSCYmRSl7Qy5w +cm90b3R5cGU9SC5wcm90b3R5cGU7fUMucHJvdG90eXBlLmNvbnN0cnVjdG9yPUM7 +CmlmKEEpe3ZhciBEPUEudG9Mb3dlckNhc2UoKTtDLnByb3RvdHlwZS4kZmFtaWx5 +PXtuYW1lOkR9O05hdGl2ZS50eXBpemUoQyxEKTt9dmFyIEk9ZnVuY3Rpb24oTSxL +LE4sTCl7aWYoIUJ8fEx8fCFNLnByb3RvdHlwZVtLXSl7TS5wcm90b3R5cGVbS109 +Tjt9aWYoRyl7TmF0aXZlLmdlbmVyaWNpemUoTSxLLEIpOwp9Ri5jYWxsKE0sSyxO +KTtyZXR1cm4gTTt9O0MuaW1wbGVtZW50PWZ1bmN0aW9uKEwsSyxOKXtpZih0eXBl +b2YgTD09InN0cmluZyIpe3JldHVybiBJKHRoaXMsTCxLLE4pO31mb3IodmFyIE0g +aW4gTCl7SSh0aGlzLE0sTFtNXSxLKTt9cmV0dXJuIHRoaXM7fTtDLmFsaWFzPWZ1 +bmN0aW9uKE0sSyxOKXtpZih0eXBlb2YgTT09InN0cmluZyIpe009dGhpcy5wcm90 +b3R5cGVbTV07CmlmKE0pe0kodGhpcyxLLE0sTik7fX1lbHNle2Zvcih2YXIgTCBp +biBNKXt0aGlzLmFsaWFzKEwsTVtMXSxLKTt9fXJldHVybiB0aGlzO307cmV0dXJu +IEM7fTtOYXRpdmUuaW1wbGVtZW50PWZ1bmN0aW9uKEQsQyl7Zm9yKHZhciBCPTAs +QT1ELmxlbmd0aDtCPEE7QisrKXtEW0JdLmltcGxlbWVudChDKTsKfX07TmF0aXZl +LmdlbmVyaWNpemU9ZnVuY3Rpb24oQixDLEEpe2lmKCghQXx8IUJbQ10pJiZ0eXBl +b2YgQi5wcm90b3R5cGVbQ109PSJmdW5jdGlvbiIpe0JbQ109ZnVuY3Rpb24oKXt2 +YXIgRD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVy +biBCLnByb3RvdHlwZVtDXS5hcHBseShELnNoaWZ0KCksRCk7Cn07fX07TmF0aXZl +LnR5cGl6ZT1mdW5jdGlvbihBLEIpe2lmKCFBLnR5cGUpe0EudHlwZT1mdW5jdGlv +bihDKXtyZXR1cm4oJHR5cGUoQyk9PT1CKTt9O319O05hdGl2ZS5hbGlhcz1mdW5j +dGlvbihFLEIsQSxGKXtmb3IodmFyIEQ9MCxDPUUubGVuZ3RoO0Q8QztEKyspe0Vb +RF0uYWxpYXMoQixBLEYpOwp9fTsoZnVuY3Rpb24oQil7Zm9yKHZhciBBIGluIEIp +e05hdGl2ZS50eXBpemUoQltBXSxBKTt9fSkoeyJib29sZWFuIjpCb29sZWFuLCJu +YXRpdmUiOk5hdGl2ZSxvYmplY3Q6T2JqZWN0fSk7KGZ1bmN0aW9uKEIpe2Zvcih2 +YXIgQSBpbiBCKXtuZXcgTmF0aXZlKHtuYW1lOkEsaW5pdGlhbGl6ZTpCW0FdLHBy +b3RlY3Q6dHJ1ZX0pOwp9fSkoe1N0cmluZzpTdHJpbmcsRnVuY3Rpb246RnVuY3Rp +b24sTnVtYmVyOk51bWJlcixBcnJheTpBcnJheSxSZWdFeHA6UmVnRXhwLERhdGU6 +RGF0ZX0pOyhmdW5jdGlvbihCLEEpe2Zvcih2YXIgQz1BLmxlbmd0aDtDLS07Qyl7 +TmF0aXZlLmdlbmVyaWNpemUoQixBW0NdLHRydWUpOwp9cmV0dXJuIGFyZ3VtZW50 +cy5jYWxsZWU7fSkoQXJyYXksWyJwb3AiLCJwdXNoIiwicmV2ZXJzZSIsInNoaWZ0 +Iiwic29ydCIsInNwbGljZSIsInVuc2hpZnQiLCJjb25jYXQiLCJqb2luIiwic2xp +Y2UiLCJ0b1N0cmluZyIsInZhbHVlT2YiLCJpbmRleE9mIiwibGFzdEluZGV4T2Yi +XSkoU3RyaW5nLFsiY2hhckF0IiwiY2hhckNvZGVBdCIsImNvbmNhdCIsImluZGV4 +T2YiLCJsYXN0SW5kZXhPZiIsIm1hdGNoIiwicmVwbGFjZSIsInNlYXJjaCIsInNs +aWNlIiwic3BsaXQiLCJzdWJzdHIiLCJzdWJzdHJpbmciLCJ0b0xvd2VyQ2FzZSIs +InRvVXBwZXJDYXNlIiwidmFsdWVPZiJdKTsKZnVuY3Rpb24gJGNoayhBKXtyZXR1 +cm4gISEoQXx8QT09PTApO31mdW5jdGlvbiAkY2xlYXIoQSl7Y2xlYXJUaW1lb3V0 +KEEpO2NsZWFySW50ZXJ2YWwoQSk7cmV0dXJuIG51bGw7fWZ1bmN0aW9uICRkZWZp +bmVkKEEpe3JldHVybihBIT11bmRlZmluZWQpO31mdW5jdGlvbiAkZW1wdHkoKXt9 +ZnVuY3Rpb24gJGFyZ3VtZW50cyhBKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4g +YXJndW1lbnRzW0FdOwp9O31mdW5jdGlvbiAkbGFtYmRhKEEpe3JldHVybih0eXBl +b2YgQT09ImZ1bmN0aW9uIik/QTpmdW5jdGlvbigpe3JldHVybiBBO307fWZ1bmN0 +aW9uICRleHRlbmQoQyxBKXtmb3IodmFyIEIgaW4gKEF8fHt9KSl7Q1tCXT1BW0Jd +O31yZXR1cm4gQzt9ZnVuY3Rpb24gJHVubGluayhDKXt2YXIgQjsKc3dpdGNoKCR0 +eXBlKEMpKXtjYXNlIm9iamVjdCI6Qj17fTtmb3IodmFyIEUgaW4gQyl7QltFXT0k +dW5saW5rKENbRV0pO31icmVhaztjYXNlImhhc2giOkI9JHVubGluayhDLmdldENs +ZWFuKCkpO2JyZWFrO2Nhc2UiYXJyYXkiOkI9W107Zm9yKHZhciBEPTAsQT1DLmxl +bmd0aDsKRDxBO0QrKyl7QltEXT0kdW5saW5rKENbRF0pO31icmVhaztkZWZhdWx0 +OnJldHVybiBDO31yZXR1cm4gQjt9ZnVuY3Rpb24gJG1lcmdlKCl7dmFyIEU9e307 +Zm9yKHZhciBEPTAsQT1hcmd1bWVudHMubGVuZ3RoO0Q8QTtEKyspe3ZhciBCPWFy +Z3VtZW50c1tEXTtpZigkdHlwZShCKSE9Im9iamVjdCIpe2NvbnRpbnVlOwp9Zm9y +KHZhciBDIGluIEIpe3ZhciBHPUJbQ10sRj1FW0NdO0VbQ109KEYmJiR0eXBlKEcp +PT0ib2JqZWN0IiYmJHR5cGUoRik9PSJvYmplY3QiKT8kbWVyZ2UoRixHKTokdW5s +aW5rKEcpO319cmV0dXJuIEU7fWZ1bmN0aW9uICRwaWNrKCl7Zm9yKHZhciBCPTAs +QT1hcmd1bWVudHMubGVuZ3RoOwpCPEE7QisrKXtpZihhcmd1bWVudHNbQl0hPXVu +ZGVmaW5lZCl7cmV0dXJuIGFyZ3VtZW50c1tCXTt9fXJldHVybiBudWxsO31mdW5j +dGlvbiAkcmFuZG9tKEIsQSl7cmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20o +KSooQS1CKzEpK0IpO31mdW5jdGlvbiAkc3BsYXQoQil7dmFyIEE9JHR5cGUoQik7 +CnJldHVybihBKT8oKEEhPSJhcnJheSImJkEhPSJhcmd1bWVudHMiKT9bQl06Qik6 +W107fXZhciAkdGltZT1EYXRlLm5vd3x8ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERh +dGUoKS5nZXRUaW1lKCk7fTtmdW5jdGlvbiAkdHJ5KCl7Zm9yKHZhciBCPTAsQT1h +cmd1bWVudHMubGVuZ3RoOwpCPEE7QisrKXt0cnl7cmV0dXJuIGFyZ3VtZW50c1tC +XSgpO31jYXRjaChDKXt9fXJldHVybiBudWxsO31mdW5jdGlvbiAkdHlwZShBKXtp +ZihBPT11bmRlZmluZWQpe3JldHVybiBmYWxzZTt9aWYoQS4kZmFtaWx5KXtyZXR1 +cm4oQS4kZmFtaWx5Lm5hbWU9PSJudW1iZXIiJiYhaXNGaW5pdGUoQSkpP2ZhbHNl +OkEuJGZhbWlseS5uYW1lOwp9aWYoQS5ub2RlTmFtZSl7c3dpdGNoKEEubm9kZVR5 +cGUpe2Nhc2UgMTpyZXR1cm4iZWxlbWVudCI7Y2FzZSAzOnJldHVybigvXFMvKS50 +ZXN0KEEubm9kZVZhbHVlKT8idGV4dG5vZGUiOiJ3aGl0ZXNwYWNlIjt9fWVsc2V7 +aWYodHlwZW9mIEEubGVuZ3RoPT0ibnVtYmVyIil7aWYoQS5jYWxsZWUpe3JldHVy +biJhcmd1bWVudHMiOwp9ZWxzZXtpZihBLml0ZW0pe3JldHVybiJjb2xsZWN0aW9u +Ijt9fX19cmV0dXJuIHR5cGVvZiBBO312YXIgSGFzaD1uZXcgTmF0aXZlKHtuYW1l +OiJIYXNoIixpbml0aWFsaXplOmZ1bmN0aW9uKEEpe2lmKCR0eXBlKEEpPT0iaGFz +aCIpe0E9JHVubGluayhBLmdldENsZWFuKCkpOwp9Zm9yKHZhciBCIGluIEEpe3Ro +aXNbQl09QVtCXTt9cmV0dXJuIHRoaXM7fX0pO0hhc2guaW1wbGVtZW50KHtnZXRM +ZW5ndGg6ZnVuY3Rpb24oKXt2YXIgQj0wO2Zvcih2YXIgQSBpbiB0aGlzKXtpZih0 +aGlzLmhhc093blByb3BlcnR5KEEpKXtCKys7fX1yZXR1cm4gQjsKfSxmb3JFYWNo +OmZ1bmN0aW9uKEIsQyl7Zm9yKHZhciBBIGluIHRoaXMpe2lmKHRoaXMuaGFzT3du +UHJvcGVydHkoQSkpe0IuY2FsbChDLHRoaXNbQV0sQSx0aGlzKTt9fX0sZ2V0Q2xl +YW46ZnVuY3Rpb24oKXt2YXIgQj17fTtmb3IodmFyIEEgaW4gdGhpcyl7aWYodGhp +cy5oYXNPd25Qcm9wZXJ0eShBKSl7QltBXT10aGlzW0FdOwp9fXJldHVybiBCO319 +KTtIYXNoLmFsaWFzKCJmb3JFYWNoIiwiZWFjaCIpO2Z1bmN0aW9uICRIKEEpe3Jl +dHVybiBuZXcgSGFzaChBKTt9QXJyYXkuaW1wbGVtZW50KHtmb3JFYWNoOmZ1bmN0 +aW9uKEMsRCl7Zm9yKHZhciBCPTAsQT10aGlzLmxlbmd0aDtCPEE7QisrKXtDLmNh +bGwoRCx0aGlzW0JdLEIsdGhpcyk7Cn19fSk7QXJyYXkuYWxpYXMoImZvckVhY2gi +LCJlYWNoIik7ZnVuY3Rpb24gJEEoQyl7aWYoQy5pdGVtKXt2YXIgRD1bXTtmb3Io +dmFyIEI9MCxBPUMubGVuZ3RoO0I8QTtCKyspe0RbQl09Q1tCXTt9cmV0dXJuIEQ7 +fXJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChDKTsKfWZ1bmN0aW9u +ICRlYWNoKEMsQixEKXt2YXIgQT0kdHlwZShDKTsoKEE9PSJhcmd1bWVudHMifHxB +PT0iY29sbGVjdGlvbiJ8fEE9PSJhcnJheSIpP0FycmF5Okhhc2gpLmVhY2goQyxC +LEQpO312YXIgQnJvd3Nlcj1uZXcgSGFzaCh7RW5naW5lOntuYW1lOiJ1bmtub3du +Iix2ZXJzaW9uOiIifSxQbGF0Zm9ybTp7bmFtZToobmF2aWdhdG9yLnBsYXRmb3Jt +Lm1hdGNoKC9tYWN8d2lufGxpbnV4L2kpfHxbIm90aGVyIl0pWzBdLnRvTG93ZXJD +YXNlKCl9LEZlYXR1cmVzOnt4cGF0aDohIShkb2N1bWVudC5ldmFsdWF0ZSksYWly +OiEhKHdpbmRvdy5ydW50aW1lKX0sUGx1Z2luczp7fX0pOwppZih3aW5kb3cub3Bl +cmEpe0Jyb3dzZXIuRW5naW5lPXtuYW1lOiJwcmVzdG8iLHZlcnNpb246KGRvY3Vt +ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUpPzk1MDo5MjV9O31lbHNle2lmKHdp +bmRvdy5BY3RpdmVYT2JqZWN0KXtCcm93c2VyLkVuZ2luZT17bmFtZToidHJpZGVu +dCIsdmVyc2lvbjood2luZG93LlhNTEh0dHBSZXF1ZXN0KT81OjR9Owp9ZWxzZXtp +ZighbmF2aWdhdG9yLnRhaW50RW5hYmxlZCl7QnJvd3Nlci5FbmdpbmU9e25hbWU6 +IndlYmtpdCIsdmVyc2lvbjooQnJvd3Nlci5GZWF0dXJlcy54cGF0aCk/NDIwOjQx +OX07fWVsc2V7aWYoZG9jdW1lbnQuZ2V0Qm94T2JqZWN0Rm9yIT1udWxsKXtCcm93 +c2VyLkVuZ2luZT17bmFtZToiZ2Vja28iLHZlcnNpb246KGRvY3VtZW50LmdldEVs +ZW1lbnRzQnlDbGFzc05hbWUpPzE5OjE4fTsKfX19fUJyb3dzZXIuRW5naW5lW0Jy +b3dzZXIuRW5naW5lLm5hbWVdPUJyb3dzZXIuRW5naW5lW0Jyb3dzZXIuRW5naW5l +Lm5hbWUrQnJvd3Nlci5FbmdpbmUudmVyc2lvbl09dHJ1ZTtpZih3aW5kb3cub3Jp +ZW50YXRpb24hPXVuZGVmaW5lZCl7QnJvd3Nlci5QbGF0Zm9ybS5uYW1lPSJpcG9k +IjsKfUJyb3dzZXIuUGxhdGZvcm1bQnJvd3Nlci5QbGF0Zm9ybS5uYW1lXT10cnVl +O0Jyb3dzZXIuUmVxdWVzdD1mdW5jdGlvbigpe3JldHVybiAkdHJ5KGZ1bmN0aW9u +KCl7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdCgpO30sZnVuY3Rpb24oKXtyZXR1 +cm4gbmV3IEFjdGl2ZVhPYmplY3QoIk1TWE1MMi5YTUxIVFRQIik7Cn0pO307QnJv +d3Nlci5GZWF0dXJlcy54aHI9ISEoQnJvd3Nlci5SZXF1ZXN0KCkpO0Jyb3dzZXIu +UGx1Z2lucy5GbGFzaD0oZnVuY3Rpb24oKXt2YXIgQT0oJHRyeShmdW5jdGlvbigp +e3JldHVybiBuYXZpZ2F0b3IucGx1Z2luc1siU2hvY2t3YXZlIEZsYXNoIl0uZGVz +Y3JpcHRpb247Cn0sZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3Qo +IlNob2Nrd2F2ZUZsYXNoLlNob2Nrd2F2ZUZsYXNoIikuR2V0VmFyaWFibGUoIiR2 +ZXJzaW9uIik7fSl8fCIwIHIwIikubWF0Y2goL1xkKy9nKTtyZXR1cm57dmVyc2lv +bjpwYXJzZUludChBWzBdfHwwKyIuIitBWzFdfHwwKSxidWlsZDpwYXJzZUludChB +WzJdfHwwKX07Cn0pKCk7ZnVuY3Rpb24gJGV4ZWMoQil7aWYoIUIpe3JldHVybiBC +O31pZih3aW5kb3cuZXhlY1NjcmlwdCl7d2luZG93LmV4ZWNTY3JpcHQoQik7fWVs +c2V7dmFyIEE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7QS5zZXRB +dHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2phdmFzY3JpcHQiKTsKQS50ZXh0PUI7ZG9j +dW1lbnQuaGVhZC5hcHBlbmRDaGlsZChBKTtkb2N1bWVudC5oZWFkLnJlbW92ZUNo +aWxkKEEpO31yZXR1cm4gQjt9TmF0aXZlLlVJRD0xO3ZhciAkdWlkPShCcm93c2Vy +LkVuZ2luZS50cmlkZW50KT9mdW5jdGlvbihBKXtyZXR1cm4oQS51aWR8fChBLnVp +ZD1bTmF0aXZlLlVJRCsrXSkpWzBdOwp9OmZ1bmN0aW9uKEEpe3JldHVybiBBLnVp +ZHx8KEEudWlkPU5hdGl2ZS5VSUQrKyk7fTt2YXIgV2luZG93PW5ldyBOYXRpdmUo +e25hbWU6IldpbmRvdyIsbGVnYWN5OihCcm93c2VyLkVuZ2luZS50cmlkZW50KT9u +dWxsOndpbmRvdy5XaW5kb3csaW5pdGlhbGl6ZTpmdW5jdGlvbihBKXskdWlkKEEp +OwppZighQS5FbGVtZW50KXtBLkVsZW1lbnQ9JGVtcHR5O2lmKEJyb3dzZXIuRW5n +aW5lLndlYmtpdCl7QS5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTt9 +QS5FbGVtZW50LnByb3RvdHlwZT0oQnJvd3Nlci5FbmdpbmUud2Via2l0KT93aW5k +b3dbIltbRE9NRWxlbWVudC5wcm90b3R5cGVdXSJdOnt9Owp9cmV0dXJuICRleHRl +bmQoQSxXaW5kb3cuUHJvdG90eXBlKTt9LGFmdGVySW1wbGVtZW50OmZ1bmN0aW9u +KEIsQSl7d2luZG93W0JdPVdpbmRvdy5Qcm90b3R5cGVbQl09QTt9fSk7V2luZG93 +LlByb3RvdHlwZT17JGZhbWlseTp7bmFtZToid2luZG93In19O25ldyBXaW5kb3co +d2luZG93KTsKdmFyIERvY3VtZW50PW5ldyBOYXRpdmUoe25hbWU6IkRvY3VtZW50 +IixsZWdhY3k6KEJyb3dzZXIuRW5naW5lLnRyaWRlbnQpP251bGw6d2luZG93LkRv +Y3VtZW50LGluaXRpYWxpemU6ZnVuY3Rpb24oQSl7JHVpZChBKTtBLmhlYWQ9QS5n +ZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdOwpBLmh0bWw9QS5nZXRFbGVt +ZW50c0J5VGFnTmFtZSgiaHRtbCIpWzBdO0Eud2luZG93PUEuZGVmYXVsdFZpZXd8 +fEEucGFyZW50V2luZG93O2lmKEJyb3dzZXIuRW5naW5lLnRyaWRlbnQ0KXskdHJ5 +KGZ1bmN0aW9uKCl7QS5leGVjQ29tbWFuZCgiQmFja2dyb3VuZEltYWdlQ2FjaGUi +LGZhbHNlLHRydWUpOwp9KTt9cmV0dXJuICRleHRlbmQoQSxEb2N1bWVudC5Qcm90 +b3R5cGUpO30sYWZ0ZXJJbXBsZW1lbnQ6ZnVuY3Rpb24oQixBKXtkb2N1bWVudFtC +XT1Eb2N1bWVudC5Qcm90b3R5cGVbQl09QTt9fSk7RG9jdW1lbnQuUHJvdG90eXBl +PXskZmFtaWx5OntuYW1lOiJkb2N1bWVudCJ9fTsKbmV3IERvY3VtZW50KGRvY3Vt +ZW50KTtBcnJheS5pbXBsZW1lbnQoe2V2ZXJ5OmZ1bmN0aW9uKEMsRCl7Zm9yKHZh +ciBCPTAsQT10aGlzLmxlbmd0aDtCPEE7QisrKXtpZighQy5jYWxsKEQsdGhpc1tC +XSxCLHRoaXMpKXtyZXR1cm4gZmFsc2U7fX1yZXR1cm4gdHJ1ZTsKfSxmaWx0ZXI6 +ZnVuY3Rpb24oRCxFKXt2YXIgQz1bXTtmb3IodmFyIEI9MCxBPXRoaXMubGVuZ3Ro +O0I8QTtCKyspe2lmKEQuY2FsbChFLHRoaXNbQl0sQix0aGlzKSl7Qy5wdXNoKHRo +aXNbQl0pO319cmV0dXJuIEM7fSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiB0aGlz +LmZpbHRlcigkZGVmaW5lZCk7Cn0saW5kZXhPZjpmdW5jdGlvbihDLEQpe3ZhciBB +PXRoaXMubGVuZ3RoO2Zvcih2YXIgQj0oRDwwKT9NYXRoLm1heCgwLEErRCk6RHx8 +MDtCPEE7QisrKXtpZih0aGlzW0JdPT09Qyl7cmV0dXJuIEI7fX1yZXR1cm4gLTE7 +fSxtYXA6ZnVuY3Rpb24oRCxFKXt2YXIgQz1bXTsKZm9yKHZhciBCPTAsQT10aGlz +Lmxlbmd0aDtCPEE7QisrKXtDW0JdPUQuY2FsbChFLHRoaXNbQl0sQix0aGlzKTt9 +cmV0dXJuIEM7fSxzb21lOmZ1bmN0aW9uKEMsRCl7Zm9yKHZhciBCPTAsQT10aGlz +Lmxlbmd0aDtCPEE7QisrKXtpZihDLmNhbGwoRCx0aGlzW0JdLEIsdGhpcykpe3Jl +dHVybiB0cnVlOwp9fXJldHVybiBmYWxzZTt9LGFzc29jaWF0ZTpmdW5jdGlvbihD +KXt2YXIgRD17fSxCPU1hdGgubWluKHRoaXMubGVuZ3RoLEMubGVuZ3RoKTtmb3Io +dmFyIEE9MDtBPEI7QSsrKXtEW0NbQV1dPXRoaXNbQV07fXJldHVybiBEO30sbGlu +azpmdW5jdGlvbihDKXt2YXIgQT17fTsKZm9yKHZhciBFPTAsQj10aGlzLmxlbmd0 +aDtFPEI7RSsrKXtmb3IodmFyIEQgaW4gQyl7aWYoQ1tEXSh0aGlzW0VdKSl7QVtE +XT10aGlzW0VdO2RlbGV0ZSBDW0RdO2JyZWFrO319fXJldHVybiBBO30sY29udGFp +bnM6ZnVuY3Rpb24oQSxCKXtyZXR1cm4gdGhpcy5pbmRleE9mKEEsQikhPS0xOwp9 +LGV4dGVuZDpmdW5jdGlvbihDKXtmb3IodmFyIEI9MCxBPUMubGVuZ3RoO0I8QTtC +Kyspe3RoaXMucHVzaChDW0JdKTt9cmV0dXJuIHRoaXM7fSxnZXRMYXN0OmZ1bmN0 +aW9uKCl7cmV0dXJuKHRoaXMubGVuZ3RoKT90aGlzW3RoaXMubGVuZ3RoLTFdOm51 +bGw7fSxnZXRSYW5kb206ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5sZW5ndGgpP3Ro +aXNbJHJhbmRvbSgwLHRoaXMubGVuZ3RoLTEpXTpudWxsOwp9LGluY2x1ZGU6ZnVu +Y3Rpb24oQSl7aWYoIXRoaXMuY29udGFpbnMoQSkpe3RoaXMucHVzaChBKTt9cmV0 +dXJuIHRoaXM7fSxjb21iaW5lOmZ1bmN0aW9uKEMpe2Zvcih2YXIgQj0wLEE9Qy5s +ZW5ndGg7QjxBO0IrKyl7dGhpcy5pbmNsdWRlKENbQl0pO31yZXR1cm4gdGhpczsK +fSxlcmFzZTpmdW5jdGlvbihCKXtmb3IodmFyIEE9dGhpcy5sZW5ndGg7QS0tO0Ep +e2lmKHRoaXNbQV09PT1CKXt0aGlzLnNwbGljZShBLDEpO319cmV0dXJuIHRoaXM7 +fSxlbXB0eTpmdW5jdGlvbigpe3RoaXMubGVuZ3RoPTA7cmV0dXJuIHRoaXM7fSxm +bGF0dGVuOmZ1bmN0aW9uKCl7dmFyIEQ9W107CmZvcih2YXIgQj0wLEE9dGhpcy5s +ZW5ndGg7QjxBO0IrKyl7dmFyIEM9JHR5cGUodGhpc1tCXSk7aWYoIUMpe2NvbnRp +bnVlO31EPUQuY29uY2F0KChDPT0iYXJyYXkifHxDPT0iY29sbGVjdGlvbiJ8fEM9 +PSJhcmd1bWVudHMiKT9BcnJheS5mbGF0dGVuKHRoaXNbQl0pOnRoaXNbQl0pOwp9 +cmV0dXJuIEQ7fSxoZXhUb1JnYjpmdW5jdGlvbihCKXtpZih0aGlzLmxlbmd0aCE9 +Myl7cmV0dXJuIG51bGw7fXZhciBBPXRoaXMubWFwKGZ1bmN0aW9uKEMpe2lmKEMu +bGVuZ3RoPT0xKXtDKz1DO31yZXR1cm4gQy50b0ludCgxNik7fSk7cmV0dXJuKEIp +P0E6InJnYigiK0ErIikiOwp9LHJnYlRvSGV4OmZ1bmN0aW9uKEQpe2lmKHRoaXMu +bGVuZ3RoPDMpe3JldHVybiBudWxsO31pZih0aGlzLmxlbmd0aD09NCYmdGhpc1sz +XT09MCYmIUQpe3JldHVybiJ0cmFuc3BhcmVudCI7fXZhciBCPVtdO2Zvcih2YXIg +QT0wO0E8MztBKyspe3ZhciBDPSh0aGlzW0FdLTApLnRvU3RyaW5nKDE2KTsKQi5w +dXNoKChDLmxlbmd0aD09MSk/IjAiK0M6Qyk7fXJldHVybihEKT9COiIjIitCLmpv +aW4oIiIpO319KTtGdW5jdGlvbi5pbXBsZW1lbnQoe2V4dGVuZDpmdW5jdGlvbihB +KXtmb3IodmFyIEIgaW4gQSl7dGhpc1tCXT1BW0JdO31yZXR1cm4gdGhpczt9LGNy +ZWF0ZTpmdW5jdGlvbihCKXt2YXIgQT10aGlzOwpCPUJ8fHt9O3JldHVybiBmdW5j +dGlvbihEKXt2YXIgQz1CLmFyZ3VtZW50cztDPShDIT11bmRlZmluZWQpPyRzcGxh +dChDKTpBcnJheS5zbGljZShhcmd1bWVudHMsKEIuZXZlbnQpPzE6MCk7aWYoQi5l +dmVudCl7Qz1bRHx8d2luZG93LmV2ZW50XS5leHRlbmQoQyk7Cn12YXIgRT1mdW5j +dGlvbigpe3JldHVybiBBLmFwcGx5KEIuYmluZHx8bnVsbCxDKTt9O2lmKEIuZGVs +YXkpe3JldHVybiBzZXRUaW1lb3V0KEUsQi5kZWxheSk7fWlmKEIucGVyaW9kaWNh +bCl7cmV0dXJuIHNldEludGVydmFsKEUsQi5wZXJpb2RpY2FsKTt9aWYoQi5hdHRl +bXB0KXtyZXR1cm4gJHRyeShFKTsKfXJldHVybiBFKCk7fTt9LHBhc3M6ZnVuY3Rp +b24oQSxCKXtyZXR1cm4gdGhpcy5jcmVhdGUoe2FyZ3VtZW50czpBLGJpbmQ6Qn0p +O30sYXR0ZW1wdDpmdW5jdGlvbihBLEIpe3JldHVybiB0aGlzLmNyZWF0ZSh7YXJn +dW1lbnRzOkEsYmluZDpCLGF0dGVtcHQ6dHJ1ZX0pKCk7Cn0sYmluZDpmdW5jdGlv +bihCLEEpe3JldHVybiB0aGlzLmNyZWF0ZSh7YmluZDpCLGFyZ3VtZW50czpBfSk7 +fSxiaW5kV2l0aEV2ZW50OmZ1bmN0aW9uKEIsQSl7cmV0dXJuIHRoaXMuY3JlYXRl +KHtiaW5kOkIsZXZlbnQ6dHJ1ZSxhcmd1bWVudHM6QX0pO30sZGVsYXk6ZnVuY3Rp +b24oQixDLEEpe3JldHVybiB0aGlzLmNyZWF0ZSh7ZGVsYXk6QixiaW5kOkMsYXJn +dW1lbnRzOkF9KSgpOwp9LHBlcmlvZGljYWw6ZnVuY3Rpb24oQSxDLEIpe3JldHVy +biB0aGlzLmNyZWF0ZSh7cGVyaW9kaWNhbDpBLGJpbmQ6Qyxhcmd1bWVudHM6Qn0p +KCk7fSxydW46ZnVuY3Rpb24oQSxCKXtyZXR1cm4gdGhpcy5hcHBseShCLCRzcGxh +dChBKSk7fX0pO051bWJlci5pbXBsZW1lbnQoe2xpbWl0OmZ1bmN0aW9uKEIsQSl7 +cmV0dXJuIE1hdGgubWluKEEsTWF0aC5tYXgoQix0aGlzKSk7Cn0scm91bmQ6ZnVu +Y3Rpb24oQSl7QT1NYXRoLnBvdygxMCxBfHwwKTtyZXR1cm4gTWF0aC5yb3VuZCh0 +aGlzKkEpL0E7fSx0aW1lczpmdW5jdGlvbihCLEMpe2Zvcih2YXIgQT0wO0E8dGhp +cztBKyspe0IuY2FsbChDLEEsdGhpcyk7fX0sdG9GbG9hdDpmdW5jdGlvbigpe3Jl +dHVybiBwYXJzZUZsb2F0KHRoaXMpOwp9LHRvSW50OmZ1bmN0aW9uKEEpe3JldHVy +biBwYXJzZUludCh0aGlzLEF8fDEwKTt9fSk7TnVtYmVyLmFsaWFzKCJ0aW1lcyIs +ImVhY2giKTsoZnVuY3Rpb24oQil7dmFyIEE9e307Qi5lYWNoKGZ1bmN0aW9uKEMp +e2lmKCFOdW1iZXJbQ10pe0FbQ109ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aFtDXS5h +cHBseShudWxsLFt0aGlzXS5jb25jYXQoJEEoYXJndW1lbnRzKSkpOwp9O319KTtO +dW1iZXIuaW1wbGVtZW50KEEpO30pKFsiYWJzIiwiYWNvcyIsImFzaW4iLCJhdGFu +IiwiYXRhbjIiLCJjZWlsIiwiY29zIiwiZXhwIiwiZmxvb3IiLCJsb2ciLCJtYXgi +LCJtaW4iLCJwb3ciLCJzaW4iLCJzcXJ0IiwidGFuIl0pO1N0cmluZy5pbXBsZW1l +bnQoe3Rlc3Q6ZnVuY3Rpb24oQSxCKXtyZXR1cm4oKHR5cGVvZiBBPT0ic3RyaW5n +Iik/bmV3IFJlZ0V4cChBLEIpOkEpLnRlc3QodGhpcyk7Cn0sY29udGFpbnM6ZnVu +Y3Rpb24oQSxCKXtyZXR1cm4oQik/KEIrdGhpcytCKS5pbmRleE9mKEIrQStCKT4t +MTp0aGlzLmluZGV4T2YoQSk+LTE7fSx0cmltOmZ1bmN0aW9uKCl7cmV0dXJuIHRo +aXMucmVwbGFjZSgvXlxzK3xccyskL2csIiIpO30sY2xlYW46ZnVuY3Rpb24oKXty +ZXR1cm4gdGhpcy5yZXBsYWNlKC9ccysvZywiICIpLnRyaW0oKTsKfSxjYW1lbENh +c2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXBsYWNlKC8tXEQvZyxmdW5jdGlv +bihBKXtyZXR1cm4gQS5jaGFyQXQoMSkudG9VcHBlckNhc2UoKTt9KTt9LGh5cGhl +bmF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlcGxhY2UoL1tBLVpdL2csZnVu +Y3Rpb24oQSl7cmV0dXJuKCItIitBLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpKTsK +fSk7fSxjYXBpdGFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVwbGFjZSgv +XGJbYS16XS9nLGZ1bmN0aW9uKEEpe3JldHVybiBBLnRvVXBwZXJDYXNlKCk7fSk7 +fSxlc2NhcGVSZWdFeHA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXBsYWNlKC8o +Wy0uKis/XiR7fSgpfFtcXVwvXFxdKS9nLCJcXCQxIik7Cn0sdG9JbnQ6ZnVuY3Rp +b24oQSl7cmV0dXJuIHBhcnNlSW50KHRoaXMsQXx8MTApO30sdG9GbG9hdDpmdW5j +dGlvbigpe3JldHVybiBwYXJzZUZsb2F0KHRoaXMpO30saGV4VG9SZ2I6ZnVuY3Rp +b24oQil7dmFyIEE9dGhpcy5tYXRjaCgvXiM/KFx3ezEsMn0pKFx3ezEsMn0pKFx3 +ezEsMn0pJC8pOwpyZXR1cm4oQSk/QS5zbGljZSgxKS5oZXhUb1JnYihCKTpudWxs +O30scmdiVG9IZXg6ZnVuY3Rpb24oQil7dmFyIEE9dGhpcy5tYXRjaCgvXGR7MSwz +fS9nKTtyZXR1cm4oQSk/QS5yZ2JUb0hleChCKTpudWxsO30sc3RyaXBTY3JpcHRz +OmZ1bmN0aW9uKEIpe3ZhciBBPSIiOwp2YXIgQz10aGlzLnJlcGxhY2UoLzxzY3Jp +cHRbXj5dKj4oW1xzXFNdKj8pPFwvc2NyaXB0Pi9naSxmdW5jdGlvbigpe0ErPWFy +Z3VtZW50c1sxXSsiXG4iO3JldHVybiIiO30pO2lmKEI9PT10cnVlKXskZXhlYyhB +KTt9ZWxzZXtpZigkdHlwZShCKT09ImZ1bmN0aW9uIil7QihBLEMpOwp9fXJldHVy +biBDO30sc3Vic3RpdHV0ZTpmdW5jdGlvbihBLEIpe3JldHVybiB0aGlzLnJlcGxh +Y2UoQnx8KC9cXD9ceyhbXn1dKylcfS9nKSxmdW5jdGlvbihELEMpe2lmKEQuY2hh +ckF0KDApPT0iXFwiKXtyZXR1cm4gRC5zbGljZSgxKTt9cmV0dXJuKEFbQ10hPXVu +ZGVmaW5lZCk/QVtDXToiIjsKfSk7fX0pO0hhc2guaW1wbGVtZW50KHtoYXM6T2Jq +ZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxrZXlPZjpmdW5jdGlvbihCKXtm +b3IodmFyIEEgaW4gdGhpcyl7aWYodGhpcy5oYXNPd25Qcm9wZXJ0eShBKSYmdGhp +c1tBXT09PUIpe3JldHVybiBBO319cmV0dXJuIG51bGw7Cn0saGFzVmFsdWU6ZnVu +Y3Rpb24oQSl7cmV0dXJuKEhhc2gua2V5T2YodGhpcyxBKSE9PW51bGwpO30sZXh0 +ZW5kOmZ1bmN0aW9uKEEpe0hhc2guZWFjaChBLGZ1bmN0aW9uKEMsQil7SGFzaC5z +ZXQodGhpcyxCLEMpO30sdGhpcyk7cmV0dXJuIHRoaXM7fSxjb21iaW5lOmZ1bmN0 +aW9uKEEpe0hhc2guZWFjaChBLGZ1bmN0aW9uKEMsQil7SGFzaC5pbmNsdWRlKHRo +aXMsQixDKTsKfSx0aGlzKTtyZXR1cm4gdGhpczt9LGVyYXNlOmZ1bmN0aW9uKEEp +e2lmKHRoaXMuaGFzT3duUHJvcGVydHkoQSkpe2RlbGV0ZSB0aGlzW0FdO31yZXR1 +cm4gdGhpczt9LGdldDpmdW5jdGlvbihBKXtyZXR1cm4odGhpcy5oYXNPd25Qcm9w +ZXJ0eShBKSk/dGhpc1tBXTpudWxsOwp9LHNldDpmdW5jdGlvbihBLEIpe2lmKCF0 +aGlzW0FdfHx0aGlzLmhhc093blByb3BlcnR5KEEpKXt0aGlzW0FdPUI7fXJldHVy +biB0aGlzO30sZW1wdHk6ZnVuY3Rpb24oKXtIYXNoLmVhY2godGhpcyxmdW5jdGlv +bihCLEEpe2RlbGV0ZSB0aGlzW0FdO30sdGhpcyk7CnJldHVybiB0aGlzO30saW5j +bHVkZTpmdW5jdGlvbihCLEMpe3ZhciBBPXRoaXNbQl07aWYoQT09dW5kZWZpbmVk +KXt0aGlzW0JdPUM7fXJldHVybiB0aGlzO30sbWFwOmZ1bmN0aW9uKEIsQyl7dmFy +IEE9bmV3IEhhc2g7SGFzaC5lYWNoKHRoaXMsZnVuY3Rpb24oRSxEKXtBLnNldChE +LEIuY2FsbChDLEUsRCx0aGlzKSk7Cn0sdGhpcyk7cmV0dXJuIEE7fSxmaWx0ZXI6 +ZnVuY3Rpb24oQixDKXt2YXIgQT1uZXcgSGFzaDtIYXNoLmVhY2godGhpcyxmdW5j +dGlvbihFLEQpe2lmKEIuY2FsbChDLEUsRCx0aGlzKSl7QS5zZXQoRCxFKTt9fSx0 +aGlzKTtyZXR1cm4gQTt9LGV2ZXJ5OmZ1bmN0aW9uKEIsQyl7Zm9yKHZhciBBIGlu +IHRoaXMpe2lmKHRoaXMuaGFzT3duUHJvcGVydHkoQSkmJiFCLmNhbGwoQyx0aGlz +W0FdLEEpKXtyZXR1cm4gZmFsc2U7Cn19cmV0dXJuIHRydWU7fSxzb21lOmZ1bmN0 +aW9uKEIsQyl7Zm9yKHZhciBBIGluIHRoaXMpe2lmKHRoaXMuaGFzT3duUHJvcGVy +dHkoQSkmJkIuY2FsbChDLHRoaXNbQV0sQSkpe3JldHVybiB0cnVlO319cmV0dXJu +IGZhbHNlO30sZ2V0S2V5czpmdW5jdGlvbigpe3ZhciBBPVtdOwpIYXNoLmVhY2go +dGhpcyxmdW5jdGlvbihDLEIpe0EucHVzaChCKTt9KTtyZXR1cm4gQTt9LGdldFZh +bHVlczpmdW5jdGlvbigpe3ZhciBBPVtdO0hhc2guZWFjaCh0aGlzLGZ1bmN0aW9u +KEIpe0EucHVzaChCKTt9KTtyZXR1cm4gQTt9LHRvUXVlcnlTdHJpbmc6ZnVuY3Rp +b24oQSl7dmFyIEI9W107Ckhhc2guZWFjaCh0aGlzLGZ1bmN0aW9uKEYsRSl7aWYo +QSl7RT1BKyJbIitFKyJdIjt9dmFyIEQ7c3dpdGNoKCR0eXBlKEYpKXtjYXNlIm9i +amVjdCI6RD1IYXNoLnRvUXVlcnlTdHJpbmcoRixFKTticmVhaztjYXNlImFycmF5 +Ijp2YXIgQz17fTtGLmVhY2goZnVuY3Rpb24oSCxHKXtDW0ddPUg7Cn0pO0Q9SGFz +aC50b1F1ZXJ5U3RyaW5nKEMsRSk7YnJlYWs7ZGVmYXVsdDpEPUUrIj0iK2VuY29k +ZVVSSUNvbXBvbmVudChGKTt9aWYoRiE9dW5kZWZpbmVkKXtCLnB1c2goRCk7fX0p +O3JldHVybiBCLmpvaW4oIiYiKTt9fSk7SGFzaC5hbGlhcyh7a2V5T2Y6ImluZGV4 +T2YiLGhhc1ZhbHVlOiJjb250YWlucyJ9KTsKdmFyIEV2ZW50PW5ldyBOYXRpdmUo +e25hbWU6IkV2ZW50Iixpbml0aWFsaXplOmZ1bmN0aW9uKEEsRil7Rj1GfHx3aW5k +b3c7dmFyIEs9Ri5kb2N1bWVudDtBPUF8fEYuZXZlbnQ7aWYoQS4kZXh0ZW5kZWQp +e3JldHVybiBBO310aGlzLiRleHRlbmRlZD10cnVlO3ZhciBKPUEudHlwZTsKdmFy +IEc9QS50YXJnZXR8fEEuc3JjRWxlbWVudDt3aGlsZShHJiZHLm5vZGVUeXBlPT0z +KXtHPUcucGFyZW50Tm9kZTt9aWYoSi50ZXN0KC9rZXkvKSl7dmFyIEI9QS53aGlj +aHx8QS5rZXlDb2RlO3ZhciBNPUV2ZW50LktleXMua2V5T2YoQik7aWYoSj09Imtl +eWRvd24iKXt2YXIgRD1CLTExMTsKaWYoRD4wJiZEPDEzKXtNPSJmIitEO319TT1N +fHxTdHJpbmcuZnJvbUNoYXJDb2RlKEIpLnRvTG93ZXJDYXNlKCk7fWVsc2V7aWYo +Si5tYXRjaCgvKGNsaWNrfG1vdXNlfG1lbnUpL2kpKXtLPSghSy5jb21wYXRNb2Rl +fHxLLmNvbXBhdE1vZGU9PSJDU1MxQ29tcGF0Iik/Sy5odG1sOksuYm9keTsKdmFy +IEk9e3g6QS5wYWdlWHx8QS5jbGllbnRYK0suc2Nyb2xsTGVmdCx5OkEucGFnZVl8 +fEEuY2xpZW50WStLLnNjcm9sbFRvcH07dmFyIEM9e3g6KEEucGFnZVgpP0EucGFn +ZVgtRi5wYWdlWE9mZnNldDpBLmNsaWVudFgseTooQS5wYWdlWSk/QS5wYWdlWS1G +LnBhZ2VZT2Zmc2V0OkEuY2xpZW50WX07CmlmKEoubWF0Y2goL0RPTU1vdXNlU2Ny +b2xsfG1vdXNld2hlZWwvKSl7dmFyIEg9KEEud2hlZWxEZWx0YSk/QS53aGVlbERl +bHRhLzEyMDotKEEuZGV0YWlsfHwwKS8zO312YXIgRT0oQS53aGljaD09Myl8fChB +LmJ1dHRvbj09Mik7dmFyIEw9bnVsbDtpZihKLm1hdGNoKC9vdmVyfG91dC8pKXtz +d2l0Y2goSil7Y2FzZSJtb3VzZW92ZXIiOkw9QS5yZWxhdGVkVGFyZ2V0fHxBLmZy +b21FbGVtZW50OwpicmVhaztjYXNlIm1vdXNlb3V0IjpMPUEucmVsYXRlZFRhcmdl +dHx8QS50b0VsZW1lbnQ7fWlmKCEoZnVuY3Rpb24oKXt3aGlsZShMJiZMLm5vZGVU +eXBlPT0zKXtMPUwucGFyZW50Tm9kZTt9cmV0dXJuIHRydWU7fSkuY3JlYXRlKHth +dHRlbXB0OkJyb3dzZXIuRW5naW5lLmdlY2tvfSkoKSl7TD1mYWxzZTsKfX19fXJl +dHVybiAkZXh0ZW5kKHRoaXMse2V2ZW50OkEsdHlwZTpKLHBhZ2U6SSxjbGllbnQ6 +QyxyaWdodENsaWNrOkUsd2hlZWw6SCxyZWxhdGVkVGFyZ2V0OkwsdGFyZ2V0Okcs +Y29kZTpCLGtleTpNLHNoaWZ0OkEuc2hpZnRLZXksY29udHJvbDpBLmN0cmxLZXks +YWx0OkEuYWx0S2V5LG1ldGE6QS5tZXRhS2V5fSk7Cn19KTtFdmVudC5LZXlzPW5l +dyBIYXNoKHtlbnRlcjoxMyx1cDozOCxkb3duOjQwLGxlZnQ6MzcscmlnaHQ6Mzks +ZXNjOjI3LHNwYWNlOjMyLGJhY2tzcGFjZTo4LHRhYjo5LCJkZWxldGUiOjQ2fSk7 +RXZlbnQuaW1wbGVtZW50KHtzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3Rv +cFByb3BhZ2F0aW9uKCkucHJldmVudERlZmF1bHQoKTsKfSxzdG9wUHJvcGFnYXRp +b246ZnVuY3Rpb24oKXtpZih0aGlzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbil7dGhp +cy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKTt9ZWxzZXt0aGlzLmV2ZW50LmNhbmNl +bEJ1YmJsZT10cnVlO31yZXR1cm4gdGhpczt9LHByZXZlbnREZWZhdWx0OmZ1bmN0 +aW9uKCl7aWYodGhpcy5ldmVudC5wcmV2ZW50RGVmYXVsdCl7dGhpcy5ldmVudC5w +cmV2ZW50RGVmYXVsdCgpOwp9ZWxzZXt0aGlzLmV2ZW50LnJldHVyblZhbHVlPWZh +bHNlO31yZXR1cm4gdGhpczt9fSk7dmFyIENsYXNzPW5ldyBOYXRpdmUoe25hbWU6 +IkNsYXNzIixpbml0aWFsaXplOmZ1bmN0aW9uKEIpe0I9Qnx8e307dmFyIEE9ZnVu +Y3Rpb24oRSl7Zm9yKHZhciBEIGluIHRoaXMpe3RoaXNbRF09JHVubGluayh0aGlz +W0RdKTsKfWZvcih2YXIgRiBpbiBDbGFzcy5NdXRhdG9ycyl7aWYoIXRoaXNbRl0p +e2NvbnRpbnVlO31DbGFzcy5NdXRhdG9yc1tGXSh0aGlzLHRoaXNbRl0pO2RlbGV0 +ZSB0aGlzW0ZdO310aGlzLmNvbnN0cnVjdG9yPUE7aWYoRT09PSRlbXB0eSl7cmV0 +dXJuIHRoaXM7fXZhciBDPSh0aGlzLmluaXRpYWxpemUpP3RoaXMuaW5pdGlhbGl6 +ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dGhpczsKaWYodGhpcy5vcHRpb25zJiZ0 +aGlzLm9wdGlvbnMuaW5pdGlhbGl6ZSl7dGhpcy5vcHRpb25zLmluaXRpYWxpemUu +Y2FsbCh0aGlzKTt9cmV0dXJuIEM7fTskZXh0ZW5kKEEsdGhpcyk7QS5jb25zdHJ1 +Y3Rvcj1DbGFzcztBLnByb3RvdHlwZT1CO3JldHVybiBBO319KTsKQ2xhc3MuaW1w +bGVtZW50KHtpbXBsZW1lbnQ6ZnVuY3Rpb24oKXtDbGFzcy5NdXRhdG9ycy5JbXBs +ZW1lbnRzKHRoaXMucHJvdG90eXBlLEFycmF5LnNsaWNlKGFyZ3VtZW50cykpO3Jl +dHVybiB0aGlzO319KTtDbGFzcy5NdXRhdG9ycz17SW1wbGVtZW50czpmdW5jdGlv +bihBLEIpeyRzcGxhdChCKS5lYWNoKGZ1bmN0aW9uKEMpeyRleHRlbmQoQSwoJHR5 +cGUoQyk9PSJjbGFzcyIpP25ldyBDKCRlbXB0eSk6Qyk7Cn0pO30sRXh0ZW5kczpm +dW5jdGlvbihzZWxmLGtsYXNzKXt2YXIgaW5zdGFuY2U9bmV3IGtsYXNzKCRlbXB0 +eSk7ZGVsZXRlIGluc3RhbmNlLnBhcmVudDtkZWxldGUgaW5zdGFuY2UucGFyZW50 +T2Y7Zm9yKHZhciBrZXkgaW4gaW5zdGFuY2Upe3ZhciBjdXJyZW50PXNlbGZba2V5 +XSxwcmV2aW91cz1pbnN0YW5jZVtrZXldOwppZihjdXJyZW50PT11bmRlZmluZWQp +e3NlbGZba2V5XT1wcmV2aW91cztjb250aW51ZTt9dmFyIGN0eXBlPSR0eXBlKGN1 +cnJlbnQpLHB0eXBlPSR0eXBlKHByZXZpb3VzKTtpZihjdHlwZSE9cHR5cGUpe2Nv +bnRpbnVlO31zd2l0Y2goY3R5cGUpe2Nhc2UiZnVuY3Rpb24iOmlmKCFhcmd1bWVu +dHMuY2FsbGVlLmNhbGxlcil7c2VsZltrZXldPWV2YWwoIigiK1N0cmluZyhjdXJy +ZW50KS5yZXBsYWNlKC9cYnRoaXNcLnBhcmVudFwoXHMqKFwpKT8vZyxmdW5jdGlv +bihmdWxsLGNsb3NlKXtyZXR1cm4iYXJndW1lbnRzLmNhbGxlZS5fcGFyZW50Xy5j +YWxsKHRoaXMiKyhjbG9zZXx8IiwgIik7Cn0pKyIpIik7fXNlbGZba2V5XS5fcGFy +ZW50Xz1wcmV2aW91czticmVhaztjYXNlIm9iamVjdCI6c2VsZltrZXldPSRtZXJn +ZShwcmV2aW91cyxjdXJyZW50KTt9fXNlbGYucGFyZW50PWZ1bmN0aW9uKCl7cmV0 +dXJuIGFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyLl9wYXJlbnRfLmFwcGx5KHRoaXMs +YXJndW1lbnRzKTsKfTtzZWxmLnBhcmVudE9mPWZ1bmN0aW9uKGRlc2NlbmRhbnQp +e3JldHVybiBkZXNjZW5kYW50Ll9wYXJlbnRfLmFwcGx5KHRoaXMsQXJyYXkuc2xp +Y2UoYXJndW1lbnRzLDEpKTt9O319O3ZhciBDaGFpbj1uZXcgQ2xhc3Moe2NoYWlu +OmZ1bmN0aW9uKCl7dGhpcy4kY2hhaW49KHRoaXMuJGNoYWlufHxbXSkuZXh0ZW5k +KGFyZ3VtZW50cyk7CnJldHVybiB0aGlzO30sY2FsbENoYWluOmZ1bmN0aW9uKCl7 +cmV0dXJuKHRoaXMuJGNoYWluJiZ0aGlzLiRjaGFpbi5sZW5ndGgpP3RoaXMuJGNo +YWluLnNoaWZ0KCkuYXBwbHkodGhpcyxhcmd1bWVudHMpOmZhbHNlO30sY2xlYXJD +aGFpbjpmdW5jdGlvbigpe2lmKHRoaXMuJGNoYWluKXt0aGlzLiRjaGFpbi5lbXB0 +eSgpOwp9cmV0dXJuIHRoaXM7fX0pO3ZhciBFdmVudHM9bmV3IENsYXNzKHthZGRF +dmVudDpmdW5jdGlvbihDLEIsQSl7Qz1FdmVudHMucmVtb3ZlT24oQyk7aWYoQiE9 +JGVtcHR5KXt0aGlzLiRldmVudHM9dGhpcy4kZXZlbnRzfHx7fTt0aGlzLiRldmVu +dHNbQ109dGhpcy4kZXZlbnRzW0NdfHxbXTsKdGhpcy4kZXZlbnRzW0NdLmluY2x1 +ZGUoQik7aWYoQSl7Qi5pbnRlcm5hbD10cnVlO319cmV0dXJuIHRoaXM7fSxhZGRF +dmVudHM6ZnVuY3Rpb24oQSl7Zm9yKHZhciBCIGluIEEpe3RoaXMuYWRkRXZlbnQo +QixBW0JdKTt9cmV0dXJuIHRoaXM7fSxmaXJlRXZlbnQ6ZnVuY3Rpb24oQyxCLEEp +e0M9RXZlbnRzLnJlbW92ZU9uKEMpOwppZighdGhpcy4kZXZlbnRzfHwhdGhpcy4k +ZXZlbnRzW0NdKXtyZXR1cm4gdGhpczt9dGhpcy4kZXZlbnRzW0NdLmVhY2goZnVu +Y3Rpb24oRCl7RC5jcmVhdGUoe2JpbmQ6dGhpcyxkZWxheTpBLCJhcmd1bWVudHMi +OkJ9KSgpO30sdGhpcyk7cmV0dXJuIHRoaXM7fSxyZW1vdmVFdmVudDpmdW5jdGlv +bihCLEEpe0I9RXZlbnRzLnJlbW92ZU9uKEIpOwppZighdGhpcy4kZXZlbnRzfHwh +dGhpcy4kZXZlbnRzW0JdKXtyZXR1cm4gdGhpczt9aWYoIUEuaW50ZXJuYWwpe3Ro +aXMuJGV2ZW50c1tCXS5lcmFzZShBKTt9cmV0dXJuIHRoaXM7fSxyZW1vdmVFdmVu +dHM6ZnVuY3Rpb24oQyl7Zm9yKHZhciBEIGluIHRoaXMuJGV2ZW50cyl7aWYoQyYm +QyE9RCl7Y29udGludWU7Cn12YXIgQj10aGlzLiRldmVudHNbRF07Zm9yKHZhciBB +PUIubGVuZ3RoO0EtLTtBKXt0aGlzLnJlbW92ZUV2ZW50KEQsQltBXSk7fX1yZXR1 +cm4gdGhpczt9fSk7RXZlbnRzLnJlbW92ZU9uPWZ1bmN0aW9uKEEpe3JldHVybiBB +LnJlcGxhY2UoL15vbihbQS1aXSkvLGZ1bmN0aW9uKEIsQyl7cmV0dXJuIEMudG9M +b3dlckNhc2UoKTsKfSk7fTt2YXIgT3B0aW9ucz1uZXcgQ2xhc3Moe3NldE9wdGlv +bnM6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnM9JG1lcmdlLnJ1bihbdGhpcy5vcHRp +b25zXS5leHRlbmQoYXJndW1lbnRzKSk7aWYoIXRoaXMuYWRkRXZlbnQpe3JldHVy +biB0aGlzO31mb3IodmFyIEEgaW4gdGhpcy5vcHRpb25zKXtpZigkdHlwZSh0aGlz +Lm9wdGlvbnNbQV0pIT0iZnVuY3Rpb24ifHwhKC9eb25bQS1aXS8pLnRlc3QoQSkp +e2NvbnRpbnVlOwp9dGhpcy5hZGRFdmVudChBLHRoaXMub3B0aW9uc1tBXSk7ZGVs +ZXRlIHRoaXMub3B0aW9uc1tBXTt9cmV0dXJuIHRoaXM7fX0pO0RvY3VtZW50Lmlt +cGxlbWVudCh7bmV3RWxlbWVudDpmdW5jdGlvbihBLEIpe2lmKEJyb3dzZXIuRW5n +aW5lLnRyaWRlbnQmJkIpe1sibmFtZSIsInR5cGUiLCJjaGVja2VkIl0uZWFjaChm +dW5jdGlvbihDKXtpZighQltDXSl7cmV0dXJuIDsKfUErPSIgIitDKyc9IicrQltD +XSsnIic7aWYoQyE9ImNoZWNrZWQiKXtkZWxldGUgQltDXTt9fSk7QT0iPCIrQSsi +PiI7fXJldHVybiAkLmVsZW1lbnQodGhpcy5jcmVhdGVFbGVtZW50KEEpKS5zZXQo +Qik7fSxuZXdUZXh0Tm9kZTpmdW5jdGlvbihBKXtyZXR1cm4gdGhpcy5jcmVhdGVU +ZXh0Tm9kZShBKTsKfSxnZXREb2N1bWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlz +O30sZ2V0V2luZG93OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdFZpZXd8 +fHRoaXMucGFyZW50V2luZG93O30scHVyZ2U6ZnVuY3Rpb24oKXt2YXIgQz10aGlz +LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7CmZvcih2YXIgQj0wLEE9Qy5sZW5n +dGg7QjxBO0IrKyl7QnJvd3Nlci5mcmVlTWVtKENbQl0pO319fSk7dmFyIEVsZW1l +bnQ9bmV3IE5hdGl2ZSh7bmFtZToiRWxlbWVudCIsbGVnYWN5OndpbmRvdy5FbGVt +ZW50LGluaXRpYWxpemU6ZnVuY3Rpb24oQSxCKXt2YXIgQz1FbGVtZW50LkNvbnN0 +cnVjdG9ycy5nZXQoQSk7CmlmKEMpe3JldHVybiBDKEIpO31pZih0eXBlb2YgQT09 +InN0cmluZyIpe3JldHVybiBkb2N1bWVudC5uZXdFbGVtZW50KEEsQik7fXJldHVy +biAkKEEpLnNldChCKTt9LGFmdGVySW1wbGVtZW50OmZ1bmN0aW9uKEEsQil7aWYo +IUFycmF5W0FdKXtFbGVtZW50cy5pbXBsZW1lbnQoQSxFbGVtZW50cy5tdWx0aShB +KSk7Cn1FbGVtZW50LlByb3RvdHlwZVtBXT1CO319KTtFbGVtZW50LlByb3RvdHlw +ZT17JGZhbWlseTp7bmFtZToiZWxlbWVudCJ9fTtFbGVtZW50LkNvbnN0cnVjdG9y +cz1uZXcgSGFzaDt2YXIgSUZyYW1lPW5ldyBOYXRpdmUoe25hbWU6IklGcmFtZSIs +Z2VuZXJpY3M6ZmFsc2UsaW5pdGlhbGl6ZTpmdW5jdGlvbigpe3ZhciBFPUFycmF5 +LmxpbmsoYXJndW1lbnRzLHtwcm9wZXJ0aWVzOk9iamVjdC50eXBlLGlmcmFtZTok +ZGVmaW5lZH0pOwp2YXIgQz1FLnByb3BlcnRpZXN8fHt9O3ZhciBCPSQoRS5pZnJh +bWUpfHxmYWxzZTt2YXIgRD1DLm9ubG9hZHx8JGVtcHR5O2RlbGV0ZSBDLm9ubG9h +ZDtDLmlkPUMubmFtZT0kcGljayhDLmlkLEMubmFtZSxCLmlkLEIubmFtZSwiSUZy +YW1lXyIrJHRpbWUoKSk7Qj1uZXcgRWxlbWVudChCfHwiaWZyYW1lIixDKTsKdmFy +IEE9ZnVuY3Rpb24oKXt2YXIgRj0kdHJ5KGZ1bmN0aW9uKCl7cmV0dXJuIEIuY29u +dGVudFdpbmRvdy5sb2NhdGlvbi5ob3N0O30pO2lmKEYmJkY9PXdpbmRvdy5sb2Nh +dGlvbi5ob3N0KXt2YXIgSD1uZXcgV2luZG93KEIuY29udGVudFdpbmRvdyk7dmFy +IEc9bmV3IERvY3VtZW50KEIuY29udGVudFdpbmRvdy5kb2N1bWVudCk7CiRleHRl +bmQoSC5FbGVtZW50LnByb3RvdHlwZSxFbGVtZW50LlByb3RvdHlwZSk7fUQuY2Fs +bChCLmNvbnRlbnRXaW5kb3csQi5jb250ZW50V2luZG93LmRvY3VtZW50KTt9Oygh +d2luZG93LmZyYW1lc1tDLmlkXSk/Qi5hZGRMaXN0ZW5lcigibG9hZCIsQSk6QSgp +O3JldHVybiBCOwp9fSk7dmFyIEVsZW1lbnRzPW5ldyBOYXRpdmUoe2luaXRpYWxp +emU6ZnVuY3Rpb24oRixCKXtCPSRleHRlbmQoe2RkdXA6dHJ1ZSxjYXNoOnRydWV9 +LEIpO0Y9Rnx8W107aWYoQi5kZHVwfHxCLmNhc2gpe3ZhciBHPXt9LEU9W107Zm9y +KHZhciBDPTAsQT1GLmxlbmd0aDsKQzxBO0MrKyl7dmFyIEQ9JC5lbGVtZW50KEZb +Q10sIUIuY2FzaCk7aWYoQi5kZHVwKXtpZihHW0QudWlkXSl7Y29udGludWU7fUdb +RC51aWRdPXRydWU7fUUucHVzaChEKTt9Rj1FO31yZXR1cm4oQi5jYXNoKT8kZXh0 +ZW5kKEYsdGhpcyk6Rjt9fSk7RWxlbWVudHMuaW1wbGVtZW50KHtmaWx0ZXI6ZnVu +Y3Rpb24oQSxCKXtpZighQSl7cmV0dXJuIHRoaXM7Cn1yZXR1cm4gbmV3IEVsZW1l +bnRzKEFycmF5LmZpbHRlcih0aGlzLCh0eXBlb2YgQT09InN0cmluZyIpP2Z1bmN0 +aW9uKEMpe3JldHVybiBDLm1hdGNoKEEpO306QSxCKSk7fX0pO0VsZW1lbnRzLm11 +bHRpPWZ1bmN0aW9uKEEpe3JldHVybiBmdW5jdGlvbigpe3ZhciBCPVtdOwp2YXIg +Rj10cnVlO2Zvcih2YXIgRD0wLEM9dGhpcy5sZW5ndGg7RDxDO0QrKyl7dmFyIEU9 +dGhpc1tEXVtBXS5hcHBseSh0aGlzW0RdLGFyZ3VtZW50cyk7Qi5wdXNoKEUpO2lm +KEYpe0Y9KCR0eXBlKEUpPT0iZWxlbWVudCIpO319cmV0dXJuKEYpP25ldyBFbGVt +ZW50cyhCKTpCOwp9O307V2luZG93LmltcGxlbWVudCh7JDpmdW5jdGlvbihCLEMp +e2lmKEImJkIuJGZhbWlseSYmQi51aWQpe3JldHVybiBCO312YXIgQT0kdHlwZShC +KTtyZXR1cm4oJFtBXSk/JFtBXShCLEMsdGhpcy5kb2N1bWVudCk6bnVsbDt9LCQk +OmZ1bmN0aW9uKEEpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PTEmJnR5cGVvZiBBPT0i +c3RyaW5nIil7cmV0dXJuIHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudHMoQSk7Cn12 +YXIgRj1bXTt2YXIgQz1BcnJheS5mbGF0dGVuKGFyZ3VtZW50cyk7Zm9yKHZhciBE +PTAsQj1DLmxlbmd0aDtEPEI7RCsrKXt2YXIgRT1DW0RdO3N3aXRjaCgkdHlwZShF +KSl7Y2FzZSJlbGVtZW50IjpFPVtFXTticmVhaztjYXNlInN0cmluZyI6RT10aGlz +LmRvY3VtZW50LmdldEVsZW1lbnRzKEUsdHJ1ZSk7CmJyZWFrO2RlZmF1bHQ6RT1m +YWxzZTt9aWYoRSl7Ri5leHRlbmQoRSk7fX1yZXR1cm4gbmV3IEVsZW1lbnRzKEYp +O30sZ2V0RG9jdW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb2N1bWVudDt9 +LGdldFdpbmRvdzpmdW5jdGlvbigpe3JldHVybiB0aGlzO319KTsKJC5zdHJpbmc9 +ZnVuY3Rpb24oQyxCLEEpe0M9QS5nZXRFbGVtZW50QnlJZChDKTtyZXR1cm4oQyk/ +JC5lbGVtZW50KEMsQik6bnVsbDt9OyQuZWxlbWVudD1mdW5jdGlvbihBLEQpeyR1 +aWQoQSk7aWYoIUQmJiFBLiRmYW1pbHkmJiEoL15vYmplY3R8ZW1iZWQkL2kpLnRl +c3QoQS50YWdOYW1lKSl7dmFyIEI9RWxlbWVudC5Qcm90b3R5cGU7CmZvcih2YXIg +QyBpbiBCKXtBW0NdPUJbQ107fX1yZXR1cm4gQTt9OyQub2JqZWN0PWZ1bmN0aW9u +KEIsQyxBKXtpZihCLnRvRWxlbWVudCl7cmV0dXJuICQuZWxlbWVudChCLnRvRWxl +bWVudChBKSxDKTt9cmV0dXJuIG51bGw7fTskLnRleHRub2RlPSQud2hpdGVzcGFj +ZT0kLndpbmRvdz0kLmRvY3VtZW50PSRhcmd1bWVudHMoMCk7Ck5hdGl2ZS5pbXBs +ZW1lbnQoW0VsZW1lbnQsRG9jdW1lbnRdLHtnZXRFbGVtZW50OmZ1bmN0aW9uKEEs +Qil7cmV0dXJuICQodGhpcy5nZXRFbGVtZW50cyhBLHRydWUpWzBdfHxudWxsLEIp +O30sZ2V0RWxlbWVudHM6ZnVuY3Rpb24oQSxEKXtBPUEuc3BsaXQoIiwiKTsKdmFy +IEM9W107dmFyIEI9KEEubGVuZ3RoPjEpO0EuZWFjaChmdW5jdGlvbihFKXt2YXIg +Rj10aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKEUudHJpbSgpKTsoQik/Qy5leHRl +bmQoRik6Qz1GO30sdGhpcyk7cmV0dXJuIG5ldyBFbGVtZW50cyhDLHtkZHVwOkIs +Y2FzaDohRH0pOwp9fSk7RWxlbWVudC5TdG9yYWdlPXtnZXQ6ZnVuY3Rpb24oQSl7 +cmV0dXJuKHRoaXNbQV18fCh0aGlzW0FdPXt9KSk7fX07RWxlbWVudC5JbnNlcnRl +cnM9bmV3IEhhc2goe2JlZm9yZTpmdW5jdGlvbihCLEEpe2lmKEEucGFyZW50Tm9k +ZSl7QS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShCLEEpOwp9fSxhZnRlcjpmdW5j +dGlvbihCLEEpe2lmKCFBLnBhcmVudE5vZGUpe3JldHVybiA7fXZhciBDPUEubmV4 +dFNpYmxpbmc7KEMpP0EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoQixDKTpBLnBh +cmVudE5vZGUuYXBwZW5kQ2hpbGQoQik7fSxib3R0b206ZnVuY3Rpb24oQixBKXtB +LmFwcGVuZENoaWxkKEIpOwp9LHRvcDpmdW5jdGlvbihCLEEpe3ZhciBDPUEuZmly +c3RDaGlsZDsoQyk/QS5pbnNlcnRCZWZvcmUoQixDKTpBLmFwcGVuZENoaWxkKEIp +O319KTtFbGVtZW50Lkluc2VydGVycy5pbnNpZGU9RWxlbWVudC5JbnNlcnRlcnMu +Ym90dG9tO0VsZW1lbnQuSW5zZXJ0ZXJzLmVhY2goZnVuY3Rpb24oQyxCKXt2YXIg +QT1CLmNhcGl0YWxpemUoKTsKRWxlbWVudC5pbXBsZW1lbnQoImluamVjdCIrQSxm +dW5jdGlvbihEKXtDKHRoaXMsJChELHRydWUpKTtyZXR1cm4gdGhpczt9KTtFbGVt +ZW50LmltcGxlbWVudCgiZ3JhYiIrQSxmdW5jdGlvbihEKXtDKCQoRCx0cnVlKSx0 +aGlzKTtyZXR1cm4gdGhpczt9KTt9KTtFbGVtZW50LmltcGxlbWVudCh7Z2V0RG9j +dW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50Owp9LGdl +dFdpbmRvdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuZ2V0 +V2luZG93KCk7fSxnZXRFbGVtZW50QnlJZDpmdW5jdGlvbihELEMpe3ZhciBCPXRo +aXMub3duZXJEb2N1bWVudC5nZXRFbGVtZW50QnlJZChEKTtpZighQil7cmV0dXJu +IG51bGw7Cn1mb3IodmFyIEE9Qi5wYXJlbnROb2RlO0EhPXRoaXM7QT1BLnBhcmVu +dE5vZGUpe2lmKCFBKXtyZXR1cm4gbnVsbDt9fXJldHVybiAkLmVsZW1lbnQoQixD +KTt9LHNldDpmdW5jdGlvbihELEIpe3N3aXRjaCgkdHlwZShEKSl7Y2FzZSJvYmpl +Y3QiOmZvcih2YXIgQyBpbiBEKXt0aGlzLnNldChDLERbQ10pOwp9YnJlYWs7Y2Fz +ZSJzdHJpbmciOnZhciBBPUVsZW1lbnQuUHJvcGVydGllcy5nZXQoRCk7KEEmJkEu +c2V0KT9BLnNldC5hcHBseSh0aGlzLEFycmF5LnNsaWNlKGFyZ3VtZW50cywxKSk6 +dGhpcy5zZXRQcm9wZXJ0eShELEIpO31yZXR1cm4gdGhpczt9LGdldDpmdW5jdGlv +bihCKXt2YXIgQT1FbGVtZW50LlByb3BlcnRpZXMuZ2V0KEIpOwpyZXR1cm4oQSYm +QS5nZXQpP0EuZ2V0LmFwcGx5KHRoaXMsQXJyYXkuc2xpY2UoYXJndW1lbnRzLDEp +KTp0aGlzLmdldFByb3BlcnR5KEIpO30sZXJhc2U6ZnVuY3Rpb24oQil7dmFyIEE9 +RWxlbWVudC5Qcm9wZXJ0aWVzLmdldChCKTsoQSYmQS5lcmFzZSk/QS5lcmFzZS5h +cHBseSh0aGlzLEFycmF5LnNsaWNlKGFyZ3VtZW50cywxKSk6dGhpcy5yZW1vdmVQ +cm9wZXJ0eShCKTsKcmV0dXJuIHRoaXM7fSxtYXRjaDpmdW5jdGlvbihBKXtyZXR1 +cm4oIUF8fEVsZW1lbnQuZ2V0KHRoaXMsInRhZyIpPT1BKTt9LGluamVjdDpmdW5j +dGlvbihCLEEpe0VsZW1lbnQuSW5zZXJ0ZXJzLmdldChBfHwiYm90dG9tIikodGhp +cywkKEIsdHJ1ZSkpO3JldHVybiB0aGlzOwp9LHdyYXBzOmZ1bmN0aW9uKEIsQSl7 +Qj0kKEIsdHJ1ZSk7cmV0dXJuIHRoaXMucmVwbGFjZXMoQikuZ3JhYihCLEEpO30s +Z3JhYjpmdW5jdGlvbihCLEEpe0VsZW1lbnQuSW5zZXJ0ZXJzLmdldChBfHwiYm90 +dG9tIikoJChCLHRydWUpLHRoaXMpO3JldHVybiB0aGlzOwp9LGFwcGVuZFRleHQ6 +ZnVuY3Rpb24oQixBKXtyZXR1cm4gdGhpcy5ncmFiKHRoaXMuZ2V0RG9jdW1lbnQo +KS5uZXdUZXh0Tm9kZShCKSxBKTt9LGFkb3B0OmZ1bmN0aW9uKCl7QXJyYXkuZmxh +dHRlbihhcmd1bWVudHMpLmVhY2goZnVuY3Rpb24oQSl7QT0kKEEsdHJ1ZSk7Cmlm +KEEpe3RoaXMuYXBwZW5kQ2hpbGQoQSk7fX0sdGhpcyk7cmV0dXJuIHRoaXM7fSxk +aXNwb3NlOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucGFyZW50Tm9kZSk/dGhpcy5w +YXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMpOnRoaXM7fSxjbG9uZTpmdW5jdGlv +bihELEMpe3N3aXRjaCgkdHlwZSh0aGlzKSl7Y2FzZSJlbGVtZW50Ijp2YXIgSD17 +fTsKZm9yKHZhciBHPTAsRT10aGlzLmF0dHJpYnV0ZXMubGVuZ3RoO0c8RTtHKysp +e3ZhciBCPXRoaXMuYXR0cmlidXRlc1tHXSxMPUIubm9kZU5hbWUudG9Mb3dlckNh +c2UoKTtpZihCcm93c2VyLkVuZ2luZS50cmlkZW50JiYoL2lucHV0L2kpLnRlc3Qo +dGhpcy50YWdOYW1lKSYmKC93aWR0aHxoZWlnaHQvKS50ZXN0KEwpKXtjb250aW51 +ZTsKfXZhciBLPShMPT0ic3R5bGUiJiZ0aGlzLnN0eWxlKT90aGlzLnN0eWxlLmNz +c1RleHQ6Qi5ub2RlVmFsdWU7aWYoISRjaGsoSyl8fEw9PSJ1aWQifHwoTD09Imlk +IiYmIUMpKXtjb250aW51ZTt9aWYoSyE9ImluaGVyaXQiJiZbInN0cmluZyIsIm51 +bWJlciJdLmNvbnRhaW5zKCR0eXBlKEspKSl7SFtMXT1LOwp9fXZhciBKPW5ldyBF +bGVtZW50KHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxIKTtpZihEIT09ZmFs +c2Upe2Zvcih2YXIgST0wLEY9dGhpcy5jaGlsZE5vZGVzLmxlbmd0aDtJPEY7SSsr +KXt2YXIgQT1FbGVtZW50LmNsb25lKHRoaXMuY2hpbGROb2Rlc1tJXSx0cnVlLEMp +OwppZihBKXtKLmdyYWIoQSk7fX19cmV0dXJuIEo7Y2FzZSJ0ZXh0bm9kZSI6cmV0 +dXJuIGRvY3VtZW50Lm5ld1RleHROb2RlKHRoaXMubm9kZVZhbHVlKTt9cmV0dXJu +IG51bGw7fSxyZXBsYWNlczpmdW5jdGlvbihBKXtBPSQoQSx0cnVlKTtBLnBhcmVu +dE5vZGUucmVwbGFjZUNoaWxkKHRoaXMsQSk7CnJldHVybiB0aGlzO30saGFzQ2xh +c3M6ZnVuY3Rpb24oQSl7cmV0dXJuIHRoaXMuY2xhc3NOYW1lLmNvbnRhaW5zKEEs +IiAiKTt9LGFkZENsYXNzOmZ1bmN0aW9uKEEpe2lmKCF0aGlzLmhhc0NsYXNzKEEp +KXt0aGlzLmNsYXNzTmFtZT0odGhpcy5jbGFzc05hbWUrIiAiK0EpLmNsZWFuKCk7 +Cn1yZXR1cm4gdGhpczt9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKEEpe3RoaXMuY2xh +c3NOYW1lPXRoaXMuY2xhc3NOYW1lLnJlcGxhY2UobmV3IFJlZ0V4cCgiKF58XFxz +KSIrQSsiKD86XFxzfCQpIiksIiQxIikuY2xlYW4oKTtyZXR1cm4gdGhpczt9LHRv +Z2dsZUNsYXNzOmZ1bmN0aW9uKEEpe3JldHVybiB0aGlzLmhhc0NsYXNzKEEpP3Ro +aXMucmVtb3ZlQ2xhc3MoQSk6dGhpcy5hZGRDbGFzcyhBKTsKfSxnZXRDb21wdXRl +ZFN0eWxlOmZ1bmN0aW9uKEIpe2lmKHRoaXMuY3VycmVudFN0eWxlKXtyZXR1cm4g +dGhpcy5jdXJyZW50U3R5bGVbQi5jYW1lbENhc2UoKV07fXZhciBBPXRoaXMuZ2V0 +V2luZG93KCkuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpO3JldHVybihBKT9B +LmdldFByb3BlcnR5VmFsdWUoW0IuaHlwaGVuYXRlKCldKTpudWxsOwp9LGVtcHR5 +OmZ1bmN0aW9uKCl7JEEodGhpcy5jaGlsZE5vZGVzKS5lYWNoKGZ1bmN0aW9uKEEp +e0Jyb3dzZXIuZnJlZU1lbShBKTtFbGVtZW50LmVtcHR5KEEpO0VsZW1lbnQuZGlz +cG9zZShBKTt9LHRoaXMpO3JldHVybiB0aGlzO30sZGVzdHJveTpmdW5jdGlvbigp +e0Jyb3dzZXIuZnJlZU1lbSh0aGlzLmVtcHR5KCkuZGlzcG9zZSgpKTsKcmV0dXJu +IG51bGw7fSxnZXRTZWxlY3RlZDpmdW5jdGlvbigpe3JldHVybiBuZXcgRWxlbWVu +dHMoJEEodGhpcy5vcHRpb25zKS5maWx0ZXIoZnVuY3Rpb24oQSl7cmV0dXJuIEEu +c2VsZWN0ZWQ7fSkpO30sdG9RdWVyeVN0cmluZzpmdW5jdGlvbigpe3ZhciBBPVtd +Owp0aGlzLmdldEVsZW1lbnRzKCJpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSIpLmVh +Y2goZnVuY3Rpb24oQil7aWYoIUIubmFtZXx8Qi5kaXNhYmxlZCl7cmV0dXJuIDt9 +dmFyIEM9KEIudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0ic2VsZWN0Iik/RWxlbWVu +dC5nZXRTZWxlY3RlZChCKS5tYXAoZnVuY3Rpb24oRCl7cmV0dXJuIEQudmFsdWU7 +Cn0pOigoQi50eXBlPT0icmFkaW8ifHxCLnR5cGU9PSJjaGVja2JveCIpJiYhQi5j +aGVja2VkKT9udWxsOkIudmFsdWU7JHNwbGF0KEMpLmVhY2goZnVuY3Rpb24oRCl7 +aWYoRCl7QS5wdXNoKEIubmFtZSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KEQpKTt9 +fSk7fSk7cmV0dXJuIEEuam9pbigiJiIpOwp9LGdldFByb3BlcnR5OmZ1bmN0aW9u +KEMpe3ZhciBCPUVsZW1lbnQuQXR0cmlidXRlcyxBPUIuUHJvcHNbQ107dmFyIEQ9 +KEEpP3RoaXNbQV06dGhpcy5nZXRBdHRyaWJ1dGUoQywyKTtyZXR1cm4oQi5Cb29s +c1tDXSk/ISFEOihBKT9EOkR8fG51bGw7fSxnZXRQcm9wZXJ0aWVzOmZ1bmN0aW9u +KCl7dmFyIEE9JEEoYXJndW1lbnRzKTsKcmV0dXJuIEEubWFwKGZ1bmN0aW9uKEIp +e3JldHVybiB0aGlzLmdldFByb3BlcnR5KEIpO30sdGhpcykuYXNzb2NpYXRlKEEp +O30sc2V0UHJvcGVydHk6ZnVuY3Rpb24oRCxFKXt2YXIgQz1FbGVtZW50LkF0dHJp +YnV0ZXMsQj1DLlByb3BzW0RdLEE9JGRlZmluZWQoRSk7CmlmKEImJkMuQm9vbHNb +RF0pe0U9KEV8fCFBKT90cnVlOmZhbHNlO31lbHNle2lmKCFBKXtyZXR1cm4gdGhp +cy5yZW1vdmVQcm9wZXJ0eShEKTt9fShCKT90aGlzW0JdPUU6dGhpcy5zZXRBdHRy +aWJ1dGUoRCxFKTtyZXR1cm4gdGhpczt9LHNldFByb3BlcnRpZXM6ZnVuY3Rpb24o +QSl7Zm9yKHZhciBCIGluIEEpe3RoaXMuc2V0UHJvcGVydHkoQixBW0JdKTsKfXJl +dHVybiB0aGlzO30scmVtb3ZlUHJvcGVydHk6ZnVuY3Rpb24oRCl7dmFyIEM9RWxl +bWVudC5BdHRyaWJ1dGVzLEI9Qy5Qcm9wc1tEXSxBPShCJiZDLkJvb2xzW0RdKTso +Qik/dGhpc1tCXT0oQSk/ZmFsc2U6IiI6dGhpcy5yZW1vdmVBdHRyaWJ1dGUoRCk7 +cmV0dXJuIHRoaXM7Cn0scmVtb3ZlUHJvcGVydGllczpmdW5jdGlvbigpe0FycmF5 +LmVhY2goYXJndW1lbnRzLHRoaXMucmVtb3ZlUHJvcGVydHksdGhpcyk7cmV0dXJu +IHRoaXM7fX0pOyhmdW5jdGlvbigpe3ZhciBBPWZ1bmN0aW9uKEQsQixJLEMsRixI +KXt2YXIgRT1EW0l8fEJdO3ZhciBHPVtdOwp3aGlsZShFKXtpZihFLm5vZGVUeXBl +PT0xJiYoIUN8fEVsZW1lbnQubWF0Y2goRSxDKSkpe0cucHVzaChFKTtpZighRil7 +YnJlYWs7fX1FPUVbQl07fXJldHVybihGKT9uZXcgRWxlbWVudHMoRyx7ZGR1cDpm +YWxzZSxjYXNoOiFIfSk6JChHWzBdLEgpO307RWxlbWVudC5pbXBsZW1lbnQoe2dl +dFByZXZpb3VzOmZ1bmN0aW9uKEIsQyl7cmV0dXJuIEEodGhpcywicHJldmlvdXNT +aWJsaW5nIixudWxsLEIsZmFsc2UsQyk7Cn0sZ2V0QWxsUHJldmlvdXM6ZnVuY3Rp +b24oQixDKXtyZXR1cm4gQSh0aGlzLCJwcmV2aW91c1NpYmxpbmciLG51bGwsQix0 +cnVlLEMpO30sZ2V0TmV4dDpmdW5jdGlvbihCLEMpe3JldHVybiBBKHRoaXMsIm5l +eHRTaWJsaW5nIixudWxsLEIsZmFsc2UsQyk7fSxnZXRBbGxOZXh0OmZ1bmN0aW9u +KEIsQyl7cmV0dXJuIEEodGhpcywibmV4dFNpYmxpbmciLG51bGwsQix0cnVlLEMp +Owp9LGdldEZpcnN0OmZ1bmN0aW9uKEIsQyl7cmV0dXJuIEEodGhpcywibmV4dFNp +YmxpbmciLCJmaXJzdENoaWxkIixCLGZhbHNlLEMpO30sZ2V0TGFzdDpmdW5jdGlv +bihCLEMpe3JldHVybiBBKHRoaXMsInByZXZpb3VzU2libGluZyIsImxhc3RDaGls +ZCIsQixmYWxzZSxDKTsKfSxnZXRQYXJlbnQ6ZnVuY3Rpb24oQixDKXtyZXR1cm4g +QSh0aGlzLCJwYXJlbnROb2RlIixudWxsLEIsZmFsc2UsQyk7fSxnZXRQYXJlbnRz +OmZ1bmN0aW9uKEIsQyl7cmV0dXJuIEEodGhpcywicGFyZW50Tm9kZSIsbnVsbCxC +LHRydWUsQyk7fSxnZXRDaGlsZHJlbjpmdW5jdGlvbihCLEMpe3JldHVybiBBKHRo +aXMsIm5leHRTaWJsaW5nIiwiZmlyc3RDaGlsZCIsQix0cnVlLEMpOwp9LGhhc0No +aWxkOmZ1bmN0aW9uKEIpe0I9JChCLHRydWUpO3JldHVybighIUImJiRBKHRoaXMu +Z2V0RWxlbWVudHNCeVRhZ05hbWUoQi50YWdOYW1lKSkuY29udGFpbnMoQikpO319 +KTt9KSgpO0VsZW1lbnQuUHJvcGVydGllcz1uZXcgSGFzaDtFbGVtZW50LlByb3Bl +cnRpZXMuc3R5bGU9e3NldDpmdW5jdGlvbihBKXt0aGlzLnN0eWxlLmNzc1RleHQ9 +QTsKfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHlsZS5jc3NUZXh0O30s +ZXJhc2U6ZnVuY3Rpb24oKXt0aGlzLnN0eWxlLmNzc1RleHQ9IiI7fX07RWxlbWVu +dC5Qcm9wZXJ0aWVzLnRhZz17Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFn +TmFtZS50b0xvd2VyQ2FzZSgpOwp9fTtFbGVtZW50LlByb3BlcnRpZXMuaHJlZj17 +Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuKCF0aGlzLmhyZWYpP251bGw6dGhpcy5ocmVm +LnJlcGxhY2UobmV3IFJlZ0V4cCgiXiIrZG9jdW1lbnQubG9jYXRpb24ucHJvdG9j +b2wrIi8vIitkb2N1bWVudC5sb2NhdGlvbi5ob3N0KSwiIik7Cn19O0VsZW1lbnQu +UHJvcGVydGllcy5odG1sPXtzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbm5l +ckhUTUw9QXJyYXkuZmxhdHRlbihhcmd1bWVudHMpLmpvaW4oIiIpO319O05hdGl2 +ZS5pbXBsZW1lbnQoW0VsZW1lbnQsV2luZG93LERvY3VtZW50XSx7YWRkTGlzdGVu +ZXI6ZnVuY3Rpb24oQixBKXtpZih0aGlzLmFkZEV2ZW50TGlzdGVuZXIpe3RoaXMu +YWRkRXZlbnRMaXN0ZW5lcihCLEEsZmFsc2UpOwp9ZWxzZXt0aGlzLmF0dGFjaEV2 +ZW50KCJvbiIrQixBKTt9cmV0dXJuIHRoaXM7fSxyZW1vdmVMaXN0ZW5lcjpmdW5j +dGlvbihCLEEpe2lmKHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcil7dGhpcy5yZW1v +dmVFdmVudExpc3RlbmVyKEIsQSxmYWxzZSk7fWVsc2V7dGhpcy5kZXRhY2hFdmVu +dCgib24iK0IsQSk7Cn1yZXR1cm4gdGhpczt9LHJldHJpZXZlOmZ1bmN0aW9uKEIs +QSl7dmFyIEQ9RWxlbWVudC5TdG9yYWdlLmdldCh0aGlzLnVpZCk7dmFyIEM9RFtC +XTtpZigkZGVmaW5lZChBKSYmISRkZWZpbmVkKEMpKXtDPURbQl09QTt9cmV0dXJu +ICRwaWNrKEMpO30sc3RvcmU6ZnVuY3Rpb24oQixBKXt2YXIgQz1FbGVtZW50LlN0 +b3JhZ2UuZ2V0KHRoaXMudWlkKTsKQ1tCXT1BO3JldHVybiB0aGlzO30sZWxpbWlu +YXRlOmZ1bmN0aW9uKEEpe3ZhciBCPUVsZW1lbnQuU3RvcmFnZS5nZXQodGhpcy51 +aWQpO2RlbGV0ZSBCW0FdO3JldHVybiB0aGlzO319KTtFbGVtZW50LkF0dHJpYnV0 +ZXM9bmV3IEhhc2goe1Byb3BzOntodG1sOiJpbm5lckhUTUwiLCJjbGFzcyI6ImNs +YXNzTmFtZSIsImZvciI6Imh0bWxGb3IiLHRleHQ6KEJyb3dzZXIuRW5naW5lLnRy +aWRlbnQpPyJpbm5lclRleHQiOiJ0ZXh0Q29udGVudCJ9LEJvb2xzOlsiY29tcGFj +dCIsIm5vd3JhcCIsImlzbWFwIiwiZGVjbGFyZSIsIm5vc2hhZGUiLCJjaGVja2Vk +IiwiZGlzYWJsZWQiLCJyZWFkb25seSIsIm11bHRpcGxlIiwic2VsZWN0ZWQiLCJu +b3Jlc2l6ZSIsImRlZmVyIl0sQ2FtZWxzOlsidmFsdWUiLCJhY2Nlc3NLZXkiLCJj +ZWxsUGFkZGluZyIsImNlbGxTcGFjaW5nIiwiY29sU3BhbiIsImZyYW1lQm9yZGVy +IiwibWF4TGVuZ3RoIiwicmVhZE9ubHkiLCJyb3dTcGFuIiwidGFiSW5kZXgiLCJ1 +c2VNYXAiXX0pOwpCcm93c2VyLmZyZWVNZW09ZnVuY3Rpb24oQSl7aWYoIUEpe3Jl +dHVybiA7fWlmKEJyb3dzZXIuRW5naW5lLnRyaWRlbnQmJigvb2JqZWN0L2kpLnRl +c3QoQS50YWdOYW1lKSl7Zm9yKHZhciBCIGluIEEpe2lmKHR5cGVvZiBBW0JdPT0i +ZnVuY3Rpb24iKXtBW0JdPSRlbXB0eTsKfX1FbGVtZW50LmRpc3Bvc2UoQSk7fWlm +KEEudWlkJiZBLnJlbW92ZUV2ZW50cyl7QS5yZW1vdmVFdmVudHMoKTt9fTsoZnVu +Y3Rpb24oQil7dmFyIEM9Qi5Cb29scyxBPUIuQ2FtZWxzO0IuQm9vbHM9Qz1DLmFz +c29jaWF0ZShDKTtIYXNoLmV4dGVuZChIYXNoLmNvbWJpbmUoQi5Qcm9wcyxDKSxB +LmFzc29jaWF0ZShBLm1hcChmdW5jdGlvbihEKXtyZXR1cm4gRC50b0xvd2VyQ2Fz +ZSgpOwp9KSkpO0IuZXJhc2UoIkNhbWVscyIpO30pKEVsZW1lbnQuQXR0cmlidXRl +cyk7d2luZG93LmFkZExpc3RlbmVyKCJ1bmxvYWQiLGZ1bmN0aW9uKCl7d2luZG93 +LnJlbW92ZUxpc3RlbmVyKCJ1bmxvYWQiLGFyZ3VtZW50cy5jYWxsZWUpO2RvY3Vt +ZW50LnB1cmdlKCk7CmlmKEJyb3dzZXIuRW5naW5lLnRyaWRlbnQpe0NvbGxlY3RH +YXJiYWdlKCk7fX0pO0VsZW1lbnQuUHJvcGVydGllcy5ldmVudHM9e3NldDpmdW5j +dGlvbihBKXt0aGlzLmFkZEV2ZW50cyhBKTt9fTtOYXRpdmUuaW1wbGVtZW50KFtF +bGVtZW50LFdpbmRvdyxEb2N1bWVudF0se2FkZEV2ZW50OmZ1bmN0aW9uKEUsRyl7 +dmFyIEg9dGhpcy5yZXRyaWV2ZSgiZXZlbnRzIix7fSk7CkhbRV09SFtFXXx8e2tl +eXM6W10sdmFsdWVzOltdfTtpZihIW0VdLmtleXMuY29udGFpbnMoRykpe3JldHVy +biB0aGlzO31IW0VdLmtleXMucHVzaChHKTt2YXIgRj1FLEE9RWxlbWVudC5FdmVu +dHMuZ2V0KEUpLEM9RyxJPXRoaXM7aWYoQSl7aWYoQS5vbkFkZCl7QS5vbkFkZC5j +YWxsKHRoaXMsRyk7Cn1pZihBLmNvbmRpdGlvbil7Qz1mdW5jdGlvbihKKXtpZihB +LmNvbmRpdGlvbi5jYWxsKHRoaXMsSikpe3JldHVybiBHLmNhbGwodGhpcyxKKTt9 +cmV0dXJuIGZhbHNlO307fUY9QS5iYXNlfHxGO312YXIgRD1mdW5jdGlvbigpe3Jl +dHVybiBHLmNhbGwoSSk7fTt2YXIgQj1FbGVtZW50Lk5hdGl2ZUV2ZW50c1tGXXx8 +MDsKaWYoQil7aWYoQj09Mil7RD1mdW5jdGlvbihKKXtKPW5ldyBFdmVudChKLEku +Z2V0V2luZG93KCkpO2lmKEMuY2FsbChJLEopPT09ZmFsc2Upe0ouc3RvcCgpO319 +O310aGlzLmFkZExpc3RlbmVyKEYsRCk7fUhbRV0udmFsdWVzLnB1c2goRCk7cmV0 +dXJuIHRoaXM7fSxyZW1vdmVFdmVudDpmdW5jdGlvbihELEMpe3ZhciBCPXRoaXMu +cmV0cmlldmUoImV2ZW50cyIpOwppZighQnx8IUJbRF0pe3JldHVybiB0aGlzO312 +YXIgRz1CW0RdLmtleXMuaW5kZXhPZihDKTtpZihHPT0tMSl7cmV0dXJuIHRoaXM7 +fXZhciBBPUJbRF0ua2V5cy5zcGxpY2UoRywxKVswXTt2YXIgRj1CW0RdLnZhbHVl +cy5zcGxpY2UoRywxKVswXTt2YXIgRT1FbGVtZW50LkV2ZW50cy5nZXQoRCk7Cmlm +KEUpe2lmKEUub25SZW1vdmUpe0Uub25SZW1vdmUuY2FsbCh0aGlzLEMpO31EPUUu +YmFzZXx8RDt9cmV0dXJuKEVsZW1lbnQuTmF0aXZlRXZlbnRzW0RdKT90aGlzLnJl +bW92ZUxpc3RlbmVyKEQsRik6dGhpczt9LGFkZEV2ZW50czpmdW5jdGlvbihBKXtm +b3IodmFyIEIgaW4gQSl7dGhpcy5hZGRFdmVudChCLEFbQl0pOwp9cmV0dXJuIHRo +aXM7fSxyZW1vdmVFdmVudHM6ZnVuY3Rpb24oQil7dmFyIEE9dGhpcy5yZXRyaWV2 +ZSgiZXZlbnRzIik7aWYoIUEpe3JldHVybiB0aGlzO31pZighQil7Zm9yKHZhciBD +IGluIEEpe3RoaXMucmVtb3ZlRXZlbnRzKEMpO31BPW51bGw7fWVsc2V7aWYoQVtC +XSl7d2hpbGUoQVtCXS5rZXlzWzBdKXt0aGlzLnJlbW92ZUV2ZW50KEIsQVtCXS5r +ZXlzWzBdKTsKfUFbQl09bnVsbDt9fXJldHVybiB0aGlzO30sZmlyZUV2ZW50OmZ1 +bmN0aW9uKEQsQixBKXt2YXIgQz10aGlzLnJldHJpZXZlKCJldmVudHMiKTtpZigh +Q3x8IUNbRF0pe3JldHVybiB0aGlzO31DW0RdLmtleXMuZWFjaChmdW5jdGlvbihF +KXtFLmNyZWF0ZSh7YmluZDp0aGlzLGRlbGF5OkEsImFyZ3VtZW50cyI6Qn0pKCk7 +Cn0sdGhpcyk7cmV0dXJuIHRoaXM7fSxjbG9uZUV2ZW50czpmdW5jdGlvbihELEEp +e0Q9JChEKTt2YXIgQz1ELnJldHJpZXZlKCJldmVudHMiKTtpZighQyl7cmV0dXJu +IHRoaXM7fWlmKCFBKXtmb3IodmFyIEIgaW4gQyl7dGhpcy5jbG9uZUV2ZW50cyhE +LEIpO319ZWxzZXtpZihDW0FdKXtDW0FdLmtleXMuZWFjaChmdW5jdGlvbihFKXt0 +aGlzLmFkZEV2ZW50KEEsRSk7Cn0sdGhpcyk7fX1yZXR1cm4gdGhpczt9fSk7RWxl +bWVudC5OYXRpdmVFdmVudHM9e2NsaWNrOjIsZGJsY2xpY2s6Mixtb3VzZXVwOjIs +bW91c2Vkb3duOjIsY29udGV4dG1lbnU6Mixtb3VzZXdoZWVsOjIsRE9NTW91c2VT +Y3JvbGw6Mixtb3VzZW92ZXI6Mixtb3VzZW91dDoyLG1vdXNlbW92ZToyLHNlbGVj +dHN0YXJ0OjIsc2VsZWN0ZW5kOjIsa2V5ZG93bjoyLGtleXByZXNzOjIsa2V5dXA6 +Mixmb2N1czoyLGJsdXI6MixjaGFuZ2U6MixyZXNldDoyLHNlbGVjdDoyLHN1Ym1p +dDoyLGxvYWQ6MSx1bmxvYWQ6MSxiZWZvcmV1bmxvYWQ6MixyZXNpemU6MSxtb3Zl +OjEsRE9NQ29udGVudExvYWRlZDoxLHJlYWR5c3RhdGVjaGFuZ2U6MSxlcnJvcjox +LGFib3J0OjEsc2Nyb2xsOjF9OwooZnVuY3Rpb24oKXt2YXIgQT1mdW5jdGlvbihC +KXt2YXIgQz1CLnJlbGF0ZWRUYXJnZXQ7aWYoQz09dW5kZWZpbmVkKXtyZXR1cm4g +dHJ1ZTt9aWYoQz09PWZhbHNlKXtyZXR1cm4gZmFsc2U7fXJldHVybigkdHlwZSh0 +aGlzKSE9ImRvY3VtZW50IiYmQyE9dGhpcyYmQy5wcmVmaXghPSJ4dWwiJiYhdGhp +cy5oYXNDaGlsZChDKSk7Cn07RWxlbWVudC5FdmVudHM9bmV3IEhhc2goe21vdXNl +ZW50ZXI6e2Jhc2U6Im1vdXNlb3ZlciIsY29uZGl0aW9uOkF9LG1vdXNlbGVhdmU6 +e2Jhc2U6Im1vdXNlb3V0Iixjb25kaXRpb246QX0sbW91c2V3aGVlbDp7YmFzZToo +QnJvd3Nlci5FbmdpbmUuZ2Vja28pPyJET01Nb3VzZVNjcm9sbCI6Im1vdXNld2hl +ZWwifX0pOwp9KSgpO0VsZW1lbnQuUHJvcGVydGllcy5zdHlsZXM9e3NldDpmdW5j +dGlvbihBKXt0aGlzLnNldFN0eWxlcyhBKTt9fTtFbGVtZW50LlByb3BlcnRpZXMu +b3BhY2l0eT17c2V0OmZ1bmN0aW9uKEEsQil7aWYoIUIpe2lmKEE9PTApe2lmKHRo +aXMuc3R5bGUudmlzaWJpbGl0eSE9ImhpZGRlbiIpe3RoaXMuc3R5bGUudmlzaWJp +bGl0eT0iaGlkZGVuIjsKfX1lbHNle2lmKHRoaXMuc3R5bGUudmlzaWJpbGl0eSE9 +InZpc2libGUiKXt0aGlzLnN0eWxlLnZpc2liaWxpdHk9InZpc2libGUiO319fWlm +KCF0aGlzLmN1cnJlbnRTdHlsZXx8IXRoaXMuY3VycmVudFN0eWxlLmhhc0xheW91 +dCl7dGhpcy5zdHlsZS56b29tPTE7fWlmKEJyb3dzZXIuRW5naW5lLnRyaWRlbnQp +e3RoaXMuc3R5bGUuZmlsdGVyPShBPT0xKT8iIjoiYWxwaGEob3BhY2l0eT0iK0Eq +MTAwKyIpIjsKfXRoaXMuc3R5bGUub3BhY2l0eT1BO3RoaXMuc3RvcmUoIm9wYWNp +dHkiLEEpO30sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmV0cmlldmUoIm9w +YWNpdHkiLDEpO319O0VsZW1lbnQuaW1wbGVtZW50KHtzZXRPcGFjaXR5OmZ1bmN0 +aW9uKEEpe3JldHVybiB0aGlzLnNldCgib3BhY2l0eSIsQSx0cnVlKTsKfSxnZXRP +cGFjaXR5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0KCJvcGFjaXR5Iik7fSxz +ZXRTdHlsZTpmdW5jdGlvbihCLEEpe3N3aXRjaChCKXtjYXNlIm9wYWNpdHkiOnJl +dHVybiB0aGlzLnNldCgib3BhY2l0eSIscGFyc2VGbG9hdChBKSk7Y2FzZSJmbG9h +dCI6Qj0oQnJvd3Nlci5FbmdpbmUudHJpZGVudCk/InN0eWxlRmxvYXQiOiJjc3NG +bG9hdCI7Cn1CPUIuY2FtZWxDYXNlKCk7aWYoJHR5cGUoQSkhPSJzdHJpbmciKXt2 +YXIgQz0oRWxlbWVudC5TdHlsZXMuZ2V0KEIpfHwiQCIpLnNwbGl0KCIgIik7QT0k +c3BsYXQoQSkubWFwKGZ1bmN0aW9uKEUsRCl7aWYoIUNbRF0pe3JldHVybiIiO31y +ZXR1cm4oJHR5cGUoRSk9PSJudW1iZXIiKT9DW0RdLnJlcGxhY2UoIkAiLE1hdGgu +cm91bmQoRSkpOkU7Cn0pLmpvaW4oIiAiKTt9ZWxzZXtpZihBPT1TdHJpbmcoTnVt +YmVyKEEpKSl7QT1NYXRoLnJvdW5kKEEpO319dGhpcy5zdHlsZVtCXT1BO3JldHVy +biB0aGlzO30sZ2V0U3R5bGU6ZnVuY3Rpb24oRyl7c3dpdGNoKEcpe2Nhc2Uib3Bh +Y2l0eSI6cmV0dXJuIHRoaXMuZ2V0KCJvcGFjaXR5Iik7CmNhc2UiZmxvYXQiOkc9 +KEJyb3dzZXIuRW5naW5lLnRyaWRlbnQpPyJzdHlsZUZsb2F0IjoiY3NzRmxvYXQi +O31HPUcuY2FtZWxDYXNlKCk7dmFyIEE9dGhpcy5zdHlsZVtHXTtpZighJGNoayhB +KSl7QT1bXTtmb3IodmFyIEYgaW4gRWxlbWVudC5TaG9ydFN0eWxlcyl7aWYoRyE9 +Ril7Y29udGludWU7Cn1mb3IodmFyIEUgaW4gRWxlbWVudC5TaG9ydFN0eWxlc1tG +XSl7QS5wdXNoKHRoaXMuZ2V0U3R5bGUoRSkpO31yZXR1cm4gQS5qb2luKCIgIik7 +fUE9dGhpcy5nZXRDb21wdXRlZFN0eWxlKEcpO31pZihBKXtBPVN0cmluZyhBKTt2 +YXIgQz1BLm1hdGNoKC9yZ2JhP1woW1xkXHMsXStcKS8pOwppZihDKXtBPUEucmVw +bGFjZShDWzBdLENbMF0ucmdiVG9IZXgoKSk7fX1pZihCcm93c2VyLkVuZ2luZS5w +cmVzdG98fChCcm93c2VyLkVuZ2luZS50cmlkZW50JiYhJGNoayhwYXJzZUludChB +KSkpKXtpZihHLnRlc3QoL14oaGVpZ2h0fHdpZHRoKSQvKSl7dmFyIEI9KEc9PSJ3 +aWR0aCIpP1sibGVmdCIsInJpZ2h0Il06WyJ0b3AiLCJib3R0b20iXSxEPTA7CkIu +ZWFjaChmdW5jdGlvbihIKXtEKz10aGlzLmdldFN0eWxlKCJib3JkZXItIitIKyIt +d2lkdGgiKS50b0ludCgpK3RoaXMuZ2V0U3R5bGUoInBhZGRpbmctIitIKS50b0lu +dCgpO30sdGhpcyk7cmV0dXJuIHRoaXNbIm9mZnNldCIrRy5jYXBpdGFsaXplKCld +LUQrInB4IjsKfWlmKEJyb3dzZXIuRW5naW5lLnByZXN0byYmU3RyaW5nKEEpLnRl +c3QoInB4Iikpe3JldHVybiBBO31pZihHLnRlc3QoLyhib3JkZXIoLispV2lkdGh8 +bWFyZ2lufHBhZGRpbmcpLykpe3JldHVybiIwcHgiO319cmV0dXJuIEE7fSxzZXRT +dHlsZXM6ZnVuY3Rpb24oQil7Zm9yKHZhciBBIGluIEIpe3RoaXMuc2V0U3R5bGUo +QSxCW0FdKTsKfXJldHVybiB0aGlzO30sZ2V0U3R5bGVzOmZ1bmN0aW9uKCl7dmFy +IEE9e307QXJyYXkuZWFjaChhcmd1bWVudHMsZnVuY3Rpb24oQil7QVtCXT10aGlz +LmdldFN0eWxlKEIpO30sdGhpcyk7cmV0dXJuIEE7fX0pO0VsZW1lbnQuU3R5bGVz +PW5ldyBIYXNoKHtsZWZ0OiJAcHgiLHRvcDoiQHB4Iixib3R0b206IkBweCIscmln +aHQ6IkBweCIsd2lkdGg6IkBweCIsaGVpZ2h0OiJAcHgiLG1heFdpZHRoOiJAcHgi +LG1heEhlaWdodDoiQHB4IixtaW5XaWR0aDoiQHB4IixtaW5IZWlnaHQ6IkBweCIs +YmFja2dyb3VuZENvbG9yOiJyZ2IoQCwgQCwgQCkiLGJhY2tncm91bmRQb3NpdGlv +bjoiQHB4IEBweCIsY29sb3I6InJnYihALCBALCBAKSIsZm9udFNpemU6IkBweCIs +bGV0dGVyU3BhY2luZzoiQHB4IixsaW5lSGVpZ2h0OiJAcHgiLGNsaXA6InJlY3Qo +QHB4IEBweCBAcHggQHB4KSIsbWFyZ2luOiJAcHggQHB4IEBweCBAcHgiLHBhZGRp +bmc6IkBweCBAcHggQHB4IEBweCIsYm9yZGVyOiJAcHggQCByZ2IoQCwgQCwgQCkg +QHB4IEAgcmdiKEAsIEAsIEApIEBweCBAIHJnYihALCBALCBAKSIsYm9yZGVyV2lk +dGg6IkBweCBAcHggQHB4IEBweCIsYm9yZGVyU3R5bGU6IkAgQCBAIEAiLGJvcmRl +ckNvbG9yOiJyZ2IoQCwgQCwgQCkgcmdiKEAsIEAsIEApIHJnYihALCBALCBAKSBy +Z2IoQCwgQCwgQCkiLHpJbmRleDoiQCIsem9vbToiQCIsZm9udFdlaWdodDoiQCIs +dGV4dEluZGVudDoiQHB4IixvcGFjaXR5OiJAIn0pOwpFbGVtZW50LlNob3J0U3R5 +bGVzPXttYXJnaW46e30scGFkZGluZzp7fSxib3JkZXI6e30sYm9yZGVyV2lkdGg6 +e30sYm9yZGVyU3R5bGU6e30sYm9yZGVyQ29sb3I6e319O1siVG9wIiwiUmlnaHQi +LCJCb3R0b20iLCJMZWZ0Il0uZWFjaChmdW5jdGlvbihHKXt2YXIgRj1FbGVtZW50 +LlNob3J0U3R5bGVzOwp2YXIgQj1FbGVtZW50LlN0eWxlcztbIm1hcmdpbiIsInBh +ZGRpbmciXS5lYWNoKGZ1bmN0aW9uKEgpe3ZhciBJPUgrRztGW0hdW0ldPUJbSV09 +IkBweCI7fSk7dmFyIEU9ImJvcmRlciIrRztGLmJvcmRlcltFXT1CW0VdPSJAcHgg +QCByZ2IoQCwgQCwgQCkiO3ZhciBEPUUrIldpZHRoIixBPUUrIlN0eWxlIixDPUUr +IkNvbG9yIjsKRltFXT17fTtGLmJvcmRlcldpZHRoW0RdPUZbRV1bRF09QltEXT0i +QHB4IjtGLmJvcmRlclN0eWxlW0FdPUZbRV1bQV09QltBXT0iQCI7Ri5ib3JkZXJD +b2xvcltDXT1GW0VdW0NdPUJbQ109InJnYihALCBALCBAKSI7fSk7KGZ1bmN0aW9u +KCl7RWxlbWVudC5pbXBsZW1lbnQoe3Njcm9sbFRvOmZ1bmN0aW9uKEgsSSl7aWYo +Qih0aGlzKSl7dGhpcy5nZXRXaW5kb3coKS5zY3JvbGxUbyhILEkpOwp9ZWxzZXt0 +aGlzLnNjcm9sbExlZnQ9SDt0aGlzLnNjcm9sbFRvcD1JO31yZXR1cm4gdGhpczt9 +LGdldFNpemU6ZnVuY3Rpb24oKXtpZihCKHRoaXMpKXtyZXR1cm4gdGhpcy5nZXRX +aW5kb3coKS5nZXRTaXplKCk7fXJldHVybnt4OnRoaXMub2Zmc2V0V2lkdGgseTp0 +aGlzLm9mZnNldEhlaWdodH07Cn0sZ2V0U2Nyb2xsU2l6ZTpmdW5jdGlvbigpe2lm +KEIodGhpcykpe3JldHVybiB0aGlzLmdldFdpbmRvdygpLmdldFNjcm9sbFNpemUo +KTt9cmV0dXJue3g6dGhpcy5zY3JvbGxXaWR0aCx5OnRoaXMuc2Nyb2xsSGVpZ2h0 +fTt9LGdldFNjcm9sbDpmdW5jdGlvbigpe2lmKEIodGhpcykpe3JldHVybiB0aGlz +LmdldFdpbmRvdygpLmdldFNjcm9sbCgpOwp9cmV0dXJue3g6dGhpcy5zY3JvbGxM +ZWZ0LHk6dGhpcy5zY3JvbGxUb3B9O30sZ2V0U2Nyb2xsczpmdW5jdGlvbigpe3Zh +ciBJPXRoaXMsSD17eDowLHk6MH07d2hpbGUoSSYmIUIoSSkpe0gueCs9SS5zY3Jv +bGxMZWZ0O0gueSs9SS5zY3JvbGxUb3A7ST1JLnBhcmVudE5vZGU7Cn1yZXR1cm4g +SDt9LGdldE9mZnNldFBhcmVudDpmdW5jdGlvbigpe3ZhciBIPXRoaXM7aWYoQihI +KSl7cmV0dXJuIG51bGw7fWlmKCFCcm93c2VyLkVuZ2luZS50cmlkZW50KXtyZXR1 +cm4gSC5vZmZzZXRQYXJlbnQ7fXdoaWxlKChIPUgucGFyZW50Tm9kZSkmJiFCKEgp +KXtpZihEKEgsInBvc2l0aW9uIikhPSJzdGF0aWMiKXtyZXR1cm4gSDsKfX1yZXR1 +cm4gbnVsbDt9LGdldE9mZnNldHM6ZnVuY3Rpb24oKXt2YXIgST10aGlzLEg9e3g6 +MCx5OjB9O2lmKEIodGhpcykpe3JldHVybiBIO313aGlsZShJJiYhQihJKSl7SC54 +Kz1JLm9mZnNldExlZnQ7SC55Kz1JLm9mZnNldFRvcDtpZihCcm93c2VyLkVuZ2lu +ZS5nZWNrbyl7aWYoIUYoSSkpe0gueCs9QyhJKTsKSC55Kz1HKEkpO312YXIgSj1J +LnBhcmVudE5vZGU7aWYoSiYmRChKLCJvdmVyZmxvdyIpIT0idmlzaWJsZSIpe0gu +eCs9QyhKKTtILnkrPUcoSik7fX1lbHNle2lmKEkhPXRoaXMmJihCcm93c2VyLkVu +Z2luZS50cmlkZW50fHxCcm93c2VyLkVuZ2luZS53ZWJraXQpKXtILngrPUMoSSk7 +CkgueSs9RyhJKTt9fUk9SS5vZmZzZXRQYXJlbnQ7aWYoQnJvd3Nlci5FbmdpbmUu +dHJpZGVudCl7d2hpbGUoSSYmIUkuY3VycmVudFN0eWxlLmhhc0xheW91dCl7ST1J +Lm9mZnNldFBhcmVudDt9fX1pZihCcm93c2VyLkVuZ2luZS5nZWNrbyYmIUYodGhp +cykpe0gueC09Qyh0aGlzKTsKSC55LT1HKHRoaXMpO31yZXR1cm4gSDt9LGdldFBv +c2l0aW9uOmZ1bmN0aW9uKEspe2lmKEIodGhpcykpe3JldHVybnt4OjAseTowfTt9 +dmFyIEw9dGhpcy5nZXRPZmZzZXRzKCksST10aGlzLmdldFNjcm9sbHMoKTt2YXIg +SD17eDpMLngtSS54LHk6TC55LUkueX07dmFyIEo9KEsmJihLPSQoSykpKT9LLmdl +dFBvc2l0aW9uKCk6e3g6MCx5OjB9OwpyZXR1cm57eDpILngtSi54LHk6SC55LUou +eX07fSxnZXRDb29yZGluYXRlczpmdW5jdGlvbihKKXtpZihCKHRoaXMpKXtyZXR1 +cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRDb29yZGluYXRlcygpO312YXIgSD10aGlz +LmdldFBvc2l0aW9uKEopLEk9dGhpcy5nZXRTaXplKCk7CnZhciBLPXtsZWZ0Okgu +eCx0b3A6SC55LHdpZHRoOkkueCxoZWlnaHQ6SS55fTtLLnJpZ2h0PUsubGVmdCtL +LndpZHRoO0suYm90dG9tPUsudG9wK0suaGVpZ2h0O3JldHVybiBLO30sY29tcHV0 +ZVBvc2l0aW9uOmZ1bmN0aW9uKEgpe3JldHVybntsZWZ0OkgueC1FKHRoaXMsIm1h +cmdpbi1sZWZ0IiksdG9wOkgueS1FKHRoaXMsIm1hcmdpbi10b3AiKX07Cn0scG9z +aXRpb246ZnVuY3Rpb24oSCl7cmV0dXJuIHRoaXMuc2V0U3R5bGVzKHRoaXMuY29t +cHV0ZVBvc2l0aW9uKEgpKTt9fSk7TmF0aXZlLmltcGxlbWVudChbRG9jdW1lbnQs +V2luZG93XSx7Z2V0U2l6ZTpmdW5jdGlvbigpe3ZhciBJPXRoaXMuZ2V0V2luZG93 +KCk7CmlmKEJyb3dzZXIuRW5naW5lLnByZXN0b3x8QnJvd3Nlci5FbmdpbmUud2Vi +a2l0KXtyZXR1cm57eDpJLmlubmVyV2lkdGgseTpJLmlubmVySGVpZ2h0fTt9dmFy +IEg9QSh0aGlzKTtyZXR1cm57eDpILmNsaWVudFdpZHRoLHk6SC5jbGllbnRIZWln +aHR9O30sZ2V0U2Nyb2xsOmZ1bmN0aW9uKCl7dmFyIEk9dGhpcy5nZXRXaW5kb3co +KTsKdmFyIEg9QSh0aGlzKTtyZXR1cm57eDpJLnBhZ2VYT2Zmc2V0fHxILnNjcm9s +bExlZnQseTpJLnBhZ2VZT2Zmc2V0fHxILnNjcm9sbFRvcH07fSxnZXRTY3JvbGxT +aXplOmZ1bmN0aW9uKCl7dmFyIEk9QSh0aGlzKTt2YXIgSD10aGlzLmdldFNpemUo +KTtyZXR1cm57eDpNYXRoLm1heChJLnNjcm9sbFdpZHRoLEgueCkseTpNYXRoLm1h +eChJLnNjcm9sbEhlaWdodCxILnkpfTsKfSxnZXRQb3NpdGlvbjpmdW5jdGlvbigp +e3JldHVybnt4OjAseTowfTt9LGdldENvb3JkaW5hdGVzOmZ1bmN0aW9uKCl7dmFy +IEg9dGhpcy5nZXRTaXplKCk7cmV0dXJue3RvcDowLGxlZnQ6MCxib3R0b206SC55 +LHJpZ2h0OkgueCxoZWlnaHQ6SC55LHdpZHRoOkgueH07Cn19KTt2YXIgRD1FbGVt +ZW50LmdldENvbXB1dGVkU3R5bGU7ZnVuY3Rpb24gRShILEkpe3JldHVybiBEKEgs +SSkudG9JbnQoKXx8MDt9ZnVuY3Rpb24gRihIKXtyZXR1cm4gRChILCItbW96LWJv +eC1zaXppbmciKT09ImJvcmRlci1ib3giO31mdW5jdGlvbiBHKEgpe3JldHVybiBF +KEgsImJvcmRlci10b3Atd2lkdGgiKTsKfWZ1bmN0aW9uIEMoSCl7cmV0dXJuIEUo +SCwiYm9yZGVyLWxlZnQtd2lkdGgiKTt9ZnVuY3Rpb24gQihIKXtyZXR1cm4oL14o +Pzpib2R5fGh0bWwpJC9pKS50ZXN0KEgudGFnTmFtZSk7fWZ1bmN0aW9uIEEoSCl7 +dmFyIEk9SC5nZXREb2N1bWVudCgpO3JldHVybighSS5jb21wYXRNb2RlfHxJLmNv +bXBhdE1vZGU9PSJDU1MxQ29tcGF0Iik/SS5odG1sOkkuYm9keTsKfX0pKCk7TmF0 +aXZlLmltcGxlbWVudChbV2luZG93LERvY3VtZW50LEVsZW1lbnRdLHtnZXRIZWln +aHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRTaXplKCkueTt9LGdldFdpZHRo +OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0U2l6ZSgpLng7fSxnZXRTY3JvbGxU +b3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRTY3JvbGwoKS55Owp9LGdldFNj +cm9sbExlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRTY3JvbGwoKS54O30s +Z2V0U2Nyb2xsSGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0U2Nyb2xs +U2l6ZSgpLnk7fSxnZXRTY3JvbGxXaWR0aDpmdW5jdGlvbigpe3JldHVybiB0aGlz +LmdldFNjcm9sbFNpemUoKS54Owp9LGdldFRvcDpmdW5jdGlvbigpe3JldHVybiB0 +aGlzLmdldFBvc2l0aW9uKCkueTt9LGdldExlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4g +dGhpcy5nZXRQb3NpdGlvbigpLng7fX0pO05hdGl2ZS5pbXBsZW1lbnQoW0RvY3Vt +ZW50LEVsZW1lbnRdLHtnZXRFbGVtZW50czpmdW5jdGlvbihILEcpe0g9SC5zcGxp +dCgiLCIpOwp2YXIgQyxFPXt9O2Zvcih2YXIgRD0wLEI9SC5sZW5ndGg7RDxCO0Qr +Kyl7dmFyIEE9SFtEXSxGPVNlbGVjdG9ycy5VdGlscy5zZWFyY2godGhpcyxBLEUp +O2lmKEQhPTAmJkYuaXRlbSl7Rj0kQShGKTt9Qz0oRD09MCk/RjooQy5pdGVtKT8k +QShDKS5jb25jYXQoRik6Qy5jb25jYXQoRik7Cn1yZXR1cm4gbmV3IEVsZW1lbnRz +KEMse2RkdXA6KEgubGVuZ3RoPjEpLGNhc2g6IUd9KTt9fSk7RWxlbWVudC5pbXBs +ZW1lbnQoe21hdGNoOmZ1bmN0aW9uKEIpe2lmKCFCKXtyZXR1cm4gdHJ1ZTt9dmFy +IEQ9U2VsZWN0b3JzLlV0aWxzLnBhcnNlVGFnQW5kSUQoQik7CnZhciBBPURbMF0s +RT1EWzFdO2lmKCFTZWxlY3RvcnMuRmlsdGVycy5ieUlEKHRoaXMsRSl8fCFTZWxl +Y3RvcnMuRmlsdGVycy5ieVRhZyh0aGlzLEEpKXtyZXR1cm4gZmFsc2U7fXZhciBD +PVNlbGVjdG9ycy5VdGlscy5wYXJzZVNlbGVjdG9yKEIpO3JldHVybihDKT9TZWxl +Y3RvcnMuVXRpbHMuZmlsdGVyKHRoaXMsQyx7fSk6dHJ1ZTsKfX0pO3ZhciBTZWxl +Y3RvcnM9e0NhY2hlOntudGg6e30scGFyc2VkOnt9fX07U2VsZWN0b3JzLlJlZ0V4 +cHM9e2lkOigvIyhbXHctXSspLyksdGFnOigvXihcdyt8XCopLykscXVpY2s6KC9e +KFx3K3xcKikkLyksc3BsaXR0ZXI6KC9ccyooWys+flxzXSlccyooW2EtekEtWiMu +KjpcW10pL2cpLGNvbWJpbmVkOigvXC4oW1x3LV0rKXxcWyhcdyspKD86KFshKl4k +fnxdPz0pWyInXT8oLio/KVsiJ10/KT9cXXw6KFtcdy1dKykoPzpcKFsiJ10/KC4q +Pyk/WyInXT9cKXwkKS9nKX07ClNlbGVjdG9ycy5VdGlscz17Y2hrOmZ1bmN0aW9u +KEIsQyl7aWYoIUMpe3JldHVybiB0cnVlO312YXIgQT0kdWlkKEIpO2lmKCFDW0Fd +KXtyZXR1cm4gQ1tBXT10cnVlO31yZXR1cm4gZmFsc2U7fSxwYXJzZU50aEFyZ3Vt +ZW50OmZ1bmN0aW9uKEYpe2lmKFNlbGVjdG9ycy5DYWNoZS5udGhbRl0pe3JldHVy +biBTZWxlY3RvcnMuQ2FjaGUubnRoW0ZdOwp9dmFyIEM9Ri5tYXRjaCgvXihbKy1d +P1xkKik/KFthLXpdKyk/KFsrLV0/XGQqKT8kLyk7aWYoIUMpe3JldHVybiBmYWxz +ZTt9dmFyIEU9cGFyc2VJbnQoQ1sxXSk7dmFyIEI9KEV8fEU9PT0wKT9FOjE7dmFy +IEQ9Q1syXXx8ZmFsc2U7dmFyIEE9cGFyc2VJbnQoQ1szXSl8fDA7CmlmKEIhPTAp +e0EtLTt3aGlsZShBPDEpe0ErPUI7fXdoaWxlKEE+PUIpe0EtPUI7fX1lbHNle0I9 +QTtEPSJpbmRleCI7fXN3aXRjaChEKXtjYXNlIm4iOkM9e2E6QixiOkEsc3BlY2lh +bDoibiJ9O2JyZWFrO2Nhc2Uib2RkIjpDPXthOjIsYjowLHNwZWNpYWw6Im4ifTsK +YnJlYWs7Y2FzZSJldmVuIjpDPXthOjIsYjoxLHNwZWNpYWw6Im4ifTticmVhaztj +YXNlImZpcnN0IjpDPXthOjAsc3BlY2lhbDoiaW5kZXgifTticmVhaztjYXNlImxh +c3QiOkM9e3NwZWNpYWw6Imxhc3QtY2hpbGQifTticmVhaztjYXNlIm9ubHkiOkM9 +e3NwZWNpYWw6Im9ubHktY2hpbGQifTsKYnJlYWs7ZGVmYXVsdDpDPXthOihCLTEp +LHNwZWNpYWw6ImluZGV4In07fXJldHVybiBTZWxlY3RvcnMuQ2FjaGUubnRoW0Zd +PUM7fSxwYXJzZVNlbGVjdG9yOmZ1bmN0aW9uKEUpe2lmKFNlbGVjdG9ycy5DYWNo +ZS5wYXJzZWRbRV0pe3JldHVybiBTZWxlY3RvcnMuQ2FjaGUucGFyc2VkW0VdOwp9 +dmFyIEQsSD17Y2xhc3NlczpbXSxwc2V1ZG9zOltdLGF0dHJpYnV0ZXM6W119O3do +aWxlKChEPVNlbGVjdG9ycy5SZWdFeHBzLmNvbWJpbmVkLmV4ZWMoRSkpKXt2YXIg +ST1EWzFdLEc9RFsyXSxGPURbM10sQj1EWzRdLEM9RFs1XSxKPURbNl07aWYoSSl7 +SC5jbGFzc2VzLnB1c2goSSk7Cn1lbHNle2lmKEMpe3ZhciBBPVNlbGVjdG9ycy5Q +c2V1ZG8uZ2V0KEMpO2lmKEEpe0gucHNldWRvcy5wdXNoKHtwYXJzZXI6QSxhcmd1 +bWVudDpKfSk7fWVsc2V7SC5hdHRyaWJ1dGVzLnB1c2goe25hbWU6QyxvcGVyYXRv +cjoiPSIsdmFsdWU6Sn0pO319ZWxzZXtpZihHKXtILmF0dHJpYnV0ZXMucHVzaCh7 +bmFtZTpHLG9wZXJhdG9yOkYsdmFsdWU6Qn0pOwp9fX19aWYoIUguY2xhc3Nlcy5s +ZW5ndGgpe2RlbGV0ZSBILmNsYXNzZXM7fWlmKCFILmF0dHJpYnV0ZXMubGVuZ3Ro +KXtkZWxldGUgSC5hdHRyaWJ1dGVzO31pZighSC5wc2V1ZG9zLmxlbmd0aCl7ZGVs +ZXRlIEgucHNldWRvczt9aWYoIUguY2xhc3NlcyYmIUguYXR0cmlidXRlcyYmIUgu +cHNldWRvcyl7SD1udWxsOwp9cmV0dXJuIFNlbGVjdG9ycy5DYWNoZS5wYXJzZWRb +RV09SDt9LHBhcnNlVGFnQW5kSUQ6ZnVuY3Rpb24oQil7dmFyIEE9Qi5tYXRjaChT +ZWxlY3RvcnMuUmVnRXhwcy50YWcpO3ZhciBDPUIubWF0Y2goU2VsZWN0b3JzLlJl +Z0V4cHMuaWQpO3JldHVyblsoQSk/QVsxXToiKiIsKEMpP0NbMV06ZmFsc2VdOwp9 +LGZpbHRlcjpmdW5jdGlvbihGLEMsRSl7dmFyIEQ7aWYoQy5jbGFzc2VzKXtmb3Io +RD1DLmNsYXNzZXMubGVuZ3RoO0QtLTtEKXt2YXIgRz1DLmNsYXNzZXNbRF07aWYo +IVNlbGVjdG9ycy5GaWx0ZXJzLmJ5Q2xhc3MoRixHKSl7cmV0dXJuIGZhbHNlO319 +fWlmKEMuYXR0cmlidXRlcyl7Zm9yKEQ9Qy5hdHRyaWJ1dGVzLmxlbmd0aDsKRC0t +O0Qpe3ZhciBCPUMuYXR0cmlidXRlc1tEXTtpZighU2VsZWN0b3JzLkZpbHRlcnMu +YnlBdHRyaWJ1dGUoRixCLm5hbWUsQi5vcGVyYXRvcixCLnZhbHVlKSl7cmV0dXJu +IGZhbHNlO319fWlmKEMucHNldWRvcyl7Zm9yKEQ9Qy5wc2V1ZG9zLmxlbmd0aDtE +LS07RCl7dmFyIEE9Qy5wc2V1ZG9zW0RdOwppZighU2VsZWN0b3JzLkZpbHRlcnMu +YnlQc2V1ZG8oRixBLnBhcnNlcixBLmFyZ3VtZW50LEUpKXtyZXR1cm4gZmFsc2U7 +fX19cmV0dXJuIHRydWU7fSxnZXRCeVRhZ0FuZElEOmZ1bmN0aW9uKEIsQSxEKXtp +ZihEKXt2YXIgQz0oQi5nZXRFbGVtZW50QnlJZCk/Qi5nZXRFbGVtZW50QnlJZChE +LHRydWUpOkVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoQixELHRydWUpOwpyZXR1cm4o +QyYmU2VsZWN0b3JzLkZpbHRlcnMuYnlUYWcoQyxBKSk/W0NdOltdO31lbHNle3Jl +dHVybiBCLmdldEVsZW1lbnRzQnlUYWdOYW1lKEEpO319LHNlYXJjaDpmdW5jdGlv +bihKLEksTyl7dmFyIEI9W107dmFyIEM9SS50cmltKCkucmVwbGFjZShTZWxlY3Rv +cnMuUmVnRXhwcy5zcGxpdHRlcixmdW5jdGlvbihaLFksWCl7Qi5wdXNoKFkpOwpy +ZXR1cm4iOikiK1g7fSkuc3BsaXQoIjopIik7dmFyIEssRixFLFY7Zm9yKHZhciBV +PTAsUT1DLmxlbmd0aDtVPFE7VSsrKXt2YXIgVD1DW1VdO2lmKFU9PTAmJlNlbGVj +dG9ycy5SZWdFeHBzLnF1aWNrLnRlc3QoVCkpe0s9Si5nZXRFbGVtZW50c0J5VGFn +TmFtZShUKTsKY29udGludWU7fXZhciBBPUJbVS0xXTt2YXIgTD1TZWxlY3RvcnMu +VXRpbHMucGFyc2VUYWdBbmRJRChUKTt2YXIgVz1MWzBdLE09TFsxXTtpZihVPT0w +KXtLPVNlbGVjdG9ycy5VdGlscy5nZXRCeVRhZ0FuZElEKEosVyxNKTt9ZWxzZXt2 +YXIgRD17fSxIPVtdO2Zvcih2YXIgUz0wLFI9Sy5sZW5ndGg7ClM8UjtTKyspe0g9 +U2VsZWN0b3JzLkdldHRlcnNbQV0oSCxLW1NdLFcsTSxEKTt9Sz1IO312YXIgRz1T +ZWxlY3RvcnMuVXRpbHMucGFyc2VTZWxlY3RvcihUKTtpZihHKXtFPVtdO2Zvcih2 +YXIgUD0wLE49Sy5sZW5ndGg7UDxOO1ArKyl7Vj1LW1BdO2lmKFNlbGVjdG9ycy5V +dGlscy5maWx0ZXIoVixHLE8pKXtFLnB1c2goVik7Cn19Sz1FO319cmV0dXJuIEs7 +fX07U2VsZWN0b3JzLkdldHRlcnM9eyIgIjpmdW5jdGlvbihILEcsSSxBLEUpe3Zh +ciBEPVNlbGVjdG9ycy5VdGlscy5nZXRCeVRhZ0FuZElEKEcsSSxBKTtmb3IodmFy +IEM9MCxCPUQubGVuZ3RoO0M8QjtDKyspe3ZhciBGPURbQ107aWYoU2VsZWN0b3Jz +LlV0aWxzLmNoayhGLEUpKXtILnB1c2goRik7Cn19cmV0dXJuIEg7fSwiPiI6ZnVu +Y3Rpb24oSCxHLEksQSxGKXt2YXIgQz1TZWxlY3RvcnMuVXRpbHMuZ2V0QnlUYWdB +bmRJRChHLEksQSk7Zm9yKHZhciBFPTAsRD1DLmxlbmd0aDtFPEQ7RSsrKXt2YXIg +Qj1DW0VdO2lmKEIucGFyZW50Tm9kZT09RyYmU2VsZWN0b3JzLlV0aWxzLmNoayhC +LEYpKXtILnB1c2goQik7Cn19cmV0dXJuIEg7fSwiKyI6ZnVuY3Rpb24oQyxCLEEs +RSxEKXt3aGlsZSgoQj1CLm5leHRTaWJsaW5nKSl7aWYoQi5ub2RlVHlwZT09MSl7 +aWYoU2VsZWN0b3JzLlV0aWxzLmNoayhCLEQpJiZTZWxlY3RvcnMuRmlsdGVycy5i +eVRhZyhCLEEpJiZTZWxlY3RvcnMuRmlsdGVycy5ieUlEKEIsRSkpe0MucHVzaChC +KTsKfWJyZWFrO319cmV0dXJuIEM7fSwifiI6ZnVuY3Rpb24oQyxCLEEsRSxEKXt3 +aGlsZSgoQj1CLm5leHRTaWJsaW5nKSl7aWYoQi5ub2RlVHlwZT09MSl7aWYoIVNl +bGVjdG9ycy5VdGlscy5jaGsoQixEKSl7YnJlYWs7fWlmKFNlbGVjdG9ycy5GaWx0 +ZXJzLmJ5VGFnKEIsQSkmJlNlbGVjdG9ycy5GaWx0ZXJzLmJ5SUQoQixFKSl7Qy5w +dXNoKEIpOwp9fX1yZXR1cm4gQzt9fTtTZWxlY3RvcnMuRmlsdGVycz17YnlUYWc6 +ZnVuY3Rpb24oQixBKXtyZXR1cm4oQT09IioifHwoQi50YWdOYW1lJiZCLnRhZ05h +bWUudG9Mb3dlckNhc2UoKT09QSkpO30sYnlJRDpmdW5jdGlvbihBLEIpe3JldHVy +bighQnx8KEEuaWQmJkEuaWQ9PUIpKTsKfSxieUNsYXNzOmZ1bmN0aW9uKEIsQSl7 +cmV0dXJuKEIuY2xhc3NOYW1lJiZCLmNsYXNzTmFtZS5jb250YWlucyhBLCIgIikp +O30sYnlQc2V1ZG86ZnVuY3Rpb24oQSxELEMsQil7cmV0dXJuIEQuY2FsbChBLEMs +Qik7fSxieUF0dHJpYnV0ZTpmdW5jdGlvbihDLEQsQixFKXt2YXIgQT1FbGVtZW50 +LnByb3RvdHlwZS5nZXRQcm9wZXJ0eS5jYWxsKEMsRCk7CmlmKCFBKXtyZXR1cm4g +ZmFsc2U7fWlmKCFCfHxFPT11bmRlZmluZWQpe3JldHVybiB0cnVlO31zd2l0Y2go +Qil7Y2FzZSI9IjpyZXR1cm4oQT09RSk7Y2FzZSIqPSI6cmV0dXJuKEEuY29udGFp +bnMoRSkpO2Nhc2UiXj0iOnJldHVybihBLnN1YnN0cigwLEUubGVuZ3RoKT09RSk7 +CmNhc2UiJD0iOnJldHVybihBLnN1YnN0cihBLmxlbmd0aC1FLmxlbmd0aCk9PUUp +O2Nhc2UiIT0iOnJldHVybihBIT1FKTtjYXNlIn49IjpyZXR1cm4gQS5jb250YWlu +cyhFLCIgIik7Y2FzZSJ8PSI6cmV0dXJuIEEuY29udGFpbnMoRSwiLSIpO31yZXR1 +cm4gZmFsc2U7Cn19O1NlbGVjdG9ycy5Qc2V1ZG89bmV3IEhhc2goe2VtcHR5OmZ1 +bmN0aW9uKCl7cmV0dXJuICEodGhpcy5pbm5lclRleHR8fHRoaXMudGV4dENvbnRl +bnR8fCIiKS5sZW5ndGg7fSxub3Q6ZnVuY3Rpb24oQSl7cmV0dXJuICFFbGVtZW50 +Lm1hdGNoKHRoaXMsQSk7fSxjb250YWluczpmdW5jdGlvbihBKXtyZXR1cm4odGhp +cy5pbm5lclRleHR8fHRoaXMudGV4dENvbnRlbnR8fCIiKS5jb250YWlucyhBKTsK +fSwiZmlyc3QtY2hpbGQiOmZ1bmN0aW9uKCl7cmV0dXJuIFNlbGVjdG9ycy5Qc2V1 +ZG8uaW5kZXguY2FsbCh0aGlzLDApO30sImxhc3QtY2hpbGQiOmZ1bmN0aW9uKCl7 +dmFyIEE9dGhpczt3aGlsZSgoQT1BLm5leHRTaWJsaW5nKSl7aWYoQS5ub2RlVHlw +ZT09MSl7cmV0dXJuIGZhbHNlOwp9fXJldHVybiB0cnVlO30sIm9ubHktY2hpbGQi +OmZ1bmN0aW9uKCl7dmFyIEI9dGhpczt3aGlsZSgoQj1CLnByZXZpb3VzU2libGlu +Zykpe2lmKEIubm9kZVR5cGU9PTEpe3JldHVybiBmYWxzZTt9fXZhciBBPXRoaXM7 +d2hpbGUoKEE9QS5uZXh0U2libGluZykpe2lmKEEubm9kZVR5cGU9PTEpe3JldHVy +biBmYWxzZTsKfX1yZXR1cm4gdHJ1ZTt9LCJudGgtY2hpbGQiOmZ1bmN0aW9uKEcs +RSl7Rz0oRz09dW5kZWZpbmVkKT8ibiI6Rzt2YXIgQz1TZWxlY3RvcnMuVXRpbHMu +cGFyc2VOdGhBcmd1bWVudChHKTtpZihDLnNwZWNpYWwhPSJuIil7cmV0dXJuIFNl +bGVjdG9ycy5Qc2V1ZG9bQy5zcGVjaWFsXS5jYWxsKHRoaXMsQy5hLEUpOwp9dmFy +IEY9MDtFLnBvc2l0aW9ucz1FLnBvc2l0aW9uc3x8e307dmFyIEQ9JHVpZCh0aGlz +KTtpZighRS5wb3NpdGlvbnNbRF0pe3ZhciBCPXRoaXM7d2hpbGUoKEI9Qi5wcmV2 +aW91c1NpYmxpbmcpKXtpZihCLm5vZGVUeXBlIT0xKXtjb250aW51ZTt9RisrO3Zh +ciBBPUUucG9zaXRpb25zWyR1aWQoQildOwppZihBIT11bmRlZmluZWQpe0Y9QStG +O2JyZWFrO319RS5wb3NpdGlvbnNbRF09Rjt9cmV0dXJuKEUucG9zaXRpb25zW0Rd +JUMuYT09Qy5iKTt9LGluZGV4OmZ1bmN0aW9uKEEpe3ZhciBCPXRoaXMsQz0wO3do +aWxlKChCPUIucHJldmlvdXNTaWJsaW5nKSl7aWYoQi5ub2RlVHlwZT09MSYmKytD +PkEpe3JldHVybiBmYWxzZTsKfX1yZXR1cm4oQz09QSk7fSxldmVuOmZ1bmN0aW9u +KEIsQSl7cmV0dXJuIFNlbGVjdG9ycy5Qc2V1ZG9bIm50aC1jaGlsZCJdLmNhbGwo +dGhpcywiMm4rMSIsQSk7fSxvZGQ6ZnVuY3Rpb24oQixBKXtyZXR1cm4gU2VsZWN0 +b3JzLlBzZXVkb1sibnRoLWNoaWxkIl0uY2FsbCh0aGlzLCIybiIsQSk7Cn19KTtF +bGVtZW50LkV2ZW50cy5kb21yZWFkeT17b25BZGQ6ZnVuY3Rpb24oQSl7aWYoQnJv +d3Nlci5sb2FkZWQpe0EuY2FsbCh0aGlzKTt9fX07KGZ1bmN0aW9uKCl7dmFyIEI9 +ZnVuY3Rpb24oKXtpZihCcm93c2VyLmxvYWRlZCl7cmV0dXJuIDt9QnJvd3Nlci5s +b2FkZWQ9dHJ1ZTsKd2luZG93LmZpcmVFdmVudCgiZG9tcmVhZHkiKTtkb2N1bWVu +dC5maXJlRXZlbnQoImRvbXJlYWR5Iik7fTtzd2l0Y2goQnJvd3Nlci5FbmdpbmUu +bmFtZSl7Y2FzZSJ3ZWJraXQiOihmdW5jdGlvbigpeyhbImxvYWRlZCIsImNvbXBs +ZXRlIl0uY29udGFpbnMoZG9jdW1lbnQucmVhZHlTdGF0ZSkpP0IoKTphcmd1bWVu +dHMuY2FsbGVlLmRlbGF5KDUwKTsKfSkoKTticmVhaztjYXNlInRyaWRlbnQiOnZh +ciBBPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOyhmdW5jdGlvbigpeygk +dHJ5KGZ1bmN0aW9uKCl7QS5kb1Njcm9sbCgibGVmdCIpO3JldHVybiAkKEEpLmlu +amVjdChkb2N1bWVudC5ib2R5KS5zZXQoImh0bWwiLCJ0ZW1wIikuZGlzcG9zZSgp +Owp9KSk/QigpOmFyZ3VtZW50cy5jYWxsZWUuZGVsYXkoNTApO30pKCk7YnJlYWs7 +ZGVmYXVsdDp3aW5kb3cuYWRkRXZlbnQoImxvYWQiLEIpO2RvY3VtZW50LmFkZEV2 +ZW50KCJET01Db250ZW50TG9hZGVkIixCKTt9fSkoKTt2YXIgSlNPTj1uZXcgSGFz +aCh7ZW5jb2RlOmZ1bmN0aW9uKEIpe3N3aXRjaCgkdHlwZShCKSl7Y2FzZSJzdHJp +bmciOnJldHVybiciJytCLnJlcGxhY2UoL1tceDAwLVx4MWZcXCJdL2csSlNPTi4k +cmVwbGFjZUNoYXJzKSsnIic7CmNhc2UiYXJyYXkiOnJldHVybiJbIitTdHJpbmco +Qi5tYXAoSlNPTi5lbmNvZGUpLmZpbHRlcigkZGVmaW5lZCkpKyJdIjtjYXNlIm9i +amVjdCI6Y2FzZSJoYXNoIjp2YXIgQT1bXTtIYXNoLmVhY2goQixmdW5jdGlvbihF +LEQpe3ZhciBDPUpTT04uZW5jb2RlKEUpO2lmKEMpe0EucHVzaChKU09OLmVuY29k +ZShEKSsiOiIrQyk7Cn19KTtyZXR1cm4ieyIrQSsifSI7Y2FzZSJudW1iZXIiOmNh +c2UiYm9vbGVhbiI6cmV0dXJuIFN0cmluZyhCKTtjYXNlIGZhbHNlOnJldHVybiJu +dWxsIjt9cmV0dXJuIG51bGw7fSwkc3BlY2lhbENoYXJzOnsiXGIiOiJcXGIiLCJc +dCI6IlxcdCIsIlxuIjoiXFxuIiwiXGYiOiJcXGYiLCJcciI6IlxcciIsJyInOidc +XCInLCJcXCI6IlxcXFwifSwkcmVwbGFjZUNoYXJzOmZ1bmN0aW9uKEEpe3JldHVy +biBKU09OLiRzcGVjaWFsQ2hhcnNbQV18fCJcXHUwMCIrTWF0aC5mbG9vcihBLmNo +YXJDb2RlQXQoKS8xNikudG9TdHJpbmcoMTYpKyhBLmNoYXJDb2RlQXQoKSUxNiku +dG9TdHJpbmcoMTYpOwp9LGRlY29kZTpmdW5jdGlvbihzdHJpbmcsc2VjdXJlKXtp +ZigkdHlwZShzdHJpbmcpIT0ic3RyaW5nInx8IXN0cmluZy5sZW5ndGgpe3JldHVy +biBudWxsO31pZihzZWN1cmUmJiEoL15bLDp7fVxbXF0wLTkuXC0rRWFlZmxuci11 +IFxuXHJcdF0qJC8pLnRlc3Qoc3RyaW5nLnJlcGxhY2UoL1xcLi9nLCJAIikucmVw +bGFjZSgvIlteIlxcXG5ccl0qIi9nLCIiKSkpe3JldHVybiBudWxsOwp9cmV0dXJu +IGV2YWwoIigiK3N0cmluZysiKSIpO319KTtOYXRpdmUuaW1wbGVtZW50KFtIYXNo +LEFycmF5LFN0cmluZyxOdW1iZXJdLHt0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm4g +SlNPTi5lbmNvZGUodGhpcyk7fX0pO3ZhciBDb29raWU9bmV3IENsYXNzKHtJbXBs +ZW1lbnRzOk9wdGlvbnMsb3B0aW9uczp7cGF0aDpmYWxzZSxkb21haW46ZmFsc2Us +ZHVyYXRpb246ZmFsc2Usc2VjdXJlOmZhbHNlLGRvY3VtZW50OmRvY3VtZW50fSxp +bml0aWFsaXplOmZ1bmN0aW9uKEIsQSl7dGhpcy5rZXk9QjsKdGhpcy5zZXRPcHRp +b25zKEEpO30sd3JpdGU6ZnVuY3Rpb24oQil7Qj1lbmNvZGVVUklDb21wb25lbnQo +Qik7aWYodGhpcy5vcHRpb25zLmRvbWFpbil7Qis9IjsgZG9tYWluPSIrdGhpcy5v +cHRpb25zLmRvbWFpbjt9aWYodGhpcy5vcHRpb25zLnBhdGgpe0IrPSI7IHBhdGg9 +Iit0aGlzLm9wdGlvbnMucGF0aDsKfWlmKHRoaXMub3B0aW9ucy5kdXJhdGlvbil7 +dmFyIEE9bmV3IERhdGUoKTtBLnNldFRpbWUoQS5nZXRUaW1lKCkrdGhpcy5vcHRp +b25zLmR1cmF0aW9uKjI0KjYwKjYwKjEwMDApO0IrPSI7IGV4cGlyZXM9IitBLnRv +R01UU3RyaW5nKCk7fWlmKHRoaXMub3B0aW9ucy5zZWN1cmUpe0IrPSI7IHNlY3Vy +ZSI7Cn10aGlzLm9wdGlvbnMuZG9jdW1lbnQuY29va2llPXRoaXMua2V5KyI9IitC +O3JldHVybiB0aGlzO30scmVhZDpmdW5jdGlvbigpe3ZhciBBPXRoaXMub3B0aW9u +cy5kb2N1bWVudC5jb29raWUubWF0Y2goIig/Ol58OylcXHMqIit0aGlzLmtleS5l +c2NhcGVSZWdFeHAoKSsiPShbXjtdKikiKTsKcmV0dXJuKEEpP2RlY29kZVVSSUNv +bXBvbmVudChBWzFdKTpudWxsO30sZGlzcG9zZTpmdW5jdGlvbigpe25ldyBDb29r +aWUodGhpcy5rZXksJG1lcmdlKHRoaXMub3B0aW9ucyx7ZHVyYXRpb246LTF9KSku +d3JpdGUoIiIpO3JldHVybiB0aGlzO319KTtDb29raWUud3JpdGU9ZnVuY3Rpb24o +QixDLEEpe3JldHVybiBuZXcgQ29va2llKEIsQSkud3JpdGUoQyk7Cn07Q29va2ll +LnJlYWQ9ZnVuY3Rpb24oQSl7cmV0dXJuIG5ldyBDb29raWUoQSkucmVhZCgpO307 +Q29va2llLmRpc3Bvc2U9ZnVuY3Rpb24oQixBKXtyZXR1cm4gbmV3IENvb2tpZShC +LEEpLmRpc3Bvc2UoKTt9O3ZhciBTd2lmZj1uZXcgQ2xhc3Moe0ltcGxlbWVudHM6 +W09wdGlvbnNdLG9wdGlvbnM6e2lkOm51bGwsaGVpZ2h0OjEsd2lkdGg6MSxjb250 +YWluZXI6bnVsbCxwcm9wZXJ0aWVzOnt9LHBhcmFtczp7cXVhbGl0eToiaGlnaCIs +YWxsb3dTY3JpcHRBY2Nlc3M6ImFsd2F5cyIsd01vZGU6InRyYW5zcGFyZW50Iixz +d0xpdmVDb25uZWN0OnRydWV9LGNhbGxCYWNrczp7fSx2YXJzOnt9fSx0b0VsZW1l +bnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vYmplY3Q7Cn0saW5pdGlhbGl6ZTpm +dW5jdGlvbihMLE0pe3RoaXMuaW5zdGFuY2U9IlN3aWZmXyIrJHRpbWUoKTt0aGlz +LnNldE9wdGlvbnMoTSk7TT10aGlzLm9wdGlvbnM7dmFyIEI9dGhpcy5pZD1NLmlk +fHx0aGlzLmluc3RhbmNlO3ZhciBBPSQoTS5jb250YWluZXIpO1N3aWZmLkNhbGxC +YWNrc1t0aGlzLmluc3RhbmNlXT17fTsKdmFyIEU9TS5wYXJhbXMsRz1NLnZhcnMs +Rj1NLmNhbGxCYWNrczt2YXIgSD0kZXh0ZW5kKHtoZWlnaHQ6TS5oZWlnaHQsd2lk +dGg6TS53aWR0aH0sTS5wcm9wZXJ0aWVzKTt2YXIgSz10aGlzO2Zvcih2YXIgRCBp +biBGKXtTd2lmZi5DYWxsQmFja3NbdGhpcy5pbnN0YW5jZV1bRF09KGZ1bmN0aW9u +KE4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBOLmFwcGx5KEsub2JqZWN0LGFy +Z3VtZW50cyk7Cn07fSkoRltEXSk7R1tEXT0iU3dpZmYuQ2FsbEJhY2tzLiIrdGhp +cy5pbnN0YW5jZSsiLiIrRDt9RS5mbGFzaFZhcnM9SGFzaC50b1F1ZXJ5U3RyaW5n +KEcpO2lmKEJyb3dzZXIuRW5naW5lLnRyaWRlbnQpe0guY2xhc3NpZD0iY2xzaWQ6 +RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIjsKRS5tb3ZpZT1M +O31lbHNle0gudHlwZT0iYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giO0gu +ZGF0YT1MO312YXIgSj0nPG9iamVjdCBpZD0iJytCKyciJztmb3IodmFyIEkgaW4g +SCl7Sis9IiAiK0krJz0iJytIW0ldKyciJzt9Sis9Ij4iO2Zvcih2YXIgQyBpbiBF +KXtpZihFW0NdKXtKKz0nPHBhcmFtIG5hbWU9IicrQysnIiB2YWx1ZT0iJytFW0Nd +KyciIC8+JzsKfX1KKz0iPC9vYmplY3Q+Ijt0aGlzLm9iamVjdD0oKEEpP0EuZW1w +dHkoKTpuZXcgRWxlbWVudCgiZGl2IikpLnNldCgiaHRtbCIsSikuZmlyc3RDaGls +ZDt9LHJlcGxhY2VzOmZ1bmN0aW9uKEEpe0E9JChBLHRydWUpO0EucGFyZW50Tm9k +ZS5yZXBsYWNlQ2hpbGQodGhpcy50b0VsZW1lbnQoKSxBKTsKcmV0dXJuIHRoaXM7 +fSxpbmplY3Q6ZnVuY3Rpb24oQSl7JChBLHRydWUpLmFwcGVuZENoaWxkKHRoaXMu +dG9FbGVtZW50KCkpO3JldHVybiB0aGlzO30scmVtb3RlOmZ1bmN0aW9uKCl7cmV0 +dXJuIFN3aWZmLnJlbW90ZS5hcHBseShTd2lmZixbdGhpcy50b0VsZW1lbnQoKV0u +ZXh0ZW5kKGFyZ3VtZW50cykpOwp9fSk7U3dpZmYuQ2FsbEJhY2tzPXt9O1N3aWZm +LnJlbW90ZT1mdW5jdGlvbihvYmosZm4pe3ZhciBycz1vYmouQ2FsbEZ1bmN0aW9u +KCc8aW52b2tlIG5hbWU9IicrZm4rJyIgcmV0dXJudHlwZT0iamF2YXNjcmlwdCI+ +JytfX2ZsYXNoX19hcmd1bWVudHNUb1hNTChhcmd1bWVudHMsMikrIjwvaW52b2tl +PiIpOwpyZXR1cm4gZXZhbChycyk7fTt2YXIgRng9bmV3IENsYXNzKHtJbXBsZW1l +bnRzOltDaGFpbixFdmVudHMsT3B0aW9uc10sb3B0aW9uczp7ZnBzOjUwLHVuaXQ6 +ZmFsc2UsZHVyYXRpb246NTAwLGxpbms6Imlnbm9yZSIsdHJhbnNpdGlvbjpmdW5j +dGlvbihBKXtyZXR1cm4gLShNYXRoLmNvcyhNYXRoLlBJKkEpLTEpLzI7Cn19LGlu +aXRpYWxpemU6ZnVuY3Rpb24oQSl7dGhpcy5zdWJqZWN0PXRoaXMuc3ViamVjdHx8 +dGhpczt0aGlzLnNldE9wdGlvbnMoQSk7dGhpcy5vcHRpb25zLmR1cmF0aW9uPUZ4 +LkR1cmF0aW9uc1t0aGlzLm9wdGlvbnMuZHVyYXRpb25dfHx0aGlzLm9wdGlvbnMu +ZHVyYXRpb24udG9JbnQoKTsKdmFyIEI9dGhpcy5vcHRpb25zLndhaXQ7aWYoQj09 +PWZhbHNlKXt0aGlzLm9wdGlvbnMubGluaz0iY2FuY2VsIjt9fSxzdGVwOmZ1bmN0 +aW9uKCl7dmFyIEE9JHRpbWUoKTtpZihBPHRoaXMudGltZSt0aGlzLm9wdGlvbnMu +ZHVyYXRpb24pe3ZhciBCPXRoaXMub3B0aW9ucy50cmFuc2l0aW9uKChBLXRoaXMu +dGltZSkvdGhpcy5vcHRpb25zLmR1cmF0aW9uKTsKdGhpcy5zZXQodGhpcy5jb21w +dXRlKHRoaXMuZnJvbSx0aGlzLnRvLEIpKTt9ZWxzZXt0aGlzLnNldCh0aGlzLmNv +bXB1dGUodGhpcy5mcm9tLHRoaXMudG8sMSkpO3RoaXMuY29tcGxldGUoKTt9fSxz +ZXQ6ZnVuY3Rpb24oQSl7cmV0dXJuIEE7fSxjb21wdXRlOmZ1bmN0aW9uKEMsQixB +KXtyZXR1cm4gRnguY29tcHV0ZShDLEIsQSk7Cn0sY2hlY2s6ZnVuY3Rpb24oQSl7 +aWYoIXRoaXMudGltZXIpe3JldHVybiB0cnVlO31zd2l0Y2godGhpcy5vcHRpb25z +Lmxpbmspe2Nhc2UiY2FuY2VsIjp0aGlzLmNhbmNlbCgpO3JldHVybiB0cnVlO2Nh +c2UiY2hhaW4iOnRoaXMuY2hhaW4oQS5iaW5kKHRoaXMsQXJyYXkuc2xpY2UoYXJn +dW1lbnRzLDEpKSk7CnJldHVybiBmYWxzZTt9cmV0dXJuIGZhbHNlO30sc3RhcnQ6 +ZnVuY3Rpb24oQixBKXtpZighdGhpcy5jaGVjayhhcmd1bWVudHMuY2FsbGVlLEIs +QSkpe3JldHVybiB0aGlzO310aGlzLmZyb209Qjt0aGlzLnRvPUE7dGhpcy50aW1l +PTA7dGhpcy5zdGFydFRpbWVyKCk7CnRoaXMub25TdGFydCgpO3JldHVybiB0aGlz +O30sY29tcGxldGU6ZnVuY3Rpb24oKXtpZih0aGlzLnN0b3BUaW1lcigpKXt0aGlz +Lm9uQ29tcGxldGUoKTt9cmV0dXJuIHRoaXM7fSxjYW5jZWw6ZnVuY3Rpb24oKXtp +Zih0aGlzLnN0b3BUaW1lcigpKXt0aGlzLm9uQ2FuY2VsKCk7Cn1yZXR1cm4gdGhp +czt9LG9uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLmZpcmVFdmVudCgic3RhcnQiLHRo +aXMuc3ViamVjdCk7fSxvbkNvbXBsZXRlOmZ1bmN0aW9uKCl7dGhpcy5maXJlRXZl +bnQoImNvbXBsZXRlIix0aGlzLnN1YmplY3QpO2lmKCF0aGlzLmNhbGxDaGFpbigp +KXt0aGlzLmZpcmVFdmVudCgiY2hhaW5Db21wbGV0ZSIsdGhpcy5zdWJqZWN0KTsK +fX0sb25DYW5jZWw6ZnVuY3Rpb24oKXt0aGlzLmZpcmVFdmVudCgiY2FuY2VsIix0 +aGlzLnN1YmplY3QpLmNsZWFyQ2hhaW4oKTt9LHBhdXNlOmZ1bmN0aW9uKCl7dGhp +cy5zdG9wVGltZXIoKTtyZXR1cm4gdGhpczt9LHJlc3VtZTpmdW5jdGlvbigpe3Ro +aXMuc3RhcnRUaW1lcigpOwpyZXR1cm4gdGhpczt9LHN0b3BUaW1lcjpmdW5jdGlv +bigpe2lmKCF0aGlzLnRpbWVyKXtyZXR1cm4gZmFsc2U7fXRoaXMudGltZT0kdGlt +ZSgpLXRoaXMudGltZTt0aGlzLnRpbWVyPSRjbGVhcih0aGlzLnRpbWVyKTtyZXR1 +cm4gdHJ1ZTt9LHN0YXJ0VGltZXI6ZnVuY3Rpb24oKXtpZih0aGlzLnRpbWVyKXty +ZXR1cm4gZmFsc2U7Cn10aGlzLnRpbWU9JHRpbWUoKS10aGlzLnRpbWU7dGhpcy50 +aW1lcj10aGlzLnN0ZXAucGVyaW9kaWNhbChNYXRoLnJvdW5kKDEwMDAvdGhpcy5v +cHRpb25zLmZwcyksdGhpcyk7cmV0dXJuIHRydWU7fX0pO0Z4LmNvbXB1dGU9ZnVu +Y3Rpb24oQyxCLEEpe3JldHVybihCLUMpKkErQzsKfTtGeC5EdXJhdGlvbnM9eyJz +aG9ydCI6MjUwLG5vcm1hbDo1MDAsImxvbmciOjEwMDB9O0Z4LkNTUz1uZXcgQ2xh +c3Moe0V4dGVuZHM6RngscHJlcGFyZTpmdW5jdGlvbihELEUsQil7Qj0kc3BsYXQo +Qik7dmFyIEM9QlsxXTtpZighJGNoayhDKSl7QlsxXT1CWzBdOwpCWzBdPUQuZ2V0 +U3R5bGUoRSk7fXZhciBBPUIubWFwKHRoaXMucGFyc2UpO3JldHVybntmcm9tOkFb +MF0sdG86QVsxXX07fSxwYXJzZTpmdW5jdGlvbihBKXtBPSRsYW1iZGEoQSkoKTtB +PSh0eXBlb2YgQT09InN0cmluZyIpP0Euc3BsaXQoIiAiKTokc3BsYXQoQSk7CnJl +dHVybiBBLm1hcChmdW5jdGlvbihDKXtDPVN0cmluZyhDKTt2YXIgQj1mYWxzZTtG +eC5DU1MuUGFyc2Vycy5lYWNoKGZ1bmN0aW9uKEYsRSl7aWYoQil7cmV0dXJuIDt9 +dmFyIEQ9Ri5wYXJzZShDKTtpZigkY2hrKEQpKXtCPXt2YWx1ZTpELHBhcnNlcjpG +fTt9fSk7CkI9Qnx8e3ZhbHVlOkMscGFyc2VyOkZ4LkNTUy5QYXJzZXJzLlN0cmlu +Z307cmV0dXJuIEI7fSk7fSxjb21wdXRlOmZ1bmN0aW9uKEQsQyxCKXt2YXIgQT1b +XTsoTWF0aC5taW4oRC5sZW5ndGgsQy5sZW5ndGgpKS50aW1lcyhmdW5jdGlvbihF +KXtBLnB1c2goe3ZhbHVlOkRbRV0ucGFyc2VyLmNvbXB1dGUoRFtFXS52YWx1ZSxD +W0VdLnZhbHVlLEIpLHBhcnNlcjpEW0VdLnBhcnNlcn0pOwp9KTtBLiRmYW1pbHk9 +e25hbWU6ImZ4OmNzczp2YWx1ZSJ9O3JldHVybiBBO30sc2VydmU6ZnVuY3Rpb24o +QyxCKXtpZigkdHlwZShDKSE9ImZ4OmNzczp2YWx1ZSIpe0M9dGhpcy5wYXJzZShD +KTt9dmFyIEE9W107Qy5lYWNoKGZ1bmN0aW9uKEQpe0E9QS5jb25jYXQoRC5wYXJz +ZXIuc2VydmUoRC52YWx1ZSxCKSk7Cn0pO3JldHVybiBBO30scmVuZGVyOmZ1bmN0 +aW9uKEEsRCxDLEIpe0Euc2V0U3R5bGUoRCx0aGlzLnNlcnZlKEMsQikpO30sc2Vh +cmNoOmZ1bmN0aW9uKEEpe2lmKEZ4LkNTUy5DYWNoZVtBXSl7cmV0dXJuIEZ4LkNT +Uy5DYWNoZVtBXTt9dmFyIEI9e307QXJyYXkuZWFjaChkb2N1bWVudC5zdHlsZVNo +ZWV0cyxmdW5jdGlvbihFLEQpe3ZhciBDPUUuaHJlZjsKaWYoQyYmQy5jb250YWlu +cygiOi8vIikmJiFDLmNvbnRhaW5zKGRvY3VtZW50LmRvbWFpbikpe3JldHVybiA7 +fXZhciBGPUUucnVsZXN8fEUuY3NzUnVsZXM7QXJyYXkuZWFjaChGLGZ1bmN0aW9u +KEksRyl7aWYoIUkuc3R5bGUpe3JldHVybiA7fXZhciBIPShJLnNlbGVjdG9yVGV4 +dCk/SS5zZWxlY3RvclRleHQucmVwbGFjZSgvXlx3Ky8sZnVuY3Rpb24oSil7cmV0 +dXJuIEoudG9Mb3dlckNhc2UoKTsKfSk6bnVsbDtpZighSHx8IUgudGVzdCgiXiIr +QSsiJCIpKXtyZXR1cm4gO31FbGVtZW50LlN0eWxlcy5lYWNoKGZ1bmN0aW9uKEss +Sil7aWYoIUkuc3R5bGVbSl18fEVsZW1lbnQuU2hvcnRTdHlsZXNbSl0pe3JldHVy +biA7fUs9U3RyaW5nKEkuc3R5bGVbSl0pO0JbSl09KEsudGVzdCgvXnJnYi8pKT9L +LnJnYlRvSGV4KCk6SzsKfSk7fSk7fSk7cmV0dXJuIEZ4LkNTUy5DYWNoZVtBXT1C +O319KTtGeC5DU1MuQ2FjaGU9e307RnguQ1NTLlBhcnNlcnM9bmV3IEhhc2goe0Nv +bG9yOntwYXJzZTpmdW5jdGlvbihBKXtpZihBLm1hdGNoKC9eI1swLTlhLWZdezMs +Nn0kL2kpKXtyZXR1cm4gQS5oZXhUb1JnYih0cnVlKTsKfXJldHVybigoQT1BLm1h +dGNoKC8oXGQrKSxccyooXGQrKSxccyooXGQrKS8pKSk/W0FbMV0sQVsyXSxBWzNd +XTpmYWxzZTt9LGNvbXB1dGU6ZnVuY3Rpb24oQyxCLEEpe3JldHVybiBDLm1hcChm +dW5jdGlvbihFLEQpe3JldHVybiBNYXRoLnJvdW5kKEZ4LmNvbXB1dGUoQ1tEXSxC +W0RdLEEpKTsKfSk7fSxzZXJ2ZTpmdW5jdGlvbihBKXtyZXR1cm4gQS5tYXAoTnVt +YmVyKTt9fSxOdW1iZXI6e3BhcnNlOnBhcnNlRmxvYXQsY29tcHV0ZTpGeC5jb21w +dXRlLHNlcnZlOmZ1bmN0aW9uKEIsQSl7cmV0dXJuKEEpP0IrQTpCO319LFN0cmlu +Zzp7cGFyc2U6JGxhbWJkYShmYWxzZSksY29tcHV0ZTokYXJndW1lbnRzKDEpLHNl +cnZlOiRhcmd1bWVudHMoMCl9fSk7CkZ4LlR3ZWVuPW5ldyBDbGFzcyh7RXh0ZW5k +czpGeC5DU1MsaW5pdGlhbGl6ZTpmdW5jdGlvbihCLEEpe3RoaXMuZWxlbWVudD10 +aGlzLnN1YmplY3Q9JChCKTt0aGlzLnBhcmVudChBKTt9LHNldDpmdW5jdGlvbihC +LEEpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PTEpe0E9QjsKQj10aGlzLnByb3BlcnR5 +fHx0aGlzLm9wdGlvbnMucHJvcGVydHk7fXRoaXMucmVuZGVyKHRoaXMuZWxlbWVu +dCxCLEEsdGhpcy5vcHRpb25zLnVuaXQpO3JldHVybiB0aGlzO30sc3RhcnQ6ZnVu +Y3Rpb24oQyxFLEQpe2lmKCF0aGlzLmNoZWNrKGFyZ3VtZW50cy5jYWxsZWUsQyxF +LEQpKXtyZXR1cm4gdGhpczsKfXZhciBCPUFycmF5LmZsYXR0ZW4oYXJndW1lbnRz +KTt0aGlzLnByb3BlcnR5PXRoaXMub3B0aW9ucy5wcm9wZXJ0eXx8Qi5zaGlmdCgp +O3ZhciBBPXRoaXMucHJlcGFyZSh0aGlzLmVsZW1lbnQsdGhpcy5wcm9wZXJ0eSxC +KTtyZXR1cm4gdGhpcy5wYXJlbnQoQS5mcm9tLEEudG8pOwp9fSk7RWxlbWVudC5Q +cm9wZXJ0aWVzLnR3ZWVuPXtzZXQ6ZnVuY3Rpb24oQSl7dmFyIEI9dGhpcy5yZXRy +aWV2ZSgidHdlZW4iKTtpZihCKXtCLmNhbmNlbCgpO31yZXR1cm4gdGhpcy5lbGlt +aW5hdGUoInR3ZWVuIikuc3RvcmUoInR3ZWVuOm9wdGlvbnMiLCRleHRlbmQoe2xp +bms6ImNhbmNlbCJ9LEEpKTsKfSxnZXQ6ZnVuY3Rpb24oQSl7aWYoQXx8IXRoaXMu +cmV0cmlldmUoInR3ZWVuIikpe2lmKEF8fCF0aGlzLnJldHJpZXZlKCJ0d2Vlbjpv +cHRpb25zIikpe3RoaXMuc2V0KCJ0d2VlbiIsQSk7fXRoaXMuc3RvcmUoInR3ZWVu +IixuZXcgRnguVHdlZW4odGhpcyx0aGlzLnJldHJpZXZlKCJ0d2VlbjpvcHRpb25z +IikpKTsKfXJldHVybiB0aGlzLnJldHJpZXZlKCJ0d2VlbiIpO319O0VsZW1lbnQu +aW1wbGVtZW50KHt0d2VlbjpmdW5jdGlvbihBLEMsQil7dGhpcy5nZXQoInR3ZWVu +Iikuc3RhcnQoYXJndW1lbnRzKTtyZXR1cm4gdGhpczt9LGZhZGU6ZnVuY3Rpb24o +Qyl7dmFyIEU9dGhpcy5nZXQoInR3ZWVuIiksRD0ib3BhY2l0eSIsQTsKQz0kcGlj +ayhDLCJ0b2dnbGUiKTtzd2l0Y2goQyl7Y2FzZSJpbiI6RS5zdGFydChELDEpO2Jy +ZWFrO2Nhc2Uib3V0IjpFLnN0YXJ0KEQsMCk7YnJlYWs7Y2FzZSJzaG93IjpFLnNl +dChELDEpO2JyZWFrO2Nhc2UiaGlkZSI6RS5zZXQoRCwwKTticmVhaztjYXNlInRv +Z2dsZSI6dmFyIEI9dGhpcy5yZXRyaWV2ZSgiZmFkZTpmbGFnIix0aGlzLmdldCgi +b3BhY2l0eSIpPT0xKTsKRS5zdGFydChELChCKT8wOjEpO3RoaXMuc3RvcmUoImZh +ZGU6ZmxhZyIsIUIpO0E9dHJ1ZTticmVhaztkZWZhdWx0OkUuc3RhcnQoRCxhcmd1 +bWVudHMpO31pZighQSl7dGhpcy5lbGltaW5hdGUoImZhZGU6ZmxhZyIpO31yZXR1 +cm4gdGhpczt9LGhpZ2hsaWdodDpmdW5jdGlvbihDLEEpe2lmKCFBKXtBPXRoaXMu +cmV0cmlldmUoImhpZ2hsaWdodDpvcmlnaW5hbCIsdGhpcy5nZXRTdHlsZSgiYmFj +a2dyb3VuZC1jb2xvciIpKTsKQT0oQT09InRyYW5zcGFyZW50Iik/IiNmZmYiOkE7 +fXZhciBCPXRoaXMuZ2V0KCJ0d2VlbiIpO0Iuc3RhcnQoImJhY2tncm91bmQtY29s +b3IiLEN8fCIjZmZmZjg4IixBKS5jaGFpbihmdW5jdGlvbigpe3RoaXMuc2V0U3R5 +bGUoImJhY2tncm91bmQtY29sb3IiLHRoaXMucmV0cmlldmUoImhpZ2hsaWdodDpv +cmlnaW5hbCIpKTsKQi5jYWxsQ2hhaW4oKTt9LmJpbmQodGhpcykpO3JldHVybiB0 +aGlzO319KTtGeC5Nb3JwaD1uZXcgQ2xhc3Moe0V4dGVuZHM6RnguQ1NTLGluaXRp +YWxpemU6ZnVuY3Rpb24oQixBKXt0aGlzLmVsZW1lbnQ9dGhpcy5zdWJqZWN0PSQo +Qik7dGhpcy5wYXJlbnQoQSk7fSxzZXQ6ZnVuY3Rpb24oQSl7aWYodHlwZW9mIEE9 +PSJzdHJpbmciKXtBPXRoaXMuc2VhcmNoKEEpOwp9Zm9yKHZhciBCIGluIEEpe3Ro +aXMucmVuZGVyKHRoaXMuZWxlbWVudCxCLEFbQl0sdGhpcy5vcHRpb25zLnVuaXQp +O31yZXR1cm4gdGhpczt9LGNvbXB1dGU6ZnVuY3Rpb24oRSxELEMpe3ZhciBBPXt9 +O2Zvcih2YXIgQiBpbiBFKXtBW0JdPXRoaXMucGFyZW50KEVbQl0sRFtCXSxDKTsK +fXJldHVybiBBO30sc3RhcnQ6ZnVuY3Rpb24oQil7aWYoIXRoaXMuY2hlY2soYXJn +dW1lbnRzLmNhbGxlZSxCKSl7cmV0dXJuIHRoaXM7fWlmKHR5cGVvZiBCPT0ic3Ry +aW5nIil7Qj10aGlzLnNlYXJjaChCKTt9dmFyIEU9e30sRD17fTtmb3IodmFyIEMg +aW4gQil7dmFyIEE9dGhpcy5wcmVwYXJlKHRoaXMuZWxlbWVudCxDLEJbQ10pOwpF +W0NdPUEuZnJvbTtEW0NdPUEudG87fXJldHVybiB0aGlzLnBhcmVudChFLEQpO319 +KTtFbGVtZW50LlByb3BlcnRpZXMubW9ycGg9e3NldDpmdW5jdGlvbihBKXt2YXIg +Qj10aGlzLnJldHJpZXZlKCJtb3JwaCIpO2lmKEIpe0IuY2FuY2VsKCk7fXJldHVy +biB0aGlzLmVsaW1pbmF0ZSgibW9ycGgiKS5zdG9yZSgibW9ycGg6b3B0aW9ucyIs +JGV4dGVuZCh7bGluazoiY2FuY2VsIn0sQSkpOwp9LGdldDpmdW5jdGlvbihBKXtp +ZihBfHwhdGhpcy5yZXRyaWV2ZSgibW9ycGgiKSl7aWYoQXx8IXRoaXMucmV0cmll +dmUoIm1vcnBoOm9wdGlvbnMiKSl7dGhpcy5zZXQoIm1vcnBoIixBKTt9dGhpcy5z +dG9yZSgibW9ycGgiLG5ldyBGeC5Nb3JwaCh0aGlzLHRoaXMucmV0cmlldmUoIm1v +cnBoOm9wdGlvbnMiKSkpOwp9cmV0dXJuIHRoaXMucmV0cmlldmUoIm1vcnBoIik7 +fX07RWxlbWVudC5pbXBsZW1lbnQoe21vcnBoOmZ1bmN0aW9uKEEpe3RoaXMuZ2V0 +KCJtb3JwaCIpLnN0YXJ0KEEpO3JldHVybiB0aGlzO319KTsoZnVuY3Rpb24oKXt2 +YXIgQT1GeC5wcm90b3R5cGUuaW5pdGlhbGl6ZTsKRngucHJvdG90eXBlLmluaXRp +YWxpemU9ZnVuY3Rpb24oQil7QS5jYWxsKHRoaXMsQik7dmFyIEM9dGhpcy5vcHRp +b25zLnRyYW5zaXRpb247aWYodHlwZW9mIEM9PSJzdHJpbmciJiYoQz1DLnNwbGl0 +KCI6IikpKXt2YXIgRD1GeC5UcmFuc2l0aW9ucztEPURbQ1swXV18fERbQ1swXS5j +YXBpdGFsaXplKCldOwppZihDWzFdKXtEPURbImVhc2UiK0NbMV0uY2FwaXRhbGl6 +ZSgpKyhDWzJdP0NbMl0uY2FwaXRhbGl6ZSgpOiIiKV07fXRoaXMub3B0aW9ucy50 +cmFuc2l0aW9uPUQ7fX07fSkoKTtGeC5UcmFuc2l0aW9uPWZ1bmN0aW9uKEIsQSl7 +QT0kc3BsYXQoQSk7cmV0dXJuICRleHRlbmQoQix7ZWFzZUluOmZ1bmN0aW9uKEMp +e3JldHVybiBCKEMsQSk7Cn0sZWFzZU91dDpmdW5jdGlvbihDKXtyZXR1cm4gMS1C +KDEtQyxBKTt9LGVhc2VJbk91dDpmdW5jdGlvbihDKXtyZXR1cm4oQzw9MC41KT9C +KDIqQyxBKS8yOigyLUIoMiooMS1DKSxBKSkvMjt9fSk7fTtGeC5UcmFuc2l0aW9u +cz1uZXcgSGFzaCh7bGluZWFyOiRhcmd1bWVudHMoMCl9KTsKRnguVHJhbnNpdGlv +bnMuZXh0ZW5kPWZ1bmN0aW9uKEEpe2Zvcih2YXIgQiBpbiBBKXtGeC5UcmFuc2l0 +aW9uc1tCXT1uZXcgRnguVHJhbnNpdGlvbihBW0JdKTt9fTtGeC5UcmFuc2l0aW9u +cy5leHRlbmQoe1BvdzpmdW5jdGlvbihCLEEpe3JldHVybiBNYXRoLnBvdyhCLEFb +MF18fDYpOwp9LEV4cG86ZnVuY3Rpb24oQSl7cmV0dXJuIE1hdGgucG93KDIsOCoo +QS0xKSk7fSxDaXJjOmZ1bmN0aW9uKEEpe3JldHVybiAxLU1hdGguc2luKE1hdGgu +YWNvcyhBKSk7fSxTaW5lOmZ1bmN0aW9uKEEpe3JldHVybiAxLU1hdGguc2luKCgx +LUEpKk1hdGguUEkvMik7Cn0sQmFjazpmdW5jdGlvbihCLEEpe0E9QVswXXx8MS42 +MTg7cmV0dXJuIE1hdGgucG93KEIsMikqKChBKzEpKkItQSk7fSxCb3VuY2U6ZnVu +Y3Rpb24oRCl7dmFyIEM7Zm9yKHZhciBCPTAsQT0xOzE7Qis9QSxBLz0yKXtpZihE +Pj0oNy00KkIpLzExKXtDPS1NYXRoLnBvdygoMTEtNipCLTExKkQpLzQsMikrQSpB +OwpicmVhazt9fXJldHVybiBDO30sRWxhc3RpYzpmdW5jdGlvbihCLEEpe3JldHVy +biBNYXRoLnBvdygyLDEwKi0tQikqTWF0aC5jb3MoMjAqQipNYXRoLlBJKihBWzBd +fHwxKS8zKTt9fSk7WyJRdWFkIiwiQ3ViaWMiLCJRdWFydCIsIlF1aW50Il0uZWFj +aChmdW5jdGlvbihCLEEpe0Z4LlRyYW5zaXRpb25zW0JdPW5ldyBGeC5UcmFuc2l0 +aW9uKGZ1bmN0aW9uKEMpe3JldHVybiBNYXRoLnBvdyhDLFtBKzJdKTsKfSk7fSk7 +dmFyIFJlcXVlc3Q9bmV3IENsYXNzKHtJbXBsZW1lbnRzOltDaGFpbixFdmVudHMs +T3B0aW9uc10sb3B0aW9uczp7dXJsOiIiLGRhdGE6IiIsaGVhZGVyczp7IlgtUmVx +dWVzdGVkLVdpdGgiOiJYTUxIdHRwUmVxdWVzdCIsQWNjZXB0OiJ0ZXh0L2phdmFz +Y3JpcHQsIHRleHQvaHRtbCwgYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCwgKi8q +In0sYXN5bmM6dHJ1ZSxmb3JtYXQ6ZmFsc2UsbWV0aG9kOiJwb3N0IixsaW5rOiJp +Z25vcmUiLGlzU3VjY2VzczpudWxsLGVtdWxhdGlvbjp0cnVlLHVybEVuY29kZWQ6 +dHJ1ZSxlbmNvZGluZzoidXRmLTgiLGV2YWxTY3JpcHRzOmZhbHNlLGV2YWxSZXNw +b25zZTpmYWxzZX0saW5pdGlhbGl6ZTpmdW5jdGlvbihBKXt0aGlzLnhocj1uZXcg +QnJvd3Nlci5SZXF1ZXN0KCk7CnRoaXMuc2V0T3B0aW9ucyhBKTt0aGlzLm9wdGlv +bnMuaXNTdWNjZXNzPXRoaXMub3B0aW9ucy5pc1N1Y2Nlc3N8fHRoaXMuaXNTdWNj +ZXNzO3RoaXMuaGVhZGVycz1uZXcgSGFzaCh0aGlzLm9wdGlvbnMuaGVhZGVycyk7 +fSxvblN0YXRlQ2hhbmdlOmZ1bmN0aW9uKCl7aWYodGhpcy54aHIucmVhZHlTdGF0 +ZSE9NHx8IXRoaXMucnVubmluZyl7cmV0dXJuIDsKfXRoaXMucnVubmluZz1mYWxz +ZTt0aGlzLnN0YXR1cz0wOyR0cnkoZnVuY3Rpb24oKXt0aGlzLnN0YXR1cz10aGlz +Lnhoci5zdGF0dXM7fS5iaW5kKHRoaXMpKTtpZih0aGlzLm9wdGlvbnMuaXNTdWNj +ZXNzLmNhbGwodGhpcyx0aGlzLnN0YXR1cykpe3RoaXMucmVzcG9uc2U9e3RleHQ6 +dGhpcy54aHIucmVzcG9uc2VUZXh0LHhtbDp0aGlzLnhoci5yZXNwb25zZVhNTH07 +CnRoaXMuc3VjY2Vzcyh0aGlzLnJlc3BvbnNlLnRleHQsdGhpcy5yZXNwb25zZS54 +bWwpO31lbHNle3RoaXMucmVzcG9uc2U9e3RleHQ6bnVsbCx4bWw6bnVsbH07dGhp +cy5mYWlsdXJlKCk7fXRoaXMueGhyLm9ucmVhZHlzdGF0ZWNoYW5nZT0kZW1wdHk7 +fSxpc1N1Y2Nlc3M6ZnVuY3Rpb24oKXtyZXR1cm4oKHRoaXMuc3RhdHVzPj0yMDAp +JiYodGhpcy5zdGF0dXM8MzAwKSk7Cn0scHJvY2Vzc1NjcmlwdHM6ZnVuY3Rpb24o +QSl7aWYodGhpcy5vcHRpb25zLmV2YWxSZXNwb25zZXx8KC8oZWNtYXxqYXZhKXNj +cmlwdC8pLnRlc3QodGhpcy5nZXRIZWFkZXIoIkNvbnRlbnQtdHlwZSIpKSl7cmV0 +dXJuICRleGVjKEEpO31yZXR1cm4gQS5zdHJpcFNjcmlwdHModGhpcy5vcHRpb25z +LmV2YWxTY3JpcHRzKTsKfSxzdWNjZXNzOmZ1bmN0aW9uKEIsQSl7dGhpcy5vblN1 +Y2Nlc3ModGhpcy5wcm9jZXNzU2NyaXB0cyhCKSxBKTt9LG9uU3VjY2VzczpmdW5j +dGlvbigpe3RoaXMuZmlyZUV2ZW50KCJjb21wbGV0ZSIsYXJndW1lbnRzKS5maXJl +RXZlbnQoInN1Y2Nlc3MiLGFyZ3VtZW50cykuY2FsbENoYWluKCk7Cn0sZmFpbHVy +ZTpmdW5jdGlvbigpe3RoaXMub25GYWlsdXJlKCk7fSxvbkZhaWx1cmU6ZnVuY3Rp +b24oKXt0aGlzLmZpcmVFdmVudCgiY29tcGxldGUiKS5maXJlRXZlbnQoImZhaWx1 +cmUiLHRoaXMueGhyKTt9LHNldEhlYWRlcjpmdW5jdGlvbihBLEIpe3RoaXMuaGVh +ZGVycy5zZXQoQSxCKTsKcmV0dXJuIHRoaXM7fSxnZXRIZWFkZXI6ZnVuY3Rpb24o +QSl7cmV0dXJuICR0cnkoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54aHIuZ2V0UmVz +cG9uc2VIZWFkZXIoQSk7fS5iaW5kKHRoaXMpKTt9LGNoZWNrOmZ1bmN0aW9uKEEp +e2lmKCF0aGlzLnJ1bm5pbmcpe3JldHVybiB0cnVlOwp9c3dpdGNoKHRoaXMub3B0 +aW9ucy5saW5rKXtjYXNlImNhbmNlbCI6dGhpcy5jYW5jZWwoKTtyZXR1cm4gdHJ1 +ZTtjYXNlImNoYWluIjp0aGlzLmNoYWluKEEuYmluZCh0aGlzLEFycmF5LnNsaWNl +KGFyZ3VtZW50cywxKSkpO3JldHVybiBmYWxzZTt9cmV0dXJuIGZhbHNlOwp9LHNl +bmQ6ZnVuY3Rpb24oSSl7aWYoIXRoaXMuY2hlY2soYXJndW1lbnRzLmNhbGxlZSxJ +KSl7cmV0dXJuIHRoaXM7fXRoaXMucnVubmluZz10cnVlO3ZhciBHPSR0eXBlKEkp +O2lmKEc9PSJzdHJpbmcifHxHPT0iZWxlbWVudCIpe0k9e2RhdGE6SX07fXZhciBE +PXRoaXMub3B0aW9uczsKST0kZXh0ZW5kKHtkYXRhOkQuZGF0YSx1cmw6RC51cmws +bWV0aG9kOkQubWV0aG9kfSxJKTt2YXIgRT1JLmRhdGEsQj1JLnVybCxBPUkubWV0 +aG9kO3N3aXRjaCgkdHlwZShFKSl7Y2FzZSJlbGVtZW50IjpFPSQoRSkudG9RdWVy +eVN0cmluZygpO2JyZWFrO2Nhc2Uib2JqZWN0IjpjYXNlImhhc2giOkU9SGFzaC50 +b1F1ZXJ5U3RyaW5nKEUpOwp9aWYodGhpcy5vcHRpb25zLmZvcm1hdCl7dmFyIEg9 +ImZvcm1hdD0iK3RoaXMub3B0aW9ucy5mb3JtYXQ7RT0oRSk/SCsiJiIrRTpIO31p +Zih0aGlzLm9wdGlvbnMuZW11bGF0aW9uJiZbInB1dCIsImRlbGV0ZSJdLmNvbnRh +aW5zKEEpKXt2YXIgRj0iX21ldGhvZD0iK0E7CkU9KEUpP0YrIiYiK0U6RjtBPSJw +b3N0Ijt9aWYodGhpcy5vcHRpb25zLnVybEVuY29kZWQmJkE9PSJwb3N0Iil7dmFy +IEM9KHRoaXMub3B0aW9ucy5lbmNvZGluZyk/IjsgY2hhcnNldD0iK3RoaXMub3B0 +aW9ucy5lbmNvZGluZzoiIjt0aGlzLmhlYWRlcnMuc2V0KCJDb250ZW50LXR5cGUi +LCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiK0MpOwp9aWYoRSYm +QT09ImdldCIpe0I9QisoQi5jb250YWlucygiPyIpPyImIjoiPyIpK0U7RT1udWxs +O310aGlzLnhoci5vcGVuKEEudG9VcHBlckNhc2UoKSxCLHRoaXMub3B0aW9ucy5h +c3luYyk7dGhpcy54aHIub25yZWFkeXN0YXRlY2hhbmdlPXRoaXMub25TdGF0ZUNo +YW5nZS5iaW5kKHRoaXMpOwp0aGlzLmhlYWRlcnMuZWFjaChmdW5jdGlvbihLLEop +e2lmKCEkdHJ5KGZ1bmN0aW9uKCl7dGhpcy54aHIuc2V0UmVxdWVzdEhlYWRlcihK +LEspO3JldHVybiB0cnVlO30uYmluZCh0aGlzKSkpe3RoaXMuZmlyZUV2ZW50KCJl +eGNlcHRpb24iLFtKLEtdKTt9fSx0aGlzKTsKdGhpcy5maXJlRXZlbnQoInJlcXVl +c3QiKTt0aGlzLnhoci5zZW5kKEUpO2lmKCF0aGlzLm9wdGlvbnMuYXN5bmMpe3Ro +aXMub25TdGF0ZUNoYW5nZSgpO31yZXR1cm4gdGhpczt9LGNhbmNlbDpmdW5jdGlv +bigpe2lmKCF0aGlzLnJ1bm5pbmcpe3JldHVybiB0aGlzOwp9dGhpcy5ydW5uaW5n +PWZhbHNlO3RoaXMueGhyLmFib3J0KCk7dGhpcy54aHIub25yZWFkeXN0YXRlY2hh +bmdlPSRlbXB0eTt0aGlzLnhocj1uZXcgQnJvd3Nlci5SZXF1ZXN0KCk7dGhpcy5m +aXJlRXZlbnQoImNhbmNlbCIpO3JldHVybiB0aGlzO319KTsoZnVuY3Rpb24oKXt2 +YXIgQT17fTsKWyJnZXQiLCJwb3N0IiwicHV0IiwiZGVsZXRlIiwiR0VUIiwiUE9T +VCIsIlBVVCIsIkRFTEVURSJdLmVhY2goZnVuY3Rpb24oQil7QVtCXT1mdW5jdGlv +bigpe3ZhciBDPUFycmF5LmxpbmsoYXJndW1lbnRzLHt1cmw6U3RyaW5nLnR5cGUs +ZGF0YTokZGVmaW5lZH0pOwpyZXR1cm4gdGhpcy5zZW5kKCRleHRlbmQoQyx7bWV0 +aG9kOkIudG9Mb3dlckNhc2UoKX0pKTt9O30pO1JlcXVlc3QuaW1wbGVtZW50KEEp +O30pKCk7RWxlbWVudC5Qcm9wZXJ0aWVzLnNlbmQ9e3NldDpmdW5jdGlvbihBKXt2 +YXIgQj10aGlzLnJldHJpZXZlKCJzZW5kIik7CmlmKEIpe0IuY2FuY2VsKCk7fXJl +dHVybiB0aGlzLmVsaW1pbmF0ZSgic2VuZCIpLnN0b3JlKCJzZW5kOm9wdGlvbnMi +LCRleHRlbmQoe2RhdGE6dGhpcyxsaW5rOiJjYW5jZWwiLG1ldGhvZDp0aGlzLmdl +dCgibWV0aG9kIil8fCJwb3N0Iix1cmw6dGhpcy5nZXQoImFjdGlvbiIpfSxBKSk7 +Cn0sZ2V0OmZ1bmN0aW9uKEEpe2lmKEF8fCF0aGlzLnJldHJpZXZlKCJzZW5kIikp +e2lmKEF8fCF0aGlzLnJldHJpZXZlKCJzZW5kOm9wdGlvbnMiKSl7dGhpcy5zZXQo +InNlbmQiLEEpO310aGlzLnN0b3JlKCJzZW5kIixuZXcgUmVxdWVzdCh0aGlzLnJl +dHJpZXZlKCJzZW5kOm9wdGlvbnMiKSkpOwp9cmV0dXJuIHRoaXMucmV0cmlldmUo +InNlbmQiKTt9fTtFbGVtZW50LmltcGxlbWVudCh7c2VuZDpmdW5jdGlvbihBKXt2 +YXIgQj10aGlzLmdldCgic2VuZCIpO0Iuc2VuZCh7ZGF0YTp0aGlzLHVybDpBfHxC +Lm9wdGlvbnMudXJsfSk7cmV0dXJuIHRoaXM7fX0pO1JlcXVlc3QuSFRNTD1uZXcg +Q2xhc3Moe0V4dGVuZHM6UmVxdWVzdCxvcHRpb25zOnt1cGRhdGU6ZmFsc2UsZXZh +bFNjcmlwdHM6dHJ1ZSxmaWx0ZXI6ZmFsc2V9LHByb2Nlc3NIVE1MOmZ1bmN0aW9u +KEMpe3ZhciBCPUMubWF0Y2goLzxib2R5W14+XSo+KFtcc1xTXSo/KTxcL2JvZHk+ +L2kpOwpDPShCKT9CWzFdOkM7dmFyIEE9bmV3IEVsZW1lbnQoImRpdiIpO3JldHVy +biAkdHJ5KGZ1bmN0aW9uKCl7dmFyIEQ9Ijxyb290PiIrQysiPC9yb290PiIsRztp +ZihCcm93c2VyLkVuZ2luZS50cmlkZW50KXtHPW5ldyBBY3RpdmVYT2JqZWN0KCJN +aWNyb3NvZnQuWE1MRE9NIik7CkcuYXN5bmM9ZmFsc2U7Ry5sb2FkWE1MKEQpO31l +bHNle0c9bmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhELCJ0ZXh0L3ht +bCIpO31EPUcuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInJvb3QiKVswXTtmb3IodmFy +IEY9MCxFPUQuY2hpbGROb2Rlcy5sZW5ndGg7CkY8RTtGKyspe3ZhciBIPUVsZW1l +bnQuY2xvbmUoRC5jaGlsZE5vZGVzW0ZdLHRydWUsdHJ1ZSk7aWYoSCl7QS5ncmFi +KEgpO319cmV0dXJuIEE7fSl8fEEuc2V0KCJodG1sIixDKTt9LHN1Y2Nlc3M6ZnVu +Y3Rpb24oRCl7dmFyIEM9dGhpcy5vcHRpb25zLEI9dGhpcy5yZXNwb25zZTsKQi5o +dG1sPUQuc3RyaXBTY3JpcHRzKGZ1bmN0aW9uKEUpe0IuamF2YXNjcmlwdD1FO30p +O3ZhciBBPXRoaXMucHJvY2Vzc0hUTUwoQi5odG1sKTtCLnRyZWU9QS5jaGlsZE5v +ZGVzO0IuZWxlbWVudHM9QS5nZXRFbGVtZW50cygiKiIpO2lmKEMuZmlsdGVyKXtC +LnRyZWU9Qi5lbGVtZW50cy5maWx0ZXIoQy5maWx0ZXIpOwp9aWYoQy51cGRhdGUp +eyQoQy51cGRhdGUpLmVtcHR5KCkuYWRvcHQoQi50cmVlKTt9aWYoQy5ldmFsU2Ny +aXB0cyl7JGV4ZWMoQi5qYXZhc2NyaXB0KTt9dGhpcy5vblN1Y2Nlc3MoQi50cmVl +LEIuZWxlbWVudHMsQi5odG1sLEIuamF2YXNjcmlwdCk7fX0pO0VsZW1lbnQuUHJv +cGVydGllcy5sb2FkPXtzZXQ6ZnVuY3Rpb24oQSl7dmFyIEI9dGhpcy5yZXRyaWV2 +ZSgibG9hZCIpOwppZihCKXtzZW5kLmNhbmNlbCgpO31yZXR1cm4gdGhpcy5lbGlt +aW5hdGUoImxvYWQiKS5zdG9yZSgibG9hZDpvcHRpb25zIiwkZXh0ZW5kKHtkYXRh +OnRoaXMsbGluazoiY2FuY2VsIix1cGRhdGU6dGhpcyxtZXRob2Q6ImdldCJ9LEEp +KTt9LGdldDpmdW5jdGlvbihBKXtpZihBfHwhdGhpcy5yZXRyaWV2ZSgibG9hZCIp +KXtpZihBfHwhdGhpcy5yZXRyaWV2ZSgibG9hZDpvcHRpb25zIikpe3RoaXMuc2V0 +KCJsb2FkIixBKTsKfXRoaXMuc3RvcmUoImxvYWQiLG5ldyBSZXF1ZXN0LkhUTUwo +dGhpcy5yZXRyaWV2ZSgibG9hZDpvcHRpb25zIikpKTt9cmV0dXJuIHRoaXMucmV0 +cmlldmUoImxvYWQiKTt9fTtFbGVtZW50LmltcGxlbWVudCh7bG9hZDpmdW5jdGlv +bigpe3RoaXMuZ2V0KCJsb2FkIikuc2VuZChBcnJheS5saW5rKGFyZ3VtZW50cyx7 +ZGF0YTpPYmplY3QudHlwZSx1cmw6U3RyaW5nLnR5cGV9KSk7CnJldHVybiB0aGlz +O319KTtSZXF1ZXN0LkpTT049bmV3IENsYXNzKHtFeHRlbmRzOlJlcXVlc3Qsb3B0 +aW9uczp7c2VjdXJlOnRydWV9LGluaXRpYWxpemU6ZnVuY3Rpb24oQSl7dGhpcy5w +YXJlbnQoQSk7dGhpcy5oZWFkZXJzLmV4dGVuZCh7QWNjZXB0OiJhcHBsaWNhdGlv +bi9qc29uIiwiWC1SZXF1ZXN0IjoiSlNPTiJ9KTsKfSxzdWNjZXNzOmZ1bmN0aW9u +KEEpe3RoaXMucmVzcG9uc2UuanNvbj1KU09OLmRlY29kZShBLHRoaXMub3B0aW9u +cy5zZWN1cmUpO3RoaXMub25TdWNjZXNzKHRoaXMucmVzcG9uc2UuanNvbixBKTt9 +fSk7Ci8vTW9vVG9vbHMgTW9yZSwgPGh0dHA6Ly9tb290b29scy5uZXQvbW9yZT4u +IENvcHlyaWdodCAoYykgMjAwNi0yMDA4IFZhbGVyaW8gUHJvaWV0dGksIDxodHRw +Oi8vbWFkNG1pbGsubmV0PiwgTUlUIFN0eWxlIExpY2Vuc2UuCnZhciBBc3NldD1u +ZXcgSGFzaCh7amF2YXNjcmlwdDpmdW5jdGlvbihGLEQpe0Q9JGV4dGVuZCh7b25s +b2FkOiRlbXB0eSxkb2N1bWVudDpkb2N1bWVudCxjaGVjazokbGFtYmRhKHRydWUp +fSxEKTt2YXIgQj1uZXcgRWxlbWVudCgic2NyaXB0Iix7c3JjOkYsdHlwZToidGV4 +dC9qYXZhc2NyaXB0In0pOwp2YXIgRT1ELm9ubG9hZC5iaW5kKEIpLEE9RC5jaGVj +ayxHPUQuZG9jdW1lbnQ7ZGVsZXRlIEQub25sb2FkO2RlbGV0ZSBELmNoZWNrO2Rl +bGV0ZSBELmRvY3VtZW50O0IuYWRkRXZlbnRzKHtsb2FkOkUscmVhZHlzdGF0ZWNo +YW5nZTpmdW5jdGlvbigpe2lmKFsibG9hZGVkIiwiY29tcGxldGUiXS5jb250YWlu +cyh0aGlzLnJlYWR5U3RhdGUpKXtFKCk7Cn19fSkuc2V0UHJvcGVydGllcyhEKTtp +ZihCcm93c2VyLkVuZ2luZS53ZWJraXQ0MTkpe3ZhciBDPShmdW5jdGlvbigpe2lm +KCEkdHJ5KEEpKXtyZXR1cm4gO30kY2xlYXIoQyk7RSgpO30pLnBlcmlvZGljYWwo +NTApO31yZXR1cm4gQi5pbmplY3QoRy5oZWFkKTt9LGNzczpmdW5jdGlvbihCLEEp +e3JldHVybiBuZXcgRWxlbWVudCgibGluayIsJG1lcmdlKHtyZWw6InN0eWxlc2hl +ZXQiLG1lZGlhOiJzY3JlZW4iLHR5cGU6InRleHQvY3NzIixocmVmOkJ9LEEpKS5p +bmplY3QoZG9jdW1lbnQuaGVhZCk7Cn0saW1hZ2U6ZnVuY3Rpb24oQyxCKXtCPSRt +ZXJnZSh7b25sb2FkOiRlbXB0eSxvbmFib3J0OiRlbXB0eSxvbmVycm9yOiRlbXB0 +eX0sQik7dmFyIEQ9bmV3IEltYWdlKCk7dmFyIEE9JChEKXx8bmV3IEVsZW1lbnQo +ImltZyIpO1sibG9hZCIsImFib3J0IiwiZXJyb3IiXS5lYWNoKGZ1bmN0aW9uKEUp +e3ZhciBGPSJvbiIrRTsKdmFyIEc9QltGXTtkZWxldGUgQltGXTtEW0ZdPWZ1bmN0 +aW9uKCl7aWYoIUQpe3JldHVybiA7fWlmKCFBLnBhcmVudE5vZGUpe0Eud2lkdGg9 +RC53aWR0aDtBLmhlaWdodD1ELmhlaWdodDt9RD1ELm9ubG9hZD1ELm9uYWJvcnQ9 +RC5vbmVycm9yPW51bGw7Ry5kZWxheSgxLEEsQSk7CkEuZmlyZUV2ZW50KEUsQSwx +KTt9O30pO0Quc3JjPUEuc3JjPUM7aWYoRCYmRC5jb21wbGV0ZSl7RC5vbmxvYWQu +ZGVsYXkoMSk7fXJldHVybiBBLnNldFByb3BlcnRpZXMoQik7fSxpbWFnZXM6ZnVu +Y3Rpb24oRCxDKXtDPSRtZXJnZSh7b25Db21wbGV0ZTokZW1wdHksb25Qcm9ncmVz +czokZW1wdHl9LEMpOwppZighRC5wdXNoKXtEPVtEXTt9dmFyIEE9W107dmFyIEI9 +MDtELmVhY2goZnVuY3Rpb24oRil7dmFyIEU9bmV3IEFzc2V0LmltYWdlKEYse29u +bG9hZDpmdW5jdGlvbigpe0Mub25Qcm9ncmVzcy5jYWxsKHRoaXMsQixELmluZGV4 +T2YoRikpO0IrKztpZihCPT1ELmxlbmd0aCl7Qy5vbkNvbXBsZXRlKCk7Cn19fSk7 +QS5wdXNoKEUpO30pO3JldHVybiBuZXcgRWxlbWVudHMoQSk7fX0pOwovL01vb1Rv +b2xzIE1vcmUsIDxodHRwOi8vbW9vdG9vbHMubmV0L21vcmU+LiBDb3B5cmlnaHQg +KGMpIDIwMDYtMjAwOCBWYWxlcmlvIFByb2lldHRpLCA8aHR0cDovL21hZDRtaWxr +Lm5ldD4sIE1JVCBTdHlsZSBMaWNlbnNlLgpGeC5TY3JvbGw9bmV3IENsYXNzKHtF +eHRlbmRzOkZ4LG9wdGlvbnM6e29mZnNldDp7eDowLHk6MH0sd2hlZWxTdG9wczp0 +cnVlfSxpbml0aWFsaXplOmZ1bmN0aW9uKEIsQSl7dGhpcy5lbGVtZW50PXRoaXMu +c3ViamVjdD0kKEIpO3RoaXMucGFyZW50KEEpO3ZhciBEPXRoaXMuY2FuY2VsLmJp +bmQodGhpcyxmYWxzZSk7CmlmKCR0eXBlKHRoaXMuZWxlbWVudCkhPSJlbGVtZW50 +Iil7dGhpcy5lbGVtZW50PSQodGhpcy5lbGVtZW50LmdldERvY3VtZW50KCkuYm9k +eSk7fXZhciBDPXRoaXMuZWxlbWVudDtpZih0aGlzLm9wdGlvbnMud2hlZWxTdG9w +cyl7dGhpcy5hZGRFdmVudCgic3RhcnQiLGZ1bmN0aW9uKCl7Qy5hZGRFdmVudCgi +bW91c2V3aGVlbCIsRCk7Cn0sdHJ1ZSk7dGhpcy5hZGRFdmVudCgiY29tcGxldGUi +LGZ1bmN0aW9uKCl7Qy5yZW1vdmVFdmVudCgibW91c2V3aGVlbCIsRCk7fSx0cnVl +KTt9fSxzZXQ6ZnVuY3Rpb24oKXt2YXIgQT1BcnJheS5mbGF0dGVuKGFyZ3VtZW50 +cyk7dGhpcy5lbGVtZW50LnNjcm9sbFRvKEFbMF0sQVsxXSk7Cn0sY29tcHV0ZTpm +dW5jdGlvbihFLEQsQyl7dmFyIEI9W107dmFyIEE9MjtBLnRpbWVzKGZ1bmN0aW9u +KEYpe0IucHVzaChGeC5jb21wdXRlKEVbRl0sRFtGXSxDKSk7fSk7cmV0dXJuIEI7 +fSxzdGFydDpmdW5jdGlvbihDLEgpe2lmKCF0aGlzLmNoZWNrKGFyZ3VtZW50cy5j +YWxsZWUsQyxIKSl7cmV0dXJuIHRoaXM7Cn12YXIgRT10aGlzLmVsZW1lbnQuZ2V0 +U2l6ZSgpLEY9dGhpcy5lbGVtZW50LmdldFNjcm9sbFNpemUoKTt2YXIgQj10aGlz +LmVsZW1lbnQuZ2V0U2Nyb2xsKCksRD17eDpDLHk6SH07Zm9yKHZhciBHIGluIEQp +e3ZhciBBPUZbR10tRVtHXTtpZigkY2hrKERbR10pKXtEW0ddPSgkdHlwZShEW0dd +KT09Im51bWJlciIpP0RbR10ubGltaXQoMCxBKTpBOwp9ZWxzZXtEW0ddPUJbR107 +fURbR10rPXRoaXMub3B0aW9ucy5vZmZzZXRbR107fXJldHVybiB0aGlzLnBhcmVu +dChbQi54LEIueV0sW0QueCxELnldKTt9LHRvVG9wOmZ1bmN0aW9uKCl7cmV0dXJu +IHRoaXMuc3RhcnQoZmFsc2UsMCk7fSx0b0xlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4g +dGhpcy5zdGFydCgwLGZhbHNlKTsKfSx0b1JpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJu +IHRoaXMuc3RhcnQoInJpZ2h0IixmYWxzZSk7fSx0b0JvdHRvbTpmdW5jdGlvbigp +e3JldHVybiB0aGlzLnN0YXJ0KGZhbHNlLCJib3R0b20iKTt9LHRvRWxlbWVudDpm +dW5jdGlvbihCKXt2YXIgQT0kKEIpLmdldFBvc2l0aW9uKHRoaXMuZWxlbWVudCk7 +CnJldHVybiB0aGlzLnN0YXJ0KEEueCxBLnkpO319KTsKLy9Nb29Ub29scyBNb3Jl +LCA8aHR0cDovL21vb3Rvb2xzLm5ldC9tb3JlPi4gQ29weXJpZ2h0IChjKSAyMDA2 +LTIwMDggVmFsZXJpbyBQcm9pZXR0aSwgPGh0dHA6Ly9tYWQ0bWlsay5uZXQ+LCBN +SVQgU3R5bGUgTGljZW5zZS4KdmFyIERyYWc9bmV3IENsYXNzKHtJbXBsZW1lbnRz +OltFdmVudHMsT3B0aW9uc10sb3B0aW9uczp7c25hcDo2LHVuaXQ6InB4Iixncmlk +OmZhbHNlLHN0eWxlOnRydWUsbGltaXQ6ZmFsc2UsaGFuZGxlOmZhbHNlLGludmVy +dDpmYWxzZSxwcmV2ZW50RGVmYXVsdDpmYWxzZSxtb2RpZmllcnM6e3g6ImxlZnQi +LHk6InRvcCJ9fSxpbml0aWFsaXplOmZ1bmN0aW9uKCl7dmFyIEI9QXJyYXkubGlu +ayhhcmd1bWVudHMse29wdGlvbnM6T2JqZWN0LnR5cGUsZWxlbWVudDokZGVmaW5l +ZH0pOwp0aGlzLmVsZW1lbnQ9JChCLmVsZW1lbnQpO3RoaXMuZG9jdW1lbnQ9dGhp +cy5lbGVtZW50LmdldERvY3VtZW50KCk7dGhpcy5zZXRPcHRpb25zKEIub3B0aW9u +c3x8e30pO3ZhciBBPSR0eXBlKHRoaXMub3B0aW9ucy5oYW5kbGUpO3RoaXMuaGFu +ZGxlcz0oQT09ImFycmF5Inx8QT09ImNvbGxlY3Rpb24iKT8kJCh0aGlzLm9wdGlv +bnMuaGFuZGxlKTokKHRoaXMub3B0aW9ucy5oYW5kbGUpfHx0aGlzLmVsZW1lbnQ7 +CnRoaXMubW91c2U9e25vdzp7fSxwb3M6e319O3RoaXMudmFsdWU9e3N0YXJ0Ont9 +LG5vdzp7fX07dGhpcy5zZWxlY3Rpb249KEJyb3dzZXIuRW5naW5lLnRyaWRlbnQp +PyJzZWxlY3RzdGFydCI6Im1vdXNlZG93biI7dGhpcy5ib3VuZD17c3RhcnQ6dGhp +cy5zdGFydC5iaW5kKHRoaXMpLGNoZWNrOnRoaXMuY2hlY2suYmluZCh0aGlzKSxk +cmFnOnRoaXMuZHJhZy5iaW5kKHRoaXMpLHN0b3A6dGhpcy5zdG9wLmJpbmQodGhp +cyksY2FuY2VsOnRoaXMuY2FuY2VsLmJpbmQodGhpcyksZXZlbnRTdG9wOiRsYW1i +ZGEoZmFsc2UpfTsKdGhpcy5hdHRhY2goKTt9LGF0dGFjaDpmdW5jdGlvbigpe3Ro +aXMuaGFuZGxlcy5hZGRFdmVudCgibW91c2Vkb3duIix0aGlzLmJvdW5kLnN0YXJ0 +KTtyZXR1cm4gdGhpczt9LGRldGFjaDpmdW5jdGlvbigpe3RoaXMuaGFuZGxlcy5y +ZW1vdmVFdmVudCgibW91c2Vkb3duIix0aGlzLmJvdW5kLnN0YXJ0KTsKcmV0dXJu +IHRoaXM7fSxzdGFydDpmdW5jdGlvbihDKXtpZih0aGlzLm9wdGlvbnMucHJldmVu +dERlZmF1bHQpe0MucHJldmVudERlZmF1bHQoKTt9dGhpcy5maXJlRXZlbnQoImJl +Zm9yZVN0YXJ0Iix0aGlzLmVsZW1lbnQpO3RoaXMubW91c2Uuc3RhcnQ9Qy5wYWdl +Owp2YXIgQT10aGlzLm9wdGlvbnMubGltaXQ7dGhpcy5saW1pdD17eDpbXSx5Oltd +fTtmb3IodmFyIEQgaW4gdGhpcy5vcHRpb25zLm1vZGlmaWVycyl7aWYoIXRoaXMu +b3B0aW9ucy5tb2RpZmllcnNbRF0pe2NvbnRpbnVlO31pZih0aGlzLm9wdGlvbnMu +c3R5bGUpe3RoaXMudmFsdWUubm93W0RdPXRoaXMuZWxlbWVudC5nZXRTdHlsZSh0 +aGlzLm9wdGlvbnMubW9kaWZpZXJzW0RdKS50b0ludCgpOwp9ZWxzZXt0aGlzLnZh +bHVlLm5vd1tEXT10aGlzLmVsZW1lbnRbdGhpcy5vcHRpb25zLm1vZGlmaWVyc1tE +XV07fWlmKHRoaXMub3B0aW9ucy5pbnZlcnQpe3RoaXMudmFsdWUubm93W0RdKj0t +MTt9dGhpcy5tb3VzZS5wb3NbRF09Qy5wYWdlW0RdLXRoaXMudmFsdWUubm93W0Rd +OwppZihBJiZBW0RdKXtmb3IodmFyIEI9MjtCLS07Qil7aWYoJGNoayhBW0RdW0Jd +KSl7dGhpcy5saW1pdFtEXVtCXT0kbGFtYmRhKEFbRF1bQl0pKCk7fX19fWlmKCR0 +eXBlKHRoaXMub3B0aW9ucy5ncmlkKT09Im51bWJlciIpe3RoaXMub3B0aW9ucy5n +cmlkPXt4OnRoaXMub3B0aW9ucy5ncmlkLHk6dGhpcy5vcHRpb25zLmdyaWR9Owp9 +dGhpcy5kb2N1bWVudC5hZGRFdmVudHMoe21vdXNlbW92ZTp0aGlzLmJvdW5kLmNo +ZWNrLG1vdXNldXA6dGhpcy5ib3VuZC5jYW5jZWx9KTt0aGlzLmRvY3VtZW50LmFk +ZEV2ZW50KHRoaXMuc2VsZWN0aW9uLHRoaXMuYm91bmQuZXZlbnRTdG9wKTt9LGNo +ZWNrOmZ1bmN0aW9uKEEpe2lmKHRoaXMub3B0aW9ucy5wcmV2ZW50RGVmYXVsdCl7 +QS5wcmV2ZW50RGVmYXVsdCgpOwp9dmFyIEI9TWF0aC5yb3VuZChNYXRoLnNxcnQo +TWF0aC5wb3coQS5wYWdlLngtdGhpcy5tb3VzZS5zdGFydC54LDIpK01hdGgucG93 +KEEucGFnZS55LXRoaXMubW91c2Uuc3RhcnQueSwyKSkpO2lmKEI+dGhpcy5vcHRp +b25zLnNuYXApe3RoaXMuY2FuY2VsKCk7dGhpcy5kb2N1bWVudC5hZGRFdmVudHMo +e21vdXNlbW92ZTp0aGlzLmJvdW5kLmRyYWcsbW91c2V1cDp0aGlzLmJvdW5kLnN0 +b3B9KTsKdGhpcy5maXJlRXZlbnQoInN0YXJ0Iix0aGlzLmVsZW1lbnQpLmZpcmVF +dmVudCgic25hcCIsdGhpcy5lbGVtZW50KTt9fSxkcmFnOmZ1bmN0aW9uKEEpe2lm +KHRoaXMub3B0aW9ucy5wcmV2ZW50RGVmYXVsdCl7QS5wcmV2ZW50RGVmYXVsdCgp +O310aGlzLm1vdXNlLm5vdz1BLnBhZ2U7CmZvcih2YXIgQiBpbiB0aGlzLm9wdGlv +bnMubW9kaWZpZXJzKXtpZighdGhpcy5vcHRpb25zLm1vZGlmaWVyc1tCXSl7Y29u +dGludWU7fXRoaXMudmFsdWUubm93W0JdPXRoaXMubW91c2Uubm93W0JdLXRoaXMu +bW91c2UucG9zW0JdO2lmKHRoaXMub3B0aW9ucy5pbnZlcnQpe3RoaXMudmFsdWUu +bm93W0JdKj0tMTsKfWlmKHRoaXMub3B0aW9ucy5saW1pdCYmdGhpcy5saW1pdFtC +XSl7aWYoJGNoayh0aGlzLmxpbWl0W0JdWzFdKSYmKHRoaXMudmFsdWUubm93W0Jd +PnRoaXMubGltaXRbQl1bMV0pKXt0aGlzLnZhbHVlLm5vd1tCXT10aGlzLmxpbWl0 +W0JdWzFdO31lbHNle2lmKCRjaGsodGhpcy5saW1pdFtCXVswXSkmJih0aGlzLnZh +bHVlLm5vd1tCXTx0aGlzLmxpbWl0W0JdWzBdKSl7dGhpcy52YWx1ZS5ub3dbQl09 +dGhpcy5saW1pdFtCXVswXTsKfX19aWYodGhpcy5vcHRpb25zLmdyaWRbQl0pe3Ro +aXMudmFsdWUubm93W0JdLT0odGhpcy52YWx1ZS5ub3dbQl0ldGhpcy5vcHRpb25z +LmdyaWRbQl0pO31pZih0aGlzLm9wdGlvbnMuc3R5bGUpe3RoaXMuZWxlbWVudC5z +ZXRTdHlsZSh0aGlzLm9wdGlvbnMubW9kaWZpZXJzW0JdLHRoaXMudmFsdWUubm93 +W0JdK3RoaXMub3B0aW9ucy51bml0KTsKfWVsc2V7dGhpcy5lbGVtZW50W3RoaXMu +b3B0aW9ucy5tb2RpZmllcnNbQl1dPXRoaXMudmFsdWUubm93W0JdO319dGhpcy5m +aXJlRXZlbnQoImRyYWciLHRoaXMuZWxlbWVudCk7fSxjYW5jZWw6ZnVuY3Rpb24o +QSl7dGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudCgibW91c2Vtb3ZlIix0aGlzLmJv +dW5kLmNoZWNrKTsKdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudCgibW91c2V1cCIs +dGhpcy5ib3VuZC5jYW5jZWwpO2lmKEEpe3RoaXMuZG9jdW1lbnQucmVtb3ZlRXZl +bnQodGhpcy5zZWxlY3Rpb24sdGhpcy5ib3VuZC5ldmVudFN0b3ApO3RoaXMuZmly +ZUV2ZW50KCJjYW5jZWwiLHRoaXMuZWxlbWVudCk7Cn19LHN0b3A6ZnVuY3Rpb24o +QSl7dGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudCh0aGlzLnNlbGVjdGlvbix0aGlz +LmJvdW5kLmV2ZW50U3RvcCk7dGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudCgibW91 +c2Vtb3ZlIix0aGlzLmJvdW5kLmRyYWcpO3RoaXMuZG9jdW1lbnQucmVtb3ZlRXZl +bnQoIm1vdXNldXAiLHRoaXMuYm91bmQuc3RvcCk7CmlmKEEpe3RoaXMuZmlyZUV2 +ZW50KCJjb21wbGV0ZSIsdGhpcy5lbGVtZW50KTt9fX0pO0VsZW1lbnQuaW1wbGVt +ZW50KHttYWtlUmVzaXphYmxlOmZ1bmN0aW9uKEEpe3JldHVybiBuZXcgRHJhZyh0 +aGlzLCRtZXJnZSh7bW9kaWZpZXJzOnt4OiJ3aWR0aCIseToiaGVpZ2h0In19LEEp +KTsKfX0pO3ZhciBTbGlkZXI9bmV3IENsYXNzKHtJbXBsZW1lbnRzOltFdmVudHMs +T3B0aW9uc10sb3B0aW9uczp7b25UaWNrOmZ1bmN0aW9uKEEpe2lmKHRoaXMub3B0 +aW9ucy5zbmFwKXtBPXRoaXMudG9Qb3NpdGlvbih0aGlzLnN0ZXApO310aGlzLmtu +b2Iuc2V0U3R5bGUodGhpcy5wcm9wZXJ0eSxBKTsKfSxzbmFwOmZhbHNlLG9mZnNl +dDowLHJhbmdlOmZhbHNlLHdoZWVsOmZhbHNlLHN0ZXBzOjEwMCxtb2RlOiJob3Jp +em9udGFsIn0saW5pdGlhbGl6ZTpmdW5jdGlvbihFLEEsRCl7dGhpcy5zZXRPcHRp +b25zKEQpO3RoaXMuZWxlbWVudD0kKEUpO3RoaXMua25vYj0kKEEpOwp0aGlzLnBy +ZXZpb3VzQ2hhbmdlPXRoaXMucHJldmlvdXNFbmQ9dGhpcy5zdGVwPS0xO3RoaXMu +ZWxlbWVudC5hZGRFdmVudCgibW91c2Vkb3duIix0aGlzLmNsaWNrZWRFbGVtZW50 +LmJpbmQodGhpcykpO2lmKHRoaXMub3B0aW9ucy53aGVlbCl7dGhpcy5lbGVtZW50 +LmFkZEV2ZW50KCJtb3VzZXdoZWVsIix0aGlzLnNjcm9sbGVkRWxlbWVudC5iaW5k +V2l0aEV2ZW50KHRoaXMpKTsKfXZhciBGLEI9e30sQz17eDpmYWxzZSx5OmZhbHNl +fTtzd2l0Y2godGhpcy5vcHRpb25zLm1vZGUpe2Nhc2UidmVydGljYWwiOnRoaXMu +YXhpcz0ieSI7dGhpcy5wcm9wZXJ0eT0idG9wIjtGPSJvZmZzZXRIZWlnaHQiO2Jy +ZWFrO2Nhc2UiaG9yaXpvbnRhbCI6dGhpcy5heGlzPSJ4IjsKdGhpcy5wcm9wZXJ0 +eT0ibGVmdCI7Rj0ib2Zmc2V0V2lkdGgiO310aGlzLmhhbGY9dGhpcy5rbm9iW0Zd +LzI7dGhpcy5mdWxsPXRoaXMuZWxlbWVudFtGXS10aGlzLmtub2JbRl0rKHRoaXMu +b3B0aW9ucy5vZmZzZXQqMik7dGhpcy5taW49JGNoayh0aGlzLm9wdGlvbnMucmFu +Z2VbMF0pP3RoaXMub3B0aW9ucy5yYW5nZVswXTowOwp0aGlzLm1heD0kY2hrKHRo +aXMub3B0aW9ucy5yYW5nZVsxXSk/dGhpcy5vcHRpb25zLnJhbmdlWzFdOnRoaXMu +b3B0aW9ucy5zdGVwczt0aGlzLnJhbmdlPXRoaXMubWF4LXRoaXMubWluO3RoaXMu +c3RlcHM9dGhpcy5vcHRpb25zLnN0ZXBzfHx0aGlzLmZ1bGw7dGhpcy5zdGVwU2l6 +ZT1NYXRoLmFicyh0aGlzLnJhbmdlKS90aGlzLnN0ZXBzOwp0aGlzLnN0ZXBXaWR0 +aD10aGlzLnN0ZXBTaXplKnRoaXMuZnVsbC9NYXRoLmFicyh0aGlzLnJhbmdlKTt0 +aGlzLmtub2Iuc2V0U3R5bGUoInBvc2l0aW9uIiwicmVsYXRpdmUiKS5zZXRTdHls +ZSh0aGlzLnByb3BlcnR5LC10aGlzLm9wdGlvbnMub2Zmc2V0KTtDW3RoaXMuYXhp +c109dGhpcy5wcm9wZXJ0eTsKQlt0aGlzLmF4aXNdPVstdGhpcy5vcHRpb25zLm9m +ZnNldCx0aGlzLmZ1bGwtdGhpcy5vcHRpb25zLm9mZnNldF07dGhpcy5kcmFnPW5l +dyBEcmFnKHRoaXMua25vYix7c25hcDowLGxpbWl0OkIsbW9kaWZpZXJzOkMsb25E +cmFnOnRoaXMuZHJhZ2dlZEtub2IuYmluZCh0aGlzKSxvblN0YXJ0OnRoaXMuZHJh +Z2dlZEtub2IuYmluZCh0aGlzKSxvbkNvbXBsZXRlOmZ1bmN0aW9uKCl7dGhpcy5k +cmFnZ2VkS25vYigpOwp0aGlzLmVuZCgpO30uYmluZCh0aGlzKX0pO2lmKHRoaXMu +b3B0aW9ucy5zbmFwKXt0aGlzLmRyYWcub3B0aW9ucy5ncmlkPU1hdGguY2VpbCh0 +aGlzLnN0ZXBXaWR0aCk7dGhpcy5kcmFnLm9wdGlvbnMubGltaXRbdGhpcy5heGlz +XVsxXT10aGlzLmZ1bGw7fX0sc2V0OmZ1bmN0aW9uKEEpe2lmKCEoKHRoaXMucmFu +Z2U+MCleKEE8dGhpcy5taW4pKSl7QT10aGlzLm1pbjsKfWlmKCEoKHRoaXMucmFu +Z2U+MCleKEE+dGhpcy5tYXgpKSl7QT10aGlzLm1heDt9dGhpcy5zdGVwPU1hdGgu +cm91bmQoQSk7dGhpcy5jaGVja1N0ZXAoKTt0aGlzLmVuZCgpO3RoaXMuZmlyZUV2 +ZW50KCJ0aWNrIix0aGlzLnRvUG9zaXRpb24odGhpcy5zdGVwKSk7cmV0dXJuIHRo +aXM7Cn0sY2xpY2tlZEVsZW1lbnQ6ZnVuY3Rpb24oQyl7dmFyIEI9dGhpcy5yYW5n +ZTwwPy0xOjE7dmFyIEE9Qy5wYWdlW3RoaXMuYXhpc10tdGhpcy5lbGVtZW50Lmdl +dFBvc2l0aW9uKClbdGhpcy5heGlzXS10aGlzLmhhbGY7QT1BLmxpbWl0KC10aGlz +Lm9wdGlvbnMub2Zmc2V0LHRoaXMuZnVsbC10aGlzLm9wdGlvbnMub2Zmc2V0KTsK +dGhpcy5zdGVwPU1hdGgucm91bmQodGhpcy5taW4rQip0aGlzLnRvU3RlcChBKSk7 +dGhpcy5jaGVja1N0ZXAoKTt0aGlzLmVuZCgpO3RoaXMuZmlyZUV2ZW50KCJ0aWNr +IixBKTt9LHNjcm9sbGVkRWxlbWVudDpmdW5jdGlvbihBKXt2YXIgQj0odGhpcy5v +cHRpb25zLm1vZGU9PSJob3Jpem9udGFsIik/KEEud2hlZWw8MCk6KEEud2hlZWw+ +MCk7CnRoaXMuc2V0KEI/dGhpcy5zdGVwLXRoaXMuc3RlcFNpemU6dGhpcy5zdGVw +K3RoaXMuc3RlcFNpemUpO0Euc3RvcCgpO30sZHJhZ2dlZEtub2I6ZnVuY3Rpb24o +KXt2YXIgQj10aGlzLnJhbmdlPDA/LTE6MTt2YXIgQT10aGlzLmRyYWcudmFsdWUu +bm93W3RoaXMuYXhpc107CkE9QS5saW1pdCgtdGhpcy5vcHRpb25zLm9mZnNldCx0 +aGlzLmZ1bGwtdGhpcy5vcHRpb25zLm9mZnNldCk7dGhpcy5zdGVwPU1hdGgucm91 +bmQodGhpcy5taW4rQip0aGlzLnRvU3RlcChBKSk7dGhpcy5jaGVja1N0ZXAoKTt9 +LGNoZWNrU3RlcDpmdW5jdGlvbigpe2lmKHRoaXMucHJldmlvdXNDaGFuZ2UhPXRo +aXMuc3RlcCl7dGhpcy5wcmV2aW91c0NoYW5nZT10aGlzLnN0ZXA7CnRoaXMuZmly +ZUV2ZW50KCJjaGFuZ2UiLHRoaXMuc3RlcCk7fX0sZW5kOmZ1bmN0aW9uKCl7aWYo +dGhpcy5wcmV2aW91c0VuZCE9PXRoaXMuc3RlcCl7dGhpcy5wcmV2aW91c0VuZD10 +aGlzLnN0ZXA7dGhpcy5maXJlRXZlbnQoImNvbXBsZXRlIix0aGlzLnN0ZXArIiIp +Owp9fSx0b1N0ZXA6ZnVuY3Rpb24oQSl7dmFyIEI9KEErdGhpcy5vcHRpb25zLm9m +ZnNldCkqdGhpcy5zdGVwU2l6ZS90aGlzLmZ1bGwqdGhpcy5zdGVwcztyZXR1cm4g +dGhpcy5vcHRpb25zLnN0ZXBzP01hdGgucm91bmQoQi09QiV0aGlzLnN0ZXBTaXpl +KTpCO30sdG9Qb3NpdGlvbjpmdW5jdGlvbihBKXtyZXR1cm4odGhpcy5mdWxsKk1h +dGguYWJzKHRoaXMubWluLUEpKS8odGhpcy5zdGVwcyp0aGlzLnN0ZXBTaXplKS10 +aGlzLm9wdGlvbnMub2Zmc2V0Owp9fSk7 + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=system.js +Content-Type: application/x-javascript; charset=utf-8; name=system.js +Content-Location: http://habrahabr.ru/js/1307631427/system.js +Content-Transfer-Encoding: Base64 + +RWxlbWVudC5pbXBsZW1lbnQoewoJZmxhc2g6IGZ1bmN0aW9uKHRvLGZyb20scmVw +cyxwcm9wLGR1cikgewoJCWlmKCFyZXBzKSB7IHJlcHMgPSAxOyB9CgkJaWYoIXBy +b3ApIHsgcHJvcCA9ICdiYWNrZ3JvdW5kLWNvbG9yJzsgfQoJCWlmKCFkdXIpIHsg +ZHVyID0gMjUwOyB9CgkJdmFyIGVmZmVjdCA9IG5ldyBGeC5Ud2Vlbih0aGlzLCB7 +CgkJCQlkdXJhdGlvbjogZHVyLAoJCQkJbGluazogJ2NoYWluJwoJCQl9KQoJCWZv +cih4ID0gMTsgeCA8PSByZXBzOyB4KyspCgkJCWVmZmVjdC5zdGFydChwcm9wLGZy +b20sdG8pLnN0YXJ0KHByb3AsdG8sZnJvbSk7Cgl9LAoJcmVwbGFjZUNsYXNzOiBm +dW5jdGlvbihjbGFzczEsIGNsYXNzMikgewoJCXRoaXMucmVtb3ZlQ2xhc3MoY2xh +c3MxKTsKCQl0aGlzLmFkZENsYXNzKGNsYXNzMik7Cgl9LAoJc3dpdGNoQ2xhc3M6 +IGZ1bmN0aW9uKGNsYXNzMSwgY2xhc3MyKSB7CgkJaWYgKHRoaXMuaGFzQ2xhc3Mo +Y2xhc3MxKSkKCQkJdGhpcy5yZXBsYWNlQ2xhc3MoY2xhc3MxLCBjbGFzczIpOwoJ +CWVsc2UKCQkJdGhpcy5yZXBsYWNlQ2xhc3MoY2xhc3MyLCBjbGFzczEpOwoJfQp9 +KTsKCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq +KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLy8qKioqKioqKioq +KioqKiAg0JLQndCY0JzQkNCd0JjQlSEg0JTQkNCb0KzQqNCVINCY0JTQldCiINCh +0KLQoNCQ0KjQndCr0Jkg0KHQotCQ0KDQq9CZINCa0J7QlCEgICoqKioqKioqKioq +KioqKioqCi8vKioqKioqKioqKioqKioqKiAg0J7QlNCV0J3QrNCi0JUg0KHQmtCQ +0KTQkNCd0JTQoCDQn9Cg0Jgg0JLQpdCe0JTQlSDQkiDQrdCi0KMg0JfQntCd0KMh +ICAqKioqKioqKioqKioqKioqKioqCi8vKioqKioqKioqKioqKioqKioqKioqKioq +KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq +KioqKioKCgovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiDQndCw0YHQ +u9C10LTQvtCy0LDQvdC40LUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq +KioqCkZ1bmN0aW9uLnByb3RvdHlwZS5pbmhlcml0c0Zyb20gPSBmdW5jdGlvbihC +YXNlQ2xhc3MpIHsgLy8gdGhhbmtzIHRvIEtldmluIExpbmRzZXkgZm9yIHRoaXMg +aWRlYQoJdmFyIEluaGVyaXRhbmNlID0gZnVuY3Rpb24oKSB7fTsKCUluaGVyaXRh +bmNlLnByb3RvdHlwZSA9IEJhc2VDbGFzcy5wcm90b3R5cGU7Cgl0aGlzLnByb3Rv +dHlwZSA9IG5ldyBJbmhlcml0YW5jZSgpOwoJdGhpcy5wcm90b3R5cGUuY29uc3Ry +dWN0b3IgPSB0aGlzOwoJdGhpcy5zdXBlckNsYXNzID0gQmFzZUNsYXNzOwp9CgpP +YmplY3QuZXh0ZW5kT2JqZWN0ID0gZnVuY3Rpb24oZGVzdGluYXRpb24sIHNvdXJj +ZSkgewoJZm9yICh2YXIgcHJvcGVydHkgaW4gc291cmNlKQoJCWRlc3RpbmF0aW9u +W3Byb3BlcnR5XSA9IHNvdXJjZVtwcm9wZXJ0eV07CglyZXR1cm4gZGVzdGluYXRp +b247Cn07CgovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiDQoNCw0LHQvtGC +0LAg0YEg0YHQvtCx0YvRgtC40Y/QvNC4ICoqKioqKioqKioqKioqKioqKioqKioq +KioqKioqKgpmdW5jdGlvbiBnZXRDaGFyQ29kZShldikgewoJaWYgKGV2LmNoYXJD +b2RlKSB2YXIgY2hhckNvZGUgPSBldi5jaGFyQ29kZTsKCWVsc2UgaWYgKGV2Lmtl +eUNvZGUpIHZhciBjaGFyQ29kZSA9IGV2LmtleUNvZGU7CgllbHNlIGlmIChldi53 +aGljaCkgdmFyIGNoYXJDb2RlID0gZXYud2hpY2g7CgllbHNlIHZhciBjaGFyQ29k +ZSA9IDA7CglyZXR1cm4gY2hhckNvZGU7Cn0KCi8vKioqKioqKioqKioqKioqKioq +KioqKioqKiDQntC/0YDQtdC00LXQu9C10L3QuNC1INCx0YDQvtGD0LfQtdGA0L7Q +siAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgppZiAod2luZG93LkFjdGl2 +ZVhPYmplY3QpIHdpbmRvdy5pZSA9IHdpbmRvd1t3aW5kb3cuWE1MSHR0cFJlcXVl +c3QgPyAnaWU3JyA6ICdpZTYnXSA9IHRydWU7CmVsc2UgaWYgKGRvY3VtZW50LmNo +aWxkTm9kZXMgJiYgIWRvY3VtZW50LmFsbCAmJiAhbmF2aWdhdG9yLnRhaW50RW5h +YmxlZCkgd2luZG93LndlYmtpdCA9IHdpbmRvd1t3aW5kb3cueHBhdGggPyAnd2Vi +a2l0NDIwJyA6ICd3ZWJraXQ0MTknXSA9IHRydWU7CmVsc2UgaWYgKGRvY3VtZW50 +LmdldEJveE9iamVjdEZvciAhPSBudWxsKSB3aW5kb3cuZ2Vja28gPSB0cnVlOwp2 +YXIgaXNJRSAgPSAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5kZXhPZigiTVNJRSIp +ICE9IC0xKSA/IHRydWUgOiBmYWxzZTsKdmFyIGlzV2luID0gKG5hdmlnYXRvci5h +cHBWZXJzaW9uLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigid2luIikgIT0gLTEpID8g +dHJ1ZSA6IGZhbHNlOwp2YXIgaXNPcGVyYSA9IChuYXZpZ2F0b3IudXNlckFnZW50 +LmluZGV4T2YoIk9wZXJhIikgIT0gLTEpID8gdHJ1ZSA6IGZhbHNlOwoKCi8vKioq +KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBBSkFYICoqKioqKioqKioq +KioqKioqKioqKioqKioqKioqKioqKioqKioKLyoKCXVybCAtINC+0YLQutGD0LTQ +sCDQt9Cw0LPRgNGD0LbQsNC10LwKCWFqYXhDYWxsQmFja0Z1bmN0aW9uIC0g0YfR +gtC+INCy0YvQt9GL0LLQsNC10Lwg0L/QviDQt9Cw0LLQtdGA0YjQtdC90LjQuCDQ +t9Cw0LPRgNGD0LfQutC4CglwYXJhbXMgLSDQv9Cw0YDQsNC80LXRgtGA0Ysg0LIg +0LLQuNC00LUg0L7QsdGK0LXQutGC0LAg0LjQu9C4INC80LDRgdGB0LjQstCwCglj +YWxsT2JqZWN0IC0g0LzQtdGC0L7QtNC+0Lwg0LrQsNC60L7Qs9C+INC+0LHRitC1 +0LrRgtCwINGP0LLQu9GP0LXRgtGB0Y8gYWpheENhbGxCYWNrRnVuY3Rpb24gKNC1 +0YHQu9C4INGN0YLQviDQvNC10YLQvtC0LCDQsCDQvdC1INCz0LvQvtCx0LDQu9GM +0L3QsNGPINGE0YPQvdGG0LjRjykKKi8KZnVuY3Rpb24gYWpheFBvc3QodXJsLCBk +YXRhLCBhamF4Q2FsbEJhY2tGdW5jdGlvbiwgcGFyYW1zLCBjYWxsT2JqZWN0LCBh +amF4Q2FsbEJhY2tFcnJvckZ1bmN0aW9uKSB7Cgl2YXIgYWpheE9iamVjdCA9IG51 +bGw7CglpZiAod2luZG93LlhNTEh0dHBSZXF1ZXN0KSAvLyBicmFuY2ggZm9yIG5h +dGl2ZSBYTUxIdHRwUmVxdWVzdCBvYmplY3QKCQlhamF4T2JqZWN0ID0gbmV3IFhN +TEh0dHBSZXF1ZXN0KCk7CgllbHNlIGlmICh3aW5kb3cuQWN0aXZlWE9iamVjdCkg +Ly8gYnJhbmNoIGZvciBJRS9XaW5kb3dzIEFjdGl2ZVggdmVyc2lvbgoJCWFqYXhP +YmplY3QgPSBuZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKTsK +CWlmKGFqYXhPYmplY3QpewoJCWFqYXhPYmplY3Qub25yZWFkeXN0YXRlY2hhbmdl +ID0gZnVuY3Rpb24oKXsKCQkJYWpheEhhbmRsZXIoYWpheE9iamVjdCwgYWpheENh +bGxCYWNrRnVuY3Rpb24sIHBhcmFtcywgY2FsbE9iamVjdCwgYWpheENhbGxCYWNr +RXJyb3JGdW5jdGlvbik7CgkJfQoJCWFqYXhPYmplY3Qub3BlbigiUE9TVCIsIHVy +bCwgdHJ1ZSk7CgkJYWpheE9iamVjdC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50 +LXR5cGUiLCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7CgkJ +YWpheE9iamVjdC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LWxlbmd0aCIsIGRh +dGEubGVuZ3RoKTsKCQlhamF4T2JqZWN0LnNldFJlcXVlc3RIZWFkZXIoIkNvbm5l +Y3Rpb24iLCAiY2xvc2UiKTsKCQlhamF4T2JqZWN0LnNlbmQoZGF0YSk7CQoJfQp9 +CgoKZnVuY3Rpb24gYWpheEhhbmRsZXIoYWpheE9iamVjdCwgYWpheENhbGxCYWNr +RnVuY3Rpb24sIHBhcmFtcywgY2FsbE9iamVjdCwgYWpheENhbGxCYWNrRXJyb3JG +dW5jdGlvbil7IAoJaWYgKGFqYXhPYmplY3QucmVhZHlTdGF0ZSA9PSA0KQoJCWlm +IChhamF4T2JqZWN0LnN0YXR1cyA9PSAyMDApCgkJCWFqYXhDYWxsQmFja0Z1bmN0 +aW9uLmNhbGwoY2FsbE9iamVjdCwgYWpheE9iamVjdCwgcGFyYW1zKTsKCQllbHNl +CgkJCWlmKGFqYXhDYWxsQmFja0Vycm9yRnVuY3Rpb24pCgkJCQlhamF4Q2FsbEJh +Y2tFcnJvckZ1bmN0aW9uLmNhbGwoY2FsbE9iamVjdCwgYWpheE9iamVjdCk7CQoJ +CQllbHNlCgkJCQlmdXR1X2FsZXJ0KCIiLC8qKCLQktC+0LfQvdC40LrQu9CwINC+ +0YjQuNCx0LrQsCDQsiDQv9C+0LvRg9GH0LXQvdC40LggWE1MINC00LDQvdC90YvR +hTo8YnIgLz4iICsgYWpheE9iamVjdC5zdGF0dXNUZXh0KSovICfQo9C/0YEhINCn +0YLQvi3RgtC+INC/0L7RiNC70L4g0L3QtSDRgtCw0LouINCf0L7Qv9GA0L7QsdGD +0LnRgtC1INC10YnQtSDRgNCw0LcuJywgZmFsc2UsICdlcnJvcicpOwp9CgpmdW5j +dGlvbiBhamF4TG9hZFBvc3QodXJsLCBkYXRhLCBhamF4Q2FsbEJhY2tGdW5jdGlv +biwgY2FsbE9iamVjdCwgcGFyYW1zLCBhamF4Q2FsbEJhY2tFcnJvckZ1bmN0aW9u +KSB7Cgl2YXIgYWpheE9iamVjdCA9IG51bGw7CglpZiAod2luZG93LlhNTEh0dHBS +ZXF1ZXN0KSAvLyBicmFuY2ggZm9yIG5hdGl2ZSBYTUxIdHRwUmVxdWVzdCBvYmpl +Y3QKCQlhamF4T2JqZWN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CgllbHNlIGlm +ICh3aW5kb3cuQWN0aXZlWE9iamVjdCkgLy8gYnJhbmNoIGZvciBJRS9XaW5kb3dz +IEFjdGl2ZVggdmVyc2lvbgoJCWFqYXhPYmplY3QgPSBuZXcgQWN0aXZlWE9iamVj +dCgiTWljcm9zb2Z0LlhNTEhUVFAiKTsKCWlmKGFqYXhPYmplY3QpewoJCWFqYXhP +YmplY3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKXsKCQkJYWpheExv +YWRIYW5kbGVyKGFqYXhPYmplY3QsIGFqYXhDYWxsQmFja0Z1bmN0aW9uLCBjYWxs +T2JqZWN0LCBwYXJhbXMsIGFqYXhDYWxsQmFja0Vycm9yRnVuY3Rpb24pOwoJCX0K +CQlhamF4T2JqZWN0Lm9wZW4oIlBPU1QiLCB1cmwsIHRydWUpOwoJCWFqYXhPYmpl +Y3Quc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC10eXBlIiwgImFwcGxpY2F0aW9u +L3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpOwoJCWFqYXhPYmplY3Quc2V0UmVxdWVz +dEhlYWRlcigiQ29udGVudC1sZW5ndGgiLCBkYXRhLmxlbmd0aCk7CgkJYWpheE9i +amVjdC5zZXRSZXF1ZXN0SGVhZGVyKCJDb25uZWN0aW9uIiwgImNsb3NlIik7CgkJ +YWpheE9iamVjdC5zZW5kKGRhdGEpOwoJfQp9CmZ1bmN0aW9uIGFqYXhMb2FkSGFu +ZGxlcihhamF4T2JqZWN0LCBhamF4Q2FsbEJhY2tGdW5jdGlvbiwgY2FsbE9iamVj +dCwgcGFyYW1zLCBhamF4Q2FsbEJhY2tFcnJvckZ1bmN0aW9uKXsKCWlmIChhamF4 +T2JqZWN0LnJlYWR5U3RhdGUgPT0gNCkKCQlpZiAoYWpheE9iamVjdC5zdGF0dXMg +PT0gMjAwKQoJCQlhamF4Q2FsbEJhY2tGdW5jdGlvbi5jYWxsKGNhbGxPYmplY3Qs +IGFqYXhPYmplY3QsIHBhcmFtcyk7CgkJZWxzZQoJCQlpZihhamF4Q2FsbEJhY2tF +cnJvckZ1bmN0aW9uKQoJCQkJYWpheENhbGxCYWNrRXJyb3JGdW5jdGlvbi5jYWxs +KGNhbGxPYmplY3QsIGFqYXhPYmplY3QpOwkKCQkJZWxzZQoJCQkJZnV0dV9hbGVy +dCgiIiwvKigi0JLQvtC30L3QuNC60LvQsCDQvtGI0LjQsdC60LAg0LIg0L/QvtC7 +0YPRh9C10L3QuNC4IFhNTCDQtNCw0L3QvdGL0YU6PGJyIC8+IiArIGFqYXhPYmpl +Y3Quc3RhdHVzVGV4dCkqLyAn0KPQv9GBISDQp9GC0L4t0YLQviDQv9C+0YjQu9C+ +INC90LUg0YLQsNC6LiDQn9C+0L/RgNC+0LHRg9C50YLQtSDQtdGJ0LUg0YDQsNC3 +LicsIHRydWUsICdlcnJvcicpOwp9Cg== + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=init.js +Content-Type: application/x-javascript; charset=utf-8; name=init.js +Content-Location: http://habrahabr.ru/js/1307631427/tm/init.js +Content-Transfer-Encoding: Base64 + +dmFyIHRtID0gKHR5cGVvZih0bSkgIT0gJ3VuZGVmaW5lZCcpID8gdG0gOiB7fTsK +CmRvY3VtZW50LmlkID0gJDsgLy8g0Y3RgtC+INGH0YLQvtCx0YsgTW9vdG9vbHMg +TW9yZSAxLjIuMy4xINGA0LDQsdC+0YLQsNC7INGBIE1vb3Rvb2xzIENvcmUgMS4y +LjAKCi8qKgogKiDQmNC90YLQtdGA0YTQtdC50YEg0LjQvdC40YbQuNCw0LvQuNC3 +0LDRhtC40Lgg0LTQu9GPINCy0YHQtdCz0L4g0L3QsCDRgdCy0LXRgtC1CiAqIEBh +dXRob3IgYmVib3BraWQKKi8KCnRtLmluaXQgPSB7CglfaW5pdGlhbGl6YXRpb25z +OiBbXSwKCV93aW5kb3dMb2FkZWQ6IGZhbHNlLAoJZm9ybXM6IG51bGwsCgljb250 +cm9sczogbnVsbCwKCWFkZDogZnVuY3Rpb24gKGYpIHsKCQlpZiAodGhpcy5fd2lu +ZG93TG9hZGVkKSB7CgkJCWYuY2FsbCh3aW5kb3cpOwoJCX0KCQllbHNlIHsKCQkJ +dGhpcy5faW5pdGlhbGl6YXRpb25zLnB1c2goZik7CgkJfTsKCX0sCglfbG9hZGVk +OiBmdW5jdGlvbiAoKSB7CgkJdGhpcy5fd2luZG93TG9hZGVkID0gdHJ1ZTsKCQl0 +aGlzLl9pbml0aWFsaXphdGlvbnMuZWFjaCggZnVuY3Rpb24gKGYpIHsKCQkJZi5j +YWxsKHdpbmRvdyk7CgkJfSk7Cgl9Cn07Cgp3aW5kb3cuYWRkRXZlbnQoJ2RvbXJl +YWR5JywgdG0uaW5pdC5fbG9hZGVkLmJpbmQodG0uaW5pdCkpOwoKLyoqCiAqINCk +0YPQvdC60YbQuNGPINC00LvRjyDQu9C+0LPQuNGA0L7QstCw0L3QuNGPLCDQutC+ +0YLQvtGA0LDRjyDQvdC1INCy0YvQt9GL0LLQsNC10YIg0L7RiNC40LHQvtC6LCDQ +tdGB0LvQuCDQvdC10YIg0LrQvtC90YHQvtC70LgKICogQGF1dGhvciBiZWJvcGtp +ZAoqLwp0bS5sb2cgPSBmdW5jdGlvbiAoKSB7CglpZiAoKHR5cGVvZihjb25zb2xl +KSAhPSAndW5kZWZpbmVkJykgJiYgKHR5cGVvZihjb25zb2xlLmxvZykgPT0gJ2Z1 +bmN0aW9uJykpIHsKCSAgICAvL2ZvciAodmFyIGk9MCwgbD1hcmd1bWVudHMubGVu +Z3RoOyBpPGw7IGkrKykgewoJICAgICAgICBjb25zb2xlLmxvZyhhcmd1bWVudHMp +OwoJICAgLy8gfTsKCX0gZWxzZSBpZiAod2luZG93Lm9wZXJhICYmIG9wZXJhLnBv +c3RFcnJvcikgewoJCW9wZXJhLnBvc3RFcnJvcihhcmd1bWVudHMpOwoJfTsKfTsK +CnRtLmJhZFRhZ3MgPSBbCgknT0JKRUNUJywKCSdQQVJBTScsCgknRU1CRUQnLAoJ +J05PRU1CRUQnCl07Cgp0bS5oZWxwZXJzID0gewogICAgLyoqCiAgICAgKiDQktC+ +0LfQstGA0LDRidCw0LXRgiDRhtC10LvQvtC1INGH0LjRgdC70L4g0LIg0YPQtNC+ +0LHQvdC+0Lwg0LTQu9GPINGH0LXQu9C+0LLQtdC60LAg0LLQuNC00LUgLSDRgSDQ +v9GA0L7QsdC10LvQsNC80LgKICAgICAqIEBhdXRob3IgYmVib3BraWQKICAgICov +CiAgICBodW1hbml6ZU51bWJlcjogZnVuY3Rpb24gKG51bWJlcikgewogICAgICAg +IGlmICghbnVtYmVyKSB7IHJldHVybiAnJzsgfQogICAgICAgIHZhciBzID0gbnVt +YmVyLnRvU3RyaW5nKCk7CiAgICAgICAgdmFyIHIgPSAnJzsKICAgICAgICBmb3Ig +KCBpID0gMCwgbCA9IHMubGVuZ3RoOyBpPGw7IGkrKykgewogICAgICAgIAlyID0g +ciArICgoKCgobC1pKSAlIDMpID09IDApICYmIChpICE9IDApKSA/ICcgJyA6ICcn +KSArIHMuY2hhckF0KGkpOwogICAgICAgIH07CiAgICAgICAgcmV0dXJuIHI7CiAg +ICB9LAoJCgkvKioKCSAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINC00LDRgtGDINC4 +INCy0YDQtdC80Y8g0LIg0L3QvtGA0LzQsNC70YzQvdC+0Lwg0LLQuNC00LUKCSAq +IEBhdXRob3IgbWRldmlscwoJICovCglodW1hbml6ZURhdGU6IGZ1bmN0aW9uKHRp +bWVzdGFtcCwgZGF0ZU9ubHkpewoJCXZhciB0b2RheSA9IG5ldyBEYXRlKCk7CgkJ +dmFyIGRhdGUgPSBuZXcgRGF0ZSh0aW1lc3RhbXAgKiAxMDAwKTsKCQl2YXIgbW9u +dGhzID0gWyLRj9C90LLQsNGA0Y8iLCAi0YTQtdCy0YDQsNC70Y8iLCAi0LzQsNGA +0YLQsCIsICLQsNC/0YDQtdC70Y8iLCAi0LzQsNGPIiwgItC40Y7QvdGPIiwgItC4 +0Y7Qu9GPIiwgItCw0LLQs9GD0YHRgtCwIiwgItGB0LXQvdGC0Y/QsdGA0Y8iLCAi +0L7QutGC0Y/QsdGA0Y8iLCAi0L3QvtGP0LHRgNGPIiwgItC00LXQutCw0LHRgNGP +Il07OwoJCXZhciByZXN1bHQgPSAiIjsKCQlpZih0b2RheS5nZXREYXRlKCkgIT0g +ZGF0ZS5nZXREYXRlKCkgfHwgdG9kYXkuZ2V0TW9udGgoKSAhPSBkYXRlLmdldE1v +bnRoKCkgfHwgdG9kYXkuZ2V0RnVsbFllYXIoKSAhPSBkYXRlLmdldEZ1bGxZZWFy +KCkpCgkJCXJlc3VsdCA9IGRhdGUuZ2V0RGF0ZSgpICsgIiAiICsgbW9udGhzW2Rh +dGUuZ2V0TW9udGgoKV07CgkJaWYodG9kYXkuZ2V0RnVsbFllYXIoKSAhPSBkYXRl +LmdldEZ1bGxZZWFyKCkpCgkJCXJlc3VsdCArPSAiICIgKyBkYXRlLmdldEZ1bGxZ +ZWFyKCk7CgkJaWYoIWRhdGVPbmx5KSB7CgkJCWlmIChyZXN1bHQpIHJlc3VsdCAr +PSAiLCAiOwoJCQlyZXN1bHQgKz0gItCyICIgKyB0bS5oZWxwZXJzLmFkZFplcm8o +ZGF0ZS5nZXRIb3VycygpLCAyKSArICI6IiArIHRtLmhlbHBlcnMuYWRkWmVybyhk +YXRlLmdldE1pbnV0ZXMoKSwgMik7CgkJfQoJCXJldHVybiByZXN1bHQ7Cgl9LAoJ +CgkvKioKCSAqINCU0L7QsdCw0LLQu9GP0LXRgiDQvdGD0LvQuCDQv9C10YDQtdC0 +INGH0LjRgdC70L7QvCDQtNC+INGC0LXRhSDQv9C+0YAsINC/0L7QutCwINC+0L3Q +viDQvdC1INC00L7RgdGC0LjQs9C90LXRgiDQvdGD0LbQvdC+0Lkg0LTQu9C40L3R +iwoJICogQGF1dGhvciBtZGV2aWxzCgkgKi8KCWFkZFplcm86IGZ1bmN0aW9uKG51 +bWJlciwgbGVuKSB7CgkJdmFyIHMgPSBudW1iZXIudG9TdHJpbmcoKTsKCQl3aGls +ZSAocy5sZW5ndGggPCBsZW4pIHM9JzAnK3M7CgkJcmV0dXJuIHM7Cgl9Cn07CgpF +bGVtZW50LmltcGxlbWVudCh7CiAgICBzY3JvbGxUb01lOiBmdW5jdGlvbiAoX28p +IHsKICAgICAgICB2YXIgbyA9IF9vfHx7fTsKICAgICAgICAKICAgICAgICB2YXIg +eCA9IG8ueHx8MCwKICAgICAgICAgICAgeSA9IHRoaXMuZ2V0UG9zaXRpb24oKS55 +ICsgKG8ueXx8MCk7CiAgICAgICAgCiAgICAgICAgKHRlbXAud2luZG93U2Nyb2xs +IHx8ICh0ZW1wLndpbmRvd1Njcm9sbCA9IG5ldyBGeC5TY3JvbGwoICQoZG9jdW1l +bnQuYm9keSkgLCB7ICdkdXJhdGlvbic6IDUwMCwgJ2xpbmsnOiAnY2FuY2VsJyB9 +ICkgKSk7CiAgICAgICAgCiAgICAgICAgdGVtcC53aW5kb3dTY3JvbGxbIG8ubm93 +ID8gJ3NldCcgOiAnc3RhcnQnIF0oMCwgdGhpcy5nZXRQb3NpdGlvbigpLnkpOwoK +ICAgICAgICBpZiAobyAmJiBvLmNhbGxiYWNrKSB7CiAgICAgICAgICAgIAogICAg +ICAgICAgICBvLm5vdyA/IG8uY2FsbGJhY2soKSA6IHRlbXAud2luZG93U2Nyb2xs +LmFkZEV2ZW50KCdjb21wbGV0ZScsIChmdW5jdGlvbiAoY2FsbGJhY2spIHsKICAg +ICAgICAgICAgICAgIHRoaXMucmVtb3ZlRXZlbnQoJ2NvbXBsZXRlJywgY2FsbGJh +Y2spOwogICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKICAgICAgICAgICAgfSku +YmluZCh0ZW1wLndpbmRvd1Njcm9sbCwgby5jYWxsYmFjaykpOwogICAgICAgIH0K +ICAgICAgICByZXR1cm4gdGhpczsKICAgIH0KfSk7Cgp0bS5yZXMgPSB7fTsKCnRt +LnJlcy5fbG9hZGVkQ1NTID0gW107CnRtLnJlcy5sb2FkQ1NTID0gZnVuY3Rpb24o +dXJsKSB7CglpZiAoIXRtLnJlcy5fbG9hZGVkQ1NTW3VybF0pIHsKCQl2YXIgY3Nz +ID0gbmV3IEFzc2V0LmNzcyh1cmwpOwoJfQoJdG0ucmVzLl9sb2FkZWRDU1NbdXJs +XSA9IHRydWU7Cn07Cgp0bS5yZXMubG9hZElNRyA9IGZ1bmN0aW9uKHVybCkgewoJ +dmFyIGltZyA9IG5ldyBBc3NldC5pbWFnZSh1cmwpOwp9OwoKZnVuY3Rpb24gZCgp +IHsKCXZhciBkZWJ1Z1NjcmlwdCA9IG5ldyBBc3NldC5qYXZhc2NyaXB0KCcvanMv +dG0vZGVidWcuanMnLCB7aWQ6ICdkZWJ1Z1NjcmlwdCd9KTsKCXZhciBjb25zb2xl +U2NyaXB0ID0gbmV3IEFzc2V0LmphdmFzY3JpcHQoJy9qcy90bS9jb25zb2xlLmpz +Jywge2lkOiAnY29uc29sZVNjcmlwdCd9KTsKfQoKdG0uY3VzdG9tRXZlbnRNYW5h +Z2VyID0gewoJYWRkRXZlbnQ6IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2sp +IHsKCQl0aGlzLl9ldmVudHMgfHwgKHRoaXMuX2V2ZW50cyA9IFtdKTsKCQl0aGlz +Ll9ldmVudHNbZXZlbnROYW1lXSB8fCAodGhpcy5fZXZlbnRzW2V2ZW50TmFtZV0g +PSBbXSk7CgkJdGhpcy5fZXZlbnRzW2V2ZW50TmFtZV0ucHVzaChjYWxsYmFjayk7 +Cgl9LAoJcmVtb3ZlRXZlbnQ6IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2sp +IHsKCQl0aGlzLl9ldmVudHMgfHwgKHRoaXMuX2V2ZW50cyA9IFtdKTsKCQl0aGlz +Ll9ldmVudHNbZXZlbnROYW1lXSB8fCAodGhpcy5fZXZlbnRzW2V2ZW50TmFtZV0g +PSBbXSk7CgkJdGhpcy5fZXZlbnRzW2V2ZW50TmFtZV0uZXJhc2UoY2FsbGJhY2sp +OwoJfSwKCWZpcmVFdmVudDogZnVuY3Rpb24oZXZlbnROYW1lKSB7CgkJdmFyIGFy +Z3MgPSBbXTsKCQlmb3IgKHZhciBpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKykK +CQkJYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7CgkJdGhpcy5fZXZlbnRzIHx8ICh0 +aGlzLl9ldmVudHMgPSBbXSk7CgkJdGhpcy5fZXZlbnRzW2V2ZW50TmFtZV0gfHwg +KHRoaXMuX2V2ZW50c1tldmVudE5hbWVdID0gW10pOwoJCXRoaXMuX2V2ZW50c1tl +dmVudE5hbWVdLmZvckVhY2goZnVuY3Rpb24oaXRlbSl7aXRlbS5hcHBseSh0aGlz +LCBhcmdzKTt9KTsKCQl0bS5sb2coYXJncywgZXZlbnROYW1lICsgJyAoJyArIHRo +aXMuX2V2ZW50c1tldmVudE5hbWVdLmxlbmd0aCArICcpJyk7Cgl9Cn07 + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=common.js +Content-Type: application/x-javascript; charset=utf-8; name=common.js +Content-Location: http://habrahabr.ru/js/1307631427/common.js +Content-Transfer-Encoding: Base64 + +dG0uaW5pdC5hZGQoZnVuY3Rpb24oKXsKCXZhciBwYWdlTmF2ID0gbnVsbDsKCWlm +IChwYWdlTmF2ID0gJChkb2N1bWVudCkuZ2V0RWxlbWVudCgnLnBhZ2UtbmF2Jykp +IHsKCQl2YXIgcHJldiA9IHBhZ2VOYXYuZ2V0RWxlbWVudCgnLm5leHQtcHJldiAu +cHJldicpOwoJCXZhciBuZXh0ID0gcGFnZU5hdi5nZXRFbGVtZW50KCcubmV4dC1w +cmV2IC5uZXh0Jyk7CgkJJCh3aW5kb3cpLmFkZEV2ZW50KCdrZXlkb3duJywgZnVu +Y3Rpb24oZSl7CgkJCWlmICgoKGUuY29udHJvbCAmJiBlLmtleSA9PSAncmlnaHQn +KSB8fCAoZS5hbHQgJiYgZS5rZXkgPT0gJ3JpZ2h0JykpICYmIG5leHQpIHsKCQkJ +CXRvcC5sb2NhdGlvbi5ocmVmID0gbmV4dC5nZXQoImhyZWYiKTsKCQkJCWUuc3Rv +cCgpOwoJCQl9IGVsc2UgaWYgKCgoZS5jb250cm9sICYmIGUua2V5ID09ICdsZWZ0 +JykgfHwgKGUuYWx0ICYmIGUua2V5ID09ICdsZWZ0JykpICYmIHByZXYpIHsKCQkJ +CXRvcC5sb2NhdGlvbi5ocmVmID0gcHJldi5nZXQoImhyZWYiKTsKCQkJCWUuc3Rv +cCgpOwoJCQl9CgkJfSk7Cgl9Cgl2YXIgc2VhcmNoID0gJCgic2VhcmNoIik7Cglp +ZiAoc2VhcmNoKSB7CgkJdmFyIGlucHV0IAkJPSBzZWFyY2gsCgkJCWxhYmVsIAkJ +PSBpbnB1dC5nZXRQYXJlbnQoKSwKCQkJbGFiZWxzcGFuIAk9IGxhYmVsLmdldEVs +ZW1lbnQoJ3NwYW4nKTsKCQlpZiAoaW5wdXQgJiYgbGFiZWwpIHsKCQkJCgkJCWlm +ICghaW5wdXQudmFsdWUpIHsKCQkJCWxhYmVsLmFkZENsYXNzKCJpbnB1dC1wbGFj +ZWhvbGRpbmciKTsKCQkJfQoKCQkJaW5wdXQuYWRkRXZlbnRzKHsKCQkJCSdmb2N1 +cyc6IGZ1bmN0aW9uICgpIHsKCQkJCQlpZiAoIWxhYmVsLm5vcGxhY2Vob2xkaW5n +KSB7CgkJCQkJCWxhYmVsLnJlbW92ZUNsYXNzKCJpbnB1dC1wbGFjZWhvbGRpbmci +KTsKCQkJCQkJbGFiZWwubm9wbGFjZWhvbGRpbmcgPSB0cnVlOwoJCQkJCX0KCQkJ +CX0sCgkJCQknYmx1cic6IGZ1bmN0aW9uICgpIHsKCQkJCQlpZiAoaW5wdXQudmFs +dWUgPT0gJycpIHsKCQkJCQkJbGFiZWwuYWRkQ2xhc3MoImlucHV0LXBsYWNlaG9s +ZGluZyIpOwoJCQkJCQlsYWJlbC5ub3BsYWNlaG9sZGluZyA9IGZhbHNlOwoJCQkJ +CX0KCQkJCX0sCgkJCQknY2hhbmdlJyA6IGZ1bmN0aW9uKCkgewoJCQkJCWlmICgh +bGFiZWwubm9wbGFjZWhvbGRpbmcpIHsKCQkJCQkJbGFiZWwucmVtb3ZlQ2xhc3Mo +ImlucHV0LXBsYWNlaG9sZGluZyIpOwoJCQkJCQlsYWJlbC5ub3BsYWNlaG9sZGlu +ZyA9IHRydWU7CgkJCQkJfQoJCQkJfQoJCQl9KQoJCQlsYWJlbHNwYW4uYWRkRXZl +bnQoJ21vdXNlZG93bicsZnVuY3Rpb24oKXsKCQkJCWlucHV0LmZvY3VzKCk7CgkJ +CQlyZXR1cm4gZmFsc2UKCQkJfSkKCQl9Cgl9Cgl2YXIgaGVscF90aXBzID0gJCQo +Jy5oZWxwLXRpcCcpOwoJaWYgKGhlbHBfdGlwcyAmJiBoZWxwX3RpcHMubGVuZ3Ro +KSB7CgkJdmFyIGN1cnJlbnRfdGlwID0gbnVsbDsKCQl2YXIgdGlwX2hpZGRpbmdf +dGltZW91dDsKCQkKCQl2YXIgaHRfbmljZV9ub2RlID0gJCgnaGVscC10aXAtdGV4 +dCcpOwoJCQlodF9uaWNlX25vZGUudGV4dF9ub2RlID0gaHRfbmljZV9ub2RlLmdl +dEVsZW1lbnQoJyNoZWxwLXRpcC10ZXh0LWNvbnRlbnQnKTsKCgkJdmFyIHNob3df +aGVscF90aXAgPSBmdW5jdGlvbih0ZXh0LG5vZGUpewoJCQljbGVhclRpbWVvdXQo +dGlwX2hpZGRpbmdfdGltZW91dCk7CgkJCWlmIChjdXJyZW50X3RpcCA9PSBub2Rl +KSB7cmV0dXJuIHRydWU7fQoJCQkKCQkJdmFyIHAgPSBub2RlLmdldFBvc2l0aW9u +KCk7CgkJCQoJCQl2YXIgcHggPSBwLnggKyBub2RlLmdldFN0eWxlKCd3aWR0aCcp +LnRvSW50KCkvMjsKCQkJdmFyIHB5ID0gcC55OwoJCQlub2RlCgkJCQoJCQlodF9u +aWNlX25vZGUuc3R5bGUudG9wID0gcHkgKyAncHgnOwoJCQlodF9uaWNlX25vZGUu +c3R5bGUubGVmdCA9IHB4ICsgJ3B4JzsKCQkJaWYgKHB4IDwgMTc5ICkgewoJCQkJ +aHRfbmljZV9ub2RlLmFkZENsYXNzKCdoZWxwLXRpcHMtdG9vLW11Y2gtbGVmdCcp +OwoJCQl9CgkJCQoJCQlodF9uaWNlX25vZGUudGV4dF9ub2RlLmlubmVySFRNTCA9 +IHRleHQ7CgkJCWh0X25pY2Vfbm9kZS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsK +CQkJY3VycmVudF90aXAgPSBodF9uaWNlX25vZGU7CgkJfQoJCXZhciBoaWRlX2hl +bHBfdGlwID0gZnVuY3Rpb24oKXsKCQkJdGlwX2hpZGRpbmdfdGltZW91dCA9IHNl +dFRpbWVvdXQoZnVuY3Rpb24oKXsKCQkJCWh0X25pY2Vfbm9kZS5zdHlsZS5kaXNw +bGF5ID0gJyc7CgkJCQlodF9uaWNlX25vZGUudGV4dF9ub2RlLnRleHRDb250ZW50 +ID0gJyc7CgkJCQlodF9uaWNlX25vZGUucmVtb3ZlQ2xhc3MoJ2hlbHAtdGlwcy10 +b28tbXVjaC1sZWZ0Jyk7CgkJCX0sMzMzKQoJCQkKCQl9CgkJCgkJZm9yICh2YXIg +aT0wLCBsID0gaGVscF90aXBzLmxlbmd0aDsgaSA8IGw7IGkrKykgewoJCQl2YXIg +aGVscF90aXBfbm9kZSA9IGhlbHBfdGlwc1tpXTsKCQkJCgkJCXZhciBoZWxwX3Rp +cF9ub2RlX2NoaWxkcyA9IGhlbHBfdGlwX25vZGUuZ2V0RWxlbWVudHMoJyonKTsK +CQkJaWYgKGhlbHBfdGlwX25vZGVfY2hpbGRzICYmIGhlbHBfdGlwX25vZGVfY2hp +bGRzLmxlbmd0aCkgewoJCQkJCgkJCQlmb3IgKHZhciBrPTAsIGc9IGhlbHBfdGlw +X25vZGVfY2hpbGRzLmxlbmd0aDsgayA8IGc7IGsrKykgewoJCQkJCWhlbHBfdGlw +X25vZGVfY2hpbGRzW2tdLmh0biA9IGhlbHBfdGlwX25vZGU7CgoJCQkJfTsKCQkJ +fQoJCQl0bS5sb2coJ3p6d3d3Jyk7CgkJCQoJCQloZWxwX3RpcF9ub2RlLmh0biA9 +IGhlbHBfdGlwX25vZGU7CgkJCQoJCQl2YXIgdGl0bGUgPSBoZWxwX3RpcF9ub2Rl +LnRpdGxlOwoJCQlpZiAodGl0bGUubWF0Y2goJ2JyLycpKSB7CgkJCQloZWxwX3Rp +cF9ub2RlLmhlbHBfdGlwID0gaGVscF90aXBfbm9kZS5nZXRFbGVtZW50KCcuaGVs +cC10aXAtdGV4dCcpLmlubmVySFRNTAoJCQl9IGVsc2UgewoJCQkJaGVscF90aXBf +bm9kZS5oZWxwX3RpcCA9IHRpdGxlOwoJCQl9CgkJCQoJCQloZWxwX3RpcF9ub2Rl +LnRpdGxlID0gJyc7CgkJCQoJCQloZWxwX3RpcF9ub2RlLmFkZEV2ZW50cyh7CgkJ +CQknbW91c2VvdmVyJzogZnVuY3Rpb24oZSl7IAoJCQkJCXNob3dfaGVscF90aXAo +ZS50YXJnZXQuaHRuLmhlbHBfdGlwLGUudGFyZ2V0Lmh0bik7CgkJCQl9LAoJCQkJ +J21vdXNlb3V0JzogaGlkZV9oZWxwX3RpcAoJCQl9KQoJCQkKCQkJCgkJfTsKCQlo +dF9uaWNlX25vZGUuYWRkRXZlbnRzKHsKCQkJJ21vdXNlb3Zlcic6IGZ1bmN0aW9u +KCl7IAoJCQkJY2xlYXJUaW1lb3V0KHRpcF9oaWRkaW5nX3RpbWVvdXQpOwoJCQl9 +LAoJCQknbW91c2VvdXQnOiBoaWRlX2hlbHBfdGlwCgkJfSkKCX0KfSk7Cg== + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=all.js +Content-Type: application/x-javascript; charset=utf-8; name=all.js +Content-Location: http://habrahabr.ru/js/1307631427/all.js +Content-Transfer-Encoding: Base64 + +CgovKiAgIGZhdm91cml0ZXMgICAqLwpmYXZzSGFuZGxlciA9IHsNCglidXR0b246 +e30sDQoJdXJsOiAnL2FqYXgvZmF2b3JpdGVzLycsDQoJeG1sOiB7DQoJCXJlc3Bv +bnNlTm9kZXM6IHsNCgkJCWVycm9yOiAnZXJyb3InLA0KCQkJcmVzdWx0OiAnbWVz +c2FnZScNCgkJfSwNCg0KCQlwYXJzZTogZnVuY3Rpb24oeG1sT2JqKXsNCgkJCXZh +ciB4bWxOb2RlcyA9IHt9Ow0KCQkJZm9yIChwcm9wIGluIGZhdnNIYW5kbGVyLnht +bC5yZXNwb25zZU5vZGVzKXsNCgkJCQl4bWxOb2Rlc1twcm9wXSA9IHhtbE9iai5n +ZXRFbGVtZW50c0J5VGFnTmFtZShmYXZzSGFuZGxlci54bWwucmVzcG9uc2VOb2Rl +c1twcm9wXSk7DQoJCQl9DQoJCQlyZXR1cm4geG1sTm9kZXM7DQoJCX0NCgl9LA0K +CWZhdm9yaXRlc1NlbmQgOiBmdW5jdGlvbiAoYnV0dG9uLCB0YXJnZXRfdHlwZSwg +dGFyZ2V0X2lkKSB7DQoJCXZhciBob2xkZXIgPSAkKGJ1dHRvbikuZ2V0UGFyZW50 +KCcuanMtdG9fZmF2c19ob2xkZXInKTsNCgkJaWYoaG9sZGVyLmhhc0NsYXNzKCd0 +by1mYXZzJykpIHsNCiAgICAJCXZhciBkYXRhID0gJ2FjdGlvbj1hZGQmdGFyZ2V0 +X3R5cGU9JysgdGFyZ2V0X3R5cGUgKycmdGFyZ2V0X2lkPScrIHRhcmdldF9pZDsN +CgkJfQ0KCQllbHNlIGlmIChob2xkZXIuaGFzQ2xhc3MoJ2Zhdl9hZGRlZCcpKXsN +CgkJCXZhciBkYXRhID0gJ2FjdGlvbj1yZW1vdmUmdGFyZ2V0X3R5cGU9JysgdGFy +Z2V0X3R5cGUgKycmdGFyZ2V0X2lkPScrIHRhcmdldF9pZDsNCgkJfQ0KCQlhamF4 +TG9hZFBvc3QoZmF2c0hhbmRsZXIudXJsLCBkYXRhLCBmYXZzSGFuZGxlci5mYXZv +cml0ZXNTZW5kT25sb2FkLCB3aW5kb3csIHtidXR0b246IGJ1dHRvbiwgdGFyZ2V0 +X3R5cGU6dGFyZ2V0X3R5cGUsIHRhcmdldF9pZDp0YXJnZXRfaWR9KTsNCgl9LA0K +DQoJZmF2b3JpdGVzU2VuZE9ubG9hZCA6IGZ1bmN0aW9uKGFqYXhPYmosIHBhcmFt +cykgew0KCQlpZihhamF4T2JqICYmIGFqYXhPYmoucmVzcG9uc2VYTUwpew0KDQoJ +CQl2YXIgeG1sT2JqID0gYWpheE9iai5yZXNwb25zZVhNTDsNCgkJCXZhciB4bWxO +b2RlcyA9IGZhdnNIYW5kbGVyLnhtbC5wYXJzZSh4bWxPYmopOw0KDQoJCQlpZih4 +bWxOb2Rlcy5lcnJvciAmJiB4bWxOb2Rlcy5lcnJvci5sZW5ndGgpew0KCQkJCXZh +ciBlcnJvcnNfbGVuZ3RoID0geG1sTm9kZXMuZXJyb3IubGVuZ3RoOw0KCQkJCWZv +ciAodmFyIGkgPSAwOyBpIDwgZXJyb3JzX2xlbmd0aDsgaSsrKSB7DQoJCQkJCWZ1 +dHVfYWxlcnQoRkFULmZhdm91cml0ZXNfaGVhZGVyLCB4bWxOb2Rlcy5lcnJvcltp +XS5maXJzdENoaWxkLmRhdGEsIHRydWUsICdlcnJvcicpOw0KCQkJCX0NCgkJCX0N +Cg0KCQkJdmFyIHJlc3VsdHMgPSB4bWxPYmouZ2V0RWxlbWVudHNCeVRhZ05hbWUo +J3Jlc3VsdCcpOw0KCQkJaWYoeG1sTm9kZXMucmVzdWx0ICYmIHhtbE5vZGVzLnJl +c3VsdC5sZW5ndGgpIHsNCg0KDQoJCQkJdmFyIG5vZGUgPSBudWxsOw0KCQkJCWlm +IChyZXN1bHRzWzBdKSB7DQoJCQkJCW5vZGUgPSByZXN1bHRzWzBdOw0KCQkJCX0N +Cg0KDQoJCQkJdmFyIHByZXZpb3VzX29mZiA9ICQocGFyYW1zLmJ1dHRvbikuZ2V0 +UGFyZW50KCcuanMtdG9fZmF2c19ob2xkZXInKS5oYXNDbGFzcygndG8tZmF2cycp +Ow0KCQkJCWlmKHByZXZpb3VzX29mZikgew0KDQoJCQkJCWlmIChub2RlKQ0KCQkJ +CQkJc3dpdGNoIChub2RlLmdldEF0dHJpYnV0ZSgidHlwZSIpKSB7DQoJCQkJCQkJ +Y2FzZSAnY29tcGFueV9jb21tZW50cyc6DQoJCQkJCQkJY2FzZSAnY29tbWVudHMn +Og0KCQkJCQkJCQlmdXR1X2FsZXJ0KEZBVC5mYXZvdXJpdGVzX2hlYWRlciwgRkFU +LmZhdm91cml0ZXNfcmVxdWVzdF9jb21tZW50X2FkZF9zdWNjZXNzLCBmYWxzZSwg +J21lc3NhZ2UnKTsNCgkJCQkJCQkJYnJlYWs7DQoJCQkJCQkJY2FzZSAncG9zdHMn +Og0KCQkJCQkJCQlmdXR1X2FsZXJ0KEZBVC5mYXZvdXJpdGVzX2hlYWRlciwgRkFU +LmZhdm91cml0ZXNfcmVxdWVzdF9wb3N0X2FkZF9zdWNjZXNzLCBmYWxzZSwgJ21l +c3NhZ2UnKTsNCgkJCQkJCQkJYnJlYWs7DQoJCQkJCQl9DQoJCQkJfQ0KCQkJCWVs +c2Ugew0KDQoJCQkJCWlmIChub2RlKQ0KCQkJCQkJc3dpdGNoIChub2RlLmdldEF0 +dHJpYnV0ZSgidHlwZSIpKSB7DQoJCQkJCQkJY2FzZSAnY29tcGFueV9jb21tZW50 +cyc6DQoJCQkJCQkJY2FzZSAnY29tbWVudHMnOg0KCQkJCQkJCQlmdXR1X2FsZXJ0 +KEZBVC5mYXZvdXJpdGVzX2hlYWRlciwgRkFULmZhdm91cml0ZXNfcmVxdWVzdF9j +b21tZW50X3JlbW92ZV9zdWNjZXNzLCBmYWxzZSwgJ21lc3NhZ2UnKTsNCgkJCQkJ +CQkJYnJlYWs7DQoJCQkJCQkJY2FzZSAncG9zdHMnOg0KCQkJCQkJCQlmdXR1X2Fs +ZXJ0KEZBVC5mYXZvdXJpdGVzX2hlYWRlciwgRkFULmZhdm91cml0ZXNfcmVxdWVz +dF9wb3N0X3JlbW92ZV9zdWNjZXNzLCBmYWxzZSwgJ21lc3NhZ2UnKTsNCgkJCQkJ +CQkJYnJlYWs7DQoJCQkJCQl9DQoJCQkJCQlpZiAoIShwYXJhbXMudGFyZ2V0X3R5 +cGUgPT0gJ2NvbW1lbnRzJykpIHsNCgkJCQkJCQl0ZW1wLmZhdm91cml0ZXNfYWRk +ICYmIHRlbXAuZmF2b3VyaXRlc19hZGQuY2xlYXJPd25UYWdzKCQocGFyYW1zLmJ1 +dHRvbikpOw0KCQkJCQkJfQ0KDQoJCQkJfQ0KDQoJCQkJaWYgKHBhcmFtcy50YXJn +ZXRfdHlwZSA9PSAncG9zdHMnIHx8IHBhcmFtcy50YXJnZXRfdHlwZSA9PSAncXVl +c3Rpb25zJykgew0KCQkJCQkkKHBhcmFtcy5idXR0b24pLmdldFBhcmVudCgnLmpz +LXRvX2ZhdnNfaG9sZGVyJykuc3dpdGNoQ2xhc3MoJ2Zhdl9hZGRlZCcsICd0by1m +YXZzJyk7DQoNCgkJCQkJdmFyIGRpdiA9IHBhcmFtcy5idXR0b24uZ2V0UGFyZW50 +KCdkaXYuaGVudHJ5Jyk7DQogICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9 +IGRpdi5nZXRFbGVtZW50KCcuZmF2c19jb3VudCcpOw0KICAgICAgICAgICAgICAg +ICAgICB2YXIgcHJldiA9IHBhcnNlSW50KGNvdW50LmdldCgndGV4dCcpKSB8fCAw +Ow0KCQkJCQlpZiAocHJldmlvdXNfb2ZmKSB7DQogICAgICAgICAgICBjb3VudC5z +ZXQoJ3RleHQnLCBwcmV2ICsgMSk7DQoJCQkJCQlwYXJhbXMuYnV0dG9uLnRpdGxl +ID0n0KPQtNCw0LvQuNGC0Ywg0LjQtyDQuNC30LHRgNCw0L3QvdC+0LPQvic7DQog +ICAgCQkJCWlmIChwYXJhbXMudGFyZ2V0X3R5cGUgPT0gJ3F1ZXN0aW9ucycpIHsN +Cg0KICAgIAkJCQl9ZWxzZXsNCgkJCQkJCSAgdmFyIHRhZ3MgPSBkaXYuZ2V0RWxl +bWVudCgnLnRhZ3MnKTsNCiAgICAJCQkJICAobmV3IEVsZW1lbnQoJ2xpJywgeyAn +Y2xhc3MnOiAnZmF2b3VyaXRlc19lZGl0X3RhZ3MnLCAnaHRtbCc6ICc8YSBvbmNs +aWNrPSJ0ZW1wLmZhdm91cml0ZXNfYWRkLmNoYW5nZV90YWdzKHRoaXMpOyByZXR1 +cm4gZmFsc2UiIGhyZWY9IiMiPtCY0LfQvNC10L3QuNGC0Ywg0YHQstC+0Lgg0LzQ +tdGC0LrQuDwvYT4nfSkpLmluamVjdCh0YWdzKTsNCiAgICAJCQkJfQ0KCQkJCQl9 +IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDEgPT0gcHJldikg +ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50LnNldCgndGV4dCcs +ICcnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICBjb3VudC5zZXQoJ3RleHQnLCBwcmV2IC0gMSkN +CiAgICAgICAgICAgICAgICAgICAgICAgIH0NCgkJCQkJCXBhcmFtcy5idXR0b24u +dGl0bGUgPSfQlNC+0LHQsNCy0LjRgtGMINCyINC40LfQsdGA0LDQvdC90L7QtScN +CgkJCQkJfQ0KCQkJCX0gZWxzZSBpZiAocGFyYW1zLnRhcmdldF90eXBlID09ICdj +b21tZW50cycpIHsNCg0KCQkJCQkkKHBhcmFtcy5idXR0b24pLmdldFBhcmVudCgn +LmpzLXRvX2ZhdnNfaG9sZGVyJykuc3dpdGNoQ2xhc3MoJ2Zhdl9hZGRlZCcsICd0 +by1mYXZzJyk7DQoJCQkJfQ0KDQoJCQl9DQoJCX0NCgl9DQp9Ow0KDQp0bS5pbml0 +LmFkZChmdW5jdGlvbiAoKSB7DQoJdGVtcC5mYXZvdXJpdGVzX2FkZCA9IHsNCgkJ +J2luaXQnOiBmdW5jdGlvbiAoKSB7DQoJCQlpZiAodGhpcy5pbml0ZWQpIHsgcmV0 +dXJuOyB9DQoJCQl2YXIgc2VsZiA9IHRoaXM7DQoJCQl0aGlzLmluaXRlZCA9IHRy +dWU7DQoJCQl0aGlzLmhpZGRlbl9jb250YWluZXIgPSAkKCdmYXZvdXJpdGVzX2Fk +ZF9oaWRkZW4nKTsNCgkJCXRoaXMuZm9ybSA9ICQoJ2Zhdm91cml0ZXNfYWRkX2Zv +cm0nKTsNCgkJCXRoaXMuYWRkZXIgPSAkKCdmYXZvdXJpdGVzX2FkZCcpOw0KCQkJ +dGhpcy50YWdzID0gJCgnZmF2b3VyaXRlc19hZGRfdGFncycpOw0KCQkJdGhpcy5p +ZCA9ICQoJ2Zhdm91cml0ZXNfYWRkX2lkJyk7DQoJCQl0aGlzLmJ1dHRvbiA9ICQo +J2Zhdm91cml0ZXNfYWRkX3N1Ym1pdCcpOw0KDQoJCQlCcm93c2VyLkVuZ2luZS50 +cmlkZW50ICYmIHRoaXMudGFncy5hZGRFdmVudCgna2V5cHJlc3MnLCBmdW5jdGlv +biAoZSkgew0KCQkJCWlmIChlLmtleSA9PSAnZW50ZXInKSB7DQoJCQkJCWUuc3Rv +cCgpOw0KCQkJCQlzZWxmLmZvcm0uYXR0YWNoZWQuc3VibWl0KCk7DQoJCQkJfQ0K +CQkJfSk7DQoNCgkJCXZhciBjYW5jZWwgPSAkKCdmYXZvdXJpdGVzX2FkZF9jYW5j +ZWwnKTsNCg0KCQkJY2FuY2VsICYmIGNhbmNlbC5hZGRFdmVudCgnY2xpY2snLCBm +dW5jdGlvbiAoZSkgew0KCQkJCWUuc3RvcCgpOw0KCQkJCXNlbGYuaGlkZSgpOw0K +CQkJfSk7DQoJCX0sDQoJCSdzaG93JzogZnVuY3Rpb24gKGNvbnRhaW5lciwgaWQs +IHRhZ3Nfc3RyaW5nKSB7DQoJCQkhdGhpcy5pbml0ZWQgJiYgdGhpcy5pbml0KCk7 +DQoJCQl0aGlzLmlkLnZhbHVlID0gaWQ7DQoJCQlpZiAodGFnc19zdHJpbmcpIHsN +CgkJCQl0aGlzLnRhZ3MudmFsdWUgPSB0YWdzX3N0cmluZzsNCgkJCQl0aGlzLmJ1 +dHRvbi52YWx1ZSA9ICfQodC+0YXRgNCw0L3QuNGC0YwnOw0KCQkJfQ0KCQkJdGhp +cy5jb250YWluZXIgPSBjb250YWluZXI7DQoJCQljb250YWluZXIgJiYgdGhpcy5h +ZGRlci5pbmplY3QoY29udGFpbmVyKTsNCgkJCXRoaXMudGFncy5mb2N1cygpOw0K +CQl9LA0KCQknaGlkZSc6IGZ1bmN0aW9uICgpIHsNCgkJCXRoaXMuYWRkZXIuaW5q +ZWN0KHRoaXMuaGlkZGVuX2NvbnRhaW5lcik7DQoJCQl0aGlzLnRhZ3MudmFsdWUg +PSAnJzsNCgkJCXRoaXMuaWQudmFsdWUgPSAnJzsNCgkJCXRoaXMuY29udGFpbmVy +ID0gbnVsbDsNCgkJCXRoaXMuYnV0dG9uLnZhbHVlID0gJ9CU0L7QsdCw0LLQuNGC +0Ywg0LIg0LjQt9Cx0YDQsNC90L3QvtC1JzsNCgkJfSwNCgkJJ2NoYW5nZV90YWdz +JzogZnVuY3Rpb24gKGJ1dHRvbikgew0KCQkJdmFyIGNvbnRhaW5lciA9ICQoYnV0 +dG9uKS5nZXRQYXJlbnQoJ2Rpdi5oZW50cnknKSwNCgkJCQlpZCA9IGNvbnRhaW5l +ci5nZXRFbGVtZW50KCcuZW50cnktaW5mbycpLmlkLnJlcGxhY2UoJ2luZm9wYW5l +bCcsICcnKSwNCgkJCQl0YWdzX2hvbGRlciA9ICQoYnV0dG9uLnBhcmVudE5vZGUu +cGFyZW50Tm9kZSksDQoJCQkJdGFncyA9IHRhZ3NfaG9sZGVyLmdldEVsZW1lbnRz +KCdsaS5mYXYgYScpLA0KCQkJCXRhZ3Nfc3RyaW5nID0gJyc7DQoNCg0KCQkJZm9y +ICh2YXIgaSA9IDAsIGwgPSB0YWdzLmxlbmd0aDsgaTxsOyBpKyspIHsNCgkJCQko +aSE9MCkgJiYgKHRhZ3Nfc3RyaW5nICs9ICcsICcpOw0KCQkJCXRhZ3Nfc3RyaW5n +ICs9IHRhZ3NbaV0uaW5uZXJIVE1MOw0KCQkJfQ0KCQkJdGhpcy5zaG93KGNvbnRh +aW5lciwgaWQsIHRhZ3Nfc3RyaW5nKTsNCgkJfSwNCgkJJ2NsZWFyT3duVGFncyc6 +IGZ1bmN0aW9uIChidXR0b24pIHsNCgkJCXRoaXMuY29udGFpbmVyID0gYnV0dG9u +LmdldFBhcmVudCgnZGl2LmhlbnRyeScpOw0KCQkJdmFyIGZhdiA9IHRoaXMuY29u +dGFpbmVyLmdldEVsZW1lbnQoJ2Rpdi5qcy10b19mYXZzX2hvbGRlcicpOw0KCQkJ +ZmF2ICYmIGZhdi5yZW1vdmVDbGFzcygndG8tZmF2cycpLmFkZENsYXNzKCdmYXZf +YWRkZWQnKTsNCgkJCXRoaXMuc2V0VGFncygnJywgdHJ1ZSk7DQoJCX0sDQoJCSdz +ZXRUYWdzJzogZnVuY3Rpb24gKHRhZ3MsIHVuZmF2KSB7DQoJCQlpZiAoIXRoaXMu +Y29udGFpbmVyKSB7IHJldHVybjsgfQ0KDQoJCQl2YXIgdGFnc19ob2xkZXIgPSB0 +aGlzLmNvbnRhaW5lci5nZXRFbGVtZW50KCd1bC50YWdzJyk7DQoNCgkJCWlmICgh +dGFnc19ob2xkZXIpIHsNCgkJCQlpZiAodGFncykgew0KCQkJCQl2YXIgY29udGVu +dCA9IHRoaXMuY29udGFpbmVyLmdldEVsZW1lbnQoJ2Rpdi5jb250ZW50Jyk7DQoJ +CQkJCXRhZ3NfaG9sZGVyID0gKG5ldyBFbGVtZW50KCd1bCcsIHsgJ2NsYXNzJzog +J3RhZ3MgJ30pKS5pbmplY3QoY29udGVudCwgJ2FmdGVyJyk7DQoJCQkJfQ0KCQkJ +fQ0KCQkJaWYgKHRhZ3NfaG9sZGVyKSB7DQoJCQkJdmFyIGVkaXRfdGFncyA9IHRh +Z3NfaG9sZGVyLmdldEVsZW1lbnQoJ2xpLmZhdm91cml0ZXNfZWRpdF90YWdzJyk7 +DQoNCgkJCQl0YWdzX2hvbGRlci5nZXRFbGVtZW50cygnbGkuZmF2JykuZGlzcG9z +ZSgpOw0KDQoJCQkJaWYgKHVuZmF2KSB7DQoJCQkJICAgIGlmIChlZGl0X3RhZ3Mp +IGVkaXRfdGFncy5kaXNwb3NlKCk7DQoJCQkJfSBlbHNlIHsNCgkJCQkJaWYgKCFl +ZGl0X3RhZ3MpIHsNCgkJCQkJCWVkaXRfdGFncyA9IChuZXcgRWxlbWVudCgnbGkn +LCB7ICdjbGFzcyc6ICdmYXZvdXJpdGVzX2VkaXRfdGFncycsICdodG1sJzogJzxh +IG9uY2xpY2s9InRlbXAuZmF2b3VyaXRlc19hZGQuY2hhbmdlX3RhZ3ModGhpcyk7 +IHJldHVybiBmYWxzZTsiIGhyZWY9IiMiPtCY0LfQvNC10L3QuNGC0Ywg0YHQstC+ +0Lgg0LzQtdGC0LrQuDwvYT4nIH0pKS5pbmplY3QodGFnc19ob2xkZXIpOw0KCQkJ +CQl9DQoJCQkJfQ0KDQoJCQkJdmFyIGVtcHR5ID0gISh0YWdzX2hvbGRlci5nZXRF +bGVtZW50cygnbGknKS5sZW5ndGggKyAoZWRpdF90YWdzID8gLTEgOiAwICkpOw0K +DQoJCQkJaWYgKCF1bmZhdiAmJiB0YWdzKSB7DQoJCQkJCXZhciB0YWdzID0gdGFn +cy5zcGxpdCgnLCcpOw0KCQkJCQlmb3IodmFyIGk9MCwgbD10YWdzLmxlbmd0aDsg +aTxsOyBpKyspIHsNCgkJCQkJCXZhciB0YWcgPSB0YWdzW2ldLmNsZWFuKCk7DQoJ +CQkJCQkobmV3IEVsZW1lbnQoJ2xpJywgeyAnY2xhc3MnOiAnZmF2JywgJ2h0bWwn +OiAoKGVtcHR5ICYmIGk9PTApID8gJycgOiAnLCAnKSArICc8YSBocmVmPSJodHRw +Oi8vJyArIHRlbXAudXNlci5sb2dpbiArICcuJyArIHRlbXAuYmFzZV9zaG9ydCAr +ICcvZmF2b3JpdGVzL3RhZy8nICsgdGFnICsgJyI+JyArIHRhZyArICc8L2E+J30p +KS5pbmplY3QoZWRpdF90YWdzLCAnYmVmb3JlJyk7DQoJCQkJCX0NCgkJCQl9DQoN +CgkJCQlpZiAoIXRhZ3NfaG9sZGVyLmdldEVsZW1lbnRzKCdsaScpLmxlbmd0aCkg +eyB0YWdzX2hvbGRlci5kaXNwb3NlKCk7IH0NCg0KCQkJCXRoaXMuY29udGFpbmVy +ID0gbnVsbDsNCgkJCX0NCgkJfQ0KCX07DQp9KTsNCgoKCgovKiAgIGZ1dHVfYWxl +cnQgICAqLwpmdW5jdGlvbiBmdXR1X2FsZXJ0KGhlYWRlciwgdGV4dCwgY2xvc2Us +IGNsYXNzTmFtZSkgew0KCWlmICghJCgnZnV0dV9hbGVydHNfaG9sZGVyJykpIHsN +CgkJdmFyIGZ1dHVBbGVydE91dGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn +ZGl2Jyk7DQoJCWZ1dHVBbGVydE91dGVyLmNsYXNzTmFtZSA9ICdmdXR1X2FsZXJ0 +X291dGVyJzsNCgkJZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmdXR1QWxlcnRP +dXRlcik7DQoJCXZhciBmdXR1QWxlcnRGcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVs +ZW1lbnQoJ2RpdicpOw0KCQlmdXR1QWxlcnRGcmFtZS5jbGFzc05hbWUgPSAnZnJh +bWUnOw0KCQlmdXR1QWxlcnRPdXRlci5hcHBlbmRDaGlsZChmdXR1QWxlcnRGcmFt +ZSk7DQoJCQ0KCQl2YXIgZnV0dUFsZXJ0c0hvbGRlciA9IGRvY3VtZW50LmNyZWF0 +ZUVsZW1lbnQoJ2RpdicpOw0KCQlmdXR1QWxlcnRzSG9sZGVyLmlkID0gJ2Z1dHVf +YWxlcnRzX2hvbGRlcic7DQoJCWZ1dHVBbGVydHNIb2xkZXIuY2xhc3NOYW1lID0g +J2Z1dHVfYWxlcnRzX2hvbGRlcic7DQoJCWZ1dHVBbGVydEZyYW1lLmFwcGVuZENo +aWxkKGZ1dHVBbGVydHNIb2xkZXIpOw0KCQkNCgl9IGVsc2Ugew0KDQoNCgl9DQoJ +dmFyIGZ1dHVBbGVydCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOw0K +CWZ1dHVBbGVydC5jbGFzc05hbWUgPSAnZnV0dV9hbGVydCAnICsgY2xhc3NOYW1l +Ow0KCSQoJ2Z1dHVfYWxlcnRzX2hvbGRlcicpLmFwcGVuZENoaWxkKGZ1dHVBbGVy +dCk7DQoNCgl2YXIgZnV0dUFsZXJ0SGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxl +bWVudCgnZGl2Jyk7DQoJZnV0dUFsZXJ0SGVhZGVyLmNsYXNzTmFtZSA9ICdmdXR1 +X2FsZXJ0X2hlYWRlcic7DQoJZnV0dUFsZXJ0LmFwcGVuZENoaWxkKGZ1dHVBbGVy +dEhlYWRlcik7DQoJDQoJZnV0dUFsZXJ0SGVhZGVyLmlubmVySFRNTCA9IGhlYWRl +cjsNCglpZiAoY2xvc2UpIHsNCgkJdmFyIGZ1dHVBbGVydENsb3NlQnV0dG9uID0g +ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOw0KCQlmdXR1QWxlcnRDbG9zZUJ1 +dHRvbi5ocmVmID0gJyMnOw0KCQlmdXR1QWxlcnRDbG9zZUJ1dHRvbi5jbGFzc05h +bWUgPSAnZnV0dV9hbGVydF9jbG9zZV9idXR0b24nOw0KCQlmdXR1QWxlcnRDbG9z +ZUJ1dHRvbi5vbmNsaWNrID0gZnVuY3Rpb24oZXYpIHsNCgkJCWlmKCFldikgew0K +CQkJCWV2PXdpbmRvdy5ldmVudDsNCgkJCX0NCgkJCWlmICghZG9jdW1lbnQuYWxs +KSBldi5wcmV2ZW50RGVmYXVsdCgpOyBlbHNlIGV2LnJldHVyblZhbHVlID0gZmFs +c2U7DQoJCQkkKGZ1dHVBbGVydCkuZGlzcG9zZSgpDQoJCX0NCgkJZnV0dUFsZXJ0 +LmFwcGVuZENoaWxkKGZ1dHVBbGVydENsb3NlQnV0dG9uKTsNCgkJDQoJCXZhciBm +dXR1QWxlcnRDbG9zZUJ1dHRvbkljb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50 +KCdpbWcnKTsNCgkJZnV0dUFsZXJ0Q2xvc2VCdXR0b25JY29uLnNyYyA9ICcvaS9i +dXR0b25zL2J0bl9jbG9zZS5naWYnOw0KCQlmdXR1QWxlcnRDbG9zZUJ1dHRvbi5h +cHBlbmRDaGlsZChmdXR1QWxlcnRDbG9zZUJ1dHRvbkljb24pOw0KCX0NCgkNCgkN +Cgl2YXIgZnV0dUFsZXJ0VGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp +dicpOw0KCWZ1dHVBbGVydFRleHQuY2xhc3NOYW1lID0gJ2Z1dHVfYWxlcnRfdGV4 +dCc7DQoJZnV0dUFsZXJ0LmFwcGVuZENoaWxkKGZ1dHVBbGVydFRleHQpOw0KDQoJ +DQoJZnV0dUFsZXJ0VGV4dC5pbm5lckhUTUwgPSB0ZXh0Ow0KCQ0KCWZ1dHVBbGVy +dC5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7DQoJZnV0dUFsZXJ0LnN0eWxl +LnRvcCA9ICcwJzsNCglmdXR1QWxlcnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7 +DQoNCgkNCglpZiAoIWNsb3NlKSB7DQoJCSQoZnV0dUFsZXJ0KS5hZGRFdmVudCgi +Y2xpY2siLGZ1bmN0aW9uKCl7DQoJCQkkKGZ1dHVBbGVydCkuZGlzcG9zZSgpDQoJ +CX0pDQoJCXNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyAkKGZ1dHVBbGVydCkuZGlz +cG9zZSgpIH0sIDMwMDApOw0KCQkNCgl9DQp9DQoNCi8vIEZ1dHUgQWxlcnQgVGV4 +dHMNCnZhciBGQVQgPSB7DQoJcHJlbG9hZGVyIDogJ9CS0LDRiCDQt9Cw0L/RgNC+ +0YEg0L7RgtC/0YDQsNCy0LvQtdC9INC/0L4g0YHQtdC60YDQtdGC0L3QvtC5INC7 +0LjQvdC40LguINCW0LTQuNGC0LUg0L/QvtC20LDQu9GD0LnRgdGC0LAg0L7RgtCy +0LXRgtCwJywNCgllbXB0eTogJ9Cd0YMg0LTQu9GPINC90LDRh9Cw0LvQsCDRgdC6 +0LDQttC40YLQtSwg0YfRgtC+INCy0Ysg0L3QsNC80LXRgNC10L3RiyDQtNC10LvQ +sNGC0YwnLA0KDQoJLy8g0L/RgNC+0YTQuNC70YwNCglwcm9maWxlX2hlYWRlciA6 +ICfQpdCw0LHRgNCw0YXQsNCx0YAgLSDQndCw0YHRgtGA0L7QudC60LgnLA0KDQoJ +Ly8g0YDQtdC30Y7QvNC1DQoJcmVzdW1lX2hlYWRlciA6ICfQpdCw0LHRgNCw0YXQ +sNCx0YAg4oCUINCg0LXQt9GO0LzQtScsDQoJDQoJLy8g0L/QvtGH0YLQsA0KCW1h +aWxfaGVhZGVyIDogJ9Cl0LDQsdGA0LDRhdCw0LHRgCDigJQg0J/QvtGH0YLQsCcs +DQoJbWFpbF9sZXR0ZXJfc2VuZF9yZXF1ZXN0IDogJ9CS0Ysg0L7RgtC/0YDQsNCy +0LjQu9C4INC30LDQv9GA0L7RgSDQvdCwINC+0YLQv9GA0LDQstC60YMg0L/QuNGB +0YzQvNCwLicsDQoJbWFpbF9sZXR0ZXJfZGVsZXRlIDogJ9Cf0LjRgdGM0LzQviDR +g9C00LDQu9C10L3QvicsDQoNCgkvLyDQutC+0LzQvNC10L3RgtCw0YDQuNC4DQoJ +Y29tbWVudHNfaGVhZGVyIDogJ9Cl0LDQsdGA0LDRhdCw0LHRgCDigJQg0JrQvtC8 +0LzQtdC90YLQsNGA0LjQuCcsDQoJY29tbWVudHNfZXJyb3JfYmxhbmtfbWVzc2Fn +ZSA6ICfQktCy0LXQtNC40YLQtSDRh9GC0L4t0L3QuNCx0YPQtNGMIScsDQoJY29t +bWVudHNfYWRkX3N1Y2Nlc3MgOiAn0JLRiyDQtNC+0LHQsNCy0LjQu9C4INC60L7Q +vNC80LXQvdGC0LDRgNC40LkuJywNCgljb21tZW50c19hZGRfcmVxdWVzdCA6ICfQ +ktGLINC+0YLQv9GA0LDQstC40LvQuCDQt9Cw0L/RgNC+0YEg0L3QsCDQtNC+0LHQ +sNCy0LvQtdC90LjQtSDQutC+0LzQvNC10L3RgtCw0YDQuNGPLicsDQoNCgkvLyDQ +s9C+0YHQvtCy0LDQvdC40LUNCgl2b3RpbmdzX2hlYWRlciA6ICfQpdCw0LHRgNCw +0YXQsNCx0YAg4oCUINCT0L7Qu9C+0YHQvtCy0LDQvdC40Y8nLA0KCXZvdGluZ3Nf +dW5rbm93bl9lcnJvciA6ICfQndC10L7Qv9C+0LfQvdCw0L3QvdCw0Y8g0YHRgtGA +0LDQvdC90LDRjyDQvtGI0LjQsdC60LAnLA0KCXZvdGluZ3NfZXJyb3Jfc2VsZiA6 +ICfQk9C+0LvQvtGB0L7QstCw0YLRjCDQt9CwINGB0LLQvtC4INCy0LXRidC4INC9 +0LXQu9GM0LfRjycsDQoJdm90aW5nc19lcnJvcl9wcm9oaWJpdGVkIDogJ9CS0LDQ +vCDQt9Cw0L/RgNC10YnQtdC90L4g0LfQtNC10YHRjCDQs9C+0LvQvtGB0L7QstCw +0YLRjCcsDQoJdm90aW5nc19lcnJvcl9pc19leHBpcmVkIDogJ9CS0YDQtdC80Y8g +0LPQvtC70L7RgdC+0LLQsNC90LjRjyDQv9GA0L7RiNC70L4nLA0KCXZvdGluZ3Nf +ZXJyb3Jfbm9fYWNjZXNzIDogJ9Ct0YLQviDQtNC10LnRgdGC0LLQuNC1INC00L7R +gdGC0YPQv9C90L4g0YLQvtC70YzQutC+INC00LvRjyDQt9Cw0YDQtdCz0LjRgdGC +0YDQuNGA0L7QstCw0L3QvdGL0YUg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9C10Lkn +LA0KDQoJLy8g0LHQu9C+0LPQuA0KCWJsb2dzOiB7DQoJCWhlYWRlcjogJ9Cl0LDQ +sdGA0LDRhdCw0LHRgCDigJQg0JHQu9C+0LPQuCcsDQoJCWRpc2FibGVkOiAn0JLQ +sNGI0LAg0L/RgNC+0YHRjNCx0LAg0L4g0L/QvtC00L/QuNGB0LrQtS/QstGB0YLR +g9C/0LvQtdC90LjQuCDQsiDQsdC70L7QsyDRg9C20LUg0LHRi9C70LAg0L7RgtC/ +0YDQsNCy0LvQtdC90LAg0LzQvtC00LXRgNCw0YLQvtGA0YMnLA0KCQllbXB0eV9m +aWVsZDogJ9Cd0YMg0LLQstC10LTQuNGC0LUg0YXQvtGC0Ywg0YfRgtC+LdC90LjQ +sdGD0LTRjCEnLA0KCQlibG9nX2pvaW46ICfQktGLINCy0YHRgtGD0L/QuNC70Lgg +0LIg0LHQu9C+0LMnLA0KCQlibG9nX2xlYXZlOiAn0JLRiyDQv9C+0LrQuNC90YPQ +u9C4INCx0LvQvtCzJw0KCX0sDQoNCg0KCS8vINGA0LXQs9C40YHRgtGA0LDRhtC4 +0Y8NCglyZWdpc3RyYXRpb246IHsNCgkJaGVhZGVyOiAn0KXQsNCx0YDQsNGF0LDQ +sdGAIOKAlCDQoNC10LPQuNGB0YLRgNCw0YbQuNGPJywNCgkJZXJyb3I6ICfQntGI +0LjQsdC60LA6INC/0YDQvtCy0LXRgNGM0YLQtSDQv9GA0LDQstC40LvRjNC90L7R +gdGC0Ywg0LfQsNC/0L7Qu9C90LXQvdC40Y8g0YTQvtGA0LzRiycNCgl9LA0KDQoJ +Ly8g0L/QvtGB0YLRiw0KCXBvc3RzX2hlYWRlciA6ICfQpdCw0LHRgNCw0YXQsNCx +0YAg4oCUINCf0YPQsdC70LjQutCw0YbQuNC4JywNCglwb3N0c19zbGlkZXNob3df +YWRkIDogJ9Ch0LvQsNC50LTRiNC+0YMg0LTQvtCx0LDQstC70LXQvdC+JywNCg0K +CS8vINCU0L7QsdCw0LLQu9C10L3QuNC1INCyINC00YDRg9C30YzRjw0KCWZyaWVu +ZGxpZXJfaGVhZGVyIDogJ9Cl0LDQsdGA0LDRhdCw0LHRgCDigJQg0JTRgNGD0LfR +jNGPJywNCglmcmllbmRsaWVyX3Vua25vd25fZXJyb3IgOiAn0J3QtdC+0L/QvtC3 +0L3QsNC90L3QsNGPINGB0YLRgNCw0L3QvdCw0Y8g0L7RiNC40LHQutCwJywNCg0K +CS8vINCd0LDRgdGC0YDQvtC50LrQuA0KCXVzZXJfc2V0dGluZ3NfaGVhZGVyIDog +J9Cl0LDQsdGA0LDRhdCw0LHRgCDigJQg0J3QsNGB0YLRgNC+0LnQutC4INC/0L7Q +u9GM0LfQvtCy0LDRgtC10LvRjycsDQoJdXNlcl9zZXR0aW5nc19zYXZlX3N1Y2Nl +c3MgOiAn0J3QsNGB0YLRgNC+0LnQutC4INC+0LHQvdC+0LLQu9C10L3RiycsDQoJ +dXNlcl9zZXR0aW5nc191bmtub3duX2Vycm9yIDogJ9Cd0LXQuNC30LLQtdGB0YLQ +vdCw0Y8g0L7RiNC40LHQutCwJywNCgkNCgkvLyDQmtCw0YDRgtCwINCx0LvQvtCz +0L7Qsg0KCWJsb2dfbWFwX2hlYWRlciA6ICfQpdCw0LHRgNCw0YXQsNCx0YAg4oCU +INCa0LDRgNGC0LAg0LHQu9C+0LPQvtCyJywNCglibG9nX2Vycm9yX25vX2JyYW5k +IDogJ9Cc0LDRgNC60LAg0L3QtSDQvdCw0LnQtNC10L3QsCcsDQoJYmxvZ19lcnJv +cl9ub19tb2RlbCA6ICfQnNC+0LTQtdC70Ywg0L3QtSDQvdCw0LnQtNC10L3QsCcs +DQoJYmxvZ19lcnJvcl9ub19ibG9nIDogJ9CR0LvQvtCzINC90LUg0L3QsNC50LTQ +tdC9JywNCgkNCgkvLyDQmtCw0YDRgtCwDQoJZ21hcF9oZWFkZXIgOiAn0KXQsNCx +0YDQsNGF0LDQsdGAIOKAlCDQmtCw0YDRgtGLJywNCglnbWFwX21hcmtlcl9hZGRf +c3VjY2VzcyA6ICfQntCx0YrQtdC60YIg0LTQvtCx0LDQstC70LXQvScsDQoJZ21h +cF9tYXJrZXJfYWRkX25vX21hcmtlciA6ICfQn9C+0LbQsNC70YPQudGB0YLQsCwg +0LrQu9C40LrQvdC40YLQtSDQvdCwINC60LDRgNGC0YMg0LTQu9GPINC00L7QsdCw +0LLQu9C10L3QuNGPINC+0LHRitC10LrRgtCwJywNCglnbWFwX3NlYXJjaF9wbGFj +ZV9ub19hZGRyZXNzX2Vycm9yIDogJ9Cf0L7QttCw0LvRg9C50YHRgtCwLCDRg9GC +0L7Rh9C90LjRgtC1LCDRh9GC0L4sINGB0L7QsdGB0YLQstC10L3QvdC+LCDQuNGB +0LrQsNGC0YwuJywNCgkNCgkvLyDQmNC30LHRgNCw0L3QvdC+0LUNCglmYXZvdXJp +dGVzX2hlYWRlciA6ICAn0KXQsNCx0YDQsNGF0LDQsdGAIOKAlCDQmNC30LHRgNCw +0L3QvdC+0LUnLA0KCWZhdm91cml0ZXNfcmVxdWVzdF9hZGQgOiAgJ9Cl0LDQsdGA +0LDRhdCw0LHRgCDigJQg0JLRiyDQv9C+0YHQu9Cw0LvQuCDQt9Cw0L/RgNC+0YEg +0L3QsCDQtNC+0LHQsNCy0LvQtdC90LjQtSDQv9C+0YHRgtCwINCyINC40LfQsdGA +0LDQvdC90L7QtScsDQoJZmF2b3VyaXRlc19yZXF1ZXN0X3JlbW92ZSA6ICAn0KXQ +sNCx0YDQsNGF0LDQsdGAIOKAlCDQktGLINC/0L7RgdC70LDQu9C4INC30LDQv9GA +0L7RgSDQvdCwINGD0LTQsNC70LXQvdC40LUg0L/QvtGB0YLQsCDQuNC3INC40LfQ +sdGA0LDQvdC90L7Qs9C+JywNCg0KCWZhdm91cml0ZXNfcmVxdWVzdF9wb3N0X2Fk +ZF9zdWNjZXNzIDogICfQpdCw0LHRgNCw0YXQsNCx0YAg4oCUINCS0Ysg0LTQvtCx +0LDQstC40LvQuCDQv9C+0YHRgiDQsiDQuNC30LHRgNCw0L3QvdC+0LUnLA0KCWZh +dm91cml0ZXNfcmVxdWVzdF9wb3N0X3JlbW92ZV9zdWNjZXNzIDogICfQpdCw0LHR +gNCw0YXQsNCx0YAg4oCUINCS0Ysg0YPQtNCw0LvQuNC70Lgg0L/QvtGB0YIg0LjQ +tyDQuNC30LHRgNCw0L3QvdC+0LPQvicsDQoJDQoJZmF2b3VyaXRlc19yZXF1ZXN0 +X2NvbW1lbnRfYWRkX3N1Y2Nlc3MgOiAgJ9Cl0LDQsdGA0LDRhdCw0LHRgCDigJQg +0JLRiyDQtNC+0LHQsNCy0LjQu9C4INC60L7QvNC80LXQvdGC0LDRgNC40Lkg0LIg +0LjQt9Cx0YDQsNC90L3QvtC1JywNCglmYXZvdXJpdGVzX3JlcXVlc3RfY29tbWVu +dF9yZW1vdmVfc3VjY2VzcyA6ICAn0KXQsNCx0YDQsNGF0LDQsdGAIOKAlCDQktGL +INGD0LTQsNC70LjQu9C4INC60L7QvNC80LXQvdGC0LDRgNC40Lkg0LjQtyDQuNC3 +0LHRgNCw0L3QvdC+0LPQvicsDQoNCgkvLyDQn9Cf0JANCglwcGFfaGVhZGVyIDog +J9Cf0J/QkCcsDQoJDQoJDQoJLy8g0JPQtdC+DQoJZ2VvX2hlYWRlciA6ICAn0KXQ +sNCx0YDQsNGF0LDQsdGAIOKAlCDQodGC0YDQsNC90YsnLA0KCQ0KCS8vIA0KCWNv +bXBhbmllc19oZWFkZXIgOiAgJ9Cl0LDQsdGA0LDRhdCw0LHRgCDigJQg0JrQvtC8 +0L/QsNC90LjQuCcsDQoJDQoJcG9sbF9oZWFkZXIgOiAn0KXQsNCx0YDQsNGF0LDQ +sdGAIOKAlCDQntC/0YDQvtGB0YsnLA0KCWZhaWx0dXJlIDogJ9Cl0LDQsdGA0LDR +hdCw0LHRgCDigJQg0J7RiNC40LHQutCwJywNCgkvLyBhamF4IGVycm9yDQoJYWph +eF9lcnJvciA6ICfQpdCw0LHRgNCw0YXQsNCx0YAg4oCUINCe0YjQuNCx0LrQsCBB +amF4LdC30LDQv9GA0L7RgdCwJw0KfTsNCgoKCgovKiAgIGdlbyAgICovCmdlb0hh +bmRsZXIgPSB7DQoJdXJsOiAnL2FqYXgvZ2VvLycsDQoJY2xhc3NOYW1lcyA6IHsN +CgkJYWxsSG9sZGVyOiAnanMtZ2VvX2Jsb2NrX2hvbGRlcicsDQoJCWNvdW50cnlI +b2xkZXI6ICdqcy1nZW9fY291bnRyeV9zZWxlY3RfaG9sZGVyJywNCgkJcmVnaW9u +SG9sZGVyOiAnanMtZ2VvX3JlZ2lvbl9zZWxlY3RfaG9sZGVyJywNCgkJY2l0eUhv +bGRlcjogJ2pzLWdlb19jaXR5X3NlbGVjdF9ob2xkZXInLA0KCQljb3VudHJ5U2Vs +ZWN0OiAnanMtZ2VvX2NvdW50cnlfc2VsZWN0JywNCgkJcmVnaW9uU2VsZWN0OiAn +anMtZ2VvX3JlZ2lvbl9zZWxlY3QnLA0KCQljaXR5U2VsZWN0OiAnanMtZ2VvX2Np +dHlfc2VsZWN0Jw0KCX0sDQoJeG1sOiB7DQoJCXJlc3BvbnNlTm9kZXM6IHsNCgkJ +CWVycm9yIDogJ2Vycm9yJywNCgkJCXJlc3VsdCA6ICdtZXNzYWdlJywNCgkJCXJl +Z2lvbiA6ICdyZWdpb24nLA0KCQkJY2l0eSA6ICdjaXR5Jw0KCQl9LA0KDQoJCXBh +cnNlOiBmdW5jdGlvbih4bWxPYmopew0KCQkJdmFyIHhtbE5vZGVzID0ge307DQoJ +CQlmb3IgKHByb3AgaW4gZ2VvSGFuZGxlci54bWwucmVzcG9uc2VOb2Rlcykgew0K +CQkJCXhtbE5vZGVzW3Byb3BdID0geG1sT2JqLmdldEVsZW1lbnRzQnlUYWdOYW1l +KGdlb0hhbmRsZXIueG1sLnJlc3BvbnNlTm9kZXNbcHJvcF0pOw0KCQkJfQ0KCQkJ +cmV0dXJuIHhtbE5vZGVzOw0KCQl9DQoJfSwNCgkNCglzZW5kRGF0YSA6IGZ1bmN0 +aW9uIChzZWxlY3Rfb2JqLCBzZW5kX3R5cGUsIGdldF90eXBlKSB7DQoJCQ0KCQl2 +YXIgYWxsSG9sZGVyID0gJChzZWxlY3Rfb2JqKS5nZXRQYXJlbnQoJy4nICsgZ2Vv +SGFuZGxlci5jbGFzc05hbWVzLmFsbEhvbGRlcik7DQoJCWlmIChzZWxlY3Rfb2Jq +LnZhbHVlID09ICcnKSB7DQoJCQlpZiAoZ2V0X3R5cGUgPT0gJ3JlZ2lvbnMnKSB7 +DQoJCQkJJChhbGxIb2xkZXIpLmdldEVsZW1lbnQoJy4nICsgZ2VvSGFuZGxlci5j +bGFzc05hbWVzLnJlZ2lvbkhvbGRlcikuYWRkQ2xhc3MoJ2hpZGRlbicpOw0KCQkJ +CSQoYWxsSG9sZGVyKS5nZXRFbGVtZW50KCcuJyArIGdlb0hhbmRsZXIuY2xhc3NO +YW1lcy5jaXR5SG9sZGVyKS5hZGRDbGFzcygnaGlkZGVuJyk7DQoJCQkJJChhbGxI +b2xkZXIpLmdldEVsZW1lbnQoJy4nICsgZ2VvSGFuZGxlci5jbGFzc05hbWVzLnJl +Z2lvblNlbGVjdCkuc2VsZWN0ZWRJbmRleCA9IDA7DQoJCQkJJChhbGxIb2xkZXIp +LmdldEVsZW1lbnQoJy4nICsgZ2VvSGFuZGxlci5jbGFzc05hbWVzLmNpdHlTZWxl +Y3QpLnNlbGVjdGVkSW5kZXggPSAwOw0KCQkJfSBlbHNlIGlmIChnZXRfdHlwZSA9 +PSAnY2l0aWVzJykgew0KCQkJCSQoYWxsSG9sZGVyKS5nZXRFbGVtZW50KCcuJyAr +IGdlb0hhbmRsZXIuY2xhc3NOYW1lcy5jaXR5SG9sZGVyKS5hZGRDbGFzcygnaGlk +ZGVuJyk7DQoJCQkJJChhbGxIb2xkZXIpLmdldEVsZW1lbnQoJy4nICsgZ2VvSGFu +ZGxlci5jbGFzc05hbWVzLmNpdHlTZWxlY3QpLnNlbGVjdGVkSW5kZXggPSAwOw0K +CQkJfQ0KCQkJDQoJCX0gZWxzZSB7DQoJCQl2YXIgZGF0YSA9IHNlbmRfdHlwZSAr +ICc9JyArIHNlbGVjdF9vYmoudmFsdWU7DQoJCQl2YXIgdXJsID0gJy9hamF4L2dl +by8nICsgZ2V0X3R5cGUgKyAnLyc7DQoJCQlhamF4TG9hZFBvc3QodXJsLCBkYXRh +LCBnZW9IYW5kbGVyLnNlbmREYXRhT25sb2FkLCB3aW5kb3csIHtzZWxlY3Rfb2Jq +OnNlbGVjdF9vYmosIHNlbmRfdHlwZTpzZW5kX3R5cGUsIGdldF90eXBlOmdldF90 +eXBlfSk7DQoJCX0NCgl9LA0KCQ0KCXNlbmREYXRhT25sb2FkIDogZnVuY3Rpb24o +YWpheE9iaiwgcGFyYW1zKSB7DQoJCWlmKGFqYXhPYmogJiYgYWpheE9iai5yZXNw +b25zZVhNTCl7DQoJCQl2YXIgeG1sT2JqID0gYWpheE9iai5yZXNwb25zZVhNTDsN +CgkJCXZhciB4bWxOb2RlcyA9IGdlb0hhbmRsZXIueG1sLnBhcnNlKHhtbE9iaik7 +DQoJCQlpZih4bWxOb2Rlcy5lcnJvciAmJiB4bWxOb2Rlcy5lcnJvci5sZW5ndGgp +ew0KCQkJCXZhciBlcnJvcnNfbGVuZ3RoID0geG1sTm9kZXMuZXJyb3IubGVuZ3Ro +Ow0KCQkJCWZvciAodmFyIGkgPSAwOyBpIDwgZXJyb3JzX2xlbmd0aDsgaSsrKSB7 +DQoJCQkJCWZ1dHVfYWxlcnQoRkFULmdlb19oZWFkZXIsIHhtbE5vZGVzLmVycm9y +W2ldLmZpcnN0Q2hpbGQuZGF0YSwgdHJ1ZSwgJ2Vycm9yJyk7DQoJCQkJfQ0KCQkJ +fQ0KCQkJaWYoeG1sTm9kZXMucmVzdWx0ICYmIHhtbE5vZGVzLnJlc3VsdC5sZW5n +dGgpIHsNCgkJCQlnZW9IYW5kbGVyLnNob3dSZXN1bHQoeG1sTm9kZXMsIHBhcmFt +cyk7DQoJCQl9DQoJCX0NCgl9LA0KCQ0KCXNob3dSZXN1bHQgOiBmdW5jdGlvbiAo +eG1sTm9kZXMsIHBhcmFtcykgew0KDQoJCXZhciBhbGxIb2xkZXIgPSAkKHBhcmFt +cy5zZWxlY3Rfb2JqKS5nZXRQYXJlbnQoJy4nICsgZ2VvSGFuZGxlci5jbGFzc05h +bWVzLmFsbEhvbGRlcik7DQogICAgICAgIA0KCQlpZiAocGFyYW1zLmdldF90eXBl +ID09ICdyZWdpb25zJykgew0KCQkJdmFyIHNlbGVjdFJlZ2lvbnMgPSAkKGFsbEhv +bGRlcikuZ2V0RWxlbWVudCgnLicgKyBnZW9IYW5kbGVyLmNsYXNzTmFtZXMucmVn +aW9uU2VsZWN0KTsNCgkJCXZhciBzZWxlY3RSZWdpb25zSG9sZGVyID0gJChhbGxI +b2xkZXIpLmdldEVsZW1lbnQoJy4nICsgZ2VvSGFuZGxlci5jbGFzc05hbWVzLnJl +Z2lvbkhvbGRlcik7DQoJCQkNCgkJCXZhciBjdXJPcHRpb25zID0gc2VsZWN0UmVn +aW9ucy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb3B0aW9uJyk7DQoJCQl2YXIgY3Vy +T3B0aW9uc0xlbmd0aCA9IGN1ck9wdGlvbnMubGVuZ3RoOw0KCQkJDQoJCQlmb3Ig +KHZhciBpID0gMTsgaSA8IGN1ck9wdGlvbnNMZW5ndGg7IGkrKykgew0KCQkJCXNl +bGVjdFJlZ2lvbnMucmVtb3ZlKDEpOw0KCQkJfQ0KCQkJDQoJCQlpZiAoeG1sTm9k +ZXMucmVnaW9uICYmIHhtbE5vZGVzLnJlZ2lvbi5sZW5ndGgpIHsNCgkJCQlsID0g +eG1sTm9kZXMucmVnaW9uLmxlbmd0aDsNCgkJCQlmb3IgKHZhciBpID0gMDsgaSA8 +IGw7IGkrKykgew0KCQkJCQl2YXIgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxl +bWVudCgnb3B0aW9uJyk7DQoJCQkJCW9wdGlvbi52YWx1ZSA9IHhtbE5vZGVzLnJl +Z2lvbltpXS5nZXRBdHRyaWJ1dGUoJ2lkJyk7DQoJCQkJCW9wdGlvbi5pbm5lckhU +TUwgPSB4bWxOb2Rlcy5yZWdpb25baV0uZmlyc3RDaGlsZC5kYXRhOw0KCQkJCQlz +ZWxlY3RSZWdpb25zLmFwcGVuZENoaWxkKG9wdGlvbik7DQoJCQkJCSQoc2VsZWN0 +UmVnaW9ucykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpOw0KCQkJCQkkKHNlbGVjdFJl +Z2lvbnNIb2xkZXIpLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTsNCgkJCQl9DQoJCQkJ +JChhbGxIb2xkZXIpLmdldEVsZW1lbnQoJy4nICsgZ2VvSGFuZGxlci5jbGFzc05h +bWVzLmNpdHlIb2xkZXIpLmFkZENsYXNzKCdoaWRkZW4nKTsNCgkJCQkkKGFsbEhv +bGRlcikuZ2V0RWxlbWVudCgnLicgKyBnZW9IYW5kbGVyLmNsYXNzTmFtZXMuY2l0 +eVNlbGVjdCkuc2VsZWN0ZWRJbmRleCA9IDA7DQoJCQl9DQoJCQkNCgkJfSBlbHNl +IGlmIChwYXJhbXMuZ2V0X3R5cGUgPT0gJ2NpdGllcycpIHsNCgkJCXZhciBzZWxl +Y3RDaXRpZXMgPSAkKGFsbEhvbGRlcikuZ2V0RWxlbWVudCgnLicgKyBnZW9IYW5k +bGVyLmNsYXNzTmFtZXMuY2l0eVNlbGVjdCk7DQoJCQl2YXIgc2VsZWN0Q2l0aWVz +SG9sZGVyID0gJChhbGxIb2xkZXIpLmdldEVsZW1lbnQoJy4nICsgZ2VvSGFuZGxl +ci5jbGFzc05hbWVzLmNpdHlIb2xkZXIpOw0KCQkJDQoJCQl2YXIgY3VyT3B0aW9u +cyA9IHNlbGVjdENpdGllcy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb3B0aW9uJyk7 +DQoJCQl2YXIgY3VyT3B0aW9uc0xlbmd0aCA9IGN1ck9wdGlvbnMubGVuZ3RoOw0K +CQkJDQoJCQlmb3IgKHZhciBpID0gMTsgaSA8IGN1ck9wdGlvbnNMZW5ndGg7IGkr +Kykgew0KCQkJCXNlbGVjdENpdGllcy5yZW1vdmUoMSk7DQoJCQl9DQoJCQlpZiAo +eG1sTm9kZXMuY2l0eSAmJiB4bWxOb2Rlcy5jaXR5Lmxlbmd0aCkgew0KCQkJCWwg +PSB4bWxOb2Rlcy5jaXR5Lmxlbmd0aDsNCgkJCQlmb3IgKHZhciBpID0gMDsgaSA8 +IGw7IGkrKykgew0KCQkJCQl2YXIgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxl +bWVudCgnb3B0aW9uJyk7DQoJCQkJCW9wdGlvbi52YWx1ZSA9IHhtbE5vZGVzLmNp +dHlbaV0uZ2V0QXR0cmlidXRlKCdpZCcpOw0KCQkJCQlvcHRpb24uaW5uZXJIVE1M +ID0geG1sTm9kZXMuY2l0eVtpXS5maXJzdENoaWxkLmRhdGE7DQoJCQkJCXNlbGVj +dENpdGllcy5hcHBlbmRDaGlsZChvcHRpb24pOw0KCQkJCQkkKHNlbGVjdENpdGll +cykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpOw0KCQkJCQkkKHNlbGVjdENpdGllc0hv +bGRlcikucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpOw0KCQkJCX0NCgkJCX0NCgkJfQ0K +CX0NCn07CgoKCi8qICAgYWpheEZvcm0gICAqLwovKg0KCWFqYXhGb3JtQ2xhc3MN +CgnQkdCw0LfQvtCy0YvQuSDQutC70LDRgdGBLCDQvdC1INC/0YDQuNC80LXQvdGP +0Y7RidC40LnRgdGPINGB0LDQvNC+0YHRgtC+0Y/RgtC10LvRjNC90L4gKNC+0YIg +0L3QtdCz0L4g0YPQttC1INC90LDRgdC70LXQtNGD0Y7RgiDQv9C+0LTQutC70LDR +gdGB0YssINC+0LHRgdC70YPQttC40LLQsNGO0YnQuNC1INC60L7QvdC60YDQtdGC +0L3Ri9C1INGE0L7RgNC80YspDQoNCiovDQp2YXIgYWpheEZvcm1DbGFzcyA9IGZ1 +bmN0aW9uKCl7DQoNCgkvLyDQstC+0LfQvNC+0LbQvdGL0LUgdXJsICjQt9Cw0LTQ +sNGO0YLRgdGPINGB0LLQvtC40Lwg0LrQvtC90LrRgNC10YLQvdGL0Lwg0L/QvtC0 +0LrQu9Cw0YHRgdC+0LwpDQoJLy8g0L/RgNC4INC+0YLQv9GA0LDQstC60LUg0LTQ +sNC90L3Ri9GFINC90LAg0YHQtdGA0LLQtdGAINC90LAg0YTQvtGA0LzRgyDQvdCw +0LLQtdGI0LjQstCw0Y7RgtGB0Y8g0LDQvdCw0LvQvtCz0LjRh9C90YvQtSDQutC7 +0LDRgdGB0Ys6DQoJLy8gc2F2ZS1sb2FkaW5nLCBwcmV2aWV3LWxvYWRpbmcsIGRy +YWZ0LWxvYWRpbmcNCgl0aGlzLmFqYXhVcmxzID0gew0KCQlzYXZlOiAnJyAvLyDR +gdC+0YXRgNCw0L3QtdC90LjQtSDQv9C+0YHRgtCwDQoJCS8vcHJldmlldzogJycs +IC8vINC/0YDQtdC00L/RgNC+0YHQvNC+0YLRgA0KCQkvL2RyYWZ0OiAnJywgLy8g +0LIg0YfQtdGA0L3QvtCy0LjQutC4DQoJCS8vYXV0b3NhdmU6ICcnIC8vINCyINCw +0LLRgtC+0YHRjdC50LINCgl9Ow0KDQoJLy8g0JjQvNC10L3QsCB4bWwg0L3QvtC0 +0L7QsiDQuCDRgdC+0L7RgtCy0LXRgdGC0LLRg9GO0YnQuNC1INC40Lwg0LjQvNC1 +0L3QsCDRhNGD0L3QutGG0LjQuS3QvtCx0YDQsNCx0L7RgtGH0LjQutC+0LINCgl0 +aGlzLnhtbFJlc3BvbnNlID0gew0KCQltZXNzYWdlOiB7DQoJCQlub2RlOiAnbWVz +c2FnZScsDQoJCQloYW5kbGVyOiBudWxsDQoJCX0sDQoNCgkJZXJyb3I6IHsNCgkJ +CW5vZGU6ICdlcnJvcicsDQoJCQloYW5kbGVyOiAneG1sUmVzcG9uc2VIYW5kbGVy +X2Vycm9yJw0KCQl9LA0KDQoJCXJlZGlyZWN0OiB7DQoJCQlub2RlOiAncmVkaXJl +Y3RfdXJsJywNCgkJCWhhbmRsZXI6ICd4bWxSZXNwb25zZUhhbmRsZXJfcmVkaXJl +Y3QnDQoJCX0NCgl9Ow0KDQoJLy8g0JjRgdC/0L7Qu9GM0LfRg9C10LzRi9C1INCy +INGE0L7RgNC80LUgY2xhc3NOYW1lcw0KCXRoaXMuY2xhc3NOYW1lcyA9IHsNCgkJ +ZmllbGRIb2xkZXI6ICdqcy1maWVsZC1ob2xkZXInLCAvLyDQutC+0L3RgtC10LnQ +vdC10YAt0YDQvtC00LjRgtC10LvRjCDQv9C+0LvRjyDRhNC+0YDQvNGLINC4INC+ +0YjQuNCx0LrQuA0KCQlmaWVsZERhdGE6ICdqcy1maWVsZC1kYXRhJywgLy8g0L/Q +vtC70LUg0YTQvtGA0LzRiywg0LrQvtGC0L7RgNC+0LUg0L3Rg9C20L3QviDRgdC1 +0YDQuNCw0LvQuNC30L7QstCw0YLRjA0KCQlmaWVsZEVycm9yTXNnQm94OiAnanMt +ZmllbGQtZXJyb3ItbXNnJywgLy8g0LrQvtC90YLQtdC50L3QtdGAINC00LvRjyDQ +stGL0LLQvtC00LAg0YHQvtC+0LHRidC10L3QuNGPINC+0LEg0L7RiNC40LHQutC1 +DQoJCWZpZWxkTWFya2VkRXJyb3I6ICdqcy1tYXJrZWQtZXJyb3InLCAvLyDQv9C+ +0LzQtdGH0LDQtdC8INC60L7QvdGC0LXQudC90LXRgCwg0LXRgdC70Lgg0LIg0L/Q +vtC70LUgLSDQvtGI0LjQsdC60LANCgkJZmllbGRNYXJrZWRDaGVja2VkOiAnanMt +bWFya2VkLWNoZWNrZWQnLCAvLyDQv9C+0LzQtdGH0LDQtdC8INC60L7QvdGC0LXQ +udC90LXRgCwg0LXRgdC70Lgg0L/QvtC70LUg0L/RgNC+0YjQu9C+INC/0YDQvtCy +0LXRgNC60YMNCgkJZmllbGRJc1JlcXVpcmVkOiAnanMtcmVxdWlyZWQnLCAvLyDQ +v9C+0LvQtSwg0L7QsdGP0LfQsNGC0LXQu9GM0L3QvtC1INC00LvRjyDQt9Cw0L/Q +vtC70L3QtdC90LjRjyANCgkJZmllbGRQYXNzXzE6ICdqcy1wYXNzLWZpZWxkLW1h +aW4nLCAvLyDQv9C+0LvQtSDRgSDQvtGB0L3QvtCy0L3Ri9C8INC/0LDRgNC+0LvQ +tdC8DQoJCWZpZWxkUGFzc18yOiAnanMtcGFzcy1maWVsZC1yZXBlYXQnLCAvLyDQ +v9C+0LvQtSDRgSDQv9C+0LLRgtC+0YDQvtC8INC/0LDRgNC+0LvRjw0KCQlpc0xv +YWRpbmc6ICdsb2FkaW5nJywgLy8g0L/RgNC10LvQvtCw0LTQtdGADQoJCXVua25v +d25FcnJvckhvbGRlcjogJ2pzLXVua25vd24tZXJyb3ItaG9sZGVyJywgLy8g0LTQ +tdGA0LbQsNGC0LXQu9GMINCy0YvQstC+0LTQsCDQvdC10L7Qv9C+0LfQvdCw0L3Q +vdC+0Lkg0L7RiNC40LHQutC4DQoJCXVua25vd25FcnJvck1zZzogJ2pzLXVua25v +d24tZXJyb3ItbXNnJyAvLyDRgdCw0LzQviDQv9C+0LvQtSDQvdC10L7Qv9C+0LfQ +vdCw0L3QvdC+0Lkg0L7RiNC40LHQutC4DQoJfTsNCg0KCS8vINCS0YvQstC+0LTQ +uNC80YvQtSDQutC70LjQtdC90YLQvtC8INGB0L7QvtCx0YnQtdC90LjRjyDQvtCx +INC+0YjQuNCx0LrQsNGFDQoJdGhpcy5lcnJvck1lc3NhZ2VzID0gew0KCQlmaWVs +ZElzRW1wdHk6ICfQndC10L7QsdGF0L7QtNC40LzQviDQt9Cw0L/QvtC70L3QuNGC +0Ywg0Y3RgtC+INC/0L7Qu9C1JywNCgkJaW5wdXRJc0luY29ycmVjdDogJ9CS0Ysg +0LLQstC10LvQuCDQvdC10LTQvtC/0YPRgdGC0LjQvNGL0Lkg0YHQuNC80LLQvtC7 +JywNCgkJaW5wdXRJc0luc3VmZmljaWVudDogJ9CS0Ysg0LLQstC10LvQuCDQvdC1 +0LTQvtGB0YLQsNGC0L7Rh9C90L4g0YHQuNC80LLQvtC70L7QsicsDQoJCWVtYWls +SXNJbmNvcnJlY3Q6ICfQktGLINCy0LLQtdC70Lgg0L3QtdC00L7Qv9GD0YHRgtC4 +0LzRi9C5IGVtYWlsJywNCgkJdXJsSXNJbmNvcnJlY3Q6ICfQktGLINCy0LLQtdC7 +0Lgg0L3QtdC00L7Qv9GD0YHRgtC40LzRi9C5IHVybCcsDQoJCWlucHV0Q2hhcnNO +dW1iZXJJc0luY29ycmVjdDogJ9CS0Ysg0LLQstC10LvQuCDQvdC10LLQtdGA0L3Q +vtC1INGH0LjRgdC70L4g0LHRg9C60LInLA0KCQlwYXNzd29yZElzU2hvcnQ6ICfQ +n9Cw0YDQvtC70Ywg0YHQu9C40YjQutC+0Lwg0LrQvtGA0L7RgtC60LjQuScsDQoJ +CXBhc3N3b3Jkc0FyZU5vdEVxdWFsOiAn0J/QsNGA0L7Qu9C4INC90LUg0YHQvtCy +0L/QsNC00LDRjtGCJywNCgkJdW5rbm93bkVycm9yOiAn0J3QtdC+0L/QvtC30L3Q +sNC90L3QsNGPINC+0YjQuNCx0LrQsCcgLy8g0J/Rg9GB0YLQvtC1INGB0L7QvtCx +0YnQtdC90LjQtSDQvtCxINC+0YjQuNCx0LrQtQ0KCX07DQoNCn07DQoNCg0KT2Jq +ZWN0LmV4dGVuZE9iamVjdCgNCglhamF4Rm9ybUNsYXNzLnByb3RvdHlwZSwgew0K +DQoJLy8J0J/QtdGA0LXQutC70Y7Rh9C10L3QuNC1INC80LXQttC00YMg0YTQvtGA +0LzQsNC80Lgg0L3QsCDRgdGC0YDQsNC90LjRhtC1DQoJc3dpdGNoRm9ybTogZnVu +Y3Rpb24obGluayl7DQoJCQkkKCdyZWctd3JhcHBlcicpLmNsYXNzTmFtZSA9IGxp +bmsuY2xhc3NOYW1lOw0KCQkJcmV0dXJuIGZhbHNlOw0KCX0sDQoNCg0KCS8vINCf +0LXRgNC10LLQvtC00LjQvCB4bWwg0LTQtdGA0LXQstC+INCyINC+0LHRitC10LrR +gg0KCXBhcnNlWE1MOiBmdW5jdGlvbih4bWxPYmopew0KCQkJdmFyIHhtbE5vZGVz +ID0ge307DQoJCQlmb3IgKHByb3AgaW4gdGhpcy54bWxSZXNwb25zZSl7DQoJCQkJ +eG1sTm9kZXNbcHJvcF0gPSB4bWxPYmouZ2V0RWxlbWVudHNCeVRhZ05hbWUodGhp +cy54bWxSZXNwb25zZVtwcm9wXS5ub2RlKTsNCgkJCX0NCgkJCXJldHVybiB4bWxO +b2RlczsNCgl9LA0KDQoNCgkvLyDQktC+0LfQstGA0LDRidCw0LXRgiDQsdC70L7Q +uiDQstGL0LLQvtC00LAg0L7RiNC40LHQutC4INC00LvRjyDQtNCw0L3QvdC+0LPQ +viDQv9C+0LvRjyDRhNC+0YDQvNGLDQoJZ2V0RXJyb3JNc2dCb3hCeUZpZWxkOiBm +dW5jdGlvbihmaWVsZCl7DQoJCQl2YXIgZmllbGRIb2xkZXIgPSAkKGZpZWxkKS5n +ZXRQYXJlbnQoJy4nICsgdGhpcy5jbGFzc05hbWVzLmZpZWxkSG9sZGVyKTsNCgkJ +CWlmKGZpZWxkSG9sZGVyKXsNCgkJCQl2YXIgZXJyb3JNc2dCb3hlcyA9ICQoZmll +bGRIb2xkZXIpLmdldEVsZW1lbnRzKCcuJyArIHRoaXMuY2xhc3NOYW1lcy5maWVs +ZEVycm9yTXNnQm94KTsNCgkJCQlpZihlcnJvck1zZ0JveGVzICYmIGVycm9yTXNn +Qm94ZXMubGVuZ3RoKXsNCgkJCQkJcmV0dXJuIGVycm9yTXNnQm94ZXNbMF07DQoJ +CQkJfSANCgkJCX1lbHNlIHsNCgkJCQlyZXR1cm4gbnVsbDsNCgkJCX0NCgl9LA0K +DQoNCgkvLyANCgljb21wbGV0ZUZvcm06IGZ1bmN0aW9uKHJlZGlyZWN0VXJsKXsN +CgkJCWlmKHJlZGlyZWN0VXJsKXsNCgkJCQl3aW5kb3cubG9jYXRpb24uaHJlZiA9 +IHJlZGlyZWN0VXJsOw0KCQkJfSBlbHNlIHsNCgkJCQl3aW5kb3cubG9jYXRpb24u +aHJlZiA9ICIvIjsNCgkJCX0NCgl9LA0KDQoNCgkvLwnQn9GA0L7QstC10YDQutCw +INC30LDQv9C+0LvQvdC10L3QvdC+0YHRgtC4INGE0L7RgNC80Ysg0Lgg0L7RgtGB +0YPRgtGB0LLQuNGPINC+0YjQuNCx0L7QuiAo0YHQtNC10LvQsNGC0YwgY2xhc3NO +YW1lPSdyZXF1aXJlZCcg0LTQu9GPINC/0L7Qu9C10LkpDQoJY2hlY2tGb3JtQ29t +cGxpdGlvbjogZnVuY3Rpb24oZm9ybSl7DQoJCQl2YXIgZm9ybUlzQ29tcGxpdGVk +ID0gdHJ1ZTsgDQoJCQl2YXIgZGF0YXMgPSAkKGZvcm0pLmdldEVsZW1lbnRzKCcu +JyArIHRoaXMuY2xhc3NOYW1lcy5maWVsZERhdGEpOw0KDQoJCQlmb3IgKHZhciBp +PTAsIGxlbmd0aD1kYXRhcy5sZW5ndGg7IGk8bGVuZ3RoOyBpKyspew0KCQkJCQ0K +CQkJCQ0KCQkJCXZhciBmaWVsZEhvbGRlciA9ICQoZGF0YXNbaV0pLmdldFBhcmVu +dCgnLicgKyB0aGlzLmNsYXNzTmFtZXMuZmllbGRIb2xkZXIpOw0KCQkJCQ0KCQkJ +CWlmICgNCgkJCQkJCShkYXRhc1tpXS52YWx1ZSA9PSAnJyAmJiAvLyDQv9GD0YHR +gtC+0LUg0L7QsdGP0LfQsNGC0LXQu9GM0L3QvtC1INC/0L7Qu9C1DQoJCQkJCQkJ +JChkYXRhc1tpXSkuaGFzQ2xhc3ModGhpcy5jbGFzc05hbWVzLmZpZWxkSXNSZXF1 +aXJlZCkpIHx8DQoJCQkJCQkNCgkJCQkJCShkYXRhc1tpXS5nZXRBdHRyaWJ1dGUo +J3R5cGUnKSA9PSAnY2hlY2tib3gnICYmIC8vINC+0LHRj9C30LDRgtC10LvRjNC9 +0YvQuSDRh9C10LrQsdC+0LrRgQ0KCQkJCQkJCSQoZGF0YXNbaV0pLmhhc0NsYXNz +KHRoaXMuY2xhc3NOYW1lcy5maWVsZElzUmVxdWlyZWQpICYmDQoJCQkJCQkJIWRh +dGFzW2ldLmNoZWNrZWQpDQoJCQkJCSl7DQoJCQkJCWZvcm1Jc0NvbXBsaXRlZCA9 +IGZhbHNlOw0KCQkJCQl0aGlzLm1hcmtGaWVsZF9lcnJvcihkYXRhc1tpXSwgdGhp +cy5lcnJvck1lc3NhZ2VzLmZpZWxkSXNFbXB0eSk7DQoNCgkJCQl9IGVsc2UgaWYo +DQoJCQkJCQkoZmllbGRIb2xkZXIgJiYgLy8g0L/QvtC70LUg0YEg0L3QtdC40YHQ +v9GA0LDQstC70LXQvdC90L7QuSDQvtGI0LjQsdC60L7QuQ0KCQkJCQkJCSQoZmll +bGRIb2xkZXIpLmhhc0NsYXNzKHRoaXMuY2xhc3NOYW1lcy5maWVsZE1hcmtlZEVy +cm9yKSkNCgkJCQkJKXsNCgkJCQkJdmFyIGVycm9yTXNnQm94ID0gdGhpcy5nZXRF +cnJvck1zZ0JveEJ5RmllbGQoZGF0YXNbaV0pOw0KCQkJCQlpZiAoZXJyb3JNc2dC +b3gpIHsNCgkJCQkJCWVycm9yTXNnQm94LmlubmVySFRNTCA9ICcnOw0KCQkJCQl9 +DQoJDQoJCQkJCXRoaXMubWFya0ZpZWxkX2NsZWFyKGRhdGFzW2ldKTsNCgkJCQl9 +DQoJCQl9DQoJCQlyZXR1cm4gZm9ybUlzQ29tcGxpdGVkOw0KCX0sDQoNCgkvLyDQ +odC10YDQuNCw0LvQuNC30LDRhtC40Y8g0L/QvtC70LXQuSDRhNC+0YDQvNGLDQoJ +c2VyaWFsaXplRm9ybTogZnVuY3Rpb24oZm9ybSl7DQoJCQl2YXIgZGF0YSA9ICcn +Ow0KCQkJDQoJCQl2YXIgZGF0YXMgPSAkKGZvcm0pLmdldEVsZW1lbnRzKCcuJyAr +IHRoaXMuY2xhc3NOYW1lcy5maWVsZERhdGEpOw0KCQkJZm9yICh2YXIgaT0wLCBs +ZW5ndGg9ZGF0YXMubGVuZ3RoOyBpPGxlbmd0aDsgaSsrKXsNCgkJCQl2YXIgdHlw +ZSA9IGRhdGFzW2ldLmdldEF0dHJpYnV0ZSgndHlwZScpOw0KCQkJCXZhciBwYXJh +bSA9IGRhdGFzW2ldLmdldEF0dHJpYnV0ZSgnbmFtZScpOw0KCQkJCXZhciB2YWx1 +ZSA9IGRhdGFzW2ldLnZhbHVlOw0KDQoJCQkJaWYodHlwZSA9PSAncmFkaW8nICYm +ICFkYXRhc1tpXS5jaGVja2VkKXsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0KDQoJ +CQkJaWYodHlwZSA9PSAnY2hlY2tib3gnKXsNCgkJCQkJdmFsdWUgPSBkYXRhc1tp +XS5jaGVja2VkID8gdHJ1ZSA6IGZhbHNlOw0KCQkJCX0gZWxzZSB7DQoJCQkJCXZh +bHVlID0gZGF0YXNbaV0udmFsdWU7DQoJCQkJfQ0KCQkJCWRhdGEgKz0gKGkhPTAg +PyAnJicgOiAnJykgKyBwYXJhbSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2 +YWx1ZSk7DQoJCQl9DQoJCQlyZXR1cm4gZGF0YTsNCgl9LA0KCQ0KCS8vINCh0LXR +gNC40LDQu9C40LfQsNGG0LjRjyDQv9C+0LvQtdC5INGE0L7RgNC80YsNCgljbGFz +c2ljU2VyaWFsaXplRm9ybTogZnVuY3Rpb24oZm9ybSl7DQoJCQl2YXIgZGF0YSA9 +ICcnOw0KCQkJDQoJCQl2YXIgZGF0YXMgPSAkKGZvcm0pLmdldEVsZW1lbnRzKCcu +JyArIHRoaXMuY2xhc3NOYW1lcy5maWVsZERhdGEpOw0KCQkJZm9yICh2YXIgaT0w +LCBsZW5ndGg9ZGF0YXMubGVuZ3RoOyBpPGxlbmd0aDsgaSsrKXsNCgkJCQl2YXIg +dHlwZSA9IGRhdGFzW2ldLmdldEF0dHJpYnV0ZSgndHlwZScpOw0KCQkJCXZhciBw +YXJhbSA9IGRhdGFzW2ldLmdldEF0dHJpYnV0ZSgnbmFtZScpOw0KCQkJCXZhciB2 +YWx1ZSA9IGRhdGFzW2ldLnZhbHVlOw0KDQoJCQkJaWYodHlwZSA9PSAncmFkaW8n +ICYmICFkYXRhc1tpXS5jaGVja2VkKXsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0K +DQoJCQkJaWYodHlwZSA9PSAnY2hlY2tib3gnICYmICFkYXRhc1tpXS5jaGVja2Vk +KXsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0KCQkJCWRhdGEgKz0gKGRhdGEhPScn +ID8gJyYnIDogJycpICsgcGFyYW0gKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQo +dmFsdWUpOw0KCQkJfQ0KCQkJcmV0dXJuIGRhdGE7DQoJfSwNCg0KCS8vINCh0LXR +gNC40LDQu9C40LfQsNGG0LjRjyDQv9C+0LvQtdC5INGE0L7RgNC80YsNCglyZWFs +U2VyaWFsaXplRm9ybTogZnVuY3Rpb24oZm9ybSl7DQoJCQl2YXIgZGF0YSA9ICcn +Ow0KCQkJDQoJCQl2YXIgZGF0YXMgPSBmb3JtLmVsZW1lbnRzOw0KCQkJZm9yICh2 +YXIgaT0wLCBsZW5ndGg9ZGF0YXMubGVuZ3RoOyBpPGxlbmd0aDsgaSsrKXsNCgkJ +CQl2YXIgdHlwZSA9IGRhdGFzW2ldLmdldEF0dHJpYnV0ZSgndHlwZScpOw0KCQkJ +CXZhciBwYXJhbSA9IGRhdGFzW2ldLmdldEF0dHJpYnV0ZSgnbmFtZScpOw0KCQkJ +CXZhciB2YWx1ZSA9IGRhdGFzW2ldLnZhbHVlOw0KDQoJCQkJaWYodHlwZSA9PSAn +cmFkaW8nICYmICFkYXRhc1tpXS5jaGVja2VkKXsNCgkJCQkJY29udGludWU7DQoJ +CQkJfQ0KDQoJCQkJaWYodHlwZSA9PSAnY2hlY2tib3gnICYmICFkYXRhc1tpXS5j +aGVja2VkKXsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0KCQkJCWRhdGEgKz0gKGRh +dGEhPScnID8gJyYnIDogJycpICsgcGFyYW0gKyAnPScgKyBlbmNvZGVVUklDb21w +b25lbnQodmFsdWUpOw0KCQkJfQ0KCQkJcmV0dXJuIGRhdGE7DQoJfSwNCg0KDQoJ +Ly8g0J7RgtC/0YDQsNCy0LrQsCDQstGB0LXRhSDQv9C+0LvQtdC5INGE0L7RgNC8 +0Ysg0L3QsCDRgdC10YDQstC10YANCgkvLyBzdWJtaXRUeXBlIC0g0L3QtdC+0LHR +j9C30LDRgtC10LvRjNC90YvQuSDQv9Cw0YDQsNC80LXRgtGADQoJLy8gZkNoZWNr +Rm9ybUNvbXBsaXRpb24gLSDQvdC10L7QsdGP0LfQsNGC0LXQu9GM0L3Ri9C5INC/ +0LDRgNCw0LzQtdGC0YAgKNGB0LLQvtGPINGE0YPQvdC60YbQuNGPINC/0YDQvtCy +0LXRgNC60Lgg0YTQvtGA0LzRiyDQvdCwINC30LDQv9C+0LvQvdC10L3QvdC+0YHR +gtGMKQ0KCS8vCQlmQ2hlY2tGb3JtQ29tcGxpdGlvbiA9PSBmKCl7fSAo0L3QtSDQ +vdCw0LTQviDQv9GA0L7QstC10YDRj9GC0YwpDQoJLy8JCWZDaGVja0Zvcm1Db21w +bGl0aW9uID09IGZhbHNlINC40LvQuCBmQ2hlY2tGb3JtQ29tcGxpdGlvbiA9PSB1 +bmRlZmluZWQgKNC90LDQtNC+INC/0YDQvtCy0LXRgNGP0YLRjCkNCglzZW5kRGF0 +YTogZnVuY3Rpb24gKGZvcm0sIHN1Ym1pdFR5cGUsIGZDaGVja0Zvcm1Db21wbGl0 +aW9uLCBjbGFzc2ljU2VyaWFsaXplKXsNCgkJCS8vINCf0YDQvtCy0LXRgNC60LAg +0L3QsCDQt9Cw0L/QvtC70L3QtdC90L3QvtGB0YLRjCDQstGB0LXRhSDQv9C+0LvQ +tdC5INC4INC90LAg0LjRhSDQstCw0LvQuNC00L3QvtGB0YLRjA0KCQkJaWYoIWZD +aGVja0Zvcm1Db21wbGl0aW9uICYmICF0aGlzLmNoZWNrRm9ybUNvbXBsaXRpb24o +Zm9ybSkpIHsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9IGVsc2UgaWYoZkNoZWNr +Rm9ybUNvbXBsaXRpb24gJiYgIWZDaGVja0Zvcm1Db21wbGl0aW9uKGZvcm0pKXsN +CgkJCQlhbGVydCgnZmFsc2UnKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoN +CgkJCS8vINCX0LDQtNCw0LXQvCDQutC70LDRgdGB0L3QtdC50LwsINC+0L/RgNC1 +0LTQtdC70Y/RjtGJ0LjQuSwg0YfRgtC+INC40LzQtdC90L3QviDQs9GA0YPQt9C4 +0YLRgdGPINCyINC00LDQvdC90YvQuSDQvNC+0LzQtdC90YINCgkJCXZhciBsb2Fk +aW5nQ2xhc3NOYW1lID0gKHN1Ym1pdFR5cGUgfHwgJ3NhdmUnKSArICctJyArIHRo +aXMuY2xhc3NOYW1lcy5pc0xvYWRpbmc7DQoNCgkJCS8vINCf0YDQvtCy0LXRgNC6 +0LAg0YLQvtCz0L4sINGH0YLQviDRhNC+0YDQvNCwINC90LUg0L7QsdGA0LDQsdCw +0YLRi9Cy0LDQtdGCINGD0LbQtSDRgtC+0LPQviwg0YfRgtC+INC80Ysg0LfQsNC/ +0YDQvtGB0LjQu9C4INCyINC00LDQvdC90YvQuSDQvNC+0LzQtdC90YINCgkJCWlm +KCQoZm9ybSkuaGFzQ2xhc3MobG9hZGluZ0NsYXNzTmFtZSkpew0KCQkJCXJldHVy +biBmYWxzZTsNCgkJCX0NCgkJCQ0KCQkJLy8g0LXRgdC70Lggc3VibWl0VHlwZSDQ +vdC1INC/0LXRgNC10LTQsNC9LCDRgtC+INC40YHQv9C+0LvRjNC30YPQtdC8IHRo +aXMuYWpheFVybHMuc2F2ZQ0KCQkJdmFyIHVybCA9IHRoaXMuYWpheFVybHNbc3Vi +bWl0VHlwZV0gfHwgdGhpcy5hamF4VXJscy5zYXZlOw0KCQkJDQoJCQlpZiAoIWNs +YXNzaWNTZXJpYWxpemUpIHsNCgkJCQl2YXIgZGF0YSA9IHRoaXMuc2VyaWFsaXpl +Rm9ybShmb3JtKTsNCgkJCX0gZWxzZSB7DQoJCQkJdmFyIGRhdGEgPSB0aGlzLmNs +YXNzaWNTZXJpYWxpemVGb3JtKGZvcm0pOw0KCQkJfQ0KDQoJCQl2YXIgcGFyYW1z +ID0gew0KCQkJCWZvcm06IGZvcm0sDQoJCQkJbG9hZGluZ0NsYXNzTmFtZTogbG9h +ZGluZ0NsYXNzTmFtZQ0KCQkJfTsNCg0KCQkJJChmb3JtKS5hZGRDbGFzcyhsb2Fk +aW5nQ2xhc3NOYW1lKTsNCgkJCQ0KCQkJYWpheFBvc3QoDQoJCQkJdXJsLA0KCQkJ +CWRhdGEsDQoJCQkJdGhpcy5zZW5kRGF0YU9ubG9hZCwNCgkJCQlwYXJhbXMsDQoJ +CQkJdGhpcyk7DQoJCQkNCgkJCXRoaXMuX2Zvcm0gPSAkKGZvcm0pOw0KCQkJcmV0 +dXJuIGZhbHNlOw0KCX0sDQoNCg0KCS8vINCn0YLQtdC90LjQtSDQvtGC0LLQtdGC +0LAg0YHQtdGA0LLQtdGA0LAg0L3QsCDQv9C10YDQtdGB0YvQu9C60YMgINCy0YHQ +tdGFINC00LDQvdC90YvRhSDRhNC+0YDQvNGLINC4INC+0LHRgNCw0LHQvtGC0LrQ +sCDQstGL0LTQsNC90L3Ri9GFINC+0YjQuNCx0L7Qug0KCXNlbmREYXRhT25sb2Fk +OiBmdW5jdGlvbiAoYWpheE9iaiwgcGFyYW1zKXsNCg0KCQkJaWYgKHRoaXMuX2Zv +cm0pIHRoaXMuX2Zvcm0ucmVtb3ZlQ2xhc3MocGFyYW1zLmxvYWRpbmdDbGFzc05h +bWUpOw0KCQkJaWYoYWpheE9iaiAmJiBhamF4T2JqLnJlc3BvbnNlWE1MKXsNCgkJ +CQl2YXIgeG1sT2JqID0gYWpheE9iai5yZXNwb25zZVhNTDsNCgkJCQl2YXIgeG1s +Tm9kZXMgPSB0aGlzLnBhcnNlWE1MKHhtbE9iaik7DQoNCgkJCQlmb3IgKHByb3Ag +aW4geG1sTm9kZXMpew0KCQkJCQlpZih0aGlzW3RoaXMueG1sUmVzcG9uc2VbcHJv +cF0uaGFuZGxlcl0pIHsNCgkJCQkJCXRoaXNbdGhpcy54bWxSZXNwb25zZVtwcm9w +XS5oYW5kbGVyXSh4bWxOb2RlcywgcGFyYW1zKTsNCgkJCQkJfQ0KCQkJCX0NCgkJ +CX0NCgl9LA0KDQoJLy8g0J7QsdGA0LDQsdC+0YLRh9C40Log0L7RgtCy0LXRgtCw +INGB0LXRgNCy0LXRgNCwINC/0YDQuCDQv9C+0LvRg9GH0LXQvdC40Lgg0L7RiNC4 +0LHQutC4DQoJeG1sUmVzcG9uc2VIYW5kbGVyX2Vycm9yOiBmdW5jdGlvbih4bWxO +b2RlcywgcGFyYW1zKXsNCgkJaWYoeG1sTm9kZXMuZXJyb3IgJiYgeG1sTm9kZXMu +ZXJyb3IubGVuZ3RoKSB7DQoJCQkkKHBhcmFtcy5mb3JtKS5yZW1vdmVDbGFzcyhw +YXJhbXMubG9hZGluZ0NsYXNzTmFtZSk7DQoNCgkJCWZvciAodmFyIGk9MDsgaTx4 +bWxOb2Rlcy5lcnJvci5sZW5ndGg7IGkrKyl7DQoJCQkJdmFyIGZpZWxkTWFya2Vk +RXJyb3IgPSBwYXJhbXMuZm9ybVt4bWxOb2Rlcy5lcnJvcltpXS5nZXRBdHRyaWJ1 +dGUoJ2ZpZWxkJyldOw0KCQkJCXZhciBlcnJvck1lc3NhZ2UgPSB4bWxOb2Rlcy5l +cnJvcltpXS5maXJzdENoaWxkID8geG1sTm9kZXMuZXJyb3JbaV0uZmlyc3RDaGls +ZC5kYXRhIDogdGhpcy5lcnJvck1lc3NhZ2VzLnVua25vd25FcnJvcjsNCg0KCQkJ +CWlmKCFmaWVsZE1hcmtlZEVycm9yKSB7DQoJCQkJCWZpZWxkTWFya2VkRXJyb3Ig +PSAkKHBhcmFtcy5mb3JtKS5nZXRFbGVtZW50KCcuJyArIHRoaXMuY2xhc3NOYW1l +cy51bmtub3duRXJyb3JNc2cpOw0KCQkJCX0gDQoJCQkJDQoJCQkJaWYgKGZpZWxk +TWFya2VkRXJyb3IpIHsNCgkJCQkJdGhpcy5tYXJrRmllbGRfZXJyb3IoZmllbGRN +YXJrZWRFcnJvciwgZXJyb3JNZXNzYWdlKTsNCgkJCQl9DQoJCQl9DQoNCgkJfQ0K +CX0sDQoNCgkvLyDQntCx0YDQsNCx0L7RgtGH0LjQuiDQvtGC0LLQtdGC0LAg0YHQ +tdGA0LLQtdGA0LAg0L/RgNC4INGA0LXQtNC40YDQtdC60YLQtQ0KCXhtbFJlc3Bv +bnNlSGFuZGxlcl9yZWRpcmVjdDogZnVuY3Rpb24oeG1sTm9kZXMsIHBhcmFtcyl7 +DQoJCWlmKHhtbE5vZGVzLnJlZGlyZWN0ICYmIHhtbE5vZGVzLnJlZGlyZWN0Lmxl +bmd0aCkgew0KCQkJdGhpcy5jb21wbGV0ZUZvcm0oeG1sTm9kZXMucmVkaXJlY3Rb +MF0uZmlyc3RDaGlsZC5kYXRhKTsNCgkJfQ0KCX0sDQoNCg0KCS8vINCf0LXRgNC1 +0YHRi9C70LrQsCDQv9C+0LvQtdC5INGE0L7RgNC80YsgKNC/0LXRgNCy0L7QtSDQ +v9C+0LvQtSDQvNCw0YHRgdC40LLQsCAtINGC0LXQutGD0YnQtdC1KQ0KCWNoZWNr +RGF0YTogZnVuY3Rpb24gKGZpZWxkcywgYWN0aW9uLCBzdWJtaXRUeXBlKXsNCgkJ +CQ0KCQkJLy8g0LXRgdC70Lggc3VibWl0VHlwZSDQvdC1INC/0LXRgNC10LTQsNC9 +LCDRgtC+INC40YHQv9C+0LvRjNC30YPQtdC8IHRoaXMuYWpheFVybHMuc2F2ZQ0K +CQkJdmFyIHVybCA9IHRoaXMuYWpheFVybHNbc3VibWl0VHlwZV0gfHwgdGhpcy5h +amF4VXJscy5zYXZlOw0KDQoJCQl2YXIgZGF0YSA9ICIiOw0KCQkJdmFyIGZpZWxk +Ow0KCQkJDQoJCQlpZiAoZmllbGRzLmxlbmd0aCAmJiBmaWVsZHMubGVuZ3RoID4g +MSkgew0KCQkJCWZpZWxkID0gZmllbGRzWzBdOw0KCQkJCQ0KCQkJCWZvciAodmFy +IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7DQoJCQkJCXZhciB0eXBl +ID0gZmllbGRzW2ldLmdldEF0dHJpYnV0ZSgndHlwZScpOw0KCQkJCQl2YXIgcGFy +YW0gPSBmaWVsZHNbaV0uZ2V0QXR0cmlidXRlKCduYW1lJyk7DQoJCQkJCXZhciB2 +YWx1ZTsNCg0KCQkJCQlpZih0eXBlID09ICdjaGVja2JveCcpew0KCQkJCQkJdmFs +dWUgPSBmaWVsZHNbaV0uY2hlY2tlZCA/IHRydWUgOiBmYWxzZTsNCgkJCQkJfSBl +bHNlIHsNCgkJCQkJCXZhbHVlID0gZmllbGRzW2ldLnZhbHVlOw0KCQkJCQl9DQoN +CgkJCQkJZGF0YSArPSAoaSE9MCA/ICcmJyA6ICcnKSArIHBhcmFtICsgJz0nICsg +ZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTsNCgkJCQl9DQoJCQkJDQoJCQl9IGVs +c2Ugew0KCQkJCWZpZWxkID0gZmllbGRzLmxlbmd0aCA/IGZpZWxkc1swXSA6IGZp +ZWxkczsNCgkJCQl2YXIgcGFyYW0gPSBmaWVsZC5nZXRBdHRyaWJ1dGUoJ25hbWUn +KTsNCgkJCQl2YXIgdmFsdWUgPSBmaWVsZC52YWx1ZTsNCgkJCQlkYXRhID0gcGFy +YW0gKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpOw0KCQkJfQ0KCQkJ +DQoNCgkJCWRhdGEgKz0gIiZhY3Rpb249IiArIGFjdGlvbjsNCg0KCQkJdmFyIGZp +ZWxkUGFyZW50ID0gJChmaWVsZCkuZ2V0UGFyZW50KCcuJyArIHRoaXMuY2xhc3NO +YW1lcy5maWVsZEhvbGRlcik7DQoJCQlpZihmaWVsZFBhcmVudCkgJChmaWVsZFBh +cmVudCkuYWRkQ2xhc3ModGhpcy5jbGFzc05hbWVzLmlzTG9hZGluZyk7DQoJCQkN +CgkJCWFqYXhQb3N0KA0KCQkJCXVybCwNCgkJCQlkYXRhLA0KCQkJCXRoaXMuY2hl +Y2tEYXRhT25sb2FkLA0KCQkJCWZpZWxkLA0KCQkJCXRoaXMpOw0KCX0sDQoNCgkN +CgkvLyDQp9GC0LXQvdC40LUg0L7RgtCy0LXRgtCwINGB0LXRgNCy0LXRgNCwINC9 +0LAg0L/QtdGA0LXRgdGL0LvQutGDINC60L7QvdC60YDQtdGC0L3QvtCz0L4g0L/Q +vtC70Y8g0YTQvtGA0LzRiyDQuCDQvtCx0YDQsNCx0L7RgtC60LAg0LLRi9C00LDQ +vdC90YvRhSDQvtGI0LjQsdC+0LoNCgljaGVja0RhdGFPbmxvYWQ6IGZ1bmN0aW9u +IChhamF4T2JqLCBmaWVsZCl7DQoJCQkNCgkJCXZhciBmaWVsZFBhcmVudCA9ICQo +ZmllbGQpLmdldFBhcmVudCgnLicgKyB0aGlzLmNsYXNzTmFtZXMuZmllbGRIb2xk +ZXIpOw0KCQkJaWYoZmllbGRQYXJlbnQpICQoZmllbGRQYXJlbnQpLnJlbW92ZUNs +YXNzKHRoaXMuY2xhc3NOYW1lcy5pc0xvYWRpbmcpOw0KDQoJCQlpZihhamF4T2Jq +ICYmIGFqYXhPYmoucmVzcG9uc2VYTUwpew0KCQkJCQ0KCQkJCXZhciB4bWxPYmog +PSBhamF4T2JqLnJlc3BvbnNlWE1MOw0KCQkJCXZhciB4bWxOb2RlcyA9IHRoaXMu +cGFyc2VYTUwoeG1sT2JqKTsNCgkJCQkNCgkJCQlpZih4bWxOb2Rlcy5lcnJvciAm +JiB4bWxOb2Rlcy5lcnJvci5sZW5ndGgpIHsNCgkJCQkJZm9yICh2YXIgaT0wOyBp +PHhtbE5vZGVzLmVycm9yLmxlbmd0aDsgaSsrKXsNCgkJCQkJCXZhciBmaWVsZE1h +cmtlZEVycm9yID0gZmllbGQ7DQoJCQkJCQl2YXIgZXJyb3JNZXNzYWdlID0geG1s +Tm9kZXMuZXJyb3JbaV0uZmlyc3RDaGlsZC5kYXRhOw0KCQkJCQkJdGhpcy5tYXJr +RmllbGRfZXJyb3IoZmllbGRNYXJrZWRFcnJvciwgZXJyb3JNZXNzYWdlKTsNCgkJ +CQkJfQ0KDQoJCQkJfSBlbHNlIGlmKHhtbE5vZGVzLnJlZGlyZWN0ICYmIHhtbE5v +ZGVzLnJlZGlyZWN0Lmxlbmd0aCkgew0KCQkJCQl0aGlzLmNvbXBsZXRlRm9ybSh4 +bWxOb2Rlcy5yZWRpcmVjdFswXS5maXJzdENoaWxkLmRhdGEpOw0KDQoJCQkJfSBl +bHNlIHsNCgkJCQkJdGhpcy5tYXJrRmllbGRfY2hlY2tlZChmaWVsZCk7DQoJCQkJ +fQ0KDQoJCQl9DQoJfSwNCg0KDQoNCg0KCS8vINCe0YfQuNGJ0LDQtdC8INC/0L7Q +u9C1INC+0YIg0LvRjtCx0YvRhSDQvtGC0LzQtdGC0L7Qug0KCW1hcmtGaWVsZF9j +bGVhcjogZnVuY3Rpb24oZmllbGQpew0KCQkJdmFyIGZpZWxkSG9sZGVyID0gJChm +aWVsZCkuZ2V0UGFyZW50KCcuJyArIHRoaXMuY2xhc3NOYW1lcy5maWVsZEhvbGRl +cik7DQoJCQlpZihmaWVsZEhvbGRlcil7DQoJCQkJJChmaWVsZEhvbGRlcikucmVt +b3ZlQ2xhc3ModGhpcy5jbGFzc05hbWVzLmZpZWxkTWFya2VkRXJyb3IpOw0KCQkJ +CSQoZmllbGRIb2xkZXIpLnJlbW92ZUNsYXNzKHRoaXMuY2xhc3NOYW1lcy5maWVs +ZE1hcmtlZENoZWNrZWQpOw0KCQkJfQ0KCX0sDQoNCg0KCS8vINCe0YLQvNC10YfQ +sNC10Lwg0L/QvtC70LUg0LrQsNC6INC/0YDQvtGI0LXQtNGI0LXQtSDQv9GA0L7Q +stC10YDQutGDDQoJbWFya0ZpZWxkX2NoZWNrZWQ6IGZ1bmN0aW9uKGZpZWxkKXsN +CgkJCXZhciBmaWVsZEhvbGRlciA9ICQoZmllbGQpLmdldFBhcmVudCgnLicgKyB0 +aGlzLmNsYXNzTmFtZXMuZmllbGRIb2xkZXIpOw0KCQkJaWYoZmllbGRIb2xkZXIp +ew0KCQkJCSQoZmllbGRIb2xkZXIpLnJlbW92ZUNsYXNzKHRoaXMuY2xhc3NOYW1l +cy5maWVsZE1hcmtlZEVycm9yKTsNCgkJCQkkKGZpZWxkSG9sZGVyKS5hZGRDbGFz +cyh0aGlzLmNsYXNzTmFtZXMuZmllbGRNYXJrZWRDaGVja2VkKTsNCgkJCX0NCgl9 +LA0KDQoNCgkvLyDQntGC0LzQtdGH0LDQtdC8INC/0L7Qu9C1INC60LDQuiDQvtGI +0LjQsdC+0YfQvdC+0LUg0Lgg0LLRi9Cy0L7QtNC40Lwg0YHQvtC+0LHRidC10L3Q +uNC1INC+0LEg0L7RiNC40LHQutC1DQoJbWFya0ZpZWxkX2Vycm9yOiBmdW5jdGlv +bihmaWVsZCwgZXJyb3JNZXNzYWdlKSB7DQoJCQl2YXIgZmllbGRIb2xkZXIgPSAk +KGZpZWxkKS5nZXRQYXJlbnQoJy4nICsgdGhpcy5jbGFzc05hbWVzLmZpZWxkSG9s +ZGVyKTsNCgkJCWlmKGZpZWxkSG9sZGVyKXsNCgkJCQkkKGZpZWxkSG9sZGVyKS5y +ZW1vdmVDbGFzcyh0aGlzLmNsYXNzTmFtZXMuZmllbGRNYXJrZWRDaGVja2VkKTsN +CgkJCQkkKGZpZWxkSG9sZGVyKS5hZGRDbGFzcyh0aGlzLmNsYXNzTmFtZXMuZmll +bGRNYXJrZWRFcnJvcik7DQoNCgkJCQl2YXIgZXJyb3JNc2dCb3ggPSB0aGlzLmdl +dEVycm9yTXNnQm94QnlGaWVsZChmaWVsZCk7DQoJCQkJaWYoZXJyb3JNc2dCb3gp +ew0KCQkJCQllcnJvck1zZ0JveC5pbm5lckhUTUwgPSBlcnJvck1lc3NhZ2U7DQoJ +CQkJfQ0KCQkJfQ0KCQkJDQoJfSwNCg0KDQoJLy8J0J/RgNC+0LLQtdGA0LrQsCDQ +v9C+0LvRjyDQvdCwINC/0YPRgdGC0L7RgtGDDQoJY2hlY2tGaWVsZF9lbXB0eTog +ZnVuY3Rpb24oZSwgZmllbGQpew0KDQoJCQlpZihlID09IG51bGwgJiYgZmllbGQu +dmFsdWUgIT0gJycpIHsNCgkJCQl0aGlzLm1hcmtGaWVsZF9jbGVhcihmaWVsZCk7 +DQoJCQkJcmV0dXJuOw0KCQkJfQ0KDQoJCQlpZighZSkgZSA9IHdpbmRvdy5ldmVu +dDsNCgkJCQ0KCQkJc3dpdGNoKGUudHlwZSl7DQoJCQkJY2FzZSAnYmx1cic6DQoJ +CQkJCWlmKGZpZWxkLnZhbHVlLmxlbmd0aCAhPSAwKXsNCgkJCQkJCXRoaXMubWFy +a0ZpZWxkX2NsZWFyKGZpZWxkKTsNCgkJCQkJfQ0KCQkJCQlicmVhazsNCg0KCQkJ +CWNhc2UgJ2tleXVwJzoNCgkJCQkJdGhpcy5tYXJrRmllbGRfY2xlYXIoZmllbGQp +Ow0KCQkJCQlicmVhazsNCg0KCQkJCWNhc2UgJ2NoYW5nZSc6DQoJCQkJCWlmKGZp +ZWxkLnZhbHVlICE9ICcnKXsNCgkJCQkJCXRoaXMubWFya0ZpZWxkX2NsZWFyKGZp +ZWxkKTsNCgkJCQkJfQ0KCQkJCQlicmVhazsNCgkJCX0NCgl9DQoNCn0pOwoKCgov +KiAgIHBvbGxGb3JtICAgKi8KdmFyIHBvbGxGb3JtQ2xhc3MgPSBmdW5jdGlvbigp +ew0KCXBvbGxGb3JtQ2xhc3Muc3VwZXJDbGFzcy5hcHBseSh0aGlzLCBhcmd1bWVu +dHMpOw0KDQoJdGhpcy5hamF4VXJscyA9IHsNCgkJc2F2ZTogIi9hamF4L3BvbGwv +Ig0KCX07DQoJDQoJT2JqZWN0LmV4dGVuZE9iamVjdCgNCgkJdGhpcy54bWxSZXNw +b25zZSwgew0KCQkNCgkJdHdpdHRlciA6IHsNCgkJCW5vZGU6ICd0d2l0dGVyJywN +CgkJCWhhbmRsZXI6ICd4bWxSZXNwb25zZUhhbmRsZXJfdHdpdHRlcicNCgkJfSwN +CgkJDQoJCXJlZ2lvbiA6IHsNCgkJCW5vZGU6ICdyZWdpb24nLA0KCQkJaGFuZGxl +cjogJ3htbFJlc3BvbnNlSGFuZGxlcl9yZWdpb24nDQoJCX0sDQoJCQ0KCQljaXR5 +IDogew0KCQkJbm9kZTogJ2NpdHknLA0KCQkJaGFuZGxlcjogJ3htbFJlc3BvbnNl +SGFuZGxlcl9jaXR5Jw0KCQl9LA0KCQkNCgkJdGV4dCA6IHsNCgkJCW5vZGU6ICd0 +ZXh0JywNCgkJCWhhbmRsZXI6ICd4bWxSZXNwb25zZUhhbmRsZXJfdGV4dCcNCgkJ +fSwNCgkJDQoJCWh0bWwgOiB7DQoJCQlub2RlOiAnaHRtbCcsDQoJCQloYW5kbGVy +OiAneG1sUmVzcG9uc2VIYW5kbGVyX2h0bWwnDQoJCX0NCgl9KTsNCg0KfTsNCg0K +cG9sbEZvcm1DbGFzcy5pbmhlcml0c0Zyb20oYWpheEZvcm1DbGFzcyk7DQoNCk9i +amVjdC5leHRlbmRPYmplY3QoDQoJcG9sbEZvcm1DbGFzcy5wcm90b3R5cGUsIHsN +CgkNCglzZW5kRGF0YTogZnVuY3Rpb24gKGZvcm0sIHN1Ym1pdFR5cGUsIHBvc3Rf +aWQpew0KCQkvLyDQl9Cw0LTQsNC10Lwg0LrQu9Cw0YHRgdC90LXQudC8LCDQvtC/ +0YDQtdC00LXQu9GP0Y7RidC40LksINGH0YLQviDQuNC80LXQvdC90L4g0LPRgNGD +0LfQuNGC0YHRjyDQsiDQtNCw0L3QvdGL0Lkg0LzQvtC80LXQvdGCDQoJCXZhciBs +b2FkaW5nQ2xhc3NOYW1lID0gKHN1Ym1pdFR5cGUgfHwgJ3NhdmUnKSArICctJyAr +IHRoaXMuY2xhc3NOYW1lcy5pc0xvYWRpbmc7DQoNCgkJLy8g0J/RgNC+0LLQtdGA +0LrQsCDRgtC+0LPQviwg0YfRgtC+INGE0L7RgNC80LAg0L3QtSDQvtCx0YDQsNCx +0LDRgtGL0LLQsNC10YIg0YPQttC1INGC0L7Qs9C+LCDRh9GC0L4g0LzRiyDQt9Cw +0L/RgNC+0YHQuNC70Lgg0LIg0LTQsNC90L3Ri9C5INC80L7QvNC10L3Rgg0KCQlp +ZigkKGZvcm0pLmhhc0NsYXNzKGxvYWRpbmdDbGFzc05hbWUpKXsNCgkJCXJldHVy +biBmYWxzZTsNCgkJfQ0KCQlpZiAoc3VibWl0VHlwZSA9PSAncG9sbCcpIHsNCgkJ +CXZhciBkYXRhID0gJ2FjdGlvbj12b3RlJzsNCgkJfSBlbHNlIGlmIChzdWJtaXRU +eXBlID09ICdjYW5jZWwnKSB7DQoJCQl2YXIgZGF0YSA9ICdhY3Rpb249cGFzcyc7 +DQoJCX0NCgkJZGF0YSArPSAnJnBvc3RfaWQ9JyArIHBvc3RfaWQgKyAnJic7DQoJ +CWRhdGEgKz0gdGhpcy5jbGFzc2ljU2VyaWFsaXplRm9ybShmb3JtKTsNCgkJDQoJ +CQ0KCQkvLyDQtdGB0LvQuCBzdWJtaXRUeXBlINC90LUg0L/QtdGA0LXQtNCw0L0s +INGC0L4g0LjRgdC/0L7Qu9GM0LfRg9C10LwgdGhpcy5hamF4VXJscy5zYXZlDQoJ +CXZhciB1cmwgPSB0aGlzLmFqYXhVcmxzW3N1Ym1pdFR5cGVdIHx8IHRoaXMuYWph +eFVybHMuc2F2ZTsNCgkJDQoJCQ0KCQl2YXIgcGFyYW1zID0gew0KCQkJZm9ybTog +Zm9ybSwNCgkJCWxvYWRpbmdDbGFzc05hbWU6IGxvYWRpbmdDbGFzc05hbWUNCgkJ +fTsNCg0KCQkkKGZvcm0pLmFkZENsYXNzKGxvYWRpbmdDbGFzc05hbWUpOw0KCQkN +CgkJYWpheFBvc3QoDQoJCQl1cmwsDQoJCQlkYXRhLA0KCQkJdGhpcy5zZW5kRGF0 +YU9ubG9hZCwNCgkJCXBhcmFtcywNCgkJCXRoaXMpOw0KCQkNCgkJcmV0dXJuIGZh +bHNlOw0KCX0sDQoJeG1sUmVzcG9uc2VIYW5kbGVyX2h0bWw6IGZ1bmN0aW9uKHht +bE5vZGVzLCBwYXJhbXMpew0KCQlpZih4bWxOb2Rlcy5odG1sICYmIHhtbE5vZGVz +Lmh0bWwubGVuZ3RoKSB7DQoJCQlwYXJhbXMuZm9ybS5wYXJlbnROb2RlLmlubmVy +SFRNTCA9IHhtbE5vZGVzLmh0bWxbMF0uZmlyc3RDaGlsZC5kYXRhOw0KCQl9DQoJ +fSwNCgkvLyDQntCx0YDQsNCx0L7RgtGH0LjQuiDQvtGC0LLQtdGC0LAg0YHQtdGA +0LLQtdGA0LAg0L/RgNC4INC/0L7Qu9GD0YfQtdC90LjQuCDQvtGI0LjQsdC60LgN +Cgl4bWxSZXNwb25zZUhhbmRsZXJfZXJyb3I6IGZ1bmN0aW9uKHhtbE5vZGVzLCBw +YXJhbXMpew0KCQlpZih4bWxOb2Rlcy5lcnJvciAmJiB4bWxOb2Rlcy5lcnJvci5s +ZW5ndGgpIHsNCgkJCSQocGFyYW1zLmZvcm0pLnJlbW92ZUNsYXNzKHBhcmFtcy5s +b2FkaW5nQ2xhc3NOYW1lKTsNCg0KCQkJZm9yICh2YXIgaT0wOyBpPHhtbE5vZGVz +LmVycm9yLmxlbmd0aDsgaSsrKXsNCgkJCQl2YXIgZmllbGRNYXJrZWRFcnJvciA9 +IHBhcmFtcy5mb3JtW3htbE5vZGVzLmVycm9yW2ldLmdldEF0dHJpYnV0ZSgnZmll +bGQnKV07DQoJCQkJaWYgKGZpZWxkTWFya2VkRXJyb3IpIHsNCgkJCQkJdmFyIGVy +cm9yTWVzc2FnZSA9IHhtbE5vZGVzLmVycm9yW2ldLmZpcnN0Q2hpbGQgPyB4bWxO +b2Rlcy5lcnJvcltpXS5maXJzdENoaWxkLmRhdGEgOiB0aGlzLmVycm9yTWVzc2Fn +ZXMudW5rbm93bkVycm9yOw0KDQoJCQkJCWlmKCFmaWVsZE1hcmtlZEVycm9yKQ0K +CQkJCQkJZmllbGRNYXJrZWRFcnJvciA9ICQocGFyYW1zLmZvcm0pLmdldEVsZW1l +bnQoJy4nICsgdGhpcy5jbGFzc05hbWVzLnVua25vd25FcnJvck1zZyk7DQoNCgkJ +CQkJdGhpcy5tYXJrRmllbGRfZXJyb3IoZmllbGRNYXJrZWRFcnJvciwgZXJyb3JN +ZXNzYWdlKTsNCgkJCQl9IGVsc2Ugew0KCQkJCQl2YXIgZXJyb3JNZXNzYWdlID0g +eG1sTm9kZXMuZXJyb3JbaV0uZmlyc3RDaGlsZCA/IHhtbE5vZGVzLmVycm9yW2ld +LmZpcnN0Q2hpbGQuZGF0YSA6IHRoaXMuZXJyb3JNZXNzYWdlcy51bmtub3duRXJy +b3I7DQoJCQkJCWZ1dHVfYWxlcnQoRkFULnBvbGxfaGVhZGVyLCBlcnJvck1lc3Nh +Z2UsIGZhbHNlLCAnZXJyb3InKTsNCgkJCQl9DQoJCQl9DQoNCgkJfQ0KCX0NCn0p +Ow0KDQoNCnZhciBwb2xsRm9ybSA9IG5ldyBwb2xsRm9ybUNsYXNzKCk7CgoKCi8q +ICAgYmxvZ3MgICAqLwpibG9nc0hhbmRsZXIgPSB7DQoNCgl1cmxfbGVhdmVfam9p +bjogJy9hamF4L2Jsb2dzL21lbWJlcnNoaXAvJywNCgl1cmxfZ2V0X2luZm86ICcv +YWpheC9ibG9ncy9nZXRpbmZvLycsDQoJDQoJeG1sOiB7DQoJCXJlc3BvbnNlTm9k +ZXM6IHsNCgkJCWVycm9yIDogJ2Vycm9yJywNCgkJCW1lbWJlcnNfY291bnRfc3Ry +IDogJ21lbWJlcnNfY291bnRfc3RyJywNCgkJCXJlc3VsdCA6ICdtZXNzYWdlJywN +CgkJCXBhcmFtIDogJ3BhcmFtJywNCgkJCWRpdmNvbnRlbnQgOiAnZGl2Y29udGVu +dCcNCgkJfSwNCg0KCQlwYXJzZTogZnVuY3Rpb24oeG1sT2JqKXsNCgkJCXZhciB4 +bWxOb2RlcyA9IHt9Ow0KCQkJZm9yIChwcm9wIGluIGJsb2dzSGFuZGxlci54bWwu +cmVzcG9uc2VOb2Rlcykgew0KCQkJCXhtbE5vZGVzW3Byb3BdID0geG1sT2JqLmdl +dEVsZW1lbnRzQnlUYWdOYW1lKGJsb2dzSGFuZGxlci54bWwucmVzcG9uc2VOb2Rl +c1twcm9wXSk7DQoJCQl9DQoJCQlyZXR1cm4geG1sTm9kZXM7DQoJCX0NCgl9LA0K +CQ0KCWpvaW5MZWF2ZUJsb2cgOiBmdW5jdGlvbihhY3Rpb24sIHRhcmdldF9pZCkg +ew0KCQl2YXIgZGF0YSA9ICdhY3Rpb249JysgYWN0aW9uICsnJmJsb2dfaWQ9JyAr +IHRhcmdldF9pZDsNCgkJYWpheExvYWRQb3N0KGJsb2dzSGFuZGxlci51cmxfbGVh +dmVfam9pbiArIGFjdGlvbiArICcvJywgZGF0YSwgYmxvZ3NIYW5kbGVyLmpvaW5M +ZWF2ZUJsb2dPbmxvYWQpOw0KCX0sDQoJDQoJDQoJam9pbkxlYXZlQmxvZ09ubG9h +ZCA6IGZ1bmN0aW9uKGFqYXhPYmopIHsNCgkJaWYoYWpheE9iaiAmJiBhamF4T2Jq +LnJlc3BvbnNlWE1MKXsNCgkJCXZhciB4bWxPYmogPSBhamF4T2JqLnJlc3BvbnNl +WE1MOw0KCQkJdmFyIHhtbE5vZGVzID0gYmxvZ3NIYW5kbGVyLnhtbC5wYXJzZSh4 +bWxPYmopOw0KCQkJaWYoeG1sTm9kZXMuZXJyb3IgJiYgeG1sTm9kZXMuZXJyb3Iu +bGVuZ3RoKXsNCgkJCQl2YXIgZXJyb3JzX2xlbmd0aCA9IHhtbE5vZGVzLmVycm9y +Lmxlbmd0aDsNCgkJCQlmb3IgKHZhciBpID0gMDsgaSA8IGVycm9yc19sZW5ndGg7 +IGkrKykgew0KCQkJCQlmdXR1X2FsZXJ0KEZBVC5ibG9ncy5oZWFkZXIsIHhtbE5v +ZGVzLmVycm9yW2ldLmZpcnN0Q2hpbGQuZGF0YSwgdHJ1ZSwgJ2Vycm9yJyk7DQoJ +CQkJfQ0KCQkJfQ0KCQkJaWYoeG1sTm9kZXMucmVzdWx0ICYmIHhtbE5vZGVzLnJl +c3VsdC5sZW5ndGgpIHsNCgkJCQlpZih4bWxOb2Rlcy5wYXJhbSAmJiB4bWxOb2Rl +cy5wYXJhbS5sZW5ndGgpIHsNCgkJCQkJaWYgKHhtbE5vZGVzLnBhcmFtWzBdLmZp +cnN0Q2hpbGQuZGF0YSA9PSAnbGVhdmUnKSB7DQoJCQkJCQkkKCdqcy1hZGRCbG9n +TWVtYmVyJykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpOw0KCQkJCQkJJCgnanMtcmVt +b3ZlQmxvZ01lbWJlcicpLmFkZENsYXNzKCdoaWRkZW4nKTsNCgkJCQkJCWZ1dHVf +YWxlcnQoRkFULmJsb2dzLmhlYWRlciwgRkFULmJsb2dzLmJsb2dfbGVhdmUsIGZh +bHNlLCAnbWVzc2FnZScpOw0KCQkJCQl9IGVsc2UgaWYgKHhtbE5vZGVzLnBhcmFt +WzBdLmZpcnN0Q2hpbGQuZGF0YSA9PSAnam9pbicpIHsNCgkJCQkJCSQoJ2pzLWFk +ZEJsb2dNZW1iZXInKS5hZGRDbGFzcygnaGlkZGVuJyk7DQoJCQkJCQkkKCdqcy1y +ZW1vdmVCbG9nTWVtYmVyJykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpOw0KCQkJCQkJ +ZnV0dV9hbGVydChGQVQuYmxvZ3MuaGVhZGVyLCBGQVQuYmxvZ3MuYmxvZ19qb2lu +LCBmYWxzZSwgJ21lc3NhZ2UnKTsNCgkJCQkJfQ0KCQkJCQkkKCdtZW1iZXJzX2Nv +dW50Jykuc2V0KCdodG1sJywgeG1sTm9kZXMubWVtYmVyc19jb3VudF9zdHJbMF0u +Zmlyc3RDaGlsZC5kYXRhKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9LA0KCQ0KCWdl +dEJsb2dQZW9wbGUgOiBmdW5jdGlvbihhY3Rpb24sIHRhcmdldF9pZCkgew0KCQlp +ZiAoYWN0aW9uID09ICdhZG1pbmlzdHJhdGlvbicpIHsNCgkJCWlmICgkKCdqcy1h +ZG1pbnNfbW9kZXJhdG9yc19ob2xkZXInKS5oYXNDbGFzcygnanMtaXNfbG9hZGVk +JykpIHsNCgkJCQkkKCdqcy1hZG1pbnNfbW9kZXJhdG9yc19ob2xkZXInKS5yZW1v +dmVDbGFzcygnaGlkZGVuJyk7DQoJCQkJDQovLwkJCQlhZGRDbGFzcygkKCdqcy1h +ZG1pbnNfbW9kZXJhdG9yc19ob2xkZXJfc2hvdycpLCAnaGlkZGVuJyk7DQovLwkJ +CQlyZW1vdmVDbGFzcygkKCdqcy1hZG1pbnNfbW9kZXJhdG9yc19ob2xkZXJfaGlk +ZScpLCAnaGlkZGVuJyk7DQoJCQl9IGVsc2UgaWYgKCEkKCdqcy1hZG1pbnNfbW9k +ZXJhdG9yc19ob2xkZXInKS5oYXNDbGFzcygnanMtaXNfbG9hZGluZycpKSB7DQoJ +CQkJdmFyIGRhdGEgPSAna2luZD0nKyBhY3Rpb24gKycmYmxvZ19pZD0nICsgdGFy +Z2V0X2lkOw0KCQkJCWFqYXhMb2FkUG9zdChibG9nc0hhbmRsZXIudXJsX2dldF9p +bmZvLCBkYXRhLCBibG9nc0hhbmRsZXIuZ2V0QmxvZ1Blb3BsZU9ubG9hZCwgd2lu +ZG93LCB7YWN0aW9uOmFjdGlvbn0pOw0KCQkJCSQoJ2pzLWFkbWluc19tb2RlcmF0 +b3JzX2hvbGRlcicpLmFkZENsYXNzKCdqcy1pc19sb2FkaW5nJyk7DQoJCQkJDQov +LwkJCQlhZGRDbGFzcygkKCdqcy1hZG1pbnNfbW9kZXJhdG9yc19ob2xkZXJfc2hv +dycpLCAnaGlkZGVuJyk7DQovLwkJCQlyZW1vdmVDbGFzcygkKCdqcy1hZG1pbnNf +bW9kZXJhdG9yc19ob2xkZXJfaGlkZScpLCAnaGlkZGVuJyk7DQoJCQl9DQoJCQkJ +DQoJCX0gZWxzZSBpZiAoYWN0aW9uID09ICdtZW1iZXJzJykgew0KCQkJaWYgKCQo +J2pzLWFkbWluc19yZWFkZXJzX2hvbGRlcicpLmhhc0NsYXNzKCdqcy1pc19sb2Fk +ZWQnKSkgew0KCQkJCSQoJ2pzLWFkbWluc19yZWFkZXJzX2hvbGRlcicpLnJlbW92 +ZUNsYXNzKCdoaWRkZW4nKTsNCgkJCQkNCgkJCQkkKCdqcy1hZG1pbnNfcmVhZGVy +c19ob2xkZXJfc2hvdycpLmFkZENsYXNzKCdoaWRkZW4nKTsNCgkJCQkkKCdqcy1h +ZG1pbnNfcmVhZGVyc19ob2xkZXJfaGlkZScpLnJlbW92ZUNsYXNzKCdoaWRkZW4n +KTsNCgkJCX0gZWxzZSBpZiAoISQoJ2pzLWFkbWluc19yZWFkZXJzX2hvbGRlcicp +Lmhhc0NsYXNzKCdqcy1pc19sb2FkaW5nJykpIHsNCgkJCQl2YXIgZGF0YSA9ICdr +aW5kPScrIGFjdGlvbiArJyZibG9nX2lkPScgKyB0YXJnZXRfaWQ7DQoJCQkJYWph +eExvYWRQb3N0KGJsb2dzSGFuZGxlci51cmxfZ2V0X2luZm8sIGRhdGEsIGJsb2dz +SGFuZGxlci5nZXRCbG9nUGVvcGxlT25sb2FkLCB3aW5kb3csIHthY3Rpb246YWN0 +aW9ufSk7DQoJCQkJJCgnanMtYWRtaW5zX3JlYWRlcnNfaG9sZGVyJykuYWRkQ2xh +c3MoJ2pzLWlzX2xvYWRpbmcnKTsNCgkJCQkNCgkJCQkkKCdqcy1hZG1pbnNfcmVh +ZGVyc19ob2xkZXJfc2hvdycpLmFkZENsYXNzKCdoaWRkZW4nKTsNCgkJCQkkKCdq +cy1hZG1pbnNfcmVhZGVyc19ob2xkZXJfaGlkZScpLnJlbW92ZUNsYXNzKCdoaWRk +ZW4nKTsNCgkJCX0NCgkJfQ0KCQkNCgl9LA0KCQ0KCWhpZGVCbG9nUGVvcGxlIDog +ZnVuY3Rpb24oYWN0aW9uKSB7DQoJCWlmIChhY3Rpb24gPT0gJ2FkbWluaXN0cmF0 +aW9uJykgew0KCQkJJCgnanMtYWRtaW5zX21vZGVyYXRvcnNfaG9sZGVyJykuYWRk +Q2xhc3MoJ2hpZGRlbicpOw0KCQkJJCgnanMtYWRtaW5zX21vZGVyYXRvcnNfaG9s +ZGVyX3Nob3cnKS5yZW1vdmVDbGFzcygnaGlkZGVuJyk7DQoJCQkkKCdqcy1hZG1p +bnNfbW9kZXJhdG9yc19ob2xkZXJfaGlkZScpLmFkZENsYXNzKCdoaWRkZW4nKTsN +CgkJfSBlbHNlIGlmIChhY3Rpb24gPT0gJ21lbWJlcnMnKSB7DQoJCQkkKCdqcy1h +ZG1pbnNfcmVhZGVyc19ob2xkZXInKS5hZGRDbGFzcygnaGlkZGVuJyk7DQoJCQkk +KCdqcy1hZG1pbnNfcmVhZGVyc19ob2xkZXJfc2hvdycpLnJlbW92ZUNsYXNzKCdo +aWRkZW4nKTsNCgkJCSQoJ2pzLWFkbWluc19yZWFkZXJzX2hvbGRlcl9oaWRlJyku +YWRkQ2xhc3MoJ2hpZGRlbicpOw0KCQl9DQoJfSwNCgkNCglnZXRCbG9nUGVvcGxl +T25sb2FkIDogZnVuY3Rpb24oYWpheE9iaiwgcGFyYW1zKSB7DQoJCWlmKGFqYXhP +YmogJiYgYWpheE9iai5yZXNwb25zZVhNTCl7DQoJCQl2YXIgeG1sT2JqID0gYWph +eE9iai5yZXNwb25zZVhNTDsNCgkJCXZhciB4bWxOb2RlcyA9IGJsb2dzSGFuZGxl +ci54bWwucGFyc2UoeG1sT2JqKTsNCgkJCWlmKHhtbE5vZGVzLmVycm9yICYmIHht +bE5vZGVzLmVycm9yLmxlbmd0aCl7DQoJCQkJdmFyIGVycm9yc19sZW5ndGggPSB4 +bWxOb2Rlcy5lcnJvci5sZW5ndGg7DQoJCQkJZm9yICh2YXIgaSA9IDA7IGkgPCBl +cnJvcnNfbGVuZ3RoOyBpKyspIHsNCgkJCQkJZnV0dV9hbGVydChGQVQuYmxvZ3Mu +aGVhZGVyLCB4bWxOb2Rlcy5lcnJvcltpXS5maXJzdENoaWxkLmRhdGEsIHRydWUs +ICdlcnJvcicpOw0KCQkJCX0NCgkJCX0NCgkJCWlmKHhtbE5vZGVzLnJlc3VsdCAm +JiB4bWxOb2Rlcy5yZXN1bHQubGVuZ3RoKSB7DQoJCQkJaWYoeG1sTm9kZXMuZGl2 +Y29udGVudCAmJiB4bWxOb2Rlcy5kaXZjb250ZW50Lmxlbmd0aCkgew0KCQkJCQlp +ZiAocGFyYW1zLmFjdGlvbiA9PSAnYWRtaW5pc3RyYXRpb24nKSB7DQoJCQkJCQkk +KCdqcy1hZG1pbnNfbW9kZXJhdG9yc19ob2xkZXInKS5pbm5lckhUTUwgPSB4bWxO +b2Rlcy5kaXZjb250ZW50WzBdLmZpcnN0Q2hpbGQuZGF0YTsNCgkJCQkJCSQoJ2pz +LWFkbWluc19tb2RlcmF0b3JzX2hvbGRlcicpLnJlbW92ZUNsYXNzKCdoaWRkZW4n +KTsNCgkJCQkJCSQoJ2pzLWFkbWluc19tb2RlcmF0b3JzX2hvbGRlcicpLnJlbW92 +ZUNsYXNzKCdqcy1pc19sb2FkaW5nJyk7DQoJCQkJCQkkKCdqcy1hZG1pbnNfbW9k +ZXJhdG9yc19ob2xkZXInKS5hZGRDbGFzcygnanMtaXNfbG9hZGVkJyk7DQoJCQkJ +CQkNCi8vCQkJCQkJYWRkQ2xhc3MoJCgnanMtYWRtaW5zX21vZGVyYXRvcnNfaG9s +ZGVyX3Nob3cnKSwgJ2hpZGRlbicpOw0KLy8JCQkJCQlyZW1vdmVDbGFzcygkKCdq +cy1hZG1pbnNfbW9kZXJhdG9yc19ob2xkZXJfaGlkZScpLCAnaGlkZGVuJyk7DQoJ +CQkJCX0gZWxzZSBpZiAocGFyYW1zLmFjdGlvbiA9PSAnbWVtYmVycycpIHsNCgkJ +CQkJCSQoJ2pzLWFkbWluc19yZWFkZXJzX2hvbGRlcicpLmlubmVySFRNTCA9IHht +bE5vZGVzLmRpdmNvbnRlbnRbMF0uZmlyc3RDaGlsZC5kYXRhOw0KCQkJCQkJJCgn +anMtYWRtaW5zX3JlYWRlcnNfaG9sZGVyJykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicp +Ow0KCQkJCQkJJCgnanMtYWRtaW5zX3JlYWRlcnNfaG9sZGVyJykucmVtb3ZlQ2xh +c3MoJ2pzLWlzX2xvYWRpbmcnKTsNCgkJCQkJCSQoJ2pzLWFkbWluc19yZWFkZXJz +X2hvbGRlcicpLmFkZENsYXNzKCdqcy1pc19sb2FkZWQnKTsNCgkJCQkJCQ0KLy8J +CQkJCQlhZGRDbGFzcygkKCdqcy1hZG1pbnNfcmVhZGVyc19ob2xkZXJfc2hvdycp +LCAnaGlkZGVuJyk7DQovLwkJCQkJCXJlbW92ZUNsYXNzKCQoJ2pzLWFkbWluc19y +ZWFkZXJzX2hvbGRlcl9oaWRlJyksICdoaWRkZW4nKTsNCgkJCQkJfQ0KCQkJCX0N +CgkJCX0NCgkJfQ0KCX0sDQoJDQoJdG9nZ2xlQmxvZ0luZm8gOiBmdW5jdGlvbiAo +dGFyZ2V0X2lkLGVsZW1lbnQpIHsNCgkJdmFyIF9ib3ggPSAkKCdqcy1ibG9nX2lu +Zm8nKTsNCgkJaWYgKF9ib3guaGFzQ2xhc3MoJ2hpZGRlbicpKSB7DQoJCQlfYm94 +LnJlbW92ZUNsYXNzKCdoaWRkZW4nKTsNCgkJCWJsb2dzSGFuZGxlci5nZXRCbG9n +UGVvcGxlKCdhZG1pbmlzdHJhdGlvbicsIHRhcmdldF9pZCk7IA0KCQkJDQoJCQkN +CgkJCXZhciBwID0gZWxlbWVudC5nZXRQb3NpdGlvbigpOw0KCQkJX2JveC5zdHls +ZS50b3AgPSAocC55IC0gMTQpICsgJ3B4JzsNCgkJCWlmIChwLnggPiAoJChkb2N1 +bWVudCkuZ2V0U2l6ZSgpLngvMikpIHsNCgkJCQlfYm94LmFkZENsYXNzKCJ0aXBC +b3gtdG9vLW1hY2gtcmlnaHQiKQ0KCQkJfSBlbHNlIHsNCgkJCQlfYm94LnJlbW92 +ZUNsYXNzKCJ0aXBCb3gtdG9vLW1hY2gtcmlnaHQiKQ0KCQkJfQ0KCQkJX2JveC5z +dHlsZS5sZWZ0ID0gcC54ICsgJ3B4JzsNCgkJCV9ib3guc3R5bGUuZGlzcGxheSA9 +ICdibG9jayc7DQoJCQkNCgkJCQ0KCQkJDQoJCX0gZWxzZSB7DQoJCQlfYm94LmFk +ZENsYXNzKCdoaWRkZW4nKTsNCgkJfQ0KCQkNCgl9LA0KCQ0KCWZpbHRlciA6IGZ1 +bmN0aW9uIChvYmopIHsNCgkJdmFyIGZpZWxkcyA9ICQob2JqLmZvcm0pLmdldEVs +ZW1lbnRzKCcuanMtZmllbGQtZGF0YScpOw0KCQlmb3IgKHZhciBpPTAsIGo9Zmll +bGRzLmxlbmd0aDsgaTxqOyBpKyspIHsNCgkJCWlmKGZpZWxkc1tpXS5jaGVja2Vk +ID09IHRydWUpIHsNCgkJCQl3aW5kb3cubG9jYXRpb24uaHJlZiA9ICcvYmxvZycg +KyBmaWVsZHNbaV0udmFsdWU7DQoJCQl9DQoJCX0NCgl9DQp9Ow0KDQoNCg0KDQp2 +YXIgYWRtaW5CbG9nUGVvcGxlRm9ybUNsYXNzID0gZnVuY3Rpb24oKXsNCglhZG1p +bkJsb2dQZW9wbGVGb3JtQ2xhc3Muc3VwZXJDbGFzcy5hcHBseSh0aGlzLCBhcmd1 +bWVudHMpOw0KDQoJdGhpcy5hamF4VXJscyA9IHsNCgkJc2F2ZTogIi9hamF4L2Js +b2dzL21lbWJlcnNoaXAvc2V0X2dyb3VwLyINCgl9Ow0KCQ0KCU9iamVjdC5leHRl +bmRPYmplY3QoDQoJCXRoaXMueG1sUmVzcG9uc2UsIHsNCgkJDQoJCW1lc3NhZ2U6 +IHsNCgkJCW5vZGU6ICdtZXNzYWdlJywNCgkJCWhhbmRsZXI6ICd4bWxSZXNwb25z +ZUhhbmRsZXJfbWVzc2FnZScNCgkJfQ0KCQkNCgl9KTsNCg0KfTsNCg0KYWRtaW5C +bG9nUGVvcGxlRm9ybUNsYXNzLmluaGVyaXRzRnJvbShhamF4Rm9ybUNsYXNzKTsN +Cg0KT2JqZWN0LmV4dGVuZE9iamVjdCgNCglhZG1pbkJsb2dQZW9wbGVGb3JtQ2xh +c3MucHJvdG90eXBlLCB7DQoJDQoJc2VyaWFsaXplRm9ybTogZnVuY3Rpb24oZm9y +bSl7DQoJCQl2YXIgZGF0YSA9ICcnOw0KCQkJDQoJCQl2YXIgZGF0YXMgPSAkKGZv +cm0pLmdldEVsZW1lbnRzKCcuJyArIHRoaXMuY2xhc3NOYW1lcy5maWVsZERhdGEp +Ow0KCQkJZm9yICh2YXIgaT0wLCBsZW5ndGg9ZGF0YXMubGVuZ3RoOyBpPGxlbmd0 +aDsgaSsrKXsNCgkJCQl2YXIgdHlwZSA9IGRhdGFzW2ldLmdldEF0dHJpYnV0ZSgn +dHlwZScpOw0KCQkJCXZhciBwYXJhbSA9IGRhdGFzW2ldLmdldEF0dHJpYnV0ZSgn +bmFtZScpOw0KCQkJCXZhciB2YWx1ZSA9IGRhdGFzW2ldLnZhbHVlOw0KDQoJCQkJ +aWYodHlwZSA9PSAncmFkaW8nICYmICFkYXRhc1tpXS5jaGVja2VkKXsNCgkJCQkJ +Y29udGludWU7DQoJCQkJfQ0KDQoJCQkJaWYodHlwZSA9PSAnY2hlY2tib3gnICYm +ICFkYXRhc1tpXS5jaGVja2VkKXsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0KCQkJ +CWRhdGEgKz0gKGRhdGEhPScnID8gJyYnIDogJycpICsgcGFyYW0gKyAnPScgKyBl +bmNvZGVVUklDb21wb25lbnQodmFsdWUpOw0KCQkJfQ0KCQkJcmV0dXJuIGRhdGE7 +DQoJfSwNCglzZW5kRGF0YU9ubG9hZDogZnVuY3Rpb24gKGFqYXhPYmosIHBhcmFt +cyl7DQoJCQlpZihhamF4T2JqICYmIGFqYXhPYmoucmVzcG9uc2VYTUwpew0KCQkJ +CXZhciB4bWxPYmogPSBhamF4T2JqLnJlc3BvbnNlWE1MOw0KCQkJCXZhciB4bWxO +b2RlcyA9IHRoaXMucGFyc2VYTUwoeG1sT2JqKTsNCg0KCQkJCWZvciAocHJvcCBp +biB4bWxOb2Rlcyl7DQoJCQkJCWlmKHRoaXNbdGhpcy54bWxSZXNwb25zZVtwcm9w +XS5oYW5kbGVyXSkgew0KCQkJCQkJdGhpc1t0aGlzLnhtbFJlc3BvbnNlW3Byb3Bd +LmhhbmRsZXJdKHhtbE5vZGVzLCBwYXJhbXMpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJ +fQ0KCQkJJChwYXJhbXMuZm9ybSkucmVtb3ZlQ2xhc3MoJ3NhdmUtbG9hZGluZycp +Ow0KCX0sDQoJeG1sUmVzcG9uc2VIYW5kbGVyX21lc3NhZ2U6IGZ1bmN0aW9uICh4 +bWxOb2RlcywgcGFyYW1zKSB7DQoJCWlmICh4bWxOb2Rlcy5tZXNzYWdlICYmIHht +bE5vZGVzLm1lc3NhZ2UubGVuZ3RoICYmIHhtbE5vZGVzLm1lc3NhZ2VbMF0uZmly +c3RDaGlsZC5kYXRhID09ICdvaycpIHsNCgkJCWZ1dHVfYWxlcnQoRkFULmJsb2dz +LmhlYWRlciwgJ9Cf0YDQsNCy0LAg0YHQvtGF0YDQsNC90LXQvdGLJywgZmFsc2Us +ICdtZXNzYWdlJyk7DQoJCX0NCgl9DQp9KTsNCg0KDQp2YXIgYWRtaW5CbG9nUGVv +cGxlRm9ybSA9IG5ldyBhZG1pbkJsb2dQZW9wbGVGb3JtQ2xhc3MoKTsNCg0KDQov +Kg0KdG0uaW5pdC5hZGQoZnVuY3Rpb24oKXsNCgkNCgl2YXIgYmxvZ0luZm9CbG9j +ayA9ICQoZG9jdW1lbnQpLmdldEVsZW1lbnQoIi5ibG9nLWFib3V0LXRleHQiKTsN +CglpZiAoYmxvZ0luZm9CbG9jaykgew0KCQl2YXIgYmxvZ2luZm9CbG9ja0Nsb3Nl +QnV0dG9uID0gYmxvZ0luZm9CbG9jay5nZXRFbGVtZW50KCJhLmNsb3NlLWJsb2ct +aW5mbyIpOw0KCQlpZiAoYmxvZ2luZm9CbG9ja0Nsb3NlQnV0dG9uKSB7DQoJCQli +bG9naW5mb0Jsb2NrQ2xvc2VCdXR0b24uYWRkRXZlbnQoImNsaWNrIixmdW5jdGlv +bigpew0KCQkJCWJsb2dJbmZvQmxvY2suYWRkQ2xhc3MoImhpZGRlbiIpOw0KCQkJ +CXJldHVybiBmYWxzZQ0KCQkJfSkNCgkJfQ0KCQl2YXIgYmxvZ0luZm9CbG9ja0No +aWxkcyA9IGJsb2dJbmZvQmxvY2suZ2V0RWxlbWVudHMoIioiKTsNCgkJZm9yICh2 +YXIgaT0wLGw9YmxvZ0luZm9CbG9ja0NoaWxkcy5sZW5ndGg7IGkgPCBsIDsgaSsr +KSB7DQoJCQlibG9nSW5mb0Jsb2NrQ2hpbGRzW2ldLmNsaWNrZXIgPSAiYmxvZ0lu +Zm9CbG9ja0NoaWxkcyI7DQoJCX07DQoJCXZhciB3aG9pcyA9JChkb2N1bWVudCku +Z2V0RWxlbWVudCgiLmJsb2ctd2hvaXMiKTsNCgkJaWYod2hvaXMpIHsNCgkJCXdo +b2lzLmNsaWNrZXIgPSAiYmxvZ0luZm9CbG9ja0NoaWxkcyI7DQoJCX0NCgkJJChk +b2N1bWVudCkuYWRkRXZlbnQoImNsaWNrIixmdW5jdGlvbihlKXsNCgkJCWlmICgh +ZS50YXJnZXQuY2xpY2tlciB8fCAhZS50YXJnZXQuY2xpY2tlciA9PSAiYmxvZ0lu +Zm9CbG9ja0NoaWxkcyIpIHsNCgkJCQlibG9nSW5mb0Jsb2NrLmFkZENsYXNzKCJo +aWRkZW4iKTsNCgkJCX0NCgkJfSkNCgl9DQp9KTsNCiovCgoK + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=validation.js +Content-Type: application/x-javascript; charset=utf-8; name=validation.js +Content-Location: http://habrahabr.ru/js/1307631427/tm/validation.js +Content-Transfer-Encoding: Base64 + +dmFyIHRtID0gKHR5cGVvZih0bSkgIT0gJ3VuZGVmaW5lZCcpID8gdG0gOiB7fTsK +Ci8qKgogKiDQmtC70LDRgdGBINC/0YDQvtCy0LXRgNC60Lgg0LfQvdCw0YfQtdC9 +0LjQuSDQv9C+0LvQtdC5INCy0L4g0LLRgdGP0LrQuNGFINGE0L7RgNC80LDRhQog +KiBAcGFyYW0g0KTQvtGA0LzQsCwg0LrQvtGC0L7RgNGD0Y4g0L3Rg9C20L3QviDQ +v9GA0L7QstC10YDRj9GC0YwKICogQGF1dGhvciBiZWJvcGtpZCwgbWRldmlscwog +Ki8KdG0uVmFsaWRhdG9yID0gQ2xhc3MoewoKCWluaXRpYWxpemU6IGZ1bmN0aW9u +ICgpIHsKCQkvKioKCQkgKiDQodC/0LjRgdC+0Log0Y3Qu9C10LzQtdC90YLQvtCy +INC00LvRjyDQstCw0LvQuNC00LDRhtC40LgKCQkgKi8KCQl0aGlzLl9lbGVtZW50 +cyA9IFtdOwoJfSwKCgkvKioKCSAqINCd0LXQv9C+0YHRgNC10LTRgdGC0LLQtdC9 +0L3QviDRhNGD0L3QutGG0LjQuCDQtNC70Y8g0LLQsNC70LjQtNCw0YbQuNC4INC3 +0L3QsNGH0LXQvdC40LksINC40Lwg0L/QtdGA0LXQtNCw0LXRgtGB0Y8g0YLRgNC4 +INC/0LDRgNCw0LzQtdGC0YDQsAoJICogQHBhcmFtIHtTdHJpbmd9INGB0YLRgNC+ +0LrQsCDQtNC70Y8g0LLQsNC70LjQtNCw0YbQuNC4CgkgKiBAcGFyYW0ge09iamVj +dH0g0L/RgNC+0LjQt9Cy0L7Qu9GM0L3Ri9C5INC/0LDRgNCw0LzQtdGC0YAKCSAq +IEBwYXJhbSB7RWxlbWVudH0g0L/QvtC70LUsINC60L7RgtC+0YDQvtC1INC80Ysg +0LLQsNC70LjQtNC40YDRg9C10LwKCSAqLwoJaGFuZGxlcnM6IHsKCQlyZXF1aXJl +ZDogZnVuY3Rpb24odmFsdWUpIHsKCQkJcmV0dXJuIHZhbHVlICYmICgodmFsdWUu +bGVuZ3RoID4gMCkgPyB0cnVlIDogZmFsc2UpOwoJCX0sCgkJbWlubGVuOiBmdW5j +dGlvbih2YWx1ZSwgbWluTGVuZ3RoKSB7CgkJCXJldHVybiB2YWx1ZSAmJiAoKHZh +bHVlLmxlbmd0aCA+PSBtaW5MZW5ndGgpID8gdHJ1ZSA6IGZhbHNlKTsKCQl9LAoJ +CW1heGxlbjogZnVuY3Rpb24odmFsdWUsIG1heExlbmd0aCkgewoJCQlyZXR1cm4g +dmFsdWUgJiYgKCh2YWx1ZS5sZW5ndGggPD0gbWF4TGVuZ3RoKSA/IHRydWUgOiBm +YWxzZSk7CgkJfSwKCQlsb2dpbjogZnVuY3Rpb24odmFsdWUpIHsKCQkJcmV0dXJu +IHZhbHVlICYmIC9eW2EtekEtWjAtOVwtX10qJC8udGVzdCh2YWx1ZSk7CgkJfSwK +CQllbWFpbDogZnVuY3Rpb24odmFsdWUpIHsKCQkJcmV0dXJuIHZhbHVlICYmIC9e +KFthLXpBLVowLTlfXC5cLVwrXSkrXEAoKFthLXpBLVowLTlcLV0pK1wuKSsoW2Et +ekEtWjAtOV17Miw0fSkrJC8udGVzdCh2YWx1ZSk7CgkJfSwKCQlyYWRpb1JlcXVp +cmVkOiBmdW5jdGlvbiAodmFsdWUpIHsKCQkgICAgdmFyIG9rPWZhbHNlOwoJCSAg +ICBpZiAodHlwZW9mKHZhbHVlKSA9PSAnb2JqZWN0JykgewoJCSAgICAgICAgZm9y +KHZhciBpIGluIHZhbHVlKSB7CgkJICAgICAgICAgICAgb2s9dHJ1ZTsKCQkgICAg +ICAgICAgICBicmVhazsKCQkgICAgICAgIH0KCQkgICAgfQoJCSAgICAKCQkgICAg +cmV0dXJuIG9rOwoJCX0sCgkJaGFicmFjdXRtZTogZnVuY3Rpb24odmFsdWUpewoJ +CQlpZiAoYXJndW1lbnRzLmNhbGxlZS5kb25lIHx8ICh2YWx1ZS5sZW5ndGggPCAx +NzAwKSB8fCAodmFsdWUuaW5kZXhPZignXDxoYWJyYWN1dCcpICE9IC0xKSkgewkJ +CQkKCQkJICByZXR1cm4gdHJ1ZQkJCQoJCQl9IGVsc2UgewkJCQkKCQkJCS8vYXJn +dW1lbnRzLmNhbGxlZS5kb25lID0gdHJ1ZTsKCQkJCXJldHVybiBmYWxzZQoJCQl9 +OwoJCX0KCX0sCgkKCS8qKgoJICog0J7Rh9C40YnQsNC10YIg0YHQvtGB0YLQvtGP +0L3QuNC1INCy0LDQu9C40LTQsNGC0L7RgNCwCgkgKi8KCWNsZWFyOiBmdW5jdGlv +bigpIHsKCQl0aGlzLl9lbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pewoJ +CQlpdGVtLmVsZW1lbnQuX3ZhbGlkYXRvciA9IGZhbHNlOyAKCQl9KTsKCQl0aGlz +Ll9lbGVtZW50cyA9IFtdOwoJfSwKCQoJLyoqCgkgKiDQlNC+0LHQsNCy0LvRj9C1 +0YIg0Y3Qu9C10LzQtdC90YLRiyDQtNC70Y8g0LHRg9C00YPRidC10Lkg0LLQsNC7 +0LjQtNCw0YbQuNC4CgkgKiBAcGFyYW0ge0VsZW1lbnR9IHBhcmVudAoJICovCglh +ZGRFbGVtZW50czogZnVuY3Rpb24ocGFyZW50KSB7CgkJdG0uZ2V0RWxlbWVudHNG +b3JWYWxpZGF0aW9uKHBhcmVudCkuZm9yRWFjaChmdW5jdGlvbihmaWVsZCl7CgkJ +CXRoaXMuX2FkZEVsZW1lbnQoZmllbGQpOwoJCX0sIHRoaXMpOwoJfSwKCQoJLyoq +CgkgKiDQlNC10LDQutGC0LjQstC40YDRg9C10YIg0Y3Qu9C10LzQtdC90YLRiyDQ +uNC3INCx0YPQtNGD0YnQtdC5INCy0LDQu9C40LTQsNGG0LjQuAoJICogQHBhcmFt +IHtFbGVtZW50fSBwYXJlbnQKCSAqLwoJZGlzYWJsZUVsZW1lbnRzOiBmdW5jdGlv +bihwYXJlbnQpIHsKCQl0bS5nZXRFbGVtZW50c0ZvclZhbGlkYXRpb24ocGFyZW50 +KS5mb3JFYWNoKGZ1bmN0aW9uKGZpZWxkKXsKCQkJZmllbGQuX3ZhbGlkYXRpb25F +bmFibGVkID0gZmFsc2U7CgkJfSwgdGhpcyk7Cgl9LAoKCS8qKgoJICog0JTQtdCw +0LrRgtC40LLQuNGA0YPQtdGCINGN0LvQtdC80LXQvdGC0Ysg0LjQtyDQsdGD0LTR +g9GJ0LXQuSDQstCw0LvQuNC00LDRhtC40LgKCSAqIEBwYXJhbSB7RWxlbWVudH0g +cGFyZW50CgkgKi8KCWVuYWJsZUVsZW1lbnRzOiBmdW5jdGlvbihwYXJlbnQpIHsK +CQl0bS5nZXRFbGVtZW50c0ZvclZhbGlkYXRpb24ocGFyZW50KS5mb3JFYWNoKGZ1 +bmN0aW9uKGZpZWxkKXsKCQkJZmllbGQuX3ZhbGlkYXRpb25FbmFibGVkID0gdHJ1 +ZTsKCQl9LCB0aGlzKTsKCX0sCgoJLyoqCgkgKiDQlNC+0LHQsNCy0LvRj9C10YIg +0Y3Qu9C10LzQtdC90YLRiyDQtNC70Y8g0LHRg9C00YPRidC10Lkg0LLQsNC70LjQ +tNCw0YbQuNC4CgkgKiBAcGFyYW0ge0VsZW1lbnR9IHBhcmVudAoJICovCglyZW1v +dmVFbGVtZW50czogZnVuY3Rpb24ocGFyZW50KSB7CgkJdG0uZ2V0RWxlbWVudHNG +b3JWYWxpZGF0aW9uKHBhcmVudCkuZm9yRWFjaChmdW5jdGlvbihmaWVsZCl7CgkJ +CXRoaXMuX3JlbW92ZUVsZW1lbnQoZmllbGQpOwoJCX0sIHRoaXMpOwoJfSwKCgkv +KioKCSAqINCU0L7QsdCw0LLQu9GP0LXRgiDRjdC70LXQvNC10L3RgiDQtNC70Y8g +0LHRg9C00YPRidC10Lkg0LLQsNC70LjQtNCw0YbQuNC4CgkgKiBAcGFyYW0ge0Vs +ZW1lbnR9IGVsZW1lbnQKCSAqLwoJX2FkZEVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1l +bnQpIHsKCQlpZiAoIWVsZW1lbnQuX3ZhbGlkYXRvcikgewoJCQllbGVtZW50Ll92 +YWxpZGF0b3IgPSB0aGlzOwoJCQllbGVtZW50Ll92YWxpZGF0aW9uRW5hYmxlZCA9 +IHRydWU7CgkJCXRoaXMuX2VsZW1lbnRzLnB1c2godGhpcy5fZ2V0RWxlbWVudE9i +amVjdChlbGVtZW50KSk7CgkJfQoJfSwKCgkvKioKCSAqINCf0LDRgNGB0LjRgiDQ +uNC90YTQvtGA0LzQsNGG0LjRjiDQvtCxINGN0LvQtdC80LXQvdGC0LUg0Lgg0LLQ +vtC30LLRgNCw0YnQsNC10YIg0L7QsdGK0LXQutGCINGN0LvQtdC80LXQvdGC0LAK +CSAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudAoJICovCglfZ2V0RWxlbWVudE9i +amVjdDogZnVuY3Rpb24oZWxlbWVudCkgewoJCXZhciB2YWxpZGF0aW9uU3RyaW5n +Qml0cyA9IGVsZW1lbnQuZ2V0KCd2YWxpZGF0ZScpLnNwbGl0KCcgJyk7IAoJCXZh +ciBlbGVtZW50T2JqZWN0ID0gewoJCQknZWxlbWVudCc6IGVsZW1lbnQsCgkJCSd2 +YWxpZGF0aW9ucyc6IFtdCgkJfTsKCQlmb3IgKHZhciBpPTA7IGk8dmFsaWRhdGlv +blN0cmluZ0JpdHMubGVuZ3RoOyBpKyspIHsKCQkJdmFyIHZhbGlkYXRpb25FeHBy +ZXNzaW9uID0gdmFsaWRhdGlvblN0cmluZ0JpdHNbaV07CgkJCXZhciBjb2xvbiA9 +IHZhbGlkYXRpb25FeHByZXNzaW9uLmluZGV4T2YoJzonKTsKCQkJdmFyIHBhcmFt +ID0gbnVsbDsKCQkJaWYgKGNvbG9uICE9IC0xKSB7CgkJCQl2YXIgaGFuZGxlciA9 +IHZhbGlkYXRpb25FeHByZXNzaW9uLnN1YnN0cigwLCBjb2xvbik7CgkJCQlwYXJh +bSA9IHZhbGlkYXRpb25FeHByZXNzaW9uLnN1YnN0cihjb2xvbisxKTsKCQkJfSBl +bHNlIHsKCQkJCXZhciBoYW5kbGVyID0gdmFsaWRhdGlvbkV4cHJlc3Npb247CgkJ +CX0KCQkJZWxlbWVudE9iamVjdC52YWxpZGF0aW9ucy5wdXNoKHsKCQkJCSdoYW5k +bGVyJzogaGFuZGxlciwKCQkJCSdwYXJhbSc6IHBhcmFtCgkJCX0pOwoJCX0KCQly +ZXR1cm4gZWxlbWVudE9iamVjdDsKCX0sCgoJLyoqCgkgKiDQo9C00LDQu9GP0LXR +giDRjdC70LXQvNC10L3RgtGLINC40Lcg0LLQsNC70LjQtNCw0YbQuNC4CgkgKiBA +cGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQKCSAqLwoJX3JlbW92ZUVsZW1lbnQ6IGZ1 +bmN0aW9uKGVsZW1lbnQpIHsKCQlmb3IgKHZhciBpPTA7IGk8dGhpcy5fZWxlbWVu +dHMubGVuZ3RoOyBpKyspIHsKCQkJaWYgKHRoaXMuX2VsZW1lbnRzW2ldLmVsZW1l +bnQgPT0gZWxlbWVudCkgewoJCQkJZWxlbWVudC5fdmFsaWRhdG9yID0gZmFsc2U7 +CgkJCQl0aGlzLl9lbGVtZW50cy5zcGxpY2UoaSwgMSk7CgkJCQlyZXR1cm47CgkJ +CX0KCQl9Cgl9LAoKCS8qKgoJICog0JLQvtC30LLRgNCw0YnQsNC10YIg0LfQvdCw +0YfQtdC90LjQtSDRjdC70LXQvNC10L3RgtCwCgkgKiBAcGFyYW0ge0VsZW1lbnR9 +IGVsZW1lbnQKCSAqLwoJX2dldFZhbHVlOiBmdW5jdGlvbihlbGVtZW50KSB7CgkJ +c3dpdGNoICgkKGVsZW1lbnQpLmdldCgndGFnJykpIHsKCQkJY2FzZSAnaW5wdXQn +OgoJCQkJc3dpdGNoIChlbGVtZW50LmdldCgidHlwZSIpKSB7CgkJCQkJY2FzZSAn +dGV4dCc6CgkJCQkJY2FzZSAncGFzc3dvcmQnOgoJCQkJCWNhc2UgJ2ZpbGUnOgoJ +CQkJCQlyZXR1cm4gZWxlbWVudC52YWx1ZTsKCQkJCQljYXNlICdjaGVja2JveCc6 +CgkJCQkJY2FzZSAncmFkaW8nOgoJCQkJCQlyZXR1cm4gZWxlbWVudC5nZXQoImNo +ZWNrZWQiKSA/IGVsZW1lbnQudmFsdWUgOiBudWxsOwoJCQkJCQoJCQkJfQoJCQkJ +YnJlYWs7CgkJCWNhc2UgJ3RleHRhcmVhJzoKCQkJCXJldHVybiBlbGVtZW50LnZh +bHVlOwoJCQljYXNlICdzZWxlY3QnOgoJCQkJcmV0dXJuIGVsZW1lbnQuZ2V0KCJ2 +YWx1ZSIpOwoJCQljYXNlICdmaWVsZHNldCc6CiAgICAgICAgICAgICAgICB2YXIg +ZmllbGRzID0gZWxlbWVudC5nZXRFbGVtZW50cygnaW5wdXQsc2VsZWN0LHRleHRh +cmVhLGZpZWxkc2V0Jyk7CiAgICAJCSAgICB2YXIgcmV0ID0ge307CiAgICAJCQlm +b3IgKHZhciBpID0gMCwgbCA9IGZpZWxkcy5sZW5ndGg7IGk8bDsgaSsrKSB7CiAg +ICAJCQkgICAgdmFyIGZpZWxkID0gZmllbGRzW2ldOwogICAgCQkJICAgIHZhciBu +YW1lID0gZmllbGQubmFtZTsKICAgIAkJCSAgICB2YXIgdmFsdWUgPSB0aGlzLl9n +ZXRWYWx1ZShmaWVsZCk7CiAgICAJCQkgICAgaWYodHlwZW9mKHZhbHVlKSAhPT0g +J3VuZGVmaW5lZCcgJiYgdmFsdWUgIT09IG51bGwpIHsKICAgIAkJCSAgICAgICAg +IXJldFtuYW1lXSA/CiAgICAJCQkgICAgICAgICAgICByZXRbbmFtZV0gPSB2YWx1 +ZSA6CiAgICAJCQkgICAgICAgICAgICByZXRbbmFtZV0uZm9yRWFjaCA/CiAgICAJ +CQkgICAgICAgICAgICAgICAgcmV0W25hbWVdLnB1c2godmFsdWUpIDoKICAgIAkJ +CSAgICAgICAgICAgICAgICAocmV0W25hbWVdID0gWyByZXRbbmFtZV0sIHZhbHVl +IF0pOwogICAgCQkJICAgIH0KICAgIAkJCX0KICAgIAkJCXJldHVybiByZXQ7CgkJ +CQlicmVhazsKCQl9Cgl9LAoKCS8qKgoJICog0J/RgNC+0LjQt9Cy0L7QtNC40YIg +0LLQsNC70LjQtNCw0YbQuNGOINC+0LHRitC10LrRgtCwINCy0LDQu9C40LTQsNGG +0LjQuAoJICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnQKCSAqLwoJX3ZhbGlkYXRl +RWxlbWVudE9iamVjdDogZnVuY3Rpb24oZWxlbWVudE9iamVjdCkgewoJCXZhciBl +bGVtZW50ID0gZWxlbWVudE9iamVjdC5lbGVtZW50OwoJCXZhciB2YWx1ZSA9IHRo +aXMuX2dldFZhbHVlKGVsZW1lbnQpOwoJCWZvciAodmFyIGk9MDsgaTxlbGVtZW50 +T2JqZWN0LnZhbGlkYXRpb25zLmxlbmd0aDsgaSsrKSB7CgkJCWlmIChlbGVtZW50 +T2JqZWN0LmVsZW1lbnQuX3ZhbGlkYXRpb25FbmFibGVkKSB7CgkJCQl2YXIgaGFu +ZGxlciA9IGVsZW1lbnRPYmplY3QudmFsaWRhdGlvbnNbaV0uaGFuZGxlcjsKCQkJ +CXZhciBwYXJhbSA9IGVsZW1lbnRPYmplY3QudmFsaWRhdGlvbnNbaV0ucGFyYW07 +CgkJCQlpZiAoIXRoaXMuaGFuZGxlcnNbaGFuZGxlcl0odmFsdWUsIHBhcmFtKSkg +CgkJCQkJcmV0dXJuIGhhbmRsZXI7CgkJCX0KCQl9CgkJcmV0dXJuIGZhbHNlOwoJ +fSwKCgkvKioKCSAqINCf0YDQvtC40LfQstC+0LTQuNGCINCy0LDQu9C40LTQsNGG +0LjRjiDQvtCx0YrQtdC60YLQsCDQstCw0LvQuNC00LDRhtC40LgKCSAqIEBwYXJh +bSB7RWxlbWVudH0gZWxlbWVudAoJICovCgl2YWxpZGF0ZUVsZW1lbnQ6IGZ1bmN0 +aW9uKGVsZW1lbnQpIHsKCQlyZXR1cm4gX3ZhbGlkYXRlRWxlbWVudE9iamVjdCh0 +aGlzLl9nZXRFbGVtZW50T2JqZWN0KGVsZW1lbnQpKTsKCX0sCgoJLyoqCgkgKiDQ +n9GA0L7QuNC30LLQvtC00LjRgiDQstCw0LvQuNC00LDRhtC40Y4g0LLRgdC10YUg +0L7QsdGK0LXQutGC0L7QsgoJICovCgl2YWxpZGF0ZTogZnVuY3Rpb24oKSB7CgkJ +dmFyIHJlc3VsdCA9IFtdOwoJCWZvciAodmFyIGk9MDsgaTx0aGlzLl9lbGVtZW50 +cy5sZW5ndGg7IGkrKykgewoJCQl2YXIgZXJyb3IgPSB0aGlzLl92YWxpZGF0ZUVs +ZW1lbnRPYmplY3QodGhpcy5fZWxlbWVudHNbaV0pOwoJCQlpZiAoZXJyb3IpIHsK +CQkJCXJlc3VsdC5wdXNoKHsKCQkJCQknZWxlbWVudCc6IHRoaXMuX2VsZW1lbnRz +W2ldLmVsZW1lbnQsCgkJCQkJJ2Vycm9yVHlwZSc6IGVycm9yCgkJCQl9KTsKCQkJ +fQoJCX0KCQlyZXR1cm4gcmVzdWx0OwoJfQp9KTsKCnRtLmdldEVsZW1lbnRzRm9y +VmFsaWRhdGlvbiA9IGZ1bmN0aW9uKGNvbnRhaW5lcikgewoJdmFyIGVsZW1lbnRz +ID0gW107CglpZiAoIWNvbnRhaW5lcikgeyByZXR1cm4gW107IH07CgkkKGNvbnRh +aW5lcikuZ2V0RWxlbWVudHMoJ2lucHV0LHNlbGVjdCx0ZXh0YXJlYSxmaWVsZHNl +dCcpLmZvckVhY2goCgkJZnVuY3Rpb24gKGZpZWxkKSB7CgkJCWlmICghdG0uYmFk +VGFncy5jb250YWlucyhmaWVsZC50YWdOYW1lKSAmJiBmaWVsZC5nZXQoJ3ZhbGlk +YXRlJykgIT0gbnVsbCkgewoJCQkJZWxlbWVudHMucHVzaChmaWVsZCk7CgkJCX07 +Cgl9LCB0aGlzKTsKCXJldHVybiBlbGVtZW50czsKfTs= + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=xmlhandler.js +Content-Type: application/x-javascript; charset=utf-8; name=xmlhandler.js +Content-Location: http://habrahabr.ru/js/1307631427/tm/xmlhandler.js +Content-Transfer-Encoding: Base64 + +dmFyIHRtID0gKHR5cGVvZih0bSkgIT0gJ3VuZGVmaW5lZCcpID8gdG0gOiB7fTsK +IAovKioKICog0J7QsdGA0LDQsdC+0YLRh9C40Log0L7RgtCy0LXRgtC+0LIg0L7R +giDRgdC10YDQstC10YDQsAogKiBAYXV0aG9yIG1kZXZpbHMKICogQGNvbnN0cnVj +dG9yCiAqLwp0bS5IYW5kbGVyID0gZnVuY3Rpb24oKXsKCQoJdGhpcy5oYW5kbGVy +cyA9IHsKCQkKCQkncmVkaXJlY3RfdXJsJyA6IGZ1bmN0aW9uKG5vZGVzLCByLCBq +c29uKSB7CgkJCWZvciAodmFyIGk9MDsgaTxub2Rlcy5sZW5ndGg7IGkrKykgewoJ +CQkgICAgaWYgKCEkKCdkZWJ1ZycpKSB7CgkJCSAgICAgICAgd2luZG93LmxvY2F0 +aW9uLmhyZWYgPSBqc29uID8gbm9kZXNbaV0gOiBub2Rlc1tpXS5maXJzdENoaWxk +LmRhdGE7CgkJCSAgICB9IGVsc2UgewoJCQkgICAgICAgIHRtLmxvZygncmVkaXJl +Y3Q6ICcsIGpzb24gPyBub2Rlc1tpXSA6IG5vZGVzW2ldLmZpcnN0Q2hpbGQuZGF0 +YSk7CgkJCSAgICB9CgkJCQkKCQkJfQoJCX0sCgkJCgkJCgkJJ3JlZGlyZWN0JyA6 +IGZ1bmN0aW9uKG5vZGVzLCByLCBqc29uKSB7CgkJCWZvciAodmFyIGk9MDsgaTxu +b2Rlcy5sZW5ndGg7IGkrKykgewoJCQkgICAgaWYgKCEkKCdkZWJ1ZycpKSB7CgkJ +CSAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBqc29uID8gbm9kZXNbaV0g +OiBub2Rlc1tpXS5maXJzdENoaWxkLmRhdGE7CgkJCSAgICB9IGVsc2UgewoJCQkg +ICAgICAgIHRtLmxvZygncmVkaXJlY3Q6ICcsIGpzb24gPyBub2Rlc1tpXSA6IG5v +ZGVzW2ldLmZpcnN0Q2hpbGQuZGF0YSk7CgkJCSAgICB9CgkJCX0KCQl9LAoJCQoJ +CSdodG1sJzogZnVuY3Rpb24obm9kZXMpIHsKCQkJZm9yICh2YXIgaT0wOyBpPG5v +ZGVzLmxlbmd0aDsgaSsrKSB7CgkJCQlpZiAobm9kZXNbaV0uZ2V0QXR0cmlidXRl +KCdmb3InKSkgewoJCQkJCXZhciBlbGVtZW50ID0gJChub2Rlc1tpXS5nZXRBdHRy +aWJ1dGUoJ2ZvcicpKTsKCQkJCQlpZiAoZWxlbWVudCkgewoJCQkJCQllbGVtZW50 +LmlubmVySFRNTCA9IG5vZGVzW2ldLmZpcnN0Q2hpbGQuZGF0YTsKCQkJCQl9CgkJ +CQl9CgkJCX0JCQkKCQl9LAoJCQoJCSdyZW1vdmUnOiBmdW5jdGlvbihub2Rlcykg +ewoJCQlmb3IgKHZhciBpPTA7IGk8bm9kZXMubGVuZ3RoOyBpKyspIHsKCQkJCWlm +IChub2Rlc1tpXS5nZXRBdHRyaWJ1dGUoJ2VsZW1lbnQnKSkgewoJCQkJCXZhciBl +bGVtZW50ID0gJChub2Rlc1tpXS5nZXRBdHRyaWJ1dGUoJ2VsZW1lbnQnKSk7CgkJ +CQkJaWYgKGVsZW1lbnQpIHsKCQkJCQkJZWxlbWVudC5wYXJlbnROb2RlLnJlbW92 +ZUNoaWxkKGVsZW1lbnQpOwoJCQkJCX0KCQkJCX0KCQkJfQkJCgkJfSwKCgkJJ3No +b3cnOiBmdW5jdGlvbihub2RlcykgewoJCQlmb3IgKHZhciBpPTA7IGk8bm9kZXMu +bGVuZ3RoOyBpKyspIHsKCQkJCWlmIChub2Rlc1tpXS5nZXRBdHRyaWJ1dGUoJ2Vs +ZW1lbnQnKSkgewoJCQkJCXZhciBlbGVtZW50ID0gJChub2Rlc1tpXS5nZXRBdHRy +aWJ1dGUoJ2VsZW1lbnQnKSk7CgkJCQkJaWYgKGVsZW1lbnQpIHsKCQkJCQkJZWxl +bWVudC5yZW1vdmVDbGFzcygnaGlkZGVuJyk7CgkJCQkJfQoJCQkJfQoJCQl9CQkK +CQl9LAoJCQkJCgkJJ2hpZGUnOiBmdW5jdGlvbihub2RlcykgewoJCQlmb3IgKHZh +ciBpPTA7IGk8bm9kZXMubGVuZ3RoOyBpKyspIHsKCQkJCWlmIChub2Rlc1tpXS5n +ZXRBdHRyaWJ1dGUoJ2VsZW1lbnQnKSkgewoJCQkJCXZhciBlbGVtZW50ID0gJChu +b2Rlc1tpXS5nZXRBdHRyaWJ1dGUoJ2VsZW1lbnQnKSk7CgkJCQkJaWYgKGVsZW1l +bnQpIHsKCQkJCQkJZWxlbWVudC5hZGRDbGFzcygnaGlkZGVuJyk7CgkJCQkJfQoJ +CQkJfQoJCQl9CQkKCQl9LAoJCQoJCQoJCQoJCSdzZXR2YWx1ZSc6IGZ1bmN0aW9u +KG5vZGVzKSB7CgkJCWZvciAodmFyIGk9MDsgaTxub2Rlcy5sZW5ndGg7IGkrKykg +ewoJCQkJaWYgKG5vZGVzW2ldLmdldEF0dHJpYnV0ZSgnZWxlbWVudCcpKSB7CgkJ +CQkJdmFyIGVsZW1lbnQgPSAkKG5vZGVzW2ldLmdldEF0dHJpYnV0ZSgnZWxlbWVu +dCcpKTsKCQkJCQlpZiAoZWxlbWVudCkgewoJCQkJCQllbGVtZW50LnNldCgidmFs +dWUiLCBub2Rlc1tpXS5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpOwoJCQkJCX0KCQkJ +CX0KCQkJfQkJCgkJfSwKCgkJJ2FsZXJ0JzogZnVuY3Rpb24obm9kZXMpIHsKCQkJ +Zm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykgewoJCQkJZnV0 +dV9hbGVydChGQVQucHJvZmlsZV9oZWFkZXIsIG5vZGVzW2ldLmZpcnN0Q2hpbGQu +ZGF0YSwgZmFsc2UsICdtZXNzYWdlJyk7CgkJCX0KCQl9CgoJfTsKfTsKCnRtLkhh +bmRsZXIucHJvdG90eXBlID0gewoJCQoJLyoqCgkgKiDQoNCw0YHRiNC40YDQtdC9 +0LjQtSDRgdC/0LjRgdC60LAg0L7QsdGA0LDQsdC+0YLRh9C40LrQvtCyCgkgKiBA +cGFyYW0ge09iamVjdH0gb2JqZWN0CgkgKi8KCWV4dGVuZDogZnVuY3Rpb24ob2Jq +ZWN0KSB7CgkJJGV4dGVuZCh0aGlzLmhhbmRsZXJzLCBvYmplY3QpOwoJfSwKCgkv +KioKCSAqIAoJICogQHBhcmFtIHtFbGVtZW50fSB4bWxPYmplY3QKCSAqIEBwYXJh +bSB7T2JqZWN0fSB0aGlzT2JqZWN0CgkgKi8KCXByb2Nlc3M6IGZ1bmN0aW9uKHJl +c3BvbnNlLCB0aGlzT2JqZWN0KSB7CgkgICAgdmFyIGpzb24gPSAhcmVzcG9uc2Uu +Y2hpbGROb2RlczsKCgkgICAgaWYgKGpzb24pIHsKICAgIAkJZm9yICh2YXIgdGFn +IGluIHRoaXMuaGFuZGxlcnMpIHsKICAgIAkJICAgIGlmIChyZXNwb25zZVt0YWdd +KSB7CiAgICAJCSAgICAgICAgdGhpcy5oYW5kbGVyc1t0YWddLmNhbGwoCiAgICAJ +CSAgICAgICAgICAgIHRoaXNPYmplY3QsCgkJICAgICAgICAgICAgICAgIHJlc3Bv +bnNlW3RhZ10uZm9yRWFjaCA/CgkJICAgICAgICAgICAgICAgICAgICByZXNwb25z +ZVt0YWddIDoKCQkgICAgICAgICAgICAgICAgICAgIFtyZXNwb25zZVt0YWddXSwK +CQkgICAgICAgICAgICAgICAgcmVzcG9uc2UsCgkJICAgICAgICAgICAgICAgIHRy +dWUKICAgIAkJICAgICAgICApOwogICAgCQkgICAgfQogICAgCQl9CgkgICAgfSBl +bHNlIHsKICAgICAgICAgICAgZm9yICh2YXIgdGFnIGluIHRoaXMuaGFuZGxlcnMp +IHsKICAgIAkJCXZhciBub2RlcyA9IHJlc3BvbnNlLmdldEVsZW1lbnRzQnlUYWdO +YW1lKHRhZyk7CiAgICAJCQlpZiAobm9kZXMubGVuZ3RoID4gMCkgewogICAgCQkJ +CXRoaXMuaGFuZGxlcnNbdGFnXS5jYWxsKHRoaXNPYmplY3QsIG5vZGVzLCByZXNw +b25zZSk7CiAgICAJCQl9CiAgICAJCX0KCSAgICB9Cgl9CgkKfTsKCnRtLkFqYXgg +PSAodHlwZW9mKHRtLkFqYXgpICE9ICd1bmRlZmluZWQnKSA/IHRtLkFqYXggOiB7 +fTsKdG0uQWpheC5RdWljayA9IHsKCWdldDogZnVuY3Rpb24odXJsLCBkYXRhICxv +cHRpb25zKSB7CgkJdmFyIG9wcyA9IHsKCQkJJ2hhbmRsZXInOiBuZXcgdG0uSGFu +ZGxlcigpLAoJCQknZmFpbHR1cmUnOiBmdW5jdGlvbigpewoJCQkJZnV0dV9hbGVy +dChGQVQucHJvZmlsZV9oZWFkZXIsICfQntGI0LjQsdC60LAg0L/QtdGA0LXQtNCw +0YfQuCDQtNCw0L3QvdGL0YUnLCBmYWxzZSwgJ21lc3NhZ2UnKTsKCQkJfSwKCQkJ +J3RoaXNPYmplY3QnOiB0aGlzLAoJCQknYWZ0ZXInOiBudWxsLAoJCQknYmVmb3Jl +JzogbnVsbAoJCX07CgkJb3B0aW9ucyAmJiAkZXh0ZW5kKG9wcywgb3B0aW9ucyk7 +CgkJdmFyIHJlcXVlc3QgPSBuZXcgUmVxdWVzdCh7CgkJCSdtZXRob2QnOiAnZ2V0 +JywKCQkJJ3VybCc6IHVybCwKCQkJJ29uQ29tcGxldGUnOiAoZnVuY3Rpb24ocmVz +cG9uc2VUZXh0LCByZXNwb25zZVhtbCl7CgkJCQlvcHMuYmVmb3JlICYmIG9wcy5i +ZWZvcmUoKTsKCQkJCW9wcy5oYW5kbGVyLnByb2Nlc3MocmVzcG9uc2VYbWwsIG9w +cy50aGlzT2JqZWN0KTsKCQkJCW9wcy5hZnRlciAmJiBvcHMuYWZ0ZXIoKTsKCQkJ +fSkuYmluZCh0aGlzKSwKCQkJJ29uRmFpbHVyZSc6IGZ1bmN0aW9uKCl7CgkJCQlv +cHMuZmFpbHR1cmUgJiYgb3BzLmZhaWx0dXJlKCk7CgkJCX0KCQl9KS5zZW5kKCk7 +Cgl9LAoJCglwb3N0OiBmdW5jdGlvbih1cmwsIGRhdGEsIG9wdGlvbnMpIHsKCQl2 +YXIgb3BzID0gewoJCQknaGFuZGxlcic6IG5ldyB0bS5IYW5kbGVyKCksCgkJCSdm +YWlsdHVyZSc6IGZ1bmN0aW9uKCl7CgkJCQlmdXR1X2FsZXJ0KEZBVC5wcm9maWxl +X2hlYWRlciwgJ9Ce0YjQuNCx0LrQsCDQv9C10YDQtdC00LDRh9C4INC00LDQvdC9 +0YvRhScsIGZhbHNlLCAnbWVzc2FnZScpOwoJCQl9LAoJCQkndGhpc09iamVjdCc6 +IHRoaXMsCgkJCSdhZnRlcic6IG51bGwsCgkJCSdiZWZvcmUnOiBudWxsCgkJfTsK +CQlvcHRpb25zICYmICRleHRlbmQob3BzLCBvcHRpb25zKTsKCQl2YXIgcmVxdWVz +dCA9IG5ldyBSZXF1ZXN0KHsKCQkJJ21ldGhvZCc6ICdwb3N0JywKCQkJJ3VybCc6 +IHVybCwKCQkJJ2RhdGEnOiBkYXRhLAoJCQknb25Db21wbGV0ZSc6IChmdW5jdGlv +bihyZXNwb25zZVRleHQsIHJlc3BvbnNlWG1sKXsKCQkJCW9wcy5iZWZvcmUgJiYg +b3BzLmJlZm9yZSgpOwoJCQkJb3BzLmhhbmRsZXIucHJvY2VzcyhyZXNwb25zZVht +bCwgb3BzLnRoaXNPYmplY3QpOwoJCQkJb3BzLmFmdGVyICYmIG9wcy5hZnRlcigp +OwoJCQl9KS5iaW5kKHRoaXMpLAoJCQknb25GYWlsdXJlJzogZnVuY3Rpb24oKXsK +CQkJCW9wcy5mYWlsdHVyZSAmJiBvcHMuZmFpbHR1cmUoKTsKCQkJfQoJCX0pLnNl +bmQoKTsKCX0KfTs= + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=control.js +Content-Type: application/x-javascript; charset=utf-8; name=control.js +Content-Location: http://habrahabr.ru/js/1307631427/tm/controls/control.js +Content-Transfer-Encoding: Base64 + +dmFyIHRtID0gKHR5cGVvZih0bSkgIT0gJ3VuZGVmaW5lZCcpID8gdG0gOiB7fTsK +dG0uQ29udHJvbHMgPSAodHlwZW9mKHRtLkNvbnRyb2xzKSAhPSAndW5kZWZpbmVk +JykgPyB0bS5Db250cm9scyA6IHt9OwoKdG0uQ29udHJvbHMuYXR0YWNoRWxlbWVu +dHMgPSBmdW5jdGlvbihwYXJlbnQpIHsKCSQocGFyZW50KS5nZXRFbGVtZW50cygn +KicpLmZvckVhY2goCgkJZnVuY3Rpb24gKGZpZWxkKSB7CgkJICAgIGlmIChmaWVs +ZCAmJiAhdG0uYmFkVGFncy5jb250YWlucyhmaWVsZC50YWdOYW1lKSAmJiAoICgo +ZmllbGQuY2xhc3NOYW1lLmluZGV4T2YoInRtLWNvbnRyb2wiKSAhPSAtMSkgJiYg +ZmllbGQuZ2V0QXR0cmlidXRlKCdyZXYnKSkgfHwgZmllbGQuZ2V0QXR0cmlidXRl +KCdjb250cm9sJykgKSkgewoJCQkJdmFyIGNuYW1lID0gZmllbGQuZ2V0QXR0cmli +dXRlKCdyZXYnKTsKCQkJCWlmICghY25hbWUpIHsKCQkJCQljbmFtZSA9IGZpZWxk +LmdldEF0dHJpYnV0ZSgnY29udHJvbCcpOwoJCQkJfQoJCQkJaWYgKHRtLkNvbnRy +b2xzW2NuYW1lXSkgewoJCQkJCXZhciBjbCA9IHRtLkNvbnRyb2xzW2NuYW1lXTsK +CQkJCQl2YXIgY29udHJvbCA9IG5ldyBjbChmaWVsZCk7CgkJCQl9IGVsc2UgewoJ +CQkJCXRtLkNvbnRyb2xzLmxvYWQoY25hbWUsIGZ1bmN0aW9uKCl7CgkJCQkJCWlm +IChhcmd1bWVudHMuY2FsbGVlLmRvbmUpIHJldHVybjsKCQkJCQkJdmFyIGNsID0g +dG0uQ29udHJvbHNbY25hbWVdOwoJCQkJCQl2YXIgY29udHJvbCA9IG5ldyBjbChm +aWVsZCk7CgkJCQkJCWFyZ3VtZW50cy5jYWxsZWUuZG9uZSA9IHRydWU7CgkJCQkJ +fSk7CgkJCQl9CgkJCX07Cgl9LCB0aGlzKTsKfQoKdG0uQ29udHJvbHMuX3dhaXRp +bmdGb3JMb2FkID0ge307Cgp0bS5Db250cm9scy5sb2FkID0gZnVuY3Rpb24obmFt +ZSwgY29tcGxldGUpIHsKCXZhciBzaXRlYmFzZSA9ICIiCglpZiAodGVtcC5iYXNl +X3Nob3J0KSB7c2l0ZWJhc2UgPSAiaHR0cDovLyIgKyB0ZW1wLmJhc2Vfc2hvcnR9 +CglpZiAodG0uQ29udHJvbHNbbmFtZV0pIHsKCQljb21wbGV0ZSgpOwoJfSBlbHNl +IHsKCQlpZiAodG0uQ29udHJvbHMuX3dhaXRpbmdGb3JMb2FkW25hbWVdKSB7CgkJ +CXRtLkNvbnRyb2xzLl93YWl0aW5nRm9yTG9hZFtuYW1lXS5wdXNoKGNvbXBsZXRl +KTsKCQkJCgkJfSBlbHNlIHsKCQkJdG0uQ29udHJvbHMuX3dhaXRpbmdGb3JMb2Fk +W25hbWVdID0gW2NvbXBsZXRlXTsKCQkJdmFyIHVybCA9IHNpdGViYXNlICsgJy9q +cy90bS9jb250cm9scy8nICsgbmFtZSArICcuanMnOwoJCQl2YXIgbXlTY3JpcHQg +PSBuZXcgQXNzZXQuamF2YXNjcmlwdCh1cmwsIHsKCQkJCW9ubG9hZDogKGZ1bmN0 +aW9uKCl7CgkJCQkJZm9yICh2YXIgaT0wO2k8dG0uQ29udHJvbHMuX3dhaXRpbmdG +b3JMb2FkW25hbWVdLmxlbmd0aDtpKyspIHsKCQkJCQkJdG0uQ29udHJvbHMuX3dh +aXRpbmdGb3JMb2FkW25hbWVdW2ldKCk7CgkJCQkJfQoJCQkJfSkKCQkJfSk7CgkJ +fQoJfQp9OwoKdG0uQ29udHJvbHMuYmFzZSA9IENsYXNzKHsKCQoJaW5pdGlhbGl6 +ZTogZnVuY3Rpb24oZWxlbWVudCwgb3B0aW9ucykgewoJCSRleHRlbmQodGhpcywg +b3B0aW9ucyk7CgkJdGhpcy5fZWxlbWVudCA9ICQoZWxlbWVudCk7Cgl9LAoJCgln +ZXRGb3JtOiBmdW5jdGlvbigpIHsKCQl2YXIgZm9ybVRhZyA9IHRoaXMuX2VsZW1l +bnQuZ2V0UGFyZW50KCdmb3JtJyk7CgkJcmV0dXJuIGZvcm1UYWcgJiYgZm9ybVRh +Zy5hdHRhY2hlZDsKCX0KCQp9KTsKCgp0bS5pbml0LmFkZChmdW5jdGlvbigpewoK +CXRtLkNvbnRyb2xzLmF0dGFjaEVsZW1lbnRzKGRvY3VtZW50KTsKCn0pOwo= + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=favourites_add.js +Content-Type: application/x-javascript; charset=utf-8; name=favourites_add.js +Content-Location: http://habrahabr.ru/js/1307631427/tm/forms/favourites_add.js +Content-Transfer-Encoding: Base64 + +dG09dG18fHt9Owp0bS5Gb3Jtcz10bS5Gb3Jtc3x8e307Cgp0bS5Gb3Jtcy5mYXZv +dXJpdGVzX2FkZCA9IGZ1bmN0aW9uICgpIHsKCXRoaXMuX2hhbmRsZXIuZXh0ZW5k +KHsKCQknbWVzc2FnZSc6IGZ1bmN0aW9uKG5vZGVzKSB7CgkJCWlmICh0ZW1wLmZh +dm91cml0ZXNfYWRkLmNvbnRhaW5lcikgewoJCQkJdmFyIGZhdiA9IHRlbXAuZmF2 +b3VyaXRlc19hZGQuY29udGFpbmVyLmdldEVsZW1lbnQoJ2Rpdi5qcy10b19mYXZz +X2hvbGRlcicpOwoJCQkJZmF2ICYmIGZhdi5yZW1vdmVDbGFzcygndG8tZmF2cycp +LmFkZENsYXNzKCdmYXZfYWRkZWQnKTsKCQkJCXRlbXAuZmF2b3VyaXRlc19hZGQu +c2V0VGFncyh0ZW1wLmZhdm91cml0ZXNfYWRkLnRhZ3MudmFsdWUpOwoJCQl9OwoJ +CQl0ZW1wLmZhdm91cml0ZXNfYWRkLmhpZGUoKTsKCQl9Cgl9KTsKfTs= + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=button.js +Content-Type: application/x-javascript; charset=utf-8; name=button.js +Content-Location: http://habrahabr.ru/js/1307631427/tm/controls/button.js +Content-Transfer-Encoding: Base64 + +dG0uQ29udHJvbHMuYnV0dG9uID0gbmV3IENsYXNzKHsKCUV4dGVuZHM6IHRtLkNv +bnRyb2xzLmJhc2UsCglpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50KSB7CgkJ +dGhpcy5fZWxlbWVudCA9ICQoZWxlbWVudCk7CgkJLyoKCQkgKiB1cmwKCQkgKiBk +ZWYKCQkgKi8KCQl2YXIgbz17fTsKCQkKCQlpZiAoZWxlbWVudC5nZXQoInJlbCIp +KSB7CgkJCXRoaXMuX3BhcmFtcyA9IGV2YWwoJ289JyArIGVsZW1lbnQuZ2V0KCJy +ZWwiKSk7CgkJCQoJCX0KCQl0aGlzLl9lbGVtZW50LmFkZEV2ZW50KCdjbGljaycs +IHRoaXMuY2xpY2suYmluZCh0aGlzKSk7CgkJdGhpcy5faGFuZGxlciA9IG5ldyB0 +bS5IYW5kbGVyKCk7CgkJCgkJaWYgKHRoaXMuX3BhcmFtcy5kZWYucXVpY2tfdm90 +ZSkgewoJCQl0aGlzLl9oYW5kbGVyLmV4dGVuZCh7CgkJCQkic2NvcmUiOiBmdW5j +dGlvbihub2Rlcyl7CgkJCQkJdmFyIG5ld1VzZXJzY29yZSwgbWludXNNYXJrID0g +IiI7CgkJCQkJZm9yICh2YXIgaT0wOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHsK +CQkJCQkJaWYgKG5vZGVzW2ldLnRhZ05hbWUgPT0gInNjb3JlIil7CgkJCQkJCQlu +ZXdVc2Vyc2NvcmUgPSBub2Rlc1tpXS5maXJzdENoaWxkLmRhdGE7CgkJCQkJCQl2 +YXIgcGFyc2VkTmV3VXNlcnNjb3JlID0gbmV3VXNlcnNjb3JlICsgIiI7Ly9jb252 +ZXJ0cyBOb2RlTGlzdCB0byBzdHJpbmcKCQkJCQkJCWlmIChwYXJzZWROZXdVc2Vy +c2NvcmUuY2hhckF0KDApID09ICLigJMiKSB7IG1pbnVzTWFyayA9ICIgY2xhc3M9 +J21pbnVzJyJ9OwoJCQkJCQl9CgkJCQkJfTsKCQkJCQllbGVtZW50LnBhcmVudE5v +ZGUuc2V0KCJodG1sIiwiPHNwYW4iK21pbnVzTWFyaysiPiIrIG5ld1VzZXJzY29y +ZSArIjwvc3Bhbj4iKTsKCQkJCX0sCgkJCQkiZXJyb3IiOiBmdW5jdGlvbihub2Rl +cyl7CgkJCQkJdmFyIGVycm9ydGV4dCA9ICIiOwoJCQkJCWZvciAodmFyIGk9MDsg +aSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7CgkJCQkJCWlmIChub2Rlc1tpXS50YWdO +YW1lID09ICJlcnJvciIpewoJCQkJCQkJZXJyb3J0ZXh0ICs9IG5vZGVzW2ldLmZp +cnN0Q2hpbGQuZGF0YSArICI8YnIvPiI7CgkJCQkJCX0KCQkJCQl9OwoJCQkJCWZ1 +dHVfYWxlcnQoItCe0Lkt0L7QuS3QvtC5INGBINC60L7Qu9Cx0LDRgdC+0LkhIiwg +ZXJyb3J0ZXh0LCBmYWxzZSwgJ2Vycm9yJyk7CgkJCQl9CgkJCX0pCgkJfQoJfSwK +CWNsaWNrOiBmdW5jdGlvbihlKSB7CgkJZS5zdG9wKCk7CgkJdmFyIHVybCA9IHRo +aXMuX3BhcmFtcy51cmw7CgkJdmFyIHBhcmFtcyA9ICRtZXJnZSh0aGlzLl9wYXJh +bXMuZGVmKTsKCQl2YXIgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHsKCQkJJ21ldGhv +ZCc6ICdwb3N0JywKCQkJJ3VybCc6IHVybCwKCQkJJ2RhdGEnOiBwYXJhbXMsCgkJ +CSdvbkNvbXBsZXRlJzogKGZ1bmN0aW9uKHJlc3BvbnNlVGV4dCwgcmVzcG9uc2VY +bWwpewoJCQkJdGhpcy5faGFuZGxlci5wcm9jZXNzKHJlc3BvbnNlWG1sLCB0aGlz +KTsKCQkJfSkuYmluZCh0aGlzKQoJCX0pLnNlbmQoKTsKCX0KfSk7 + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=form.js +Content-Type: application/x-javascript; charset=utf-8; name=form.js +Content-Location: http://habrahabr.ru/js/1307631427/tm/form.js +Content-Transfer-Encoding: Base64 + +dmFyIHRtID0gKHR5cGVvZih0bSkgIT0gJ3VuZGVmaW5lZCcpID8gdG0gOiB7fTsK +CnRtLkZvcm1zID0gKHR5cGVvZih0bS5Gb3JtcykgIT0gJ3VuZGVmaW5lZCcpID8g +dG0uRm9ybXMgOiB7fTsKCnRtLkZvcm1zLl93YWl0aW5nRm9yTG9hZCA9IHt9OwoK +dG0uRm9ybXMubG9hZCA9IGZ1bmN0aW9uKG5hbWUsIGNvbXBsZXRlKSB7CglpZiAo +dG0uRm9ybXNbbmFtZV0pIHsKCQljb21wbGV0ZSgpOwoJfSBlbHNlIHsKCQlpZiAo +dG0uRm9ybXMuX3dhaXRpbmdGb3JMb2FkW25hbWVdKSB7CgkJCXRtLkZvcm1zLl93 +YWl0aW5nRm9yTG9hZFtuYW1lXS5wdXNoKGNvbXBsZXRlKTsKCQl9IGVsc2UgewoJ +CQl0bS5Gb3Jtcy5fd2FpdGluZ0ZvckxvYWRbbmFtZV0gPSBbY29tcGxldGVdOwoJ +CQl2YXIgdXJsID0gJy9qcy90bS9mb3Jtcy8nICsgbmFtZSArICcuanMnOwoJCQl2 +YXIgbXlTY3JpcHQgPSBuZXcgQXNzZXQuamF2YXNjcmlwdCh1cmwsIHsKCQkJCW9u +bG9hZDogKGZ1bmN0aW9uKCl7CgkJCQkJZm9yICh2YXIgaT0wO2k8dG0uRm9ybXMu +X3dhaXRpbmdGb3JMb2FkW25hbWVdLmxlbmd0aDtpKyspCgkJCQkJCXRtLkZvcm1z +Ll93YWl0aW5nRm9yTG9hZFtuYW1lXVtpXSgpOwoJCQkJfSkKCQkJfSk7CgkJfQoJ +fQp9OwoKLyoqCiAqINCa0LvQsNGB0YEg0LDQstGC0L7QvNCw0YLQuNC30LDRhtC4 +0LggQWpheCDQtNC70Y8g0YTQvtGA0LwKICogQGF1dGhvciBtZGV2aWxzCiAqLwp0 +bS5Gb3JtID0gQ2xhc3MoewoJCglhZGRFdmVudDogZnVuY3Rpb24obmFtZSwgY2Fs +bGJhY2spIHsKCQl0aGlzLl9mb3JtLmFkZEV2ZW50KG5hbWUsIGNhbGxiYWNrKTsK +CX0sCgkKCWZpcmVFdmVudDogZnVuY3Rpb24obmFtZSkgewoJCXRoaXMuX2Zvcm0u +ZmlyZUV2ZW50KG5hbWUpOwoJfSwKCQoJc3VibWl0Q2FuY2VsZWQ6IGZhbHNlLAoJ +Cglpbml0aWFsaXplOiBmdW5jdGlvbihmb3JtKSB7CgkJdmFyIHNlbGYgPSB0aGlz +OwoJCQoJCXRoaXMuX2Zvcm0gPSAkKGZvcm0pOwoJCXRoaXMuX2Zvcm0uYXR0YWNo +ZWQgPSB0aGlzOwoJCXRoaXMuX3ZhbGlkYXRvciA9IG5ldyB0bS5WYWxpZGF0b3Io +KTsKCQkKCQl0aGlzLnJlc2V0VmFsaWRhdGlvbigpOwoKCQl0aGlzLmFqYXggPSBm +YWxzZTsKCQlpZiAodGhpcy5fZm9ybS5oYXNDbGFzcygnYWpheCcpKSB7CgkJCXRo +aXMuZW5hYmxlQWpheCgpOwoJCX0KCQkKCQl0aGlzLmNhcHRjaGEgPSBmYWxzZTsK +CQlpZiAodGhpcy5fZm9ybS5oYXNDbGFzcygnY2FwdGNoYScpKSB7CgkJCXRoaXMu +Y2FwdGNoYSA9IHRydWU7CgkJfQoJCQoJCWlmICh0aGlzLl9mb3JtLmhhc0NsYXNz +KCdpZnJhbWUtYWpheCcpKSB7CgkJICAgIHRoaXMuaWZyYW1lQWpheCA9IHRydWU7 +CgkJfQoJCQoJCXZhciBvblN1Ym1pdEZ1bmN0aW9uID0gZnVuY3Rpb24oZXZlbnQp +ewogICAgCQlpZiAoJChldmVudC50YXJnZXQpLmhhc0NsYXNzKCdsb2FkaW5nJykp +IHsKICAgIAkJCWV2ZW50LnN0b3AoKTsKICAgIAkJCXJldHVybiBmYWxzZTsKICAg +IAkJfQogICAgCQl2YXIgbyA9IG51bGw7CiAgICAJCWlmIChzZWxmLnN1Ym1pdChl +dmVudC50YXJnZXQubmFtZSwgZXZlbnQudGFyZ2V0LmdldCgicmVsIikgJiYgKGV2 +YWwoJ289JyArIGV2ZW50LnRhcmdldC5nZXQoInJlbCIpKSkpKQogICAgCQkJZXZl +bnQuc3RvcCgpOwogICAgCX0KCQkKCQlmb3IgKHZhciBpPTA7IGk8Zm9ybS5lbGVt +ZW50cy5sZW5ndGg7IGkrKykgewoJCQlpZiAodGhpcy5fZm9ybS5lbGVtZW50c1tp +XS50eXBlID09ICdzdWJtaXQnKSB7CgkJCQkkKHRoaXMuX2Zvcm0uZWxlbWVudHNb +aV0pLmFkZEV2ZW50KCdjbGljaycsIG9uU3VibWl0RnVuY3Rpb24pOwoJCQl9CgkJ +fQoJCQoJCWZvcm0uYWRkRXZlbnQoJ3N1Ym1pdCcsIG9uU3VibWl0RnVuY3Rpb24p +OwoJCQoJCQoJCXZhciBleHRlbmRlciA9IHRoaXMuX2Zvcm0uZ2V0RWxlbWVudCgi +YS5mb3JtLWV4dGVuZGVyIiksIAoJCWV4dHM7CgkJCgkJaWYgKGV4dGVuZGVyKSB7 +CgkJCWV4dHMgPSAkKGV4dGVuZGVyKS5nZXRBdHRyaWJ1dGUoInJldiIpOwoJCX07 +CgkJIAoJCWlmICghZXh0cykgeyBleHRzID0gdGhpcy5fZm9ybS5nZXRBdHRyaWJ1 +dGUoImV4dGVuZCIpO30KCQlpZiAoZXh0cykgewoJCQl2YXIgZXh0ZW5kaW5ncyA9 +IGV4dHMuc3BsaXQoJywnKTsKCQkJZm9yICh2YXIgaT0wO2k8ZXh0ZW5kaW5ncy5s +ZW5ndGg7aSsrKSB7CgkJCQl2YXIgZXhuYW1lID0gZXh0ZW5kaW5nc1tpXTsKCQkJ +CWlmICh0bS5Gb3Jtc1tleG5hbWVdKSB7CgkJCQkJdG0uRm9ybXNbZXhuYW1lXS5j +YWxsKHRoaXMpOwoJCQkJfSBlbHNlIHsKCQkJCQkoZnVuY3Rpb24obm0pewoJCQkJ +CQl0bS5Gb3Jtcy5sb2FkKG5tLCAoZnVuY3Rpb24oKXsKCQkJCQkJCWlmICh0bS5G +b3Jtc1tubV0pCgkJCQkJCQkJdG0uRm9ybXNbbm1dLmNhbGwodGhpcyk7CgkJCQkJ +CX0pLmJpbmQodGhpcykpOwoJCQkJCX0pLmJpbmQodGhpcykoZXhuYW1lKTsKCQkJ +CX0KCQkJfQoJCX0KCX0sCgoJcmVzZXRWYWxpZGF0aW9uOiBmdW5jdGlvbigpIHsK +CQl0aGlzLl92YWxpZGF0b3IuY2xlYXIoKTsKCQl0aGlzLl92YWxpZGF0b3IuYWRk +RWxlbWVudHModGhpcy5fZm9ybSk7CgkJdGhpcy5fZm9ybS5nZXRFbGVtZW50cygn +Lm5vLXZhbGlkYXRlJykuZm9yRWFjaCgoZnVuY3Rpb24oaXRlbSl7CgkJCXRoaXMu +X3ZhbGlkYXRvci5yZW1vdmVFbGVtZW50cyhpdGVtKTsKCQl9KS5iaW5kKHRoaXMp +KTsKCX0sCgoJZXJyb3JEZXNjcmlwdGlvbnM6IHsKCQkncmVxdWlyZWQnOiAn0KHQ +u9C10LTRg9C10YIg0LfQsNC/0L7Qu9C90LjRgtGMINC/0L7Qu9C1JywKCQknbWlu +bGVuJzogJ9Ci0LXQutGB0YIg0YHQu9C40YjQutC+0Lwg0LrQvtGA0L7RgtC60LjQ +uScsCgkJJ21heGxlbic6ICfQotC10LrRgdGCINGB0LvQuNGI0LrQvtC8INC00LvQ +uNC90L3Ri9C5JywKCQknbG9naW4nOiAn0J3QtdCy0LXRgNC90L4g0YPQutCw0LfQ +sNC9INC70L7Qs9C40L0nLAoJCSdlbWFpbCc6ICfQndC10LLQtdGA0L3QviDRg9C6 +0LDQt9Cw0L0g0LDQtNGA0LXRgSDRjdC70LXQutGC0YDQvtC90L3QvtC5INC/0L7R +h9GC0YsnLAoJCSdoYWJyYWN1dG1lJyA6ICfQmNGB0L/QvtC70YzQt9GD0LnRgtC1 +INGF0LDQsdGA0LDQutCw0YIsINGH0YLQviDQsdGLINGB0LrRgNGL0YLRjCDQsdC+ +0LvRjNGI0L7QuSDRgtC10LrRgdGCINC30LAg0YHRgdGL0LvQutC+0LkgwqvRh9C4 +0YLQsNGC0Ywg0LTQsNC70YzRiNC1wrsnLAoJCSdyYWRpb1JlcXVpcmVkJzogJ9Ch +0LvQtdC00YPQtdGCINC30LDQv9C+0LvQvdC40YLRjCDQv9C+0LvQtScKCX0sCgkK +CS8qKgoJICog0JLQsNC70LjQtNCw0YbQuNGPINCy0YHQtdC5INGE0L7RgNC80Ysg +0Lgg0LLRi9Cy0L7QtCDQvtGI0LjQsdC+0Log0YDRj9C00L7QvCDRgSDQv9C+0LvR +j9C80LgKCSAqLwoJdmFsaWRhdGU6IGZ1bmN0aW9uKCkgewoJCQoJCXZhciBpbnZh +bGlkRmllbGRzID0gdGhpcy5fZm9ybS5nZXRFbGVtZW50cygnLmludmFsaWQnKS5m +b3JFYWNoKGZ1bmN0aW9uKGRsKXsKCQkJZGwucmVtb3ZlQ2xhc3MoJ2ludmFsaWQn +KTsKCQl9KTsKCQl0aGlzLnNob3dVbmtub3duRXJyb3IoJycpOwoJCQoJCXZhciBl +cnJvcnMgPSB0aGlzLl92YWxpZGF0b3IudmFsaWRhdGUoKTsKCQkKCQkvLyBDQVBU +Q0hBCgkJaWYodGhpcy5jYXB0Y2hhICYmICQoJ2NhcHRjaGFfd3JhcHBlcicpLmhh +c0NsYXNzKCdoaWRkZW4nKSAmJiBlcnJvcnMubGVuZ3RoID4gMCl7CgkJICBmb3Ig +KHZhciBpPTA7IGk8ZXJyb3JzLmxlbmd0aDsgaSsrKSB7CgkJICAgIC8vYWxlcnQo +J2ExOiAnK2Vycm9yc1tpXS5lbGVtZW50Lm5hbWUpOwoJCSAgICBpZihlcnJvcnNb +aV0uZWxlbWVudC5uYW1lID09ICdjYXB0Y2hhJyl7CgkJICAgICAgZXJyb3JzLnNw +bGljZShpLDEpOyAKCQkgICAgfQoJCSAgfQoJCX0KCQkJICAJICAgIAoJCQoJCQoJ +CWlmIChlcnJvcnMubGVuZ3RoID4gMCkgewoJCQlmb3IgKHZhciBpPTA7IGk8ZXJy +b3JzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgLy9hbGVydCgnYTI6ICcrZXJyb3Jz +W2ldLmVsZW1lbnQubmFtZSk7CgkJCQl2YXIgZmllbGRIb2xkZXIgPSAkKGVycm9y +c1tpXS5lbGVtZW50KS5nZXRQYXJlbnQoJ2RsJyk7CgkJCQl2YXIgZXJyb3JGaWVs +ZEhvbGRlciA9IGZpZWxkSG9sZGVyLmdldEVsZW1lbnQoJy5lcnJvcicpOwoJCQkJ +dmFyIGVycm9yRmllbGQgPSBlcnJvckZpZWxkSG9sZGVyLmdldEVsZW1lbnQoJ3Nw +YW4nKTsKCQkJCXZhciBlcnJvckxpc3QgPSBlcnJvckZpZWxkSG9sZGVyLmdldEVs +ZW1lbnQoJ3VsJyk7CgkJCQkKCQkJCXZhciBlcnJvclRleHQgPSB0aGlzLmVycm9y +RGVzY3JpcHRpb25zW2Vycm9yc1tpXS5lcnJvclR5cGVdOwoJCQkJCgkJCQlpZiAo +ZXJyb3JMaXN0KSB7CgkJCQkJdmFyIGVycm9yTGkgPSBlcnJvckxpc3QuZ2V0RWxl +bWVudCgnLicgKyBlcnJvcnNbaV0uZXJyb3JUeXBlKTsKCQkJCQlpZiAoZXJyb3JM +aSkgewoJCQkJCQllcnJvclRleHQgPSBlcnJvckxpLmdldCgnaHRtbCcpOwoJCQkJ +CX0KCQkJCX0KCQkJCQoJCQkJdGhpcy5zaG93RXJyb3IoZXJyb3JzW2ldLmVsZW1l +bnQsIGVycm9yVGV4dCk7CgoJCQl9CgkJCXJldHVybiBmYWxzZTsKCQl9IGVsc2Ug +ewoJCQlyZXR1cm4gdHJ1ZTsKCQl9CgkJCgl9LAoJCgkvKioKCSAqINCf0L7QutCw +0Lcg0YHQvtC+0LHRidC10L3QuNGPINC+0LEg0L7RiNC40LHQutC1CgkgKiBAcGFy +YW0ge0VsZW1lbnR9IGVsZW1lbnQKCSAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0Cgkg +Ki8KCXNob3dFcnJvcjogZnVuY3Rpb24oZWxlbWVudCwgdGV4dCkgewoKCQl2YXIg +ZmllbGRIb2xkZXIgPSAkKGVsZW1lbnQpLmdldFBhcmVudCgnZGwnKTsKCQlpZiAo +IWZpZWxkSG9sZGVyKSB7IHRoaXMuc2hvd1Vua25vd25FcnJvcih0ZXh0KTsgcmV0 +dXJuOyB9CgkJdmFyIGVycm9yRmllbGRIb2xkZXIgPSBmaWVsZEhvbGRlci5nZXRF +bGVtZW50KCcuZXJyb3InKTsKCQlpZiAoIWVycm9yRmllbGRIb2xkZXIpIHsgdGhp +cy5zaG93VW5rbm93bkVycm9yKHRleHQpOyByZXR1cm47IH0KCQl2YXIgZXJyb3JG +aWVsZCA9IGVycm9yRmllbGRIb2xkZXIuZ2V0RWxlbWVudCgnc3BhbicpOwoJCWlm +ICghZXJyb3JGaWVsZCkgeyB0aGlzLnNob3dVbmtub3duRXJyb3IodGV4dCk7IHJl +dHVybjsgfQoJCWVycm9yRmllbGQuc2V0KCdodG1sJywgdGV4dCk7CgkJZmllbGRI +b2xkZXIuYWRkQ2xhc3MoJ2ludmFsaWQnKTsKCgl9LAoJCgkvKioKCSAqINCf0L7Q +utCw0Lcg0L3QtdC40LfQstC10YHRgtC90L7QuSDQvtGI0LjQsdC60LgKCSAqIEBw +YXJhbSB7T2JqZWN0fSB0ZXh0CgkgKi8KCXNob3dVbmtub3duRXJyb3I6IGZ1bmN0 +aW9uKHRleHQpIHsKCQkKCQl2YXIgZWxlbWVudCA9IHRoaXMuX2Zvcm0uZ2V0RWxl +bWVudCgnLnVua25vd24tZXJyb3InKTsKCQlpZiAoZWxlbWVudCkgewoJCQllbGVt +ZW50LmlubmVySFRNTCA9IHRleHQ7CgkJfQoJCQoJfSwKCgkvKioKCSAqINCY0L3Q +uNGG0LjQsNGG0LjRjyDQstCw0LvQuNC00LDRhtC40Lgg0Lgg0L7RgtC/0YDQsNCy +0LrQuCDRhNC+0YDQvNGLCgkgKiBAcGFyYW0ge1N0cmluZ30gYWN0aW9uCgkgKi8K +CXN1Ym1pdDogZnVuY3Rpb24oYWN0aW9uLCBwYXJhbXMpIHsKCQlwYXJhbXMgJiYg +cGFyYW1zLnJlc2V0VmFsaWRhdGlvbiAmJiB0aGlzLnJlc2V0VmFsaWRhdGlvbigp +OwoJCQoJCWlmKGFjdGlvbikgewoJCSAgICB2YXIgaW5wdXQgPSB0aGlzLl9mb3Jt +LmdldEVsZW1lbnQoJ2lucHV0W25hbWU9YWN0aW9uXScpOwoJCSAgICBpZiAoaW5w +dXQpIHsKCQkgICAgICAgIGlucHV0LnZhbHVlID0gYWN0aW9uOwoJCSAgICB9CgkJ +fQoJCQoJCWlmICh0aGlzLnZhbGlkYXRlKCkpCgkJCWlmICh0aGlzLmFqYXgpIHsK +CQkJCXRoaXMuc3VibWl0Q2FuY2VsZWQgPSBmYWxzZTsKCQkJCXRoaXMuZmlyZUV2 +ZW50KCJ0bTpiZWZvcmUtc2VuZCIpOwoJCQkJaWYgKCF0aGlzLnN1Ym1pdENhbmNl +bGVkKSB7CgkJCQkJdGhpcy5zZW5kQWpheChhY3Rpb24sIHBhcmFtcyk7CgkJCQkJ +dGhpcy5maXJlRXZlbnQoInRtOmFmdGVyLXNlbmQiKTsKCQkJCX0gZWxzZQoJCQkJ +CXJldHVybiBmYWxzZTsKCQkJfQoJCQllbHNlIAoJCQkJcmV0dXJuIGZhbHNlOwoJ +CXJldHVybiB0cnVlOwoJfSwKCQoJc2V0TG9hZGluZzogZnVuY3Rpb24obCkgewoJ +CWlmIChsKSB7CgkJCXRoaXMuZmlyZUV2ZW50KCdmb3JtOmRpc2FibGVkJyk7CgkJ +CWZvciAodmFyIGk9MDtpPHRoaXMuX2Zvcm0uZWxlbWVudHMubGVuZ3RoO2krKykg +ewoJCQkJaWYgKHRoaXMuX2Zvcm0uZWxlbWVudHNbaV0udHlwZSA9PSAnc3VibWl0 +JykgewoJCQkJCSQodGhpcy5fZm9ybS5lbGVtZW50c1tpXSkuYWRkQ2xhc3MoJ2xv +YWRpbmcnKTsKCQkJCQkkKHRoaXMuX2Zvcm0uZWxlbWVudHNbaV0pLmRpc2FibGVk +ID0gdHJ1ZTsKCQkJCX0KCQkJfQoJCX0gZWxzZSB7CgkJCXRoaXMuZmlyZUV2ZW50 +KCdmb3JtOmVuYWJsZWQnKTsKCQkJZm9yICh2YXIgaT0wO2k8dGhpcy5fZm9ybS5l +bGVtZW50cy5sZW5ndGg7aSsrKSB7CgkJCQlpZiAodGhpcy5fZm9ybS5lbGVtZW50 +c1tpXS50eXBlID09ICdzdWJtaXQnKSB7CgkJCQkJJCh0aGlzLl9mb3JtLmVsZW1l +bnRzW2ldKS5yZW1vdmVDbGFzcygnbG9hZGluZycpOwoJCQkJCSQodGhpcy5fZm9y +bS5lbGVtZW50c1tpXSkuZGlzYWJsZWQgPSBmYWxzZTsKCQkJCX0KCQkJfQoJCX0K +CX0sCgkKCS8qKgoJICog0J7RgtC/0YDQsNCy0LrQuCDRhNC+0YDQvNGLINGH0LXR +gNC10LcgQWpheAoJICogQHBhcmFtIHtTdHJpbmd9IGFjdGlvbgoJICovCglzZW5k +QWpheDogZnVuY3Rpb24oYWN0aW9uLCBwYXJhbXMpIHsJCgkJdGhpcy5zZXRMb2Fk +aW5nKHRydWUpOwoKCQl2YXIgc2VsZiA9IHRoaXMsCgkJICAgIG9uU3VjY2VzcyA9 +IGZ1bmN0aW9uIChyZXNwb25zZVRleHQsIHJlc3BvbnNlWE1MKSB7CgkJICAgIHNl +bGYuX2hhbmRsZXIucHJvY2VzcyhyZXNwb25zZVhNTHx8cmVzcG9uc2VUZXh0LCBz +ZWxmKTsKCQl9LAoJCSAgICBvbkNvbXBsZXRlID0gZnVuY3Rpb24gKCkgewoJCSAg +ICBzZWxmLnNldExvYWRpbmcoZmFsc2UpOwoJCX0KCQkKCQlpZiAodGhpcy5pZnJh +bWVBamF4KSB7CgkJICAgIHRtLnNlbmRGb3JtVmlhSWZyYW1lKHsKCQkgICAgICAg +ICdmb3JtJzogdGhpcy5fZm9ybSwKCQkgICAgICAgICdvblN1Y2Nlc3MnOiBvblN1 +Y2Nlc3MsCgkJICAgICAgICAnb25Db21wbGV0ZSc6IG9uQ29tcGxldGUKCQkgICAg +fSk7CgkJfSBlbHNlIHsKCQkgICAgdmFyIGV4dGVuZERhdGEgPSB7fTsKICAgIAkJ +ZXh0ZW5kRGF0YVthY3Rpb25dID0gJ3RydWUnOwogICAgCQl2YXIgZGF0YSA9IHRo +aXMudG9PYmplY3QoZXh0ZW5kRGF0YSk7CgogICAgCQlpZiAodGhpcy5fZm9ybS5n +ZXRBdHRyaWJ1dGVOb2RlKSB7CiAgICAJCQl2YXIgeHVybCA9IHRoaXMuX2Zvcm0u +Z2V0QXR0cmlidXRlTm9kZSgnYWN0aW9uJykudmFsdWU7CiAgICAJCX0gZWxzZSB7 +CiAgICAJCQl2YXIgeHVybCA9IHRoaXMuX2Zvcm0uZ2V0KCdhY3Rpb24nKTsgCiAg +ICAJCX0KCiAgICAJCXBhcmFtcyAmJiBwYXJhbXMudXJsICYmICh4dXJsID0gcGFy +YW1zLnVybCk7CgogICAgCQl2YXIgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHsKICAg +IAkJCSdtZXRob2QnOiAncG9zdCcsCiAgICAJCQkndXJsJzogeHVybCwKICAgIAkJ +CSdkYXRhJzogZGF0YSwKICAgIAkJCSdvblN1Y2Nlc3MnOiBvblN1Y2Nlc3MsCiAg +ICAJCQknb25Db21wbGV0ZSc6IG9uQ29tcGxldGUKICAgIAkJfSkuc2VuZCgpOwoJ +CX0KCX0sCgkKCS8qKgoJICog0JfQsNC/0LjRgdGMINC00LDQvdC90YvRhSDRhNC+ +0YDQvNGLINCyINC+0LHRitC10LrRggoJICogQHBhcmFtIHtPYmplY3R9IGV4dGVu +ZAoJICovCgl0b09iamVjdDogZnVuY3Rpb24oZXh0ZW5kKSB7CgkJdmFyIHJlc3Vs +dCA9IHt9OwoKCQl2YXIgZWxlbWVudHMgPSB0aGlzLl9mb3JtLmVsZW1lbnRzOwoJ +CWZvciAodmFyIGk9MCwgbGVuZ3RoPWVsZW1lbnRzLmxlbmd0aDsgaTxsZW5ndGg7 +IGkrKykgewoJCQkKCQkJdmFyIGVsZW1lbnQgPSAkKGVsZW1lbnRzW2ldKTsKCQkJ +CgkJCWlmIChlbGVtZW50LmdldFBhcmVudCgnLm5vLXNlbmQnKSkgY29udGludWU7 +CgoJCQl2YXIgdHlwZSAgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgndHlwZScpOwoJ +CQl2YXIgcGFyYW0gPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnbmFtZScpOwoJCQl2 +YXIgdmFsdWUgPSBlbGVtZW50LnZhbHVlOwoJCQkKCQkJaWYgKHBhcmFtKSB7CgkJ +CQoJCQkJaWYgKHR5cGUgPT0gJ3JhZGlvJyAmJiAhZWxlbWVudC5jaGVja2VkKSB7 +CgkJCQkJY29udGludWU7CgkJCQl9CgkJCQkKCQkJCWlmICh0eXBlID09ICdjaGVj +a2JveCcpIHsKCQkJCQlpZiAoIWVsZW1lbnQuY2hlY2tlZCkgCgkJCQkJCWNvbnRp +bnVlOwoJCQkJCWVsc2UgewoJCQkJCQlyZXN1bHRbcGFyYW1dID0gdmFsdWU9PSdv +bicgfHwgIXZhbHVlID8gJ3RydWUnIDogdmFsdWU7CgkJCQkJCWNvbnRpbnVlOwoJ +CQkJCX0KCQkJCX0KCQkJCQoJCQkJaWYgKHR5cGUgPT0gJ3N1Ym1pdCcgfHwgdHlw +ZSA9PSAncmVzZXQnKSB7CgkJCQkJY29udGludWU7CgkJCQl9CgkJCQkKCQkJCXJl +c3VsdFtwYXJhbV0gPSB2YWx1ZTsKCQkJfQoJCX0KCgkJaWYgKGV4dGVuZCkKCQkJ +JGV4dGVuZChyZXN1bHQsIGV4dGVuZCk7CgoJCXJldHVybiByZXN1bHQ7CgoJfSwK +CQoJLyoqCgkgKiDQktC60LvRjtGH0LDQtdGCINC/0L7QtNC00LXRgNC20LrRgyBB +amF4INC00LvRjyDRhNC+0YDQvNGLCgkgKi8KCWVuYWJsZUFqYXg6IGZ1bmN0aW9u +KCkgewoJCQoJCWlmICghdGhpcy5faGFuZGxlcikgewoJCQl0aGlzLl9oYW5kbGVy +ID0gbmV3IHRtLkhhbmRsZXIoKTsKCQkJdGhpcy5faGFuZGxlci5leHRlbmQoewoJ +CQkJJ2Vycm9yJzogZnVuY3Rpb24obm9kZXMsIGpzb24pIHsKCQkJCQkKCQkJCQlm +b3IgKHZhciBpPTA7IGk8bm9kZXMubGVuZ3RoOyBpKyspIHsKCQkJCQkJdmFyIG5v +ZGUgPSBub2Rlc1tpXTsKCQkJCQkJaWYgKG5vZGUuZ2V0QXR0cmlidXRlKCJmaWVs +ZCIpKSB7CgkJCQkJCQlmb3IgKHZhciBlPTA7IGU8dGhpcy5fZm9ybS5lbGVtZW50 +cy5sZW5ndGg7IGUrKykgewoJCQkJCQkJCXZhciBpdGVtID0gdGhpcy5fZm9ybS5l +bGVtZW50c1tlXTsKCQkJCQkJCQlpZiAoJChpdGVtKS5nZXQoIm5hbWUiKSA9PSBu +b2RlLmdldEF0dHJpYnV0ZSgiZmllbGQiKSkgewoJCQkJCQkJCQl0aGlzLnNob3dF +cnJvcihpdGVtLCBub2RlLmZpcnN0Q2hpbGQuZGF0YSk7CQkJCQkJCQkJCgkJCQkJ +CQkJfQoJCQkJCQkJfQoJCQkJCQl9IGVsc2UgewoJCQkJCQkJaWYgKHRoaXMuX2Zv +cm0uZ2V0RWxlbWVudCgnLnVua25vd24tZXJyb3InKSkgewoJCQkJCQkJCXRoaXMu +c2hvd1Vua25vd25FcnJvcihub2RlLmZpcnN0Q2hpbGQuZGF0YSk7CgkJCQkJCQl9 +IGVsc2UgewoJCQkJCQkJCWZ1dHVfYWxlcnQoRkFULnZvdGluZ3NfaGVhZGVyLCBu +b2RlLmZpcnN0Q2hpbGQuZGF0YSwgdHJ1ZSwgJ2Vycm9yJyk7CgkJCQkJCQl9CgkJ +CQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0pOwoJCX0KCQkKCQl0aGlzLmFqYXggPSB0 +cnVlOwoJCQoJfSwKCgkvKioKCSAqINCS0YvQutC70Y7Rh9Cw0LXRgiDQv9C+0LTQ +tNC10YDQttC60YMgQWpheCDQtNC70Y8g0YTQvtGA0LzRiwoJICovCglkaXNhYmxl +QWpheDogZnVuY3Rpb24oKSB7CgoJCXRoaXMuYWpheCA9IGZhbHNlOwoKCX0KCn0p +OwoKLyoqCiAqINCf0YDQuNGB0L7QtdC00LjQvdC10L3QuNC1INC90LDRiNC10Lkg +0YTQvtGA0LzRiyDQutC+INCy0YHQtdC8INC90YPQttC90YvQvCDRhNC+0YDQvNCw +0LwKICog0LIg0LTQvtC60YPQvNC10L3RgtC1LgogKi8KdG0uRm9ybS5hdHRhY2gg +PSBmdW5jdGlvbigpIHsKCQoJZm9yICh2YXIgaT0wOyBpPGRvY3VtZW50LmZvcm1z +Lmxlbmd0aDsgaSsrKSB7CgkJdmFyIGZvcm0gPSAkKGRvY3VtZW50LmZvcm1zW2ld +KTsKCQlpZiAoIWZvcm0uYXR0YWNoZWQpIHsKCQkJaWYgKGZvcm0uaGFzQ2xhc3Mo +InRtLWZvcm0iKSkgewoJCQkJdmFyIHRtRm9ybSA9IG5ldyB0bS5Gb3JtKGRvY3Vt +ZW50LmZvcm1zW2ldKTsKCQkJCS8vIC4uLgoJCQl9CgkJfQoJfQoKfTsKCnRtLmlu +aXQuYWRkKGZ1bmN0aW9uKCl7CgkKCXRtLkZvcm0uYXR0YWNoKCk7CgkKfSk7 + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=autosuggest.js +Content-Type: application/x-javascript; charset=utf-8; name=autosuggest.js +Content-Location: http://habrahabr.ru/js/1307631427/autosuggest.js +Content-Transfer-Encoding: Base64 + +dmFyIGF1dG9zdWdnZXN0Q2xhc3MgPSBmdW5jdGlvbihmaWVsZCwgc3VibWl0VHlw +ZSwgaXNNdWx0aXBseVN1Z2dlc3Rpb25zT24sIHN5bWJvbCkgew0KDQoJZmllbGQu +c2V0QXR0cmlidXRlKCdhdXRvY29tcGxldGUnLCAnb2ZmJyk7DQoJDQoJaWYoaXNN +dWx0aXBseVN1Z2dlc3Rpb25zT24gJiYgIXN5bWJvbCkgew0KCQl0aGlzLmlzTXVs +dGlwbHlTdWdnZXN0aW9uc09uID0gaXNNdWx0aXBseVN1Z2dlc3Rpb25zT247DQoJ +CXRoaXMuc3ltYm9sID0gWycsJ107DQoJfQ0KCWVsc2UgaWYgKCFpc011bHRpcGx5 +U3VnZ2VzdGlvbnNPbikgewkNCgkJdGhpcy5pc011bHRpcGx5U3VnZ2VzdGlvbnNP +biA9IGZhbHNlOw0KCQl0aGlzLnN5bWJvbCA9ICcnOw0KCX0NCgllbHNlIGlmKGlz +TXVsdGlwbHlTdWdnZXN0aW9uc09uICYmIHN5bWJvbCkgew0KCQl0aGlzLmlzTXVs +dGlwbHlTdWdnZXN0aW9uc09uID0gdHJ1ZTsNCgkJdGhpcy5zeW1ib2wgPSBzeW1i +b2w7DQoJfQ0KCWlmKCFzdWJtaXRUeXBlKSB7DQoJCXZhciBzdWJtaXRUeXBlID0g +J3NlYXJjaCc7DQoJfQ0KCQ0KCXZhciBfdGhpcyA9IHRoaXM7DQoJdGhpcy5wb3Np +dGlvbiA9IDA7DQoJdGhpcy5jdXJyVmFsdWVzID0gW107DQoJDQoJdGhpcy5sYXN0 +VmFsdWUgPSAnJzsNCgl0aGlzLm5ld1ZhbHVlID0gJyc7DQoJDQoJdGhpcy5wYXJh +bXMgPSB7fTsNCgkNCgl0aGlzLmFqYXhVcmwgPSAnL2FqYXgvc3VnZ2VzdC8nOw0K +CQ0KCS8vINCY0YHQv9C+0LvRjNC30YPQtdC80YvQtSDQsiDRhNC+0YDQvNC1IGNs +YXNzTmFtZXMNCgl0aGlzLmNsYXNzTmFtZXMgPSB7DQoJCWhvbGRlciA6ICdqcy1h +dXRvc3VnZ2VzdC1ob2xkZXInLCAJLy/RgNC+0LTQuNGC0LXQu9GMINC/0L7Qu9GP +INCy0LLQvtC00LAg0Lgg0L/QvtC70Y8g0LLRi9Cy0L7QtNCwINGA0LXQt9GD0LvR +jNGC0LDRgtC+0LIg0L/QvtC40YHQutCwDQoJCWZpZWxkIDogJ2pzLWF1dG9zdWdn +ZXN0LWZpZWxkJywgCS8v0L/QvtC70LUg0LLQstC+0LTQsA0KCQlvdXRwdXQgOiAn +anMtYXV0b3N1Z2dlc3Qtb3V0cHV0JywJLy/RgNC+0LTQuNGC0LXQu9GMINC/0L7Q +u9C10Lkg0LLRi9Cy0L7QtNCwINGA0LXRg9C30LvRjNGC0LDRgtC+0LINCgkJaXNM +b2FkaW5nIDogJ2pzLWF1dG9zdWdnZXN0LWxvYWRpbmcnCS8v0L/RgNC10LvQvtCw +0LTQtdGADQoJfTsNCgkNCgkvLyDQmNC80LXQvdCwIHhtbCDQvdC+0LTQvtCyINC4 +INGB0L7QvtGC0LLQtdGB0YLQstGD0Y7RidC40LUg0LjQvCDQuNC80LXQvdCwINGE +0YPQvdC60YbQuNC5LdC+0LHRgNCw0LHQvtGC0YfQuNC60L7Qsg0KCXRoaXMueG1s +UmVzcG9uc2UgPSB7DQoJCW5vZGF0YTogew0KCQkJbm9kZTogJ25vZGF0YScsDQoJ +CQloYW5kbGVyOiBudWxsDQoJCX0sDQoNCgkJZXJyb3I6IHsNCgkJCW5vZGU6ICdl +cnJvcicsDQoJCQloYW5kbGVyOiAneG1sUmVzcG9uc2VIYW5kbGVyX2Vycm9yJw0K +CQl9LA0KDQoJCWl0ZW06IHsNCgkJCW5vZGU6ICdpdGVtJywNCgkJCWhhbmRsZXI6 +ICd4bWxSZXNwb25zZUhhbmRsZXJfb3V0cHV0Jw0KCQl9DQoJfTsNCgkNCgkNCgkv +LyDQktGL0LLQvtC00LjQvNGL0LkgaHRtbCANCgl0aGlzLmh0bWxSZXNwb25zZSA9 +IHsNCgkJaXRlbTogJ2RpdicsDQoJCXZhbHVlOiAnZW0nDQoJfTsNCgkNCglpZiAo +aXNPcGVyYSB8fCB3aW5kb3cud2Via2l0KSB7DQoJCWZpZWxkLm9ua2V5cHJlc3Mg +PSBmdW5jdGlvbihldikgew0KCQkJdmFyIHRhcmcgPSBudWxsOw0KCQkJaWYgKGV2 +LnRhcmdldCkgdGFyZyA9IGV2LnRhcmdldDsNCgkJCWVsc2UgaWYgKGV2LnNyY0Vs +ZW1lbnQpIHRhcmcgPSBldi5zcmNFbGVtZW50Ow0KCQkJaWYgKHRhcmcubm9kZVR5 +cGUgPT0gMykgLy8gZGVmZWF0IFNhZmFyaSBidWcNCgkJCQl0YXJnID0gdGFyZy5w +YXJlbnROb2RlOw0KCQkJc2V0VGltZW91dChmdW5jdGlvbigpeyBfdGhpcy5vbkNo +YW5nZSh0YXJnLCBzdWJtaXRUeXBlKTsgfSwgMzApOw0KCQl9DQoJfQ0KCQ0KCWZp +ZWxkLm9ua2V5ZG93biA9IGZ1bmN0aW9uKGV2KXsNCgkJZXYgPSBldiB8fCB3aW5k +b3cuZXZlbnQ7DQoJCWlmIChfdGhpcy5pc0FjdGlvbktleShldikpIHsNCgkJCV90 +aGlzLm9uS2V5VXAoZXYpOw0KCQl9DQoJfTsNCgkNCglmaWVsZC5vbmtleXVwID0g +ZnVuY3Rpb24oZXYpew0KCQlldiA9IGV2IHx8IHdpbmRvdy5ldmVudDsNCgkJaWYg +KF90aGlzLmlzQWN0aW9uS2V5KGV2KSkgcmV0dXJuOw0KCQlpZiAoIWlzT3BlcmEg +JiYgIXdpbmRvdy53ZWJraXQpIHsNCgkJCXZhciB0YXJnID0gbnVsbDsNCgkJCWlm +IChldi50YXJnZXQpIHRhcmcgPSBldi50YXJnZXQ7DQoJCQllbHNlIGlmIChldi5z +cmNFbGVtZW50KSB0YXJnID0gZXYuc3JjRWxlbWVudDsNCgkJCWlmICh0YXJnLm5v +ZGVUeXBlID09IDMpIC8vIGRlZmVhdCBTYWZhcmkgYnVnDQoJCQkJdGFyZyA9IHRh +cmcucGFyZW50Tm9kZTsNCgkJCXNldFRpbWVvdXQoZnVuY3Rpb24oKXsgX3RoaXMu +b25DaGFuZ2UodGFyZywgc3VibWl0VHlwZSk7IH0sIDMwKTsNCgkJfQ0KCX07DQoJ +DQp9Ow0KDQovLyDQn9C10YDQtdCy0L7QtNC40LwgeG1sINC00LXRgNC10LLQviDQ +siDQvtCx0YrQtdC60YINCmF1dG9zdWdnZXN0Q2xhc3MucHJvdG90eXBlLnBhcnNl +WE1MID0gZnVuY3Rpb24oeG1sT2JqKXsNCgkJdmFyIHhtbE5vZGVzID0ge307DQoN +CgkJZm9yIChwcm9wIGluIHRoaXMueG1sUmVzcG9uc2Upew0KCQkJeG1sTm9kZXNb +cHJvcF0gPSB4bWxPYmouZ2V0RWxlbWVudHNCeVRhZ05hbWUodGhpcy54bWxSZXNw +b25zZVtwcm9wXS5ub2RlKTsNCgkJfQ0KCQlyZXR1cm4geG1sTm9kZXM7DQp9Ow0K +DQphdXRvc3VnZ2VzdENsYXNzLnByb3RvdHlwZS5vbktleVVwID0gZnVuY3Rpb24o +ZXYpIHsNCglldiA9IGV2IHx8IHdpbmRvdy5ldmVudDsNCglyZXR1cm4gdGhpcy5h +Y3Rpb24oZXYpOw0KfTsNCg0KYXV0b3N1Z2dlc3RDbGFzcy5wcm90b3R5cGUub25D +aGFuZ2UgPSBmdW5jdGlvbihmaWVsZCwgc3VibWl0VHlwZSkgew0KCWlmICghZmll +bGQuZmFrZUNoYW5nZSkgew0KCQl0aGlzLnByb2Nlc3NRdW90ZXMoZmllbGQpOw0K +CQl0aGlzLnJlcXVlc3RTdWdnZXN0cyhmaWVsZCwgc3VibWl0VHlwZSk7DQoJfQ0K +CQ0KfTsNCg0KYXV0b3N1Z2dlc3RDbGFzcy5wcm90b3R5cGUuaXNBY3Rpb25LZXkg +PSBmdW5jdGlvbihldikgew0KCXN3aXRjaCAoZ2V0Q2hhckNvZGUoZXYpKSB7DQoJ +CWNhc2UgMTM6IC8vIEVudGVyDQoJCWNhc2UgMjc6IC8vIEVzY2FwZQ0KCQljYXNl +IDQwOiAvLyBEb3duDQoJCWNhc2UgMzg6IC8vIFVwDQoJCQlyZXR1cm4gdHJ1ZTsN +CgkJYnJlYWs7DQoJfQ0KfQ0KDQphdXRvc3VnZ2VzdENsYXNzLnByb3RvdHlwZS5h +Y3Rpb24gPSBmdW5jdGlvbihldikgew0KCXN3aXRjaCAoZ2V0Q2hhckNvZGUoZXYp +KSB7DQoJCWNhc2UgMTM6CS8v0LXRgdC70Lgg0L3QsNC20LDRgtCwINC60LvQsNCy +0LjRiNCwIEVudGVyDQoJCQlpZih0eXBlb2YodGhpcy5vdXRwdXQpICE9ICd1bmRl +ZmluZWQnICYmICEkKHRoaXMub3V0cHV0KS5oYXNDbGFzcygnaGlkZGVuJykpIHsg +Ly8gZml4ZWQgIzExMTcNCgkJCQlpZiAodGhpcy5zZXRWYWx1ZSgpKSB7DQoJCQkJ +CWlmICghZG9jdW1lbnQuYWxsKQ0KCQkJCQkJZXYucHJldmVudERlZmF1bHQoKTsN +CgkJCQkJZWxzZQ0KCQkJCQkJZXYucmV0dXJuVmFsdWUgPSBmYWxzZTsNCgkJCQl9 +DQoJCQl9DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJCWJyZWFrOw0KCQljYXNlIDI3OiAv +LyBFc2NhcGUNCgkJCWlmICghJCh0aGlzLm91dHB1dCkuaGFzQ2xhc3MoJ2hpZGRl +bicpKSB7DQoJCQkJJCh0aGlzLm91dHB1dCkuYWRkQ2xhc3MoJ2hpZGRlbicpOw0K +CQkJfQ0KCQkJcmV0dXJuIHRydWU7DQoJCQlicmVhazsNCgkJY2FzZSA0MDoJLy/Q +tdGB0LvQuCDQvdCw0LbQsNGC0LAg0LrQu9Cw0LLQuNGI0LAgItCS0L3QuNC3Ig0K +CQkJdGhpcy5tYWtlU3RlcHMoJ2Rvd24nKTsNCgkJCXJldHVybiB0cnVlOw0KCQli +cmVhazsNCgkJY2FzZSAzODoJLy/QtdGB0LvQuCDQvdCw0LbQsNGC0LAg0LrQu9Cw +0LLQuNGI0LAgItCS0LLQtdGA0YUiDQoJCQl0aGlzLm1ha2VTdGVwcygndXAnKTsN +CgkJCXJldHVybiB0cnVlOw0KCQlicmVhazsNCgl9DQoJcmV0dXJuIGZhbHNlOw0K +fQ0KDQphdXRvc3VnZ2VzdENsYXNzLnByb3RvdHlwZS5wcm9jZXNzUXVvdGVzID0g +ZnVuY3Rpb24oZmllbGQpIHsNCgl0aGlzLmlzUXVvdGVPcGVuZWQgPSBmYWxzZTsN +Cgl0aGlzLmlzUXVvdGVDbG9zZWRQcmV2aW91c2x5ID0gZmFsc2U7DQoJdGhpcy5u +b0luZGV4ZWRTdHJpbmcgPScnOw0KCWlmKGZpZWxkLnZhbHVlLmluZGV4T2YoJyIn +KSAhPSAtMSkgew0KCQl2YXIgcXVvdGVzUmVzdWx0cyA9IGZpZWxkLnZhbHVlLm1h +dGNoKC8iL2cpOw0KCX0NCglpZihxdW90ZXNSZXN1bHRzICYmIHF1b3Rlc1Jlc3Vs +dHMubGVuZ3RoJTI9PTApIHsNCgkJdGhpcy5pc1F1b3RlT3BlbmVkID0gZmFsc2U7 +DQoJCWlmKGZpZWxkLnZhbHVlLm1hdGNoKC8iJHwiXG58IlxyXG4vKSkgew0KCQkJ +dGhpcy5pc1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9IHRydWU7DQoJCX0NCgkJZWxz +ZSB7DQoJCQl0aGlzLmlzUXVvdGVDbG9zZWRQcmV2aW91c2x5ID0gZmFsc2U7DQoJ +CX0NCgl9DQoJZWxzZSBpZiAocXVvdGVzUmVzdWx0cyAmJiBxdW90ZXNSZXN1bHRz +Lmxlbmd0aCUyIT0wKSB7IHRoaXMuaXNRdW90ZU9wZW5lZCA9IHRydWU7IH0NCgkN +CglpZiAodGhpcy5pc011bHRpcGx5U3VnZ2VzdGlvbnNPbiA9PSB0cnVlKSB7IC8v +0LXRgdC70Lgg0LLQutC70Y7Rh9C10L3QsCDQvtC/0YbQuNGPINC80L3QvtC20LXR +gdGC0LLQtdC90L3Ri9GFINC/0L7QtNGB0LrQsNC30L7QuiANCgkJaWYodGhpcy5p +c1F1b3RlT3BlbmVkID09IHRydWUgfHwgdGhpcy5pc1F1b3RlQ2xvc2VkUHJldmlv +dXNseSA9PSB0cnVlKSB7IC8v0LXRgdC70Lgg0L7RgtC60YDRi9GC0LAg0LrQsNCy +0YvRh9C60LANCgkJCXZhciB3b3Jkc19xdW90ZXMgPSBmaWVsZC52YWx1ZS5zcGxp +dCgnIicpOw0KCQkJdGhpcy5pc1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9PSB0cnVl +PyB0aGlzLm5ld1ZhbHVlID0gd29yZHNfcXVvdGVzW3dvcmRzX3F1b3Rlcy5sZW5n +dGgtMl0gOiB0aGlzLm5ld1ZhbHVlID0gd29yZHNfcXVvdGVzW3dvcmRzX3F1b3Rl +cy5sZW5ndGgtMV0NCgkJCXRoaXMubmV3VmFsdWUgPSB0aGlzLm5ld1ZhbHVlLnJl +cGxhY2UoLyheXHMrKXwoXG4pL2csICcnKTsNCgkJCXZhciB3b3JkcyA9IGZpZWxk +LnZhbHVlLnNwbGl0KHRoaXMuc3ltYm9sKTsNCgkJCXZhciB3b3Jkc19sZW5ndGg9 +d29yZHMubGVuZ3RoLTE7DQoJCQlmb3IodmFyIGs9MDsgazx3b3Jkc19sZW5ndGg7 +IGsrKykgew0KCQkJCWlmKGs9PTApIHsNCgkJCQkJdGhpcy5ub0luZGV4ZWRTdHJp +bmcgKz0gd29yZHNba107DQoJCQkJfQ0KCQkJCWVsc2Ugew0KCQkJCQl0aGlzLm5v +SW5kZXhlZFN0cmluZyArPSB0aGlzLnN5bWJvbCArIHdvcmRzW2tdOw0KCQkJCX0N +CgkJCX0NCgkJfSBlbHNlIHsNCgkJCXZhciB3b3JkcyA9IGZpZWxkLnZhbHVlLnNw +bGl0KHRoaXMuc3ltYm9sKTsNCgkJCXRoaXMubmV3VmFsdWUgPSB3b3Jkc1t3b3Jk +cy5sZW5ndGgtMV0ucmVwbGFjZSgvKF5ccyspfChcbikvZywgJycpOw0KCQkJdmFy +IHdvcmRzX2xlbmd0aD13b3Jkcy5sZW5ndGgtMTsNCgkJCWZvcih2YXIgaz0wOyBr +PHdvcmRzX2xlbmd0aDsgaysrKSB7DQoJCQkJaWYoaz09MCkgew0KCQkJCQl0aGlz +Lm5vSW5kZXhlZFN0cmluZyArPSB3b3Jkc1trXTsNCgkJCQl9DQoJCQkJZWxzZSB7 +DQoJCQkJCXRoaXMubm9JbmRleGVkU3RyaW5nICs9IHRoaXMuc3ltYm9sICsgd29y +ZHNba107DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KCWVsc2Ugew0KCQlpZih0aGlz +LmlzUXVvdGVPcGVuZWQgPT0gdHJ1ZSkgew0KCQkJdmFyIHdvcmRzX3F1b3RlcyA9 +IGZpZWxkLnZhbHVlLnNwbGl0KCciJyk7DQoJCQl0aGlzLm5ld1ZhbHVlID0gd29y +ZHNfcXVvdGVzW3dvcmRzX3F1b3Rlcy5sZW5ndGgtMV0ucmVwbGFjZSgvKF5ccysp +fChcbikvZywgJycpOw0KCQl9DQoJCWVsc2Ugew0KCQkJdGhpcy5uZXdWYWx1ZSA9 +IGZpZWxkLnZhbHVlOw0KCQl9DQoJfQ0KfQ0KDQphdXRvc3VnZ2VzdENsYXNzLnBy +b3RvdHlwZS5yZXF1ZXN0U3VnZ2VzdHMgPSBmdW5jdGlvbihmaWVsZCwgc3VibWl0 +VHlwZSkgew0KCQkJdGhpcy5ob2xkZXIgPSB0aGlzLmhvbGRlciB8fCAkKGZpZWxk +KS5nZXRQYXJlbnQoJy4nICsgdGhpcy5jbGFzc05hbWVzLmhvbGRlcik7DQoJCQl0 +aGlzLm91dHB1dCA9IHRoaXMub3V0cHV0IHx8ICQodGhpcy5ob2xkZXIpLmdldEVs +ZW1lbnQoJy4nICsgdGhpcy5jbGFzc05hbWVzLm91dHB1dCk7DQoJCQlpZiAodGhp +cy5uZXdWYWx1ZSA9PSAnJykgew0KCQkJCSQodGhpcy5vdXRwdXQpLmFkZENsYXNz +KCdoaWRkZW4nKTsNCgkJCQl0aGlzLm91dHB1dC5pbm5lckhUTUwgPScnOw0KCQkJ +CXRoaXMubGFzdFZhbHVlID0gdGhpcy5uZXdWYWx1ZTsNCgkJCQlyZXR1cm4gZmFs +c2U7DQoJCQl9DQoJCQllbHNlIHsNCgkJCQkkKHRoaXMub3V0cHV0KS5yZW1vdmVD +bGFzcygnaGlkZGVuJyk7DQoJCQl9DQoJCQlpZiAoJCh0aGlzLmhvbGRlcikuaGFz +Q2xhc3ModGhpcy5jbGFzc05hbWVzLmlzTG9hZGluZykgfHwgdGhpcy5sYXN0VmFs +dWUgPT0gdGhpcy5uZXdWYWx1ZSkgew0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0N +CgkJCXZhciBkYXRhID0gJ2xldHRlcnM9JyArIHRoaXMubmV3VmFsdWUgKyAnJnR5 +cGU9JyArIHN1Ym1pdFR5cGU7DQoJCQl0aGlzLnBhcmFtcyA9IHsNCgkJCQlob2xk +ZXIgOiB0aGlzLmhvbGRlciwNCgkJCQlmaWVsZCA6IGZpZWxkLA0KCQkJCXN0cmlu +ZyA6IHRoaXMubmV3VmFsdWUsDQoJCQkJb3V0cHV0IDogdGhpcy5vdXRwdXQsDQoJ +CQkJbm9JbmRleGVkU3RyaW5nIDogdGhpcy5ub0luZGV4ZWRTdHJpbmcNCgkJCX07 +DQoJCQlhamF4TG9hZFBvc3QodGhpcy5hamF4VXJsLCBkYXRhLCB0aGlzLnNlbmRE +YXRhT25sb2FkLCB0aGlzLCB0aGlzLnBhcmFtcyk7DQoJCQkkKHRoaXMuaG9sZGVy +KS5hZGRDbGFzcyh0aGlzLmNsYXNzTmFtZXMuaXNMb2FkaW5nKTsNCgkJCXRoaXMu +bGFzdFZhbHVlID0gdGhpcy5uZXdWYWx1ZTsNCn0NCg0KLy8g0KfRgtC10L3QuNC1 +INC+0YLQstC10YLQsCDRgdC10YDQstC10YDQsCDQvdCwINC/0LXRgNC10YHRi9C7 +0LrRgyAg0LLRgdC10YUg0LTQsNC90L3Ri9GFINGE0L7RgNC80Ysg0Lgg0L7QsdGA +0LDQsdC+0YLQutCwINCy0YvQtNCw0L3QvdGL0YUg0L7RiNC40LHQvtC6DQphdXRv +c3VnZ2VzdENsYXNzLnByb3RvdHlwZS5zZW5kRGF0YU9ubG9hZCA9IGZ1bmN0aW9u +KGFqYXhPYmosIHBhcmFtcykgew0KCSQocGFyYW1zLmhvbGRlcikucmVtb3ZlQ2xh +c3ModGhpcy5jbGFzc05hbWVzLmlzTG9hZGluZyk7DQoJaWYoYWpheE9iaiAmJiBh +amF4T2JqLnJlc3BvbnNlWE1MKXsNCgkJdmFyIHhtbE9iaiA9IGFqYXhPYmoucmVz +cG9uc2VYTUw7DQoJCXZhciB4bWxOb2RlcyA9IHRoaXMucGFyc2VYTUwoeG1sT2Jq +KTsNCg0KCQlmb3IgKHByb3AgaW4geG1sTm9kZXMpew0KCQkJaWYodGhpc1t0aGlz +LnhtbFJlc3BvbnNlW3Byb3BdLmhhbmRsZXJdKSB7DQoJCQkJdGhpc1t0aGlzLnht +bFJlc3BvbnNlW3Byb3BdLmhhbmRsZXJdKHhtbE5vZGVzLCBwYXJhbXMpOw0KCQkJ +fQ0KCQl9DQoJfQ0KfTsNCg0KLy8g0JLRi9Cy0L7QtCDQtNCw0L3QvdGL0YUNCmF1 +dG9zdWdnZXN0Q2xhc3MucHJvdG90eXBlLnhtbFJlc3BvbnNlSGFuZGxlcl9vdXRw +dXQgPSBmdW5jdGlvbih4bWxOb2RlcywgcGFyYW1zKSB7DQoJdmFyIF90aGlzID0g +dGhpczsNCgkkKHBhcmFtcy5vdXRwdXQpLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTsN +Cgl0aGlzLnBvc2l0aW9uID0gMDsNCgl0aGlzLnBhcmFtcy5vdXRwdXQuaW5uZXJI +VE1MID0gJyc7DQoJaWYoeG1sTm9kZXMuaXRlbSAmJiB4bWxOb2Rlcy5pdGVtLmxl +bmd0aCkgew0KCQlmb3IodmFyIGk9MDsgaTx4bWxOb2Rlcy5pdGVtLmxlbmd0aDsg +aSsrKSB7DQoJCQl2YXIgaXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhp +cy5odG1sUmVzcG9uc2UuaXRlbSk7DQoJCQl2YXIgaHRtbCA9IHhtbE5vZGVzLml0 +ZW1baV0uZmlyc3RDaGlsZC5kYXRhOw0KCQkJdGhpcy5jdXJyVmFsdWVzW2ldID0g +eG1sTm9kZXMuaXRlbVtpXS5maXJzdENoaWxkLmRhdGE7DQoJCQl2YXIgc2VhcmNo +U3RyaW5nID0gbmV3IFJlZ0V4cCgnKCcgKyBwYXJhbXMuc3RyaW5nICsgJyknLCAn +Z2knKTsNCgkJCXZhciByZXBsYWNlU3RyaW5nID0gJzwnICt0aGlzLmh0bWxSZXNw +b25zZS52YWx1ZSArICc+JyArICckMScgKyAnPC8nICsgdGhpcy5odG1sUmVzcG9u +c2UudmFsdWUgKyAnPic7DQoJCQl2YXIgaHRtbCA9IGh0bWwucmVwbGFjZShzZWFy +Y2hTdHJpbmcsIHJlcGxhY2VTdHJpbmcpOw0KCQkJcGFyYW1zLm91dHB1dC5hcHBl +bmRDaGlsZChpdGVtKTsNCgkJCWl0ZW0uaW5uZXJIVE1MID0gaHRtbDsNCgkJfQ0K +DQoJCXBhcmFtcy5maWVsZC5vbmZvY3VzID0gZnVuY3Rpb24oKSB7DQoJCQkkKHBh +cmFtcy5vdXRwdXQpLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTsNCgkJfQkNCgkJDQoJ +CXBhcmFtcy5maWVsZC5vbmJsdXIgPSBmdW5jdGlvbihldikgew0KDQoJCQlpZigh +ZXYpIHsgZXYgPSB3aW5kb3cuZXZlbnQ7IH0NCg0KCQkJdmFyIHRhcmc7DQoJCQkJ +aWYgKCFldikgdmFyIGV2ID0gd2luZG93LmV2ZW50Ow0KCQkJCWlmIChldi50YXJn +ZXQpIHRhcmcgPSBldi50YXJnZXQ7DQoJCQkJZWxzZSBpZiAoZXYuc3JjRWxlbWVu +dCkgdGFyZyA9IGV2LnNyY0VsZW1lbnQ7DQoJCQkJaWYgKHRhcmcubm9kZVR5cGUg +PT0gMykgLy8gZGVmZWF0IFNhZmFyaSBidWcNCgkJCQkJdGFyZyA9IHRhcmcucGFy +ZW50Tm9kZTsNCgkJCQ0KCQkJaWYodGFyZyE9cGFyYW1zLmZpZWxkICYmIHRhcmcu +cGFyZW50Tm9kZSE9cGFyYW1zLm91dHB1dCkgew0KCQkJCSQocGFyYW1zLm91dHB1 +dCkuYWRkQ2xhc3MoJ2hpZGRlbicpOw0KCQkJfQ0KCQl9DQoJCQ0KCQlkb2N1bWVu +dC5hZGRFdmVudCgnY2xpY2snLCBmdW5jdGlvbiAoZSkgew0KCQkgICAgdmFyIHQg +PSBlLnRhcmdldDsNCgkJICAgIGlmICh0IT1wYXJhbXMuZmllbGQgJiYgdCE9cGFy +YW1zLm91dHB1dCkgew0KCQkgICAgICAgICQocGFyYW1zLm91dHB1dCkuYWRkQ2xh +c3MoJ2hpZGRlbicpOw0KCQkgICAgfQ0KCQl9KTsNCg0KCQl0aGlzLm1vdXNlSGFu +ZGxlcigpOw0KCX0NCn07DQoNCi8vINGD0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdC8 +INC30L3QsNGH0LXQvdC40LUNCmF1dG9zdWdnZXN0Q2xhc3MucHJvdG90eXBlLnNl +dFZhbHVlID0gZnVuY3Rpb24oKSB7DQoJdmFyIHJlc3VsdCA9IGZhbHNlOw0KCWlm +KHRoaXMucGFyYW1zLm91dHB1dCAmJiB0aGlzLnBhcmFtcy5vdXRwdXQuZ2V0RWxl +bWVudHNCeVRhZ05hbWUodGhpcy5odG1sUmVzcG9uc2UuaXRlbSlbMF0pIHsNCgkJ +dmFyIHJlc3VsdF9pdGVtcyA9IHRoaXMucGFyYW1zLm91dHB1dC5nZXRFbGVtZW50 +c0J5VGFnTmFtZSh0aGlzLmh0bWxSZXNwb25zZS5pdGVtKTsNCgkJdmFyIHJlc3Vs +dF9pdGVtc19sZW5ndGggPSByZXN1bHRfaXRlbXMubGVuZ3RoOw0KCQlmb3IgKHZh +ciBpPTA7IGk8cmVzdWx0X2l0ZW1zLmxlbmd0aDsgaSsrKSB7DQoJCQlpZihyZXN1 +bHRfaXRlbXNbaV0uY2xhc3NOYW1lID09ICdhY3RpdmUnKSB7DQoJCQkJaWYodGhp +cy5pc011bHRpcGx5U3VnZ2VzdGlvbnNPbiA9PSB0cnVlKSB7DQoJCQkJCWlmKHRo +aXMuaXNRdW90ZU9wZW5lZCA9PSB0cnVlIHx8IHRoaXMuaXNRdW90ZUNsb3NlZFBy +ZXZpb3VzbHkgPT0gdHJ1ZSkgew0KCQkJCQkJdmFyIHJlcGxhY2VkVmFsdWUgPSB0 +aGlzLnBhcmFtcy5zdHJpbmcucmVwbGFjZSh0aGlzLnBhcmFtcy5zdHJpbmcsIHRo +aXMuY3VyclZhbHVlc1t0aGlzLnBvc2l0aW9uLTFdKTsNCgkJCQkJCWlmKHRoaXMu +cGFyYW1zLm5vSW5kZXhlZFN0cmluZyE9JycpIHsNCgkJCQkJCQl0aGlzLnBhcmFt +cy5maWVsZC52YWx1ZSA9IHRoaXMucGFyYW1zLm5vSW5kZXhlZFN0cmluZyArIHRo +aXMuc3ltYm9sICsgdGhpcy5zcGFjZXIgKyAnIicgKyByZXBsYWNlZFZhbHVlOw0K +CQkJCQkJCWlmKHRoaXMuaXNRdW90ZUNsb3NlZFByZXZpb3VzbHkgPT0gdHJ1ZSkg +ew0KCQkJCQkJCQl0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSArPSAnIic7DQoJCQkJ +CQkJCXJlc3VsdCA9IHRydWU7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQkJZWxz +ZSB7DQoJCQkJCQkJdGhpcy5wYXJhbXMuZmllbGQudmFsdWUgPSAnIicgKyByZXBs +YWNlZFZhbHVlOw0KCQkJCQkJCXJlc3VsdCA9IHRydWU7DQoJCQkJCQkJaWYodGhp +cy5pc1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9PSB0cnVlKSB7IHRoaXMucGFyYW1z +LmZpZWxkLnZhbHVlICs9ICciJzsgfQ0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCWVs +c2Ugew0KCQkJCQkJdmFyIHJlcGxhY2VkVmFsdWUgPSB0aGlzLnBhcmFtcy5zdHJp +bmcucmVwbGFjZSh0aGlzLnBhcmFtcy5zdHJpbmcsIHRoaXMuY3VyclZhbHVlc1t0 +aGlzLnBvc2l0aW9uLTFdKTsNCgkJCQkJCWlmKHRoaXMucGFyYW1zLm5vSW5kZXhl +ZFN0cmluZyE9JycpIHsNCgkJCQkJCQl0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSA9 +IHRoaXMucGFyYW1zLm5vSW5kZXhlZFN0cmluZyArIHRoaXMuc3ltYm9sICsgdGhp +cy5zcGFjZXIgKyByZXBsYWNlZFZhbHVlOw0KCQkJCQkJCXJlc3VsdCA9IHRydWU7 +DQoJCQkJCQl9DQoJCQkJCQllbHNlIHsNCgkJCQkJCQl0aGlzLnBhcmFtcy5maWVs +ZC52YWx1ZSA9IHJlcGxhY2VkVmFsdWU7DQoJCQkJCQkJcmVzdWx0ID0gdHJ1ZTsN +CgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQllbHNlIHsNCgkJCQkJaWYodGhp +cy5pc1F1b3RlT3BlbmVkID09IHRydWUgfHwgdGhpcy5pc1F1b3RlQ2xvc2VkUHJl +dmlvdXNseSA9PSB0cnVlKSB7DQoJCQkJCQkNCgkJCQkJCXRoaXMucGFyYW1zLmZp +ZWxkLnZhbHVlID0gJyInICsgdGhpcy5jdXJyVmFsdWVzW3RoaXMucG9zaXRpb24t +MV07DQoJCQkJCQlyZXN1bHQgPSB0cnVlOw0KCQkJCQl9DQoJCQkJCWVsc2Ugew0K +CQkJCQkJdGhpcy5wYXJhbXMuZmllbGQudmFsdWUgPSB0aGlzLmN1cnJWYWx1ZXNb +dGhpcy5wb3NpdGlvbi0xXTsNCgkJCQkJCXJlc3VsdCA9IHRydWU7DQoJCQkJCX0N +CgkJCQl9DQoJCQkJDQoJCQkJJCh0aGlzLnBhcmFtcy5vdXRwdXQpLmFkZENsYXNz +KCdoaWRkZW4nKTsNCgkJCQkNCgkJCQl0aGlzLnBhcmFtcy5vdXRwdXQuaW5uZXJI +VE1MID0gJyc7DQoJCQkJDQoJCQkJaWYodGhpcy5wYXJhbXMuZmllbGQudmFsdWUg +JiYgdGhpcy5wYXJhbXMuZmllbGQudmFsdWUubWF0Y2goL1xyXG4kLykpIHsNCgkJ +CQkJdGhpcy5wYXJhbXMuZmllbGQudmFsdWUgPSB0aGlzLnBhcmFtcy5maWVsZC52 +YWx1ZS5yZXBsYWNlKC9cclxuJC8sICcnKTsNCgkJCQl9DQoJCQkJDQoJCQkJZWxz +ZSB7DQoJCQkJCXRoaXMucGFyYW1zLmZpZWxkID0gdGhpcy5jdXJyVmFsdWVzW2ld +Ow0KCQkJCQkkKHRoaXMucGFyYW1zLm91dHB1dCkuYWRkQ2xhc3MoJ2hpZGRlbicp +Ow0KCQkJCQl0aGlzLnBhcmFtcy5vdXRwdXQuaW5uZXJIVE1MID0gJyc7DQoJCQkJ +fQ0KCQkJfQ0KCQl9DQoJfQ0KCXJldHVybiByZXN1bHQ7DQp9Ow0KDQovLyDQvdCw +0LLQuNCz0LDRhtC40Y8g0L/QviDRgNC10LfRg9C70YzRgtCw0YLQsNC8INC30LDQ +v9GA0L7RgdCwINGBINC/0L7QvNC+0YnRjNGOINC60LvQsNCy0LjQsNGC0YPRgNGL +DQphdXRvc3VnZ2VzdENsYXNzLnByb3RvdHlwZS5tYWtlU3RlcHMgPSBmdW5jdGlv +bihkaXJlY3Rpb24pIHsNCglfdGhpcyA9IHRoaXMNCglpZih0aGlzLnBhcmFtcy5v +dXRwdXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGhpcy5odG1sUmVzcG9uc2UuaXRl +bSlbMF0pIHsNCgkJdGhpcy5wYXJhbXMuZmllbGQuZmFrZUNoYW5nZSA9IHRydWU7 +DQoJCQ0KCQl2YXIgcmVzdWx0X2l0ZW1zID0gdGhpcy5wYXJhbXMub3V0cHV0Lmdl +dEVsZW1lbnRzQnlUYWdOYW1lKHRoaXMuaHRtbFJlc3BvbnNlLml0ZW0pOw0KCQl2 +YXIgcmVzdWx0X2l0ZW1zX2xlbmd0aCA9IHJlc3VsdF9pdGVtcy5sZW5ndGg7DQoJ +CWZvciAodmFyIGk9MDsgaTxyZXN1bHRfaXRlbXMubGVuZ3RoOyBpKyspIHsNCgkJ +CXJlc3VsdF9pdGVtc1tpXS5jbGFzc05hbWUgPSAnJzsNCgkJfQ0KCQl0aGlzLnNw +YWNlciA9ICcnOw0KCQl0aGlzLnN5bWJvbCA9PSAnLCcgPyB0aGlzLnNwYWNlciA9 +ICcgJyA6IHRoaXMuc3BhY2VyID0gJyc7DQoJCWlmKGRpcmVjdGlvbiA9PSAnZG93 +bicgJiYgdGhpcy5wb3NpdGlvbjw9cmVzdWx0X2l0ZW1zX2xlbmd0aC0xKSB7DQoJ +CQlyZXN1bHRfaXRlbXNbdGhpcy5wb3NpdGlvbl0uY2xhc3NOYW1lID0gJ2FjdGl2 +ZSc7DQoJCQlpZih0aGlzLmlzTXVsdGlwbHlTdWdnZXN0aW9uc09uID09IHRydWUp +IHsNCgkJCQlpZih0aGlzLmlzUXVvdGVPcGVuZWQgPT0gdHJ1ZSB8fCB0aGlzLmlz +UXVvdGVDbG9zZWRQcmV2aW91c2x5ID09IHRydWUpIHsNCgkJCQkJdmFyIHJlcGxh +Y2VkVmFsdWUgPSB0aGlzLnBhcmFtcy5zdHJpbmcucmVwbGFjZSh0aGlzLnBhcmFt +cy5zdHJpbmcsIHRoaXMuY3VyclZhbHVlc1t0aGlzLnBvc2l0aW9uXSk7DQoJCQkJ +CWlmKHRoaXMucGFyYW1zLm5vSW5kZXhlZFN0cmluZyE9JycpIHsNCgkJCQkJCXRo +aXMucGFyYW1zLmZpZWxkLnZhbHVlID0gdGhpcy5wYXJhbXMubm9JbmRleGVkU3Ry +aW5nICsgdGhpcy5zeW1ib2wgKyB0aGlzLnNwYWNlciArICciJyArIHJlcGxhY2Vk +VmFsdWU7DQoJCQkJCQlpZih0aGlzLmlzUXVvdGVDbG9zZWRQcmV2aW91c2x5ID09 +IHRydWUpIHsgdGhpcy5wYXJhbXMuZmllbGQudmFsdWUgKz0gJyInOyB9DQoJCQkJ +CX0NCgkJCQkJZWxzZSB7DQoJCQkJCQl0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSA9 +ICciJyArIHJlcGxhY2VkVmFsdWU7DQoJCQkJCQlpZih0aGlzLmlzUXVvdGVDbG9z +ZWRQcmV2aW91c2x5ID09IHRydWUpIHsgdGhpcy5wYXJhbXMuZmllbGQudmFsdWUg +Kz0gJyInOyB9DQoJCQkJCX0NCgkJCQl9DQoJCQkJZWxzZSB7DQoJCQkJCXZhciBy +ZXBsYWNlZFZhbHVlID0gdGhpcy5wYXJhbXMuc3RyaW5nLnJlcGxhY2UodGhpcy5w +YXJhbXMuc3RyaW5nLCB0aGlzLmN1cnJWYWx1ZXNbdGhpcy5wb3NpdGlvbl0pOw0K +CQkJCQlpZih0aGlzLnBhcmFtcy5ub0luZGV4ZWRTdHJpbmchPScnKSB7DQoJCQkJ +CQl0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSA9IHRoaXMucGFyYW1zLm5vSW5kZXhl +ZFN0cmluZyArIHRoaXMuc3ltYm9sICsgdGhpcy5zcGFjZXIgKyByZXBsYWNlZFZh +bHVlOw0KCQkJCQl9DQoJCQkJCWVsc2Ugew0KCQkJCQkJdGhpcy5wYXJhbXMuZmll +bGQudmFsdWUgPSByZXBsYWNlZFZhbHVlOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0K +CQkJZWxzZSB7DQoJCQkJaWYodGhpcy5pc1F1b3RlT3BlbmVkID09IHRydWUgfHwg +dGhpcy5pc1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9PSB0cnVlKSB7DQoJCQkJCXRo +aXMucGFyYW1zLmZpZWxkLnZhbHVlID0gJyInICsgdGhpcy5jdXJyVmFsdWVzW3Ro +aXMucG9zaXRpb25dOw0KCQkJCQlpZih0aGlzLmlzUXVvdGVDbG9zZWRQcmV2aW91 +c2x5ID09IHRydWUpIHsgdGhpcy5wYXJhbXMuZmllbGQudmFsdWUgKz0gJyInOyB9 +DQoJCQkJfQ0KCQkJCWVsc2Ugew0KCQkJCQl0aGlzLnBhcmFtcy5maWVsZC52YWx1 +ZSA9IHRoaXMuY3VyclZhbHVlc1t0aGlzLnBvc2l0aW9uXTsNCgkJCQl9DQoJCQl9 +DQoJCQl0aGlzLnBvc2l0aW9uKys7DQoJCX0NCgkJZWxzZSBpZihkaXJlY3Rpb24g +PT0gJ3VwJyAmJiB0aGlzLnBvc2l0aW9uPjEpIHsNCgkJCXJlc3VsdF9pdGVtc1t0 +aGlzLnBvc2l0aW9uLTJdLmNsYXNzTmFtZSA9ICdhY3RpdmUnOw0KCQkJaWYodGhp +cy5pc011bHRpcGx5U3VnZ2VzdGlvbnNPbiA9PSB0cnVlKSB7DQoJCQkJaWYodGhp +cy5pc1F1b3RlT3BlbmVkID09IHRydWUgfHwgdGhpcy5pc1F1b3RlQ2xvc2VkUHJl +dmlvdXNseSA9PSB0cnVlKSB7DQoJCQkJCXZhciByZXBsYWNlZFZhbHVlID0gdGhp +cy5wYXJhbXMuc3RyaW5nLnJlcGxhY2UodGhpcy5wYXJhbXMuc3RyaW5nLCB0aGlz +LmN1cnJWYWx1ZXNbdGhpcy5wb3NpdGlvbi0yXSk7DQoJCQkJCWlmKHRoaXMucGFy +YW1zLm5vSW5kZXhlZFN0cmluZyE9JycpIHsNCgkJCQkJCXRoaXMucGFyYW1zLmZp +ZWxkLnZhbHVlID0gdGhpcy5wYXJhbXMubm9JbmRleGVkU3RyaW5nICsgdGhpcy5z +eW1ib2wgKyB0aGlzLnNwYWNlciArICciJyArIHJlcGxhY2VkVmFsdWU7DQoJCQkJ +CQlpZih0aGlzLmlzUXVvdGVDbG9zZWRQcmV2aW91c2x5ID09IHRydWUpIHsgdGhp +cy5wYXJhbXMuZmllbGQudmFsdWUgKz0gJyInOyB9DQoJCQkJCX0NCgkJCQkJZWxz +ZSB7DQoJCQkJCQl0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSA9ICciJyArIHJlcGxh +Y2VkVmFsdWU7DQoJCQkJCQlpZih0aGlzLmlzUXVvdGVDbG9zZWRQcmV2aW91c2x5 +ID09IHRydWUpIHsgdGhpcy5wYXJhbXMuZmllbGQudmFsdWUgKz0gJyInOyB9DQoJ +CQkJCX0NCgkJCQl9DQoJCQkJZWxzZSB7DQoJCQkJCXZhciByZXBsYWNlZFZhbHVl +ID0gdGhpcy5wYXJhbXMuc3RyaW5nLnJlcGxhY2UodGhpcy5wYXJhbXMuc3RyaW5n +LCB0aGlzLmN1cnJWYWx1ZXNbdGhpcy5wb3NpdGlvbi0yXSk7DQoJCQkJCWlmKHRo +aXMucGFyYW1zLm5vSW5kZXhlZFN0cmluZyE9JycpIHsNCgkJCQkJCXRoaXMucGFy +YW1zLmZpZWxkLnZhbHVlID0gdGhpcy5wYXJhbXMubm9JbmRleGVkU3RyaW5nICsg +dGhpcy5zeW1ib2wgKyB0aGlzLnNwYWNlciArIHJlcGxhY2VkVmFsdWU7DQoJCQkJ +CX0NCgkJCQkJZWxzZSB7DQoJCQkJCQl0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSA9 +IHJlcGxhY2VkVmFsdWU7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQllbHNlIHsN +CgkJCQlpZih0aGlzLmlzUXVvdGVPcGVuZWQgPT0gdHJ1ZSB8fCB0aGlzLmlzUXVv +dGVDbG9zZWRQcmV2aW91c2x5ID09IHRydWUpIHsNCgkJCQkJdGhpcy5wYXJhbXMu +ZmllbGQudmFsdWUgPSAnIicgKyB0aGlzLmN1cnJWYWx1ZXNbdGhpcy5wb3NpdGlv +bi0yXTsNCgkJCQkJaWYodGhpcy5pc1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9PSB0 +cnVlKSB7IHRoaXMucGFyYW1zLmZpZWxkLnZhbHVlICs9ICciJzsgfQ0KCQkJCX0N +CgkJCQllbHNlIHsNCgkJCQkJdGhpcy5wYXJhbXMuZmllbGQudmFsdWUgPSB0aGlz +LmN1cnJWYWx1ZXNbdGhpcy5wb3NpdGlvbi0yXTsNCgkJCQl9DQoJCQl9DQoJCQl0 +aGlzLnBvc2l0aW9uLS07DQoJCX0NCgkJZWxzZSBpZiAodGhpcy5wb3NpdGlvbj5y +ZXN1bHRfaXRlbXNfbGVuZ3RoLTEpIHsNCgkJCXRoaXMucG9zaXRpb249MDsNCgkJ +CXJlc3VsdF9pdGVtc1t0aGlzLnBvc2l0aW9uXS5jbGFzc05hbWUgPSAnYWN0aXZl +JzsNCgkJCWlmKHRoaXMuaXNNdWx0aXBseVN1Z2dlc3Rpb25zT24gPT0gdHJ1ZSkg +ew0KCQkJCWlmKHRoaXMuaXNRdW90ZU9wZW5lZCA9PSB0cnVlIHx8IHRoaXMuaXNR +dW90ZUNsb3NlZFByZXZpb3VzbHkgPT0gdHJ1ZSkgew0KCQkJCQl2YXIgcmVwbGFj +ZWRWYWx1ZSA9IHRoaXMucGFyYW1zLnN0cmluZy5yZXBsYWNlKHRoaXMucGFyYW1z +LnN0cmluZywgdGhpcy5jdXJyVmFsdWVzW3RoaXMucG9zaXRpb25dKTsNCgkJCQkJ +aWYodGhpcy5wYXJhbXMubm9JbmRleGVkU3RyaW5nIT0nJykgew0KCQkJCQkJdGhp +cy5wYXJhbXMuZmllbGQudmFsdWUgPSB0aGlzLnBhcmFtcy5ub0luZGV4ZWRTdHJp +bmcgKyB0aGlzLnN5bWJvbCArIHRoaXMuc3BhY2VyICsgJyInICsgcmVwbGFjZWRW +YWx1ZTsNCgkJCQkJCWlmKHRoaXMuaXNRdW90ZUNsb3NlZFByZXZpb3VzbHkgPT0g +dHJ1ZSkgeyB0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSArPSAnIic7IH0NCgkJCQkJ +fQ0KCQkJCQllbHNlIHsNCgkJCQkJCXRoaXMucGFyYW1zLmZpZWxkLnZhbHVlID0g +JyInICsgcmVwbGFjZWRWYWx1ZTsNCgkJCQkJCWlmKHRoaXMuaXNRdW90ZUNsb3Nl +ZFByZXZpb3VzbHkgPT0gdHJ1ZSkgeyB0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSAr +PSAnIic7IH0NCgkJCQkJfQ0KCQkJCX0NCgkJCQllbHNlIHsNCgkJCQkJdmFyIHJl +cGxhY2VkVmFsdWUgPSB0aGlzLnBhcmFtcy5zdHJpbmcucmVwbGFjZSh0aGlzLnBh +cmFtcy5zdHJpbmcsIHRoaXMuY3VyclZhbHVlc1t0aGlzLnBvc2l0aW9uXSk7DQoJ +CQkJCWlmKHRoaXMucGFyYW1zLm5vSW5kZXhlZFN0cmluZyE9JycpIHsNCgkJCQkJ +CXRoaXMucGFyYW1zLmZpZWxkLnZhbHVlID0gdGhpcy5wYXJhbXMubm9JbmRleGVk +U3RyaW5nICsgdGhpcy5zeW1ib2wgKyB0aGlzLnNwYWNlciArIHJlcGxhY2VkVmFs +dWU7DQoJCQkJCX0NCgkJCQkJZWxzZSB7DQoJCQkJCQl0aGlzLnBhcmFtcy5maWVs +ZC52YWx1ZSA9IHJlcGxhY2VkVmFsdWU7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJ +CQllbHNlIHsNCgkJCQlpZih0aGlzLmlzUXVvdGVPcGVuZWQgPT0gdHJ1ZSB8fCB0 +aGlzLmlzUXVvdGVDbG9zZWRQcmV2aW91c2x5ID09IHRydWUpIHsNCgkJCQkJdGhp +cy5wYXJhbXMuZmllbGQudmFsdWUgPSAnIicgKyB0aGlzLmN1cnJWYWx1ZXNbdGhp +cy5wb3NpdGlvbl07DQoJCQkJCWlmKHRoaXMuaXNRdW90ZUNsb3NlZFByZXZpb3Vz +bHkgPT0gdHJ1ZSkgeyB0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSArPSAnIic7IH0N +CgkJCQl9DQoJCQkJZWxzZSB7DQoJCQkJCXRoaXMucGFyYW1zLmZpZWxkLnZhbHVl +ID0gdGhpcy5jdXJyVmFsdWVzW3RoaXMucG9zaXRpb25dOw0KCQkJCX0NCgkJCX0N +CgkJCXRoaXMucG9zaXRpb24rKzsNCgkJfQ0KCQllbHNlIGlmKGRpcmVjdGlvbiA9 +PSAndXAnICYmIHRoaXMucG9zaXRpb248PTEpIHsNCgkJCXRoaXMucG9zaXRpb249 +cmVzdWx0X2l0ZW1zX2xlbmd0aC0xOw0KCQkJcmVzdWx0X2l0ZW1zW3RoaXMucG9z +aXRpb25dLmNsYXNzTmFtZSA9ICdhY3RpdmUnOw0KCQkJaWYodGhpcy5pc011bHRp +cGx5U3VnZ2VzdGlvbnNPbiA9PSB0cnVlKSB7DQoJCQkJaWYodGhpcy5pc1F1b3Rl +T3BlbmVkID09IHRydWUgfHwgdGhpcy5pc1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9 +PSB0cnVlKSB7DQoJCQkJCXZhciByZXBsYWNlZFZhbHVlID0gdGhpcy5wYXJhbXMu +c3RyaW5nLnJlcGxhY2UodGhpcy5wYXJhbXMuc3RyaW5nLCB0aGlzLmN1cnJWYWx1 +ZXNbdGhpcy5wb3NpdGlvbl0pOw0KCQkJCQlpZih0aGlzLnBhcmFtcy5ub0luZGV4 +ZWRTdHJpbmchPScnKSB7DQoJCQkJCQl0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSA9 +IHRoaXMucGFyYW1zLm5vSW5kZXhlZFN0cmluZyArIHRoaXMuc3ltYm9sICsgdGhp +cy5zcGFjZXIgKyAnIicgKyByZXBsYWNlZFZhbHVlOw0KCQkJCQkJaWYodGhpcy5p +c1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9PSB0cnVlKSB7IHRoaXMucGFyYW1zLmZp +ZWxkLnZhbHVlICs9ICciJzsgfQ0KCQkJCQl9DQoJCQkJCWVsc2Ugew0KCQkJCQkJ +dGhpcy5wYXJhbXMuZmllbGQudmFsdWUgPSAnIicgKyByZXBsYWNlZFZhbHVlOw0K +CQkJCQkJaWYodGhpcy5pc1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9PSB0cnVlKSB7 +IHRoaXMucGFyYW1zLmZpZWxkLnZhbHVlICs9ICciJzsgfQ0KCQkJCQl9DQoJCQkJ +fQ0KCQkJCWVsc2Ugew0KCQkJCQl2YXIgcmVwbGFjZWRWYWx1ZSA9IHRoaXMucGFy +YW1zLnN0cmluZy5yZXBsYWNlKHRoaXMucGFyYW1zLnN0cmluZywgdGhpcy5jdXJy +VmFsdWVzW3RoaXMucG9zaXRpb25dKTsNCgkJCQkJaWYodGhpcy5wYXJhbXMubm9J +bmRleGVkU3RyaW5nIT0nJykgew0KCQkJCQkJdGhpcy5wYXJhbXMuZmllbGQudmFs +dWUgPSB0aGlzLnBhcmFtcy5ub0luZGV4ZWRTdHJpbmcgKyB0aGlzLnN5bWJvbCAr +IHRoaXMuc3BhY2VyICsgcmVwbGFjZWRWYWx1ZTsNCgkJCQkJfQ0KCQkJCQllbHNl +IHsNCgkJCQkJCXRoaXMucGFyYW1zLmZpZWxkLnZhbHVlID0gcmVwbGFjZWRWYWx1 +ZTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCWVsc2Ugew0KCQkJCWlmKHRoaXMu +aXNRdW90ZU9wZW5lZCA9PSB0cnVlIHx8IHRoaXMuaXNRdW90ZUNsb3NlZFByZXZp +b3VzbHkgPT0gdHJ1ZSkgew0KCQkJCQl0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSA9 +ICciJyArIHRoaXMuY3VyclZhbHVlc1t0aGlzLnBvc2l0aW9uXTsNCgkJCQkJaWYo +dGhpcy5pc1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9PSB0cnVlKSB7IHRoaXMucGFy +YW1zLmZpZWxkLnZhbHVlICs9ICciJzsgfQ0KCQkJCX0NCgkJCQllbHNlIHsNCgkJ +CQkJdGhpcy5wYXJhbXMuZmllbGQudmFsdWUgPSB0aGlzLmN1cnJWYWx1ZXNbdGhp +cy5wb3NpdGlvbl07DQoJCQkJfQ0KCQkJfQ0KCQkJdGhpcy5wb3NpdGlvbisrOw0K +CQl9DQoJCXNldFRpbWVvdXQoZnVuY3Rpb24oKXsNCgkJCV90aGlzLnBhcmFtcy5m +aWVsZC5mYWtlQ2hhbmdlID0gZmFsc2U7DQoJCX0sNTApDQoJCQ0KCQkNCgl9DQp9 +Ow0KDQovL9C90LDQstC40LPQsNGG0LjRjyDQv9C+INGA0LXQt9GD0LvRjNGC0LDR +gtCw0Lwg0LfQsNC/0YDQvtGB0LAg0YEg0L/QvtC80L7RidGM0Y4g0LzRi9GI0LrQ +uA0KYXV0b3N1Z2dlc3RDbGFzcy5wcm90b3R5cGUubW91c2VIYW5kbGVyID0gZnVu +Y3Rpb24oKSB7DQoJdmFyIF90aGlzID0gdGhpczsNCgl2YXIgaXRlbXMgPSB0aGlz +LnBhcmFtcy5vdXRwdXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGhpcy5odG1sUmVz +cG9uc2UuaXRlbSk7DQoJdmFyIGl0ZW1zX2xlbmd0aCA9IGl0ZW1zLmxlbmd0aDsN +CgkNCg0KDQoNCglmb3IgKHZhciBpPTA7IGk8aXRlbXNfbGVuZ3RoOyBpKyspIHsN +CgkJaXRlbXNbaV0ub25tb3VzZW92ZXIgPSBmdW5jdGlvbihpXykgew0KCQkJcmV0 +dXJuIGZ1bmN0aW9uICgpIHsNCgkJCQlmb3IgKHZhciBrPTA7IGs8aXRlbXNfbGVu +Z3RoOyBrKyspIHsNCgkJCQkJaXRlbXNba10uY2xhc3NOYW1lID0gJyc7DQoJCQkJ +fQ0KCQkJCXRoaXMuY2xhc3NOYW1lID0gJ2FjdGl2ZSc7DQoJCQkJX3RoaXMucG9z +aXRpb24gPSBpXysxOw0KCQkJfQ0KCQl9KGkpOw0KCQlpdGVtc1tpXS5vbm1vdXNl +b3V0ID0gZnVuY3Rpb24oKSB7DQoJCQl0aGlzLmNsYXNzTmFtZSA9ICcnOw0KCQkJ +LyogX3RoaXMucG9zaXRpb24gPSAwOyAqLw0KCQl9DQoJCWl0ZW1zW2ldLm9uY2xp +Y2sgPSBmdW5jdGlvbihpXykgew0KCQkJcmV0dXJuIGZ1bmN0aW9uKCkgew0KCQkJ +CXZhciBob2xkZXIgPSAkKHRoaXMpLmdldFBhcmVudCgnLicgKyBfdGhpcy5jbGFz +c05hbWVzLmhvbGRlcik7DQoJCQkJdmFyIGZpZWxkID0gJChob2xkZXIpLmdldEVs +ZW1lbnQoJy4nICsgX3RoaXMuY2xhc3NOYW1lcy5maWVsZCk7DQoJCQkJaWYoX3Ro +aXMuaXNNdWx0aXBseVN1Z2dlc3Rpb25zT24gPT0gdHJ1ZSkgew0KCQkJCQlpZihf +dGhpcy5pc1F1b3RlT3BlbmVkID09IHRydWUpIHsNCgkJCQkJCXZhciByZXBsYWNl +ZFZhbHVlID0gX3RoaXMucGFyYW1zLnN0cmluZy5yZXBsYWNlKF90aGlzLnBhcmFt +cy5zdHJpbmcsIF90aGlzLmN1cnJWYWx1ZXNbaV9dKTsNCgkJCQkJCV90aGlzLnNw +YWNlciA9Jyc7DQoJCQkJCQlfdGhpcy5zeW1ib2wgPT0gJywnID8gX3RoaXMuc3Bh +Y2VyID0gJyAnIDogX3RoaXMuc3BhY2VyID0gJyc7DQoJCQkJCQlpZihfdGhpcy5w +YXJhbXMubm9JbmRleGVkU3RyaW5nIT0nJykgew0KCQkJCQkJCV90aGlzLnBhcmFt +cy5maWVsZC52YWx1ZSA9IF90aGlzLnBhcmFtcy5ub0luZGV4ZWRTdHJpbmcgKyBf +dGhpcy5zeW1ib2wgKyBfdGhpcy5zcGFjZXIgKyAnIicgKyByZXBsYWNlZFZhbHVl +Ow0KCQkJCQkJfQ0KCQkJCQkJZWxzZSB7DQoJCQkJCQkJX3RoaXMucGFyYW1zLmZp +ZWxkLnZhbHVlID0gJyInICsgcmVwbGFjZWRWYWx1ZTsNCgkJCQkJCX0NCgkJCQkJ +fQ0KCQkJCQllbHNlIHsNCgkJCQkJCXZhciByZXBsYWNlZFZhbHVlID0gX3RoaXMu +cGFyYW1zLnN0cmluZy5yZXBsYWNlKF90aGlzLnBhcmFtcy5zdHJpbmcsIF90aGlz +LmN1cnJWYWx1ZXNbaV9dKTsNCgkJCQkJCV90aGlzLnNwYWNlciA9Jyc7DQoJCQkJ +CQlfdGhpcy5zeW1ib2wgPT0gJywnID8gX3RoaXMuc3BhY2VyID0gJyAnIDogX3Ro +aXMuc3BhY2VyID0gJyc7DQoJCQkJCQlpZihfdGhpcy5wYXJhbXMubm9JbmRleGVk +U3RyaW5nIT0nJykgew0KCQkJCQkJCV90aGlzLnBhcmFtcy5maWVsZC52YWx1ZSA9 +IF90aGlzLnBhcmFtcy5ub0luZGV4ZWRTdHJpbmcgKyBfdGhpcy5zeW1ib2wgKyBf +dGhpcy5zcGFjZXIgKyByZXBsYWNlZFZhbHVlOw0KCQkJCQkJfQ0KCQkJCQkJZWxz +ZSB7DQoJCQkJCQkJX3RoaXMucGFyYW1zLmZpZWxkLnZhbHVlID0gcmVwbGFjZWRW +YWx1ZTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCQkkKF90aGlzLnBhcmFtcy5vdXRw +dXQpLmFkZENsYXNzKCdoaWRkZW4nKTsNCgkJCQl9DQoJCQkJZWxzZSB7DQoJCQkJ +CWlmKF90aGlzLmlzUXVvdGVPcGVuZWQgPT0gdHJ1ZSkgew0KCQkJCQkJZmllbGQu +dmFsdWUgPSAnIicgKyBfdGhpcy5jdXJyVmFsdWVzW2lfXTsNCgkJCQkJfQ0KCQkJ +CQllbHNlIHsNCgkJCQkJCWZpZWxkLnZhbHVlID0gX3RoaXMuY3VyclZhbHVlc1tp +X107DQoJCQkJCX0NCgkJCQl9DQoJCQkJCQ0KCQkJCSQoX3RoaXMucGFyYW1zLm91 +dHB1dCkuYWRkQ2xhc3MoJ2hpZGRlbicpOw0KCQkJCQ0KCQkJCV90aGlzLnBhcmFt +cy5vdXRwdXQuaW5uZXJIVE1MID0gJyc7DQoJCQkJDQoJCQkJZmllbGQuZm9jdXMo +KTsNCgkJCX0NCgkJfShpKTsNCgl9DQp9Ow0KDQoNCg0Kd2luZG93LmFkZEV2ZW50 +KCdsb2FkJywgZnVuY3Rpb24oKSB7DQoJaWYgKCQoJ3RvcGljLXRhZ3MnKSkgew0K +CQl2YXIgQXV0b3N1Z2dlc3QwMSA9IG5ldyBhdXRvc3VnZ2VzdENsYXNzKCQoJ3Rv +cGljLXRhZ3MnKSwgJ3RhZ3MnLCB0cnVlLCAnLCcpOw0KCX0NCglpZiAoJCgnc2Vh +cmNoJykpIHsNCgkJdmFyIEF1dG9zdWdnZXN0MDIgPSBuZXcgYXV0b3N1Z2dlc3RD +bGFzcygkKCdzZWFyY2gnKSwgJ3NlYXJjaCcsIGZhbHNlLCAnJyk7DQoJfQ0KICAv +KmlmICgkKCd0bycpKSB7DQoJCXZhciBBdXRvc3VnZ2VzdDAzID0gbmV3IGF1dG9z +dWdnZXN0Q2xhc3MoJCgndG8nKSwgJ3VzZXInLCB0cnVlLCAnLCcpOw0KCX0qLw0K +CWlmICgkKCd0YWctc2VhcmNoLWZpZWxkJykpIHsNCgkJdmFyIEF1dG9zdWdnZXN0 +MDQgPSBuZXcgYXV0b3N1Z2dlc3RDbGFzcygkKCd0YWctc2VhcmNoLWZpZWxkJyks +ICd0YWdzJywgZmFsc2UsICcnKTsNCgl9DQoJaWYgKCQoJ21haW4tc2VhcmNoLWZp +ZWxkJykpIHsNCgkJdmFyIEF1dG9zdWdnZXN0MDUgPSBuZXcgYXV0b3N1Z2dlc3RD +bGFzcygkKCdtYWluLXNlYXJjaC1maWVsZCcpLCAnc2VhcmNoJywgZmFsc2UsICcn +KTsNCgl9DQoJaWYgKCQoJ2Zhdm91cml0ZXNfYWRkX3RhZ3MnKSkgew0KCSAgICB2 +YXIgQXV0b3N1Z2dlc3QwNiA9IG5ldyBhdXRvc3VnZ2VzdENsYXNzKCQoJ2Zhdm91 +cml0ZXNfYWRkX3RhZ3MnKSwgJ3RhZ3MnLCB0cnVlLCAnLCcpOw0KCX0NCn0pOw0K + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=highlight.js +Content-Type: application/x-javascript; charset=utf-8; name=highlight.js +Content-Location: http://habrahabr.ru/js/1307631427/highlight.js +Content-Transfer-Encoding: Base64 + +dmFyIGhsanM9bmV3IGZ1bmN0aW9uKCl7dmFyIHE9e307dmFyIGE9e307ZnVuY3Rp +b24gbyhjKXtyZXR1cm4gYy5yZXBsYWNlKC8mL2dtLCImYW1wOyIpLnJlcGxhY2Uo +LzwvZ20sIiZsdDsiKS5yZXBsYWNlKC8+L2dtLCImZ3Q7Iil9ZnVuY3Rpb24gbCh0 +LHMpe2lmKCF0KXtyZXR1cm4gZmFsc2V9Zm9yKHZhciBjPTA7Yzx0Lmxlbmd0aDtj +Kyspe2lmKHRbY109PXMpe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9ZnVuY3Rp +b24gZSh0LHMsYyl7dmFyIHU9Im0iKyh0LmNJPyJpIjoiIikrKGM/ImciOiIiKTty +ZXR1cm4gbmV3IFJlZ0V4cChzLHUpfWZ1bmN0aW9uIGsocyl7Zm9yKHZhciBjPTA7 +YzxzLmNoaWxkTm9kZXMubGVuZ3RoO2MrKyl7bm9kZT1zLmNoaWxkTm9kZXNbY107 +aWYobm9kZS5ub2RlTmFtZT09IkNPREUiKXtyZXR1cm4gbm9kZX1pZighKG5vZGUu +bm9kZVR5cGU9PTMmJm5vZGUubm9kZVZhbHVlLm1hdGNoKC9ccysvKSkpe3JldHVy +biBudWxsfX19ZnVuY3Rpb24gaSh0KXt2YXIgcz0iIjtmb3IodmFyIGM9MDtjPHQu +Y2hpbGROb2Rlcy5sZW5ndGg7YysrKXtpZih0LmNoaWxkTm9kZXNbY10ubm9kZVR5 +cGU9PTMpe3MrPXQuY2hpbGROb2Rlc1tjXS5ub2RlVmFsdWV9ZWxzZXtpZih0LmNo +aWxkTm9kZXNbY10ubm9kZU5hbWU9PSJCUiIpe3MrPSJcbiJ9ZWxzZXtzKz1pKHQu +Y2hpbGROb2Rlc1tjXSl9fX1yZXR1cm4gc31mdW5jdGlvbiBiKHUpe3ZhciBzPXUu +Y2xhc3NOYW1lLnNwbGl0KC9ccysvKTtzPXMuY29uY2F0KHUucGFyZW50Tm9kZS5j +bGFzc05hbWUuc3BsaXQoL1xzKy8pKTtmb3IodmFyIGM9MDtjPHMubGVuZ3RoO2Mr +Kyl7dmFyIHQ9c1tjXS5yZXBsYWNlKC9ebGFuZ3VhZ2UtLywiIik7aWYodD09Im5v +LWhpZ2hsaWdodCIpe3Rocm93Ik5vIGhpZ2hsaWdodCJ9aWYocVt0XSl7cmV0dXJu +IHR9fX1mdW5jdGlvbiBkKGMpe3ZhciBzPVtdOyhmdW5jdGlvbih1LHYpe2Zvcih2 +YXIgdD0wO3Q8dS5jaGlsZE5vZGVzLmxlbmd0aDt0Kyspe2lmKHUuY2hpbGROb2Rl +c1t0XS5ub2RlVHlwZT09Myl7dis9dS5jaGlsZE5vZGVzW3RdLm5vZGVWYWx1ZS5s +ZW5ndGh9ZWxzZXtpZih1LmNoaWxkTm9kZXNbdF0ubm9kZU5hbWU9PSJCUiIpe3Yr +PTF9ZWxzZXtzLnB1c2goe2V2ZW50OiJzdGFydCIsb2Zmc2V0OnYsbm9kZTp1LmNo +aWxkTm9kZXNbdF19KTt2PWFyZ3VtZW50cy5jYWxsZWUodS5jaGlsZE5vZGVzW3Rd +LHYpO3MucHVzaCh7ZXZlbnQ6InN0b3AiLG9mZnNldDp2LG5vZGU6dS5jaGlsZE5v +ZGVzW3RdfSl9fX1yZXR1cm4gdn0pKGMsMCk7cmV0dXJuIHN9ZnVuY3Rpb24gbihB +LEIseil7dmFyIHQ9MDt2YXIgeT0iIjt2YXIgdj1bXTtmdW5jdGlvbiB3KCl7aWYo +QS5sZW5ndGgmJkIubGVuZ3RoKXtpZihBWzBdLm9mZnNldCE9QlswXS5vZmZzZXQp +e3JldHVybihBWzBdLm9mZnNldDxCWzBdLm9mZnNldCk/QTpCfWVsc2V7cmV0dXJu +KEFbMF0uZXZlbnQ9PSJzdGFydCImJkJbMF0uZXZlbnQ9PSJzdG9wIik/QjpBfX1l +bHNle3JldHVybiBBLmxlbmd0aD9BOkJ9fWZ1bmN0aW9uIHUoRil7dmFyIEc9Ijwi +K0Yubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtmb3IodmFyIEQ9MDtEPEYuYXR0cmli +dXRlcy5sZW5ndGg7RCsrKXt2YXIgRT1GLmF0dHJpYnV0ZXNbRF07Rys9IiAiK0Uu +bm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZihFLm5vZGVWYWx1ZSE9dW5kZWZpbmVk +KXtHKz0nPSInK28oRS5ub2RlVmFsdWUpKyciJ319cmV0dXJuIEcrIj4ifWZ1bmN0 +aW9uIEMoRCl7cmV0dXJuIjwvIitELm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkrIj4i +fXdoaWxlKEEubGVuZ3RofHxCLmxlbmd0aCl7dmFyIHg9dygpLnNwbGljZSgwLDEp +WzBdO3krPW8oei5zdWJzdHIodCx4Lm9mZnNldC10KSk7dD14Lm9mZnNldDtpZih4 +LmV2ZW50PT0ic3RhcnQiKXt5Kz11KHgubm9kZSk7di5wdXNoKHgubm9kZSl9ZWxz +ZXtpZih4LmV2ZW50PT0ic3RvcCIpe3ZhciBzPXYubGVuZ3RoO2Rve3MtLTt2YXIg +Yz12W3NdO3krPUMoYyl9d2hpbGUoYyE9eC5ub2RlKTt2LnNwbGljZShzLDEpO3do +aWxlKHM8di5sZW5ndGgpe3krPXUodltzXSk7cysrfX19fXkrPXouc3Vic3RyKHQp +O3JldHVybiB5fWZ1bmN0aW9uIGgoSyxFKXtmdW5jdGlvbiBMKFEsUCl7US5zbT1b +XTtmb3IodmFyIE89MDtPPFEuYy5sZW5ndGg7TysrKXtmb3IodmFyIE49MDtOPFAu +bS5sZW5ndGg7TisrKXtpZihQLm1bTl0uY049PVEuY1tPXSl7US5zbVtRLnNtLmxl +bmd0aF09UC5tW05dfX19fWZ1bmN0aW9uIEEoTixQKXtpZighUC5jKXtyZXR1cm4g +bnVsbH1pZighUC5zbSl7TChQLEkpfWZvcih2YXIgTz0wO088UC5zbS5sZW5ndGg7 +TysrKXtpZihQLnNtW09dLmJSLnRlc3QoTikpe3JldHVybiBQLnNtW09dfX1yZXR1 +cm4gbnVsbH1mdW5jdGlvbiB4KE8sTil7aWYoRFtPXS5lJiZEW09dLmVSLnRlc3Qo +Tikpe3JldHVybiAxfWlmKERbT10uZVcpe3ZhciBQPXgoTy0xLE4pO3JldHVybiBQ +P1ArMTowfXJldHVybiAwfWZ1bmN0aW9uIHkoTixPKXtyZXR1cm4gTy5pUiYmTy5p +Ui50ZXN0KE4pfWZ1bmN0aW9uIEIoVCxSKXt2YXIgUD1bXTtmdW5jdGlvbiBTKFUp +e2lmKCFsKFAsVSkpe1BbUC5sZW5ndGhdPVV9fWlmKFQuYyl7Zm9yKHZhciBPPTA7 +TzxSLm0ubGVuZ3RoO08rKyl7aWYobChULmMsUi5tW09dLmNOKSl7UyhSLm1bT10u +Yil9fX12YXIgTj1ELmxlbmd0aC0xO2Rve2lmKERbTl0uZSl7UyhEW05dLmUpfU4t +LX13aGlsZShEW04rMV0uZVcpO2lmKFQuaSl7UyhULmkpfXZhciBRPSIoIitQWzBd +O2Zvcih2YXIgTz0wO088UC5sZW5ndGg7TysrKXtRKz0ifCIrUFtPXX1RKz0iKSI7 +cmV0dXJuIGUoUixRKX1mdW5jdGlvbiB0KFAsTyl7dmFyIFE9RFtELmxlbmd0aC0x +XTtpZighUS50KXtRLnQ9QihRLEkpfVA9UC5zdWJzdHIoTyk7dmFyIE49US50LmV4 +ZWMoUCk7aWYoIU4pe3JldHVybltQLCIiLHRydWVdfWlmKE4uaW5kZXg9PTApe3Jl +dHVyblsiIixOWzBdLGZhbHNlXX1lbHNle3JldHVybltQLnN1YnN0cigwLE4uaW5k +ZXgpLE5bMF0sZmFsc2VdfX1mdW5jdGlvbiBzKFIsTil7dmFyIE89SS5jST9OWzBd +LnRvTG93ZXJDYXNlKCk6TlswXTtmb3IodmFyIFEgaW4gUi5rZXl3b3JkR3JvdXBz +KXtpZighUi5rZXl3b3JkR3JvdXBzLmhhc093blByb3BlcnR5KFEpKXtjb250aW51 +ZX12YXIgUD1SLmtleXdvcmRHcm91cHNbUV0uaGFzT3duUHJvcGVydHkoTyk7aWYo +UCl7cmV0dXJuW1EsUF19fXJldHVybiBmYWxzZX1mdW5jdGlvbiBHKFEsVCl7aWYo +IVQua3x8IVQubCl7cmV0dXJuIG8oUSl9aWYoIVQubFIpe3ZhciBTPSIoIitULmxb +MF07Zm9yKHZhciBQPTE7UDxULmwubGVuZ3RoO1ArKyl7Uys9InwiK1QubFtQXX1T +Kz0iKSI7VC5sUj1lKEksUyx0cnVlKX12YXIgUj0iIjt2YXIgVT0wO1QubFIubGFz +dEluZGV4PTA7dmFyIE89VC5sUi5leGVjKFEpO3doaWxlKE8pe1IrPW8oUS5zdWJz +dHIoVSxPLmluZGV4LVUpKTt2YXIgTj1zKFQsTyk7aWYoTil7dSs9TlsxXTtSKz0n +PHNwYW4gY2xhc3M9IicrTlswXSsnIj4nK28oT1swXSkrIjwvc3Bhbj4ifWVsc2V7 +Uis9byhPWzBdKX1VPVQubFIubGFzdEluZGV4O089VC5sUi5leGVjKFEpfVIrPW8o +US5zdWJzdHIoVSxRLmxlbmd0aC1VKSk7cmV0dXJuIFJ9ZnVuY3Rpb24gTShOLFAp +e2lmKFAuc3ViTGFuZ3VhZ2UmJmFbUC5zdWJMYW5ndWFnZV0pe3ZhciBPPWgoUC5z +dWJMYW5ndWFnZSxOKTt1Kz1PLmtleXdvcmRfY291bnQ7Qys9Ty5yO3JldHVybiBP +LnZhbHVlfWVsc2V7cmV0dXJuIEcoTixQKX19ZnVuY3Rpb24gSihQLE4pe3ZhciBP +PVAubk0/IiI6JzxzcGFuIGNsYXNzPSInK1AuZGlzcGxheUNsYXNzTmFtZSsnIj4n +O2lmKFAuckIpe2MrPU87UC5idWZmZXI9IiJ9ZWxzZXtpZihQLmVCKXtjKz1vKE4p +K087UC5idWZmZXI9IiJ9ZWxzZXtjKz1PO1AuYnVmZmVyPU59fURbRC5sZW5ndGhd +PVB9ZnVuY3Rpb24gRihTLE8sVCl7dmFyIFU9RFtELmxlbmd0aC0xXTtpZihUKXtj +Kz1NKFUuYnVmZmVyK1MsVSk7cmV0dXJuIGZhbHNlfXZhciBQPUEoTyxVKTtpZihQ +KXtjKz1NKFUuYnVmZmVyK1MsVSk7SihQLE8pO0MrPVAucjtyZXR1cm4gUC5yQn12 +YXIgTj14KEQubGVuZ3RoLTEsTyk7aWYoTil7dmFyIFI9VS5uTT8iIjoiPC9zcGFu +PiI7aWYoVS5yRSl7Yys9TShVLmJ1ZmZlcitTLFUpK1J9ZWxzZXtpZihVLmVFKXtj +Kz1NKFUuYnVmZmVyK1MsVSkrUitvKE8pfWVsc2V7Yys9TShVLmJ1ZmZlcitTK08s +VSkrUn19d2hpbGUoTj4xKXtSPURbRC5sZW5ndGgtMl0ubk0/IiI6Ijwvc3Bhbj4i +O2MrPVI7Ti0tO0QubGVuZ3RoLS19RC5sZW5ndGgtLTtEW0QubGVuZ3RoLTFdLmJ1 +ZmZlcj0iIjtpZihVLnN0YXJ0cyl7Zm9yKHZhciBRPTA7UTxJLm0ubGVuZ3RoO1Er +Kyl7aWYoSS5tW1FdLmNOPT1VLnN0YXJ0cyl7SihJLm1bUV0sIiIpO2JyZWFrfX19 +cmV0dXJuIFUuckV9aWYoeShPLFUpKXt0aHJvdyJJbGxlZ2FsIn19dmFyIEk9cVtL +XTt2YXIgRD1bSS5kTV07dmFyIEM9MDt2YXIgdT0wO3ZhciBjPSIiO3RyeXt2YXIg +dz0wO0kuZE0uYnVmZmVyPSIiO2Rve3ZhciB6PXQoRSx3KTt2YXIgdj1GKHpbMF0s +elsxXSx6WzJdKTt3Kz16WzBdLmxlbmd0aDtpZighdil7dys9elsxXS5sZW5ndGh9 +fXdoaWxlKCF6WzJdKTtpZihELmxlbmd0aD4xKXt0aHJvdyJJbGxlZ2FsIn1yZXR1 +cm57cjpDLGtleXdvcmRfY291bnQ6dSx2YWx1ZTpjfX1jYXRjaChIKXtpZihIPT0i +SWxsZWdhbCIpe3JldHVybntyOjAsa2V5d29yZF9jb3VudDowLHZhbHVlOm8oRSl9 +fWVsc2V7dGhyb3cgSH19fWZ1bmN0aW9uIGooKXtmb3IodmFyIHMgaW4gcSl7aWYo +IXEuaGFzT3duUHJvcGVydHkocykpe2NvbnRpbnVlfXZhciB0PXFbc107Zm9yKHZh +ciBjPTA7Yzx0Lm0ubGVuZ3RoO2MrKyl7dmFyIHU9dC5tW2NdO2lmKHUuYil7dS5i +Uj1lKHQsIl4iK3UuYil9aWYodS5lKXt1LmVSPWUodCwiXiIrdS5lKX1pZih1Lmkp +e3UuaVI9ZSh0LCJeKD86Iit1LmkrIikiKX10LmRNLmlSPWUodCwiXig/OiIrdC5k +TS5pKyIpIik7aWYodS5yPT11bmRlZmluZWQpe3Uucj0xfWlmKCF1LmRpc3BsYXlD +bGFzc05hbWUpe3UuZGlzcGxheUNsYXNzTmFtZT11LmNOfX19fWZ1bmN0aW9uIGco +KXtmdW5jdGlvbiB0KHcpe2lmKCF3LmtleXdvcmRHcm91cHMpe2Zvcih2YXIgdiBp +biB3Lmspe2lmKCF3LmsuaGFzT3duUHJvcGVydHkodikpe2NvbnRpbnVlfWlmKHcu +a1t2XSBpbnN0YW5jZW9mIE9iamVjdCl7dy5rZXl3b3JkR3JvdXBzPXcua31lbHNl +e3cua2V5d29yZEdyb3Vwcz17a2V5d29yZDp3Lmt9fWJyZWFrfX19Zm9yKHZhciBz +IGluIHEpe2lmKCFxLmhhc093blByb3BlcnR5KHMpKXtjb250aW51ZX12YXIgdT1x +W3NdO3QodS5kTSk7Zm9yKHZhciBjPTA7Yzx1Lm0ubGVuZ3RoO2MrKyl7dCh1Lm1b +Y10pfX19ZnVuY3Rpb24gZigpe2lmKGYuY2FsbGVkKXtyZXR1cm59Zi5jYWxsZWQ9 +dHJ1ZTtqKCk7ZygpO2E9cX1mdW5jdGlvbiByKHksQyl7ZigpO3RyeXt2YXIgRj1p +KHkpO3ZhciB2PWIoeSl9Y2F0Y2goeil7aWYoej09Ik5vIGhpZ2hsaWdodCIpe3Jl +dHVybn19aWYodil7dmFyIEI9aCh2LEYpLnZhbHVlfWVsc2V7dmFyIEQ9MDtmb3Io +dmFyIEUgaW4gYSl7aWYoIWEuaGFzT3duUHJvcGVydHkoRSkpe2NvbnRpbnVlfXZh +ciB0PWgoRSxGKTt2YXIgYz10LmtleXdvcmRfY291bnQrdC5yO2lmKGM+RCl7RD1j +O3ZhciBCPXQudmFsdWU7dj1FfX19aWYoQil7dmFyIHg9eS5jbGFzc05hbWU7aWYo +IXgubWF0Y2godikpe3grPSIgIit2fXZhciBzPWQoeSk7aWYocy5sZW5ndGgpe3Zh +ciB1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInByZSIpO3UuaW5uZXJIVE1MPUI7 +Qj1uKHMsZCh1KSxGKX1pZihDKXtCPUIucmVwbGFjZSgvXigoPFtePl0rPnxcdCkr +KS9nbSxmdW5jdGlvbihHLEosSSxIKXtyZXR1cm4gSi5yZXBsYWNlKC9cdC9nLEMp +fSl9dmFyIEE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7QS5pbm5lckhU +TUw9JzxwcmU+PGNvZGUgY2xhc3M9IicreCsnIj4nK0IrIjwvY29kZT48L3ByZT4i +O3ZhciB3PXkucGFyZW50Tm9kZS5wYXJlbnROb2RlO3cucmVwbGFjZUNoaWxkKEEu +Zmlyc3RDaGlsZCx5LnBhcmVudE5vZGUpfX1mdW5jdGlvbiBtKCl7aWYobS5jYWxs +ZWQpe3JldHVybn1tLmNhbGxlZD10cnVlO2YoKTtpZihhcmd1bWVudHMubGVuZ3Ro +KXtmb3IodmFyIGM9MDtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKXtpZihxW2FyZ3Vt +ZW50c1tjXV0pe2FbYXJndW1lbnRzW2NdXT1xW2FyZ3VtZW50c1tjXV19fX12YXIg +dD1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicHJlIik7Zm9yKHZhciBj +PTA7Yzx0Lmxlbmd0aDtjKyspe3ZhciBzPWsodFtjXSk7aWYocyl7cihzLGhsanMu +dGFiUmVwbGFjZSl9fX1mdW5jdGlvbiBwKCl7dmFyIGM9YXJndW1lbnRzO3ZhciBz +PWZ1bmN0aW9uKCl7bS5hcHBseShudWxsLGMpfTtpZih3aW5kb3cuYWRkRXZlbnRM +aXN0ZW5lcil7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2Fk +ZWQiLHMsZmFsc2UpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixzLGZh +bHNlKX1lbHNle2lmKHdpbmRvdy5hdHRhY2hFdmVudCl7d2luZG93LmF0dGFjaEV2 +ZW50KCJvbmxvYWQiLHMpfWVsc2V7d2luZG93Lm9ubG9hZD1zfX19dGhpcy5MQU5H +VUFHRVM9cTt0aGlzLmluaXRIaWdobGlnaHRpbmdPbkxvYWQ9cDt0aGlzLmhpZ2hs +aWdodEJsb2NrPXI7dGhpcy5pbml0SGlnaGxpZ2h0aW5nPW07dGhpcy5JUj0iW2Et +ekEtWl1bYS16QS1aMC05X10qIjt0aGlzLlVJUj0iW2EtekEtWl9dW2EtekEtWjAt +OV9dKiI7dGhpcy5OUj0iXFxiXFxkKyhcXC5cXGQrKT8iO3RoaXMuQ05SPSJcXGIo +MHhbQS1aYS16MC05XSt8XFxkKyhcXC5cXGQrKT8pIjt0aGlzLlJTUj0iIXwhPXwh +PT18JXwlPXwmfCYmfCY9fFxcKnxcXCo9fFxcK3xcXCs9fCx8XFwufC18LT18L3wv +PXw6fDt8PHw8PHw8PD18PD18PXw9PXw9PT18Pnw+PXw+Pnw+Pj18Pj4+fD4+Pj18 +XFw/fFxcW3xcXHt8XFwofFxcXnxcXF49fFxcfHxcXHw9fFxcfFxcfHx+Ijt0aGlz +LkFTTT17Y046InN0cmluZyIsYjoiJyIsZToiJyIsaToiXFxuIixjOlsiZXNjYXBl +Il0scjowfTt0aGlzLlFTTT17Y046InN0cmluZyIsYjonIicsZTonIicsaToiXFxu +IixjOlsiZXNjYXBlIl0scjowfTt0aGlzLkJFPXtjTjoiZXNjYXBlIixiOiJcXFxc +LiIsZToiXiIsbk06dHJ1ZSxyOjB9O3RoaXMuQ0xDTT17Y046ImNvbW1lbnQiLGI6 +Ii8vIixlOiIkIixyOjB9O3RoaXMuQ0JMQ0xNPXtjTjoiY29tbWVudCIsYjoiL1xc +KiIsZToiXFwqLyJ9O3RoaXMuSENNPXtjTjoiY29tbWVudCIsYjoiIyIsZToiJCJ9 +O3RoaXMuQ05NPXtjTjoibnVtYmVyIixiOnRoaXMuQ05SLGU6Il4iLHI6MH19KCk7 +dmFyIGluaXRIaWdobGlnaHRpbmdPbkxvYWQ9aGxqcy5pbml0SGlnaGxpZ2h0aW5n +T25Mb2FkO2hsanMuTEFOR1VBR0VTLmJhc2g9ZnVuY3Rpb24oKXt2YXIgYT17InRy +dWUiOjEsImZhbHNlIjoxfTtyZXR1cm57ZE06e2w6W2hsanMuSVJdLGM6WyJzdHJp +bmciLCJzaGViYW5nIiwiY29tbWVudCIsIm51bWJlciIsInRlc3RfY29uZGl0aW9u +Iiwic3RyaW5nIiwidmFyaWFibGUiXSxrOntrZXl3b3JkOnsiaWYiOjEsdGhlbjox +LCJlbHNlIjoxLGZpOjEsImZvciI6MSwiYnJlYWsiOjEsImNvbnRpbnVlIjoxLCJ3 +aGlsZSI6MSwiaW4iOjEsImRvIjoxLGRvbmU6MSxlY2hvOjEsZXhpdDoxLCJyZXR1 +cm4iOjEsc2V0OjEsZGVjbGFyZToxfSxsaXRlcmFsOmF9fSxjSTpmYWxzZSxtOlt7 +Y046InNoZWJhbmciLGI6IigjIVxcL2JpblxcL2Jhc2gpfCgjIVxcL2JpblxcL3No +KSIsZToiXiIscjoxMH0saGxqcy5IQ00se2NOOiJ0ZXN0X2NvbmRpdGlvbiIsYjoi +XFxbICIsZToiIFxcXSIsYzpbInN0cmluZyIsInZhcmlhYmxlIiwibnVtYmVyIl0s +bDpbaGxqcy5JUl0sazp7bGl0ZXJhbDphfSxyOjB9LHtjTjoidGVzdF9jb25kaXRp +b24iLGI6IlxcW1xcWyAiLGU6IiBcXF1cXF0iLGM6WyJzdHJpbmciLCJ2YXJpYWJs +ZSIsIm51bWJlciJdLGw6W2hsanMuSVJdLGs6e2xpdGVyYWw6YX19LHtjTjoidmFy +aWFibGUiLGI6IlxcJChbYS16QS1aMC05X10rKVxcYiIsZToiXiJ9LHtjTjoidmFy +aWFibGUiLGI6IlxcJFxceygoW159XSl8KFxcXFx9KSkrXFx9IixlOiJeIixjOlsi +bnVtYmVyIl19LHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxpOiJcXG4iLGM6WyJl +c2NhcGUiLCJ2YXJpYWJsZSJdLHI6MH0se2NOOiJzdHJpbmciLGI6JyInLGU6JyIn +LGk6IlxcbiIsYzpbImVzY2FwZSIsInZhcmlhYmxlIl0scjowfSxobGpzLkJFLGhs +anMuQ05NLHtjTjoiY29tbWVudCIsYjoiXFwvXFwvIixlOiIkIixpOiIuIn1dfX0o +KTtobGpzLkxBTkdVQUdFUy5jcz17ZE06e2w6W2hsanMuVUlSXSxjOlsiY29tbWVu +dCIsInN0cmluZyIsIm51bWJlciJdLGs6eyJhYnN0cmFjdCI6MSxhczoxLGJhc2U6 +MSxib29sOjEsImJyZWFrIjoxLCJieXRlIjoxLCJjYXNlIjoxLCJjYXRjaCI6MSwi +Y2hhciI6MSxjaGVja2VkOjEsImNsYXNzIjoxLCJjb25zdCI6MSwiY29udGludWUi +OjEsZGVjaW1hbDoxLCJkZWZhdWx0IjoxLGRlbGVnYXRlOjEsImRvIjoxLCJkbyI6 +MSwiZG91YmxlIjoxLCJlbHNlIjoxLCJlbnVtIjoxLGV2ZW50OjEsZXhwbGljaXQ6 +MSxleHRlcm46MSwiZmFsc2UiOjEsImZpbmFsbHkiOjEsZml4ZWQ6MSwiZmxvYXQi +OjEsImZvciI6MSxmb3JlYWNoOjEsImdvdG8iOjEsImlmIjoxLGltcGxpY2l0OjEs +ImluIjoxLCJpbnQiOjEsImludGVyZmFjZSI6MSxpbnRlcm5hbDoxLGlzOjEsbG9j +azoxLCJsb25nIjoxLG5hbWVzcGFjZToxLCJuZXciOjEsIm51bGwiOjEsb2JqZWN0 +OjEsb3BlcmF0b3I6MSxvdXQ6MSxvdmVycmlkZToxLHBhcmFtczoxLCJwcml2YXRl +IjoxLCJwcm90ZWN0ZWQiOjEsInB1YmxpYyI6MSxyZWFkb25seToxLHJlZjoxLCJy +ZXR1cm4iOjEsc2J5dGU6MSxzZWFsZWQ6MSwic2hvcnQiOjEsc2l6ZW9mOjEsc3Rh +Y2thbGxvYzoxLCJzdGF0aWMiOjEsc3RyaW5nOjEsc3RydWN0OjEsInN3aXRjaCI6 +MSwidGhpcyI6MSwidGhyb3ciOjEsInRydWUiOjEsInRyeSI6MSwidHlwZW9mIjox +LHVpbnQ6MSx1bG9uZzoxLHVuY2hlY2tlZDoxLHVuc2FmZToxLHVzaG9ydDoxLHVz +aW5nOjEsdmlydHVhbDoxLCJ2b2xhdGlsZSI6MSwidm9pZCI6MSwid2hpbGUiOjEs +YXNjZW5kaW5nOjEsZGVzY2VuZGluZzoxLGZyb206MSxnZXQ6MSxncm91cDoxLGlu +dG86MSxqb2luOjEsbGV0OjEsb3JkZXJieToxLHBhcnRpYWw6MSxzZWxlY3Q6MSxz +ZXQ6MSx2YWx1ZToxLCJ2YXIiOjEsd2hlcmU6MSx5aWVsZDoxfX0sbTpbe2NOOiJj +b21tZW50IixiOiIvLy8iLGU6IiQiLHJCOnRydWUsYzpbInhtbERvY1RhZyJdfSx7 +Y046InhtbERvY1RhZyIsYjoiLy8vfDwhLS18LS0+IixlOiJeIn0se2NOOiJ4bWxE +b2NUYWciLGI6IjwvPyIsZToiPiJ9LHtjTjoic3RyaW5nIixiOidAIicsZTonIics +YzpbInF1b3RlUXVvdGUiXX0se2NOOiJxdW90ZVF1b3RlIixiOiciIicsZToiXiJ9 +LGhsanMuQ0xDTSxobGpzLkNCTENMTSxobGpzLkFTTSxobGpzLlFTTSxobGpzLkJF +LGhsanMuQ05NXX07aGxqcy5MQU5HVUFHRVMucnVieT1mdW5jdGlvbigpe3ZhciBh +PSJbYS16QS1aX11bYS16QS1aMC05X10qKFxcIXxcXD8pPyI7dmFyIGM9IlthLXpB +LVpfXVxcdypbIT89XT98Wy0rfl1cXEB8PDx8Pj58PX58PT09P3w8PT58Wzw+XT0/ +fFxcKlxcKnxbLS8rJV4mKn5gfF18XFxbXFxdPT8iO3ZhciBiPVsiY29tbWVudCIs +InN0cmluZyIsImNoYXIiLCJjbGFzcyIsImZ1bmN0aW9uIiwiY29uc3RhbnQiLCJz +eW1ib2wiLCJudW1iZXIiLCJ2YXJpYWJsZSIsImlkZW50aWZpZXIiLCJyZWdleHBf +Y29udGFpbmVyIl07dmFyIGQ9e2tleXdvcmQ6e2FuZDoxLCJmYWxzZSI6MSx0aGVu +OjEsZGVmaW5lZDoxLG1vZHVsZToxLCJpbiI6MSwicmV0dXJuIjoxLHJlZG86MSwi +aWYiOjEsQkVHSU46MSxyZXRyeToxLGVuZDoxLCJmb3IiOjEsInRydWUiOjEsc2Vs +ZjoxLHdoZW46MSxuZXh0OjEsdW50aWw6MSwiZG8iOjEsYmVnaW46MSx1bmxlc3M6 +MSxFTkQ6MSxyZXNjdWU6MSxuaWw6MSwiZWxzZSI6MSwiYnJlYWsiOjEsdW5kZWY6 +MSxub3Q6MSwic3VwZXIiOjEsImNsYXNzIjoxLCJjYXNlIjoxLHJlcXVpcmU6MSx5 +aWVsZDoxLGFsaWFzOjEsIndoaWxlIjoxLGVuc3VyZToxLGVsc2lmOjEsb3I6MSxk +ZWY6MX0sa2V5bWV0aG9kczp7X19pZF9fOjEsX19zZW5kX186MSxhYm9ydDoxLGFi +czoxLCJhbGw/IjoxLGFsbG9jYXRlOjEsYW5jZXN0b3JzOjEsImFueT8iOjEsYXJp +dHk6MSxhc3NvYzoxLGF0OjEsYXRfZXhpdDoxLGF1dG9sb2FkOjEsImF1dG9sb2Fk +PyI6MSwiYmV0d2Vlbj8iOjEsYmluZGluZzoxLGJpbm1vZGU6MSwiYmxvY2tfZ2l2 +ZW4/IjoxLGNhbGw6MSxjYWxsY2M6MSxjYWxsZXI6MSxjYXBpdGFsaXplOjEsImNh +cGl0YWxpemUhIjoxLGNhc2VjbXA6MSwiY2F0Y2giOjEsY2VpbDoxLGNlbnRlcjox +LGNob21wOjEsImNob21wISI6MSxjaG9wOjEsImNob3AhIjoxLGNocjoxLCJjbGFz +cyI6MSxjbGFzc19ldmFsOjEsImNsYXNzX3ZhcmlhYmxlX2RlZmluZWQ/IjoxLGNs +YXNzX3ZhcmlhYmxlczoxLGNsZWFyOjEsY2xvbmU6MSxjbG9zZToxLGNsb3NlX3Jl +YWQ6MSxjbG9zZV93cml0ZToxLCJjbG9zZWQ/IjoxLGNvZXJjZToxLGNvbGxlY3Q6 +MSwiY29sbGVjdCEiOjEsY29tcGFjdDoxLCJjb21wYWN0ISI6MSxjb25jYXQ6MSwi +Y29uc3RfZGVmaW5lZD8iOjEsY29uc3RfZ2V0OjEsY29uc3RfbWlzc2luZzoxLGNv +bnN0X3NldDoxLGNvbnN0YW50czoxLGNvdW50OjEsY3J5cHQ6MSwiZGVmYXVsdCI6 +MSxkZWZhdWx0X3Byb2M6MSwiZGVsZXRlIjoxLCJkZWxldGUhIjoxLGRlbGV0ZV9h +dDoxLGRlbGV0ZV9pZjoxLGRldGVjdDoxLGRpc3BsYXk6MSxkaXY6MSxkaXZtb2Q6 +MSxkb3duY2FzZToxLCJkb3duY2FzZSEiOjEsZG93bnRvOjEsZHVtcDoxLGR1cDox +LGVhY2g6MSxlYWNoX2J5dGU6MSxlYWNoX2luZGV4OjEsZWFjaF9rZXk6MSxlYWNo +X2xpbmU6MSxlYWNoX3BhaXI6MSxlYWNoX3ZhbHVlOjEsZWFjaF93aXRoX2luZGV4 +OjEsImVtcHR5PyI6MSxlbnRyaWVzOjEsZW9mOjEsImVvZj8iOjEsImVxbD8iOjEs +ImVxdWFsPyI6MSwiZXZhbCI6MSxleGVjOjEsZXhpdDoxLCJleGl0ISI6MSxleHRl +bmQ6MSxmYWlsOjEsZmNudGw6MSxmZXRjaDoxLGZpbGVubzoxLGZpbGw6MSxmaW5k +OjEsZmluZF9hbGw6MSxmaXJzdDoxLGZsYXR0ZW46MSwiZmxhdHRlbiEiOjEsZmxv +b3I6MSxmbHVzaDoxLGZvcl9mZDoxLGZvcmVhY2g6MSxmb3JrOjEsZm9ybWF0OjEs +ZnJlZXplOjEsImZyb3plbj8iOjEsZnN5bmM6MSxnZXRjOjEsZ2V0czoxLGdsb2Jh +bF92YXJpYWJsZXM6MSxncmVwOjEsZ3N1YjoxLCJnc3ViISI6MSwiaGFzX2tleT8i +OjEsImhhc192YWx1ZT8iOjEsaGFzaDoxLGhleDoxLGlkOjEsaW5jbHVkZToxLCJp +bmNsdWRlPyI6MSxpbmNsdWRlZF9tb2R1bGVzOjEsaW5kZXg6MSxpbmRleGVzOjEs +aW5kaWNlczoxLGluZHVjZWRfZnJvbToxLGluamVjdDoxLGluc2VydDoxLGluc3Bl +Y3Q6MSxpbnN0YW5jZV9ldmFsOjEsaW5zdGFuY2VfbWV0aG9kOjEsaW5zdGFuY2Vf +bWV0aG9kczoxLCJpbnN0YW5jZV9vZj8iOjEsImluc3RhbmNlX3ZhcmlhYmxlX2Rl +ZmluZWQ/IjoxLGluc3RhbmNlX3ZhcmlhYmxlX2dldDoxLGluc3RhbmNlX3Zhcmlh +YmxlX3NldDoxLGluc3RhbmNlX3ZhcmlhYmxlczoxLCJpbnRlZ2VyPyI6MSxpbnRl +cm46MSxpbnZlcnQ6MSxpb2N0bDoxLCJpc19hPyI6MSxpc2F0dHk6MSwiaXRlcmF0 +b3I/IjoxLGpvaW46MSwia2V5PyI6MSxrZXlzOjEsImtpbmRfb2Y/IjoxLGxhbWJk +YToxLGxhc3Q6MSxsZW5ndGg6MSxsaW5lbm86MSxsanVzdDoxLGxvYWQ6MSxsb2Nh +bF92YXJpYWJsZXM6MSxsb29wOjEsbHN0cmlwOjEsImxzdHJpcCEiOjEsbWFwOjEs +Im1hcCEiOjEsbWF0Y2g6MSxtYXg6MSwibWVtYmVyPyI6MSxtZXJnZToxLCJtZXJn +ZSEiOjEsbWV0aG9kOjEsIm1ldGhvZF9kZWZpbmVkPyI6MSxtZXRob2RfbWlzc2lu +ZzoxLG1ldGhvZHM6MSxtaW46MSxtb2R1bGVfZXZhbDoxLG1vZHVsbzoxLG5hbWU6 +MSxuZXN0aW5nOjEsIm5ldyI6MSxuZXh0OjEsIm5leHQhIjoxLCJuaWw/IjoxLG5p +dGVtczoxLCJub256ZXJvPyI6MSxvYmplY3RfaWQ6MSxvY3Q6MSxvcGVuOjEscGFj +azoxLHBhcnRpdGlvbjoxLHBpZDoxLHBpcGU6MSxwb3A6MSxwb3BlbjoxLHBvczox +LHByZWM6MSxwcmVjX2Y6MSxwcmVjX2k6MSxwcmludDoxLHByaW50ZjoxLHByaXZh +dGVfY2xhc3NfbWV0aG9kOjEscHJpdmF0ZV9pbnN0YW5jZV9tZXRob2RzOjEsInBy +aXZhdGVfbWV0aG9kX2RlZmluZWQ/IjoxLHByaXZhdGVfbWV0aG9kczoxLHByb2M6 +MSxwcm90ZWN0ZWRfaW5zdGFuY2VfbWV0aG9kczoxLCJwcm90ZWN0ZWRfbWV0aG9k +X2RlZmluZWQ/IjoxLHByb3RlY3RlZF9tZXRob2RzOjEscHVibGljX2NsYXNzX21l +dGhvZDoxLHB1YmxpY19pbnN0YW5jZV9tZXRob2RzOjEsInB1YmxpY19tZXRob2Rf +ZGVmaW5lZD8iOjEscHVibGljX21ldGhvZHM6MSxwdXNoOjEscHV0YzoxLHB1dHM6 +MSxxdW86MSxyYWlzZToxLHJhbmQ6MSxyYXNzb2M6MSxyZWFkOjEscmVhZF9ub25i +bG9jazoxLHJlYWRjaGFyOjEscmVhZGxpbmU6MSxyZWFkbGluZXM6MSxyZWFkcGFy +dGlhbDoxLHJlaGFzaDoxLHJlamVjdDoxLCJyZWplY3QhIjoxLHJlbWFpbmRlcjox +LHJlb3BlbjoxLHJlcGxhY2U6MSxyZXF1aXJlOjEsInJlc3BvbmRfdG8/IjoxLHJl +dmVyc2U6MSwicmV2ZXJzZSEiOjEscmV2ZXJzZV9lYWNoOjEscmV3aW5kOjEscmlu +ZGV4OjEscmp1c3Q6MSxyb3VuZDoxLHJzdHJpcDoxLCJyc3RyaXAhIjoxLHNjYW46 +MSxzZWVrOjEsc2VsZWN0OjEsc2VuZDoxLHNldF90cmFjZV9mdW5jOjEsc2hpZnQ6 +MSxzaW5nbGV0b25fbWV0aG9kX2FkZGVkOjEsc2luZ2xldG9uX21ldGhvZHM6MSxz +aXplOjEsc2xlZXA6MSxzbGljZToxLCJzbGljZSEiOjEsc29ydDoxLCJzb3J0ISI6 +MSxzb3J0X2J5OjEsc3BsaXQ6MSxzcHJpbnRmOjEsc3F1ZWV6ZToxLCJzcXVlZXpl +ISI6MSxzcmFuZDoxLHN0YXQ6MSxzdGVwOjEsc3RvcmU6MSxzdHJpcDoxLCJzdHJp +cCEiOjEsc3ViOjEsInN1YiEiOjEsc3VjYzoxLCJzdWNjISI6MSxzdW06MSxzdXBl +cmNsYXNzOjEsc3dhcGNhc2U6MSwic3dhcGNhc2UhIjoxLHN5bmM6MSxzeXNjYWxs +OjEsc3lzb3BlbjoxLHN5c3JlYWQ6MSxzeXNzZWVrOjEsc3lzdGVtOjEsc3lzd3Jp +dGU6MSx0YWludDoxLCJ0YWludGVkPyI6MSx0ZWxsOjEsdGVzdDoxLCJ0aHJvdyI6 +MSx0aW1lczoxLHRvX2E6MSx0b19hcnk6MSx0b19mOjEsdG9faGFzaDoxLHRvX2k6 +MSx0b19pbnQ6MSx0b19pbzoxLHRvX3Byb2M6MSx0b19zOjEsdG9fc3RyOjEsdG9f +c3ltOjEsdHI6MSwidHIhIjoxLHRyX3M6MSwidHJfcyEiOjEsdHJhY2VfdmFyOjEs +dHJhbnNwb3NlOjEsdHJhcDoxLHRydW5jYXRlOjEsInR0eT8iOjEsdHlwZToxLHVu +Z2V0YzoxLHVuaXE6MSwidW5pcSEiOjEsdW5wYWNrOjEsdW5zaGlmdDoxLHVudGFp +bnQ6MSx1bnRyYWNlX3ZhcjoxLHVwY2FzZToxLCJ1cGNhc2UhIjoxLHVwZGF0ZTox +LHVwdG86MSwidmFsdWU/IjoxLHZhbHVlczoxLHZhbHVlc19hdDoxLHdhcm46MSx3 +cml0ZToxLHdyaXRlX25vbmJsb2NrOjEsInplcm8/IjoxLHppcDoxfX07cmV0dXJu +e2RNOntsOlthXSxjOmIsazpkfSxtOlt7Y046ImNvbW1lbnQiLGI6IiMiLGU6IiQi +LGM6WyJ5YXJkb2N0YWciXX0se2NOOiJ5YXJkb2N0YWciLGI6IkBbQS1aYS16XSsi +LGU6Il4ifSx7Y046ImNvbW1lbnQiLGI6Il5cXD1iZWdpbiIsZToiXlxcPWVuZCIs +YzpbInlhcmRvY3RhZyJdLHI6MTB9LHtjTjoiY29tbWVudCIsYjoiXl9fRU5EX18i +LGU6IlxcbiQifSx7Y046InBhcmFtcyIsYjoiXFwoIixlOiJcXCkiLGw6W2FdLGs6 +ZCxjOmJ9LHtjTjoiZnVuY3Rpb24iLGI6IlxcYmRlZlxccysiLGU6IiB8JHw7Iixs +OlthXSxrOmQsYzpbImZ0aXRsZSIsInBhcmFtcyIsImNvbW1lbnQiXX0se2NOOiJm +dGl0bGUiLGRpc3BsYXlDbGFzc05hbWU6InRpdGxlIixiOmMsZToiXiIsbDpbYV0s +azpkfSx7Y046ImNsYXNzIixiOiJcXGIoY2xhc3N8bW9kdWxlKVxcYiIsZToiJHw7 +IixsOltobGpzLlVJUl0sazpkLGM6WyJ0aXRsZSIsImluaGVyaXRhbmNlIiwiY29t +bWVudCJdLGs6eyJjbGFzcyI6MSxtb2R1bGU6MX19LHtjTjoidGl0bGUiLGI6IltB +LVphLXpfXVxcdyooOjpcXHcrKSooXFw/fFxcISk/IixlOiJeIixyOjB9LHtjTjoi +aW5oZXJpdGFuY2UiLGI6IjxcXHMqIixlOiJeIixjOlsicGFyZW50Il19LHtjTjoi +cGFyZW50IixiOiIoIitobGpzLklSKyI6Oik/IitobGpzLklSLGU6Il4ifSx7Y046 +Im51bWJlciIsYjoiKFxcYjBbMC03X10rKXwoXFxiMHhbMC05YS1mQS1GX10rKXwo +XFxiWzEtOV1bMC05X10qKFxcLlswLTlfXSspPyl8WzBfXVxcYiIsZToiXiIscjow +fSx7Y046Im51bWJlciIsYjoiXFw/XFx3IixlOiJeIn0se2NOOiJzdHJpbmciLGI6 +IiciLGU6IiciLGM6WyJlc2NhcGUiLCJzdWJzdCJdLHI6MH0se2NOOiJzdHJpbmci +LGI6JyInLGU6JyInLGM6WyJlc2NhcGUiLCJzdWJzdCJdLHI6MH0se2NOOiJzdHJp +bmciLGI6IiVbcXddP1xcKCIsZToiXFwpIixjOlsiZXNjYXBlIiwic3Vic3QiXSxy +OjEwfSx7Y046InN0cmluZyIsYjoiJVtxd10/XFxbIixlOiJcXF0iLGM6WyJlc2Nh +cGUiLCJzdWJzdCJdLHI6MTB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT97IixlOiJ9 +IixjOlsiZXNjYXBlIiwic3Vic3QiXSxyOjEwfSx7Y046InN0cmluZyIsYjoiJVtx +d10/PCIsZToiPiIsYzpbImVzY2FwZSIsInN1YnN0Il0scjoxMH0se2NOOiJzdHJp +bmciLGI6IiVbcXddPy8iLGU6Ii8iLGM6WyJlc2NhcGUiLCJzdWJzdCJdLHI6MTB9 +LHtjTjoic3RyaW5nIixiOiIlW3F3XT8lIixlOiIlIixjOlsiZXNjYXBlIiwic3Vi +c3QiXSxyOjEwfSx7Y046InN0cmluZyIsYjoiJVtxd10/LSIsZToiLSIsYzpbImVz +Y2FwZSIsInN1YnN0Il0scjoxMH0se2NOOiJzdHJpbmciLGI6IiVbcXddP1xcfCIs +ZToiXFx8IixjOlsiZXNjYXBlIiwic3Vic3QiXSxyOjEwfSx7Y046ImNvbnN0YW50 +IixiOiIoOjopPyhbQS1aXVxcdyooOjopPykrIixlOiJeIixyOjB9LHtjTjoic3lt +Ym9sIixiOiI6IixlOiJeIixjOlsic3RyaW5nIiwiaWRlbnRpZmllciJdfSx7Y046 +ImlkZW50aWZpZXIiLGI6YSxlOiJeIixsOlthXSxrOmQscjowfSxobGpzLkJFLHtj +Tjoic3Vic3QiLGI6IiNcXHsiLGU6In0iLGw6W2FdLGs6ZCxjOmJ9LHtjTjoicmVn +ZXhwX2NvbnRhaW5lciIsYjoiKCIraGxqcy5SU1IrIilcXHMqIixlOiJeIixuTTp0 +cnVlLGM6WyJjb21tZW50IiwicmVnZXhwIl0scjowfSx7Y046InJlZ2V4cCIsYjoi +LyIsZToiL1thLXpdKiIsaToiXFxuIixjOlsiZXNjYXBlIl19LHtjTjoidmFyaWFi +bGUiLGI6IihcXCRcXFcpfCgoXFwkfFxcQFxcQD8pKFxcdyspKSIsZToiXiJ9XX19 +KCk7aGxqcy5YTUxfQ09NTUVOVD17Y046ImNvbW1lbnQiLGI6IjwhLS0iLGU6Ii0t +PiJ9O2hsanMuWE1MX0FUVFI9e2NOOiJhdHRyaWJ1dGUiLGI6Ilxcc1tBLVphLXow +LTlcXC5fOi1dKz0iLGU6Il4iLGM6WyJ2YWx1ZSJdfTtobGpzLlhNTF9WQUxVRV9R +VU9UPXtjTjoidmFsdWUiLGI6JyInLGU6JyInfTtobGpzLlhNTF9WQUxVRV9BUE9T +PXtjTjoidmFsdWUiLGI6IiciLGU6IicifTtobGpzLkxBTkdVQUdFUy54bWw9e2RN +OntjOlsicGkiLCJjb21tZW50IiwiY2RhdGEiLCJ0YWciXX0sY0k6dHJ1ZSxtOlt7 +Y046InBpIixiOiI8XFw/IixlOiJcXD8+IixyOjEwfSxobGpzLlhNTF9DT01NRU5U +LHtjTjoiY2RhdGEiLGI6IjxcXCFcXFtDREFUQVxcWyIsZToiXFxdXFxdPiJ9LHtj +TjoidGFnIixiOiI8Lz8iLGU6Ij4iLGM6WyJ0aXRsZSIsInRhZ19pbnRlcm5hbCJd +LHI6MS41fSx7Y046InRpdGxlIixiOiJbQS1aYS16MC05XFwuXzotXSsiLGU6Il4i +LHI6MH0se2NOOiJ0YWdfaW50ZXJuYWwiLGI6Il4iLGVXOnRydWUsbk06dHJ1ZSxj +OlsiYXR0cmlidXRlIl0scjowLGk6IltcXCtcXC5dIn0saGxqcy5YTUxfQVRUUixo +bGpzLlhNTF9WQUxVRV9RVU9ULGhsanMuWE1MX1ZBTFVFX0FQT1NdfTtobGpzLkhU +TUxfVEFHUz17Y29kZToxLGtiZDoxLGZvbnQ6MSxub3NjcmlwdDoxLHN0eWxlOjEs +aW1nOjEsdGl0bGU6MSxtZW51OjEsdHQ6MSx0cjoxLHBhcmFtOjEsbGk6MSx0Zm9v +dDoxLHRoOjEsaW5wdXQ6MSx0ZDoxLGRsOjEsYmxvY2txdW90ZToxLGZpZWxkc2V0 +OjEsYmlnOjEsZGQ6MSxhYmJyOjEsb3B0Z3JvdXA6MSxkdDoxLGJ1dHRvbjoxLGlz +aW5kZXg6MSxwOjEsc21hbGw6MSxkaXY6MSxkaXI6MSxlbToxLGZyYW1lOjEsbWV0 +YToxLHN1YjoxLGJkbzoxLGxhYmVsOjEsYWNyb255bToxLHN1cDoxLGJvZHk6MSx4 +bWw6MSxiYXNlZm9udDoxLGJhc2U6MSxicjoxLGFkZHJlc3M6MSxzdHJvbmc6MSxs +ZWdlbmQ6MSxvbDoxLHNjcmlwdDoxLGNhcHRpb246MSxzOjEsY29sOjEsaDI6MSxo +MzoxLGgxOjEsaDY6MSxoNDoxLGg1OjEsdGFibGU6MSxzZWxlY3Q6MSxub2ZyYW1l +czoxLHNwYW46MSxhcmVhOjEsZGZuOjEsc3RyaWtlOjEsY2l0ZToxLHRoZWFkOjEs +aGVhZDoxLG9wdGlvbjoxLGZvcm06MSxocjoxLCJ2YXIiOjEsbGluazoxLGI6MSxj +b2xncm91cDoxLHVsOjEsYXBwbGV0OjEsZGVsOjEsaWZyYW1lOjEscHJlOjEsZnJh +bWVzZXQ6MSxpbnM6MSx0Ym9keToxLGh0bWw6MSxzYW1wOjEsbWFwOjEsb2JqZWN0 +OjEsYToxLHhtbG5zOjEsY2VudGVyOjEsdGV4dGFyZWE6MSxpOjEscToxLHU6MX07 +aGxqcy5IVE1MX0RPQ1RZUEU9e2NOOiJkb2N0eXBlIixiOiI8IURPQ1RZUEUiLGU6 +Ij4iLHI6MTB9O2hsanMuSFRNTF9BVFRSPXtjTjoiYXR0cmlidXRlIixiOiJcXHNb +YS16QS1aXFw6Xy1dKz0iLGU6Il4iLGM6WyJ2YWx1ZSJdfTtobGpzLkhUTUxfU0hP +UlRfQVRUUj17Y046ImF0dHJpYnV0ZSIsYjoiIFthLXpBLVpdKyIsZToiXiJ9O2hs +anMuSFRNTF9WQUxVRT17Y046InZhbHVlIixiOiJbYS16QS1aMC05XSsiLGU6Il4i +fTtobGpzLkxBTkdVQUdFUy5odG1sPXtkTTp7YzpbInRhZyIsImNvbW1lbnQiLCJk +b2N0eXBlIiwidmJzY3JpcHQiXX0sY0k6dHJ1ZSxtOltobGpzLlhNTF9DT01NRU5U +LGhsanMuSFRNTF9ET0NUWVBFLHtjTjoidGFnIixsOltobGpzLklSXSxrOmhsanMu +SFRNTF9UQUdTLGI6IjxzdHlsZSIsZToiPiIsYzpbImF0dHJpYnV0ZSJdLGk6Iltc +XCtcXC5dIixzdGFydHM6ImNzcyJ9LHtjTjoidGFnIixsOltobGpzLklSXSxrOmhs +anMuSFRNTF9UQUdTLGI6IjxzY3JpcHQiLGU6Ij4iLGM6WyJhdHRyaWJ1dGUiXSxp +OiJbXFwrXFwuXSIsc3RhcnRzOiJqYXZhc2NyaXB0In0se2NOOiJ0YWciLGw6W2hs +anMuSVJdLGs6aGxqcy5IVE1MX1RBR1MsYjoiPFtBLVphLXovXSIsZToiPiIsYzpb +ImF0dHJpYnV0ZSJdLGk6IltcXCtcXC5dIn0se2NOOiJjc3MiLGU6Ijwvc3R5bGU+ +IixyRTp0cnVlLHN1Ykxhbmd1YWdlOiJjc3MifSx7Y046ImphdmFzY3JpcHQiLGU6 +IjxcL3NjcmlwdD4iLHJFOnRydWUsc3ViTGFuZ3VhZ2U6ImphdmFzY3JpcHQifSxo +bGpzLkhUTUxfQVRUUixobGpzLkhUTUxfU0hPUlRfQVRUUixobGpzLlhNTF9WQUxV +RV9RVU9ULGhsanMuWE1MX1ZBTFVFX0FQT1MsaGxqcy5IVE1MX1ZBTFVFLHtjTjoi +dmJzY3JpcHQiLGI6IjwlIixlOiIlPiIsc3ViTGFuZ3VhZ2U6InZic2NyaXB0In1d +fTtobGpzLkxBTkdVQUdFUy5qYXZhc2NyaXB0PXtkTTp7bDpbaGxqcy5VSVJdLGM6 +WyJzdHJpbmciLCJjb21tZW50IiwibnVtYmVyIiwicmVnZXhwX2NvbnRhaW5lciIs +ImZ1bmN0aW9uIl0sazp7a2V5d29yZDp7ImluIjoxLCJpZiI6MSwiZm9yIjoxLCJ3 +aGlsZSI6MSwiZmluYWxseSI6MSwidmFyIjoxLCJuZXciOjEsImZ1bmN0aW9uIjox +LCJkbyI6MSwicmV0dXJuIjoxLCJ2b2lkIjoxLCJlbHNlIjoxLCJicmVhayI6MSwi +Y2F0Y2giOjEsImluc3RhbmNlb2YiOjEsIndpdGgiOjEsInRocm93IjoxLCJjYXNl +IjoxLCJkZWZhdWx0IjoxLCJ0cnkiOjEsInRoaXMiOjEsInN3aXRjaCI6MSwiY29u +dGludWUiOjEsInR5cGVvZiI6MSwiZGVsZXRlIjoxfSxsaXRlcmFsOnsidHJ1ZSI6 +MSwiZmFsc2UiOjEsIm51bGwiOjF9fX0sbTpbaGxqcy5DTENNLGhsanMuQ0JMQ0xN +LGhsanMuQ05NLGhsanMuQVNNLGhsanMuUVNNLGhsanMuQkUse2NOOiJyZWdleHBf +Y29udGFpbmVyIixiOiIoIitobGpzLlJTUisifGNhc2V8cmV0dXJufHRocm93KVxc +cyoiLGU6Il4iLG5NOnRydWUsbDpbaGxqcy5JUl0sazp7InJldHVybiI6MSwidGhy +b3ciOjEsImNhc2UiOjF9LGM6WyJjb21tZW50IiwicmVnZXhwIl0scjowfSx7Y046 +InJlZ2V4cCIsYjoiLy4qP1teXFxcXC9dL1tnaW1dKiIsZToiXiJ9LHtjTjoiZnVu +Y3Rpb24iLGI6IlxcYmZ1bmN0aW9uXFxiIixlOiJ7IixsOltobGpzLlVJUl0sazp7 +ImZ1bmN0aW9uIjoxfSxjOlsidGl0bGUiLCJwYXJhbXMiXX0se2NOOiJ0aXRsZSIs +YjoiW0EtWmEteiRfXVswLTlBLVphLXokX10qIixlOiJeIn0se2NOOiJwYXJhbXMi +LGI6IlxcKCIsZToiXFwpIixjOlsic3RyaW5nIiwiY29tbWVudCJdfV19O2hsanMu +TEFOR1VBR0VTLmx1YT1mdW5jdGlvbigpe3ZhciBhPSJcXFs9KlxcWyIsYj0iXFxd +PSpcXF0iO3JldHVybntkTTp7bDpbaGxqcy5VSVJdLGs6e2tleXdvcmQ6e2FuZDox +LCJicmVhayI6MSwiZG8iOjEsImVsc2UiOjEsZWxzZWlmOjEsZW5kOjEsImZhbHNl +IjoxLCJmb3IiOjEsImlmIjoxLCJpbiI6MSxsb2NhbDoxLG5pbDoxLG5vdDoxLG9y +OjEscmVwZWF0OjEsInJldHVybiI6MSx0aGVuOjEsInRydWUiOjEsdW50aWw6MSwi +d2hpbGUiOjF9LGJ1aWx0X2luOntfRzoxLF9WRVJTSU9OOjEsYXNzZXJ0OjEsY29s +bGVjdGdhcmJhZ2U6MSxkb2ZpbGU6MSxlcnJvcjoxLGdldGZlbnY6MSxnZXRtZXRh +dGFibGU6MSxpcGFpcnM6MSxsb2FkOjEsbG9hZGZpbGU6MSxsb2Fkc3RyaW5nOjEs +bW9kdWxlOjEsbmV4dDoxLHBhaXJzOjEscGNhbGw6MSxwcmludDoxLHJhd2VxdWFs +OjEscmF3Z2V0OjEscmF3c2V0OjEscmVxdWlyZToxLHNlbGVjdDoxLHNldGZlbnY6 +MSxzZXRtZXRhdGFibGU6MSx0b251bWJlcjoxLHRvc3RyaW5nOjEsdHlwZToxLHVu +cGFjazoxLHhwY2FsbDoxLGNvcm91dGluZToxLGRlYnVnOjEsaW86MSxtYXRoOjEs +b3M6MSwicGFja2FnZSI6MSxzdHJpbmc6MSx0YWJsZToxfX0sYzpbImNvbW1lbnQi +LCJmdW5jdGlvbiIsIm51bWJlciIsInN0cmluZyJdfSxtOlt7Y046ImNvbW1lbnQi +LGI6Ii0tKD8hIithKyIpIixlOiIkIn0se2NOOiJjb21tZW50IixiOiItLSIrYSxl +OmIsYzpbImxvbmdfYnJhY2tldHMiXSxyOjEwfSx7Y046ImxvbmdfYnJhY2tldHMi +LGI6YSxlOmIsYzpbImxvbmdfYnJhY2tldHMiXSxuTTp0cnVlfSx7Y046ImZ1bmN0 +aW9uIixiOiJcXGJmdW5jdGlvblxcYiIsZToiXFwpIixsOltobGpzLlVJUl0sazp7 +ImZ1bmN0aW9uIjoxfSxjOlsidGl0bGUiLCJwYXJhbXMiLCJjb21tZW50Il19LHtj +TjoidGl0bGUiLGI6IihbX2EtekEtWl1cXHcqXFwuKSooW19hLXpBLVpdXFx3Kjop +P1tfYS16QS1aXVxcdyoiLGU6Il4ifSx7Y046InBhcmFtcyIsYjoiXFwoIixlVzp0 +cnVlLGM6WyJjb21tZW50Il19LGhsanMuQ05NLGhsanMuQVNNLGhsanMuUVNNLHtj +Tjoic3RyaW5nIixiOmEsZTpiLGM6WyJsb25nX2JyYWNrZXRzIl0scjoxMH0saGxq +cy5CRV19fSgpO2hsanMuTEFOR1VBR0VTLmxpc3A9ZnVuY3Rpb24oKXt2YXIgYT0i +W2EtekEtWl9cXC1cXCtcXCpcXC9cXDxcXD1cXD5cXCZcXCNdW2EtekEtWjAtOV9c +XC1cXCtcXCpcXC9cXDxcXD1cXD5cXCZcXCNdKiI7dmFyIGI9IihcXC18XFwrKT9c +XGQrKFxcLlxcZCt8XFwvXFxkKyk/KChkfGV8ZnxsfHMpKFxcK3xcXC0pP1xcZCsp +PyI7cmV0dXJue2NJOnRydWUsZE06e2w6W2FdLGM6WyJsaXRlcmFsIiwibnVtYmVy +Iiwic3RyaW5nIiwiY29tbWVudCIsInF1b3RlZCIsImxpc3QiXSxpOiJbXlxcc10i +fSxtOlt7Y046InN0cmluZyIsYjonIicsZTonIicsYzpbImVzY2FwZSJdLHI6MH0s +aGxqcy5CRSx7Y046Im51bWJlciIsYjpiLGU6Il4ifSx7Y046Im51bWJlciIsYjoi +I2JbMC0xXSsoL1swLTFdKyk/IixlOiJeIn0se2NOOiJudW1iZXIiLGI6IiNvWzAt +N10rKC9bMC03XSspPyIsZToiXiJ9LHtjTjoibnVtYmVyIixiOiIjeFswLTlhLWZd +KygvWzAtOWEtZl0rKT8iLGU6Il4ifSx7Y046Im51bWJlciIsYjoiI2NcXCgiK2Ir +IiArIitiLGU6IlxcKSJ9LHtjTjoiY29tbWVudCIsYjoiOyIsZToiJCJ9LHtjTjoi +cXVvdGVkIixiOiJbJ2BdXFwoIixlOiJcXCkiLGM6WyJudW1iZXIiLCJzdHJpbmci +LCJ2YXJpYWJsZSIsImtleXdvcmQiLCJxdW90ZWRfbGlzdCJdfSx7Y046InF1b3Rl +ZCIsYjoiXFwocXVvdGUgIixlOiJcXCkiLGM6WyJudW1iZXIiLCJzdHJpbmciLCJ2 +YXJpYWJsZSIsImtleXdvcmQiLCJxdW90ZWRfbGlzdCJdLGw6W2FdLGs6e3RpdGxl +OntxdW90ZToxfX19LHtjTjoicXVvdGVkX2xpc3QiLGI6IlxcKCIsZToiXFwpIixj +OlsicXVvdGVkX2xpc3QiLCJsaXRlcmFsIiwibnVtYmVyIiwic3RyaW5nIl19LHtj +TjoibGlzdCIsYjoiXFwoIixlOiJcXCkiLGM6WyJ0aXRsZSIsImJvZHkiXX0se2NO +OiJ0aXRsZSIsYjphLGU6Il4iLGVXOnRydWV9LHtjTjoiYm9keSIsYjoiXiIsZVc6 +dHJ1ZSxlRTp0cnVlLGM6WyJxdW90ZWQiLCJsaXN0IiwibGl0ZXJhbCIsIm51bWJl +ciIsInN0cmluZyIsImNvbW1lbnQiLCJ2YXJpYWJsZSIsImtleXdvcmQiXX0se2NO +OiJrZXl3b3JkIixiOiJbOiZdIithLGU6Il4ifSx7Y046InZhcmlhYmxlIixiOiJc +XCoiLGU6IlxcKiJ9LHtjTjoibGl0ZXJhbCIsYjoiXFxiKHR7MX18bmlsKVxcYiIs +ZToiXiJ9XX19KCk7aGxqcy5MQU5HVUFHRVMuamF2YT17ZE06e2w6W2hsanMuVUlS +XSxjOlsiamF2YWRvYyIsImNvbW1lbnQiLCJzdHJpbmciLCJjbGFzcyIsIm51bWJl +ciIsImFubm90YXRpb24iXSxrOnsiZmFsc2UiOjEsInN5bmNocm9uaXplZCI6MSwi +aW50IjoxLCJhYnN0cmFjdCI6MSwiZmxvYXQiOjEsInByaXZhdGUiOjEsImNoYXIi +OjEsImludGVyZmFjZSI6MSwiYm9vbGVhbiI6MSwic3RhdGljIjoxLCJudWxsIjox +LCJpZiI6MSwiY29uc3QiOjEsImZvciI6MSwidHJ1ZSI6MSwid2hpbGUiOjEsImxv +bmciOjEsInRocm93IjoxLHN0cmljdGZwOjEsImZpbmFsbHkiOjEsInByb3RlY3Rl +ZCI6MSwiZXh0ZW5kcyI6MSwiaW1wb3J0IjoxLCJuYXRpdmUiOjEsImZpbmFsIjox +LCJpbXBsZW1lbnRzIjoxLCJyZXR1cm4iOjEsInZvaWQiOjEsImVudW0iOjEsImVs +c2UiOjEsImJyZWFrIjoxLCJ0cmFuc2llbnQiOjEsIm5ldyI6MSwiY2F0Y2giOjEs +Imluc3RhbmNlb2YiOjEsImJ5dGUiOjEsInN1cGVyIjoxLCJjbGFzcyI6MSwidm9s +YXRpbGUiOjEsImNhc2UiOjEsYXNzZXJ0OjEsInNob3J0IjoxLCJwYWNrYWdlIjox +LCJkZWZhdWx0IjoxLCJkb3VibGUiOjEsInB1YmxpYyI6MSwidHJ5IjoxLCJ0aGlz +IjoxLCJzd2l0Y2giOjEsImNvbnRpbnVlIjoxLCJ0aHJvd3MiOjF9fSxtOlt7Y046 +ImNsYXNzIixsOltobGpzLlVJUl0sYjoiKGNsYXNzIHxpbnRlcmZhY2UgKSIsZToi +eyIsaToiOiIsazp7ImNsYXNzIjoxLCJpbnRlcmZhY2UiOjF9LGM6WyJpbmhlcml0 +YW5jZSIsInRpdGxlIl19LHtjTjoiaW5oZXJpdGFuY2UiLGI6IihpbXBsZW1lbnRz +fGV4dGVuZHMpIixlOiJeIixuTTp0cnVlLGw6W2hsanMuSVJdLGs6eyJleHRlbmRz +IjoxLCJpbXBsZW1lbnRzIjoxfSxyOjEwfSx7Y046InRpdGxlIixiOmhsanMuVUlS +LGU6Il4ifSx7Y046InBhcmFtcyIsYjoiXFwoIixlOiJcXCkiLGM6WyJzdHJpbmci +LCJhbm5vdGF0aW9uIl19LGhsanMuQ05NLGhsanMuQVNNLGhsanMuUVNNLGhsanMu +QkUsaGxqcy5DTENNLHtjTjoiamF2YWRvYyIsYjoiL1xcKlxcKiIsZToiXFwqLyIs +YzpbImphdmFkb2N0YWciXSxyOjEwfSx7Y046ImphdmFkb2N0YWciLGI6IkBbQS1a +YS16XSsiLGU6Il4ifSxobGpzLkNCTENMTSx7Y046ImFubm90YXRpb24iLGI6IkBb +QS1aYS16XSsiLGU6Il4ifV19O2hsanMuTEFOR1VBR0VTLnBocD17ZE06e2w6W2hs +anMuSVJdLGM6WyJjb21tZW50IiwibnVtYmVyIiwic3RyaW5nIiwidmFyaWFibGUi +LCJwcmVwcm9jZXNzb3IiXSxrOnthbmQ6MSxpbmNsdWRlX29uY2U6MSxsaXN0OjEs +ImFic3RyYWN0IjoxLGdsb2JhbDoxLCJwcml2YXRlIjoxLGVjaG86MSwiaW50ZXJm +YWNlIjoxLGFzOjEsInN0YXRpYyI6MSxlbmRzd2l0Y2g6MSxhcnJheToxLCJudWxs +IjoxLCJpZiI6MSxlbmR3aGlsZToxLG9yOjEsImNvbnN0IjoxLCJmb3IiOjEsZW5k +Zm9yZWFjaDoxLHNlbGY6MSwidmFyIjoxLCJ3aGlsZSI6MSxpc3NldDoxLCJwdWJs +aWMiOjEsInByb3RlY3RlZCI6MSxleGl0OjEsZm9yZWFjaDoxLCJ0aHJvdyI6MSxl +bHNlaWY6MSwiZXh0ZW5kcyI6MSxpbmNsdWRlOjEsX19GSUxFX186MSxlbXB0eTox +LHJlcXVpcmVfb25jZToxLCJmdW5jdGlvbiI6MSwiZG8iOjEseG9yOjEsInJldHVy +biI6MSwiaW1wbGVtZW50cyI6MSxwYXJlbnQ6MSxjbG9uZToxLHVzZToxLF9fQ0xB +U1NfXzoxLF9fTElORV9fOjEsImVsc2UiOjEsImJyZWFrIjoxLHByaW50OjEsImV2 +YWwiOjEsIm5ldyI6MSwiY2F0Y2giOjEsX19NRVRIT0RfXzoxLCJjbGFzcyI6MSwi +Y2FzZSI6MSxleGNlcHRpb246MSxwaHBfdXNlcl9maWx0ZXI6MSwiZGVmYXVsdCI6 +MSxkaWU6MSxyZXF1aXJlOjEsX19GVU5DVElPTl9fOjEsZW5kZGVjbGFyZToxLCJm +aW5hbCI6MSwidHJ5IjoxLCJ0aGlzIjoxLCJzd2l0Y2giOjEsImNvbnRpbnVlIjox +LGVuZGZvcjoxLGVuZGlmOjEsZGVjbGFyZToxLHVuc2V0OjF9fSxjSTp0cnVlLG06 +W2hsanMuQ0xDTSxobGpzLkhDTSx7Y046ImNvbW1lbnQiLGI6Ii9cXCoiLGU6Ilxc +Ki8iLGM6WyJwaHBkb2MiXX0se2NOOiJwaHBkb2MiLGI6Ilxcc0BbQS1aYS16XSsi +LGU6Il4iLHI6MTB9LGhsanMuQ05NLHtjTjoic3RyaW5nIixiOiInIixlOiInIixj +OlsiZXNjYXBlIl0scjowfSx7Y046InN0cmluZyIsYjonIicsZTonIicsYzpbImVz +Y2FwZSJdLHI6MH0saGxqcy5CRSx7Y046InZhcmlhYmxlIixiOiJcXCRbYS16QS1a +X1x4N2YtXHhmZl1bYS16QS1aMC05X1x4N2YtXHhmZl0qIixlOiJeIn0se2NOOiJw +cmVwcm9jZXNzb3IiLGI6IjxcXD9waHAiLGU6Il4iLHI6MTB9LHtjTjoicHJlcHJv +Y2Vzc29yIixiOiJcXD8+IixlOiJeIn1dfTtobGpzLkxBTkdVQUdFUy5weXRob249 +e2RNOntsOltobGpzLlVJUl0saToiKDwvfC0+KSIsYzpbImNvbW1lbnQiLCJzdHJp +bmciLCJmdW5jdGlvbiIsImNsYXNzIiwibnVtYmVyIiwiZGVjb3JhdG9yIl0sazp7 +a2V5d29yZDp7YW5kOjEsZWxpZjoxLGlzOjEsZ2xvYmFsOjEsYXM6MSwiaW4iOjEs +ImlmIjoxLGZyb206MSxyYWlzZToxLCJmb3IiOjEsZXhjZXB0OjEsImZpbmFsbHki +OjEscHJpbnQ6MSwiaW1wb3J0IjoxLHBhc3M6MSwicmV0dXJuIjoxLGV4ZWM6MSwi +ZWxzZSI6MSwiYnJlYWsiOjEsbm90OjEsIndpdGgiOjEsImNsYXNzIjoxLGFzc2Vy +dDoxLHlpZWxkOjEsInRyeSI6MSwid2hpbGUiOjEsImNvbnRpbnVlIjoxLGRlbDox +LG9yOjEsZGVmOjEsbGFtYmRhOjEsbm9ubG9jYWw6MTB9LGJ1aWx0X2luOntOb25l +OjEsVHJ1ZToxLEZhbHNlOjEsRWxsaXBzaXM6MSxOb3RJbXBsZW1lbnRlZDoxfX19 +LG06W3tjTjoiZnVuY3Rpb24iLGw6W2hsanMuVUlSXSxiOiJcXGJkZWYgIixlOiI6 +IixpOiIkIixrOntkZWY6MX0sYzpbInRpdGxlIiwicGFyYW1zIl0scjoxMH0se2NO +OiJjbGFzcyIsbDpbaGxqcy5VSVJdLGI6IlxcYmNsYXNzICIsZToiOiIsaToiWyR7 +XSIsazp7ImNsYXNzIjoxfSxjOlsidGl0bGUiLCJwYXJhbXMiXSxyOjEwfSx7Y046 +InRpdGxlIixiOmhsanMuVUlSLGU6Il4ifSx7Y046InBhcmFtcyIsYjoiXFwoIixl +OiJcXCkiLGM6WyJzdHJpbmciXX0saGxqcy5IQ00saGxqcy5DTk0se2NOOiJzdHJp +bmciLGI6InU/cj8nJyciLGU6IicnJyIscjoxMH0se2NOOiJzdHJpbmciLGI6J3U/ +cj8iIiInLGU6JyIiIicscjoxMH0saGxqcy5BU00saGxqcy5RU00saGxqcy5CRSx7 +Y046InN0cmluZyIsYjoiKHV8cnx1ciknIixlOiInIixjOlsiZXNjYXBlIl0scjox +MH0se2NOOiJzdHJpbmciLGI6Jyh1fHJ8dXIpIicsZTonIicsYzpbImVzY2FwZSJd +LHI6MTB9LHtjTjoiZGVjb3JhdG9yIixiOiJAIixlOiIkIn1dfTtobGpzLkxBTkdV +QUdFUy50ZXg9e2RNOntjOlsicGFyYW1ldGVyIiwiY29tbWFuZCIsInNwZWNpYWwi +LCJmb3JtdWxhIiwiY29tbWVudCJdfSxtOlt7Y046InBhcmFtZXRlciIsYjoiXFxc +XFthLXpBLVrQsC3Rj9CQLdGPXStbXFwqXT8gKj0gKi0/XFxkKlxcLj9cXGQrKHB0 +fHBjfG1tfGNtfGlufGRkfGNjfGV4fGVtKT8iLGU6Il4iLHJCOnRydWUsYzpbImNv +bW1hbmQiLCJudW1iZXIiXSxuTTp0cnVlLHI6MTB9LHtjTjoiY29tbWFuZCIsYjoi +XFxcXFthLXpBLVrQsC3Rj9CQLdGPXStbXFwqXT8iLGU6Il4iLHI6MTB9LHtjTjoi +Y29tbWFuZCIsYjoiXFxcXFteYS16QS1a0LAt0Y/QkC3RjzAtOV0iLGU6Il4iLHI6 +MH0se2NOOiJjb21tZW50IixiOiIlIixlOiIkIixyOjB9LHtjTjoic3BlY2lhbCIs +YjoiW3t9XFxbXFxdXFwmI35dIixlOiJeIixyOjB9LHtjTjoiZm9ybXVsYSIsYjoi +XFwkXFwkIixlOiJcXCRcXCQiLGM6WyJjb21tYW5kIiwic3BlY2lhbCJdLHI6MH0s +e2NOOiJmb3JtdWxhIixiOiJcXCQiLGU6IlxcJCIsYzpbImNvbW1hbmQiLCJzcGVj +aWFsIl0scjowfSx7Y046Im51bWJlciIsYjoiICo9IixlOiItP1xcZCpcXC4/XFxk +KyhwdHxwY3xtbXxjbXxpbnxkZHxjY3xleHxlbSk/IixlQjp0cnVlfV19O2hsanMu +TEFOR1VBR0VTLnNxbD17Y0k6dHJ1ZSxkTTp7YzpbIm9wZXJhdG9yIiwiY29tbWVu +dCJdLGk6IlteXFxzXSJ9LG06W3tjTjoib3BlcmF0b3IiLGI6IihifHN0YXJ0fGNv +bW1pdHxyb2xsYmFja3xzYXZlcG9pbnR8bG9ja3xhbHRlcnxjcmVhdGV8ZHJvcHxy +ZW5hbWV8Y2FsbHxkZWxldGV8ZG98aGFuZGxlcnxpbnNlcnR8bG9hZHxyZXBsYWNl +fHNlbGVjdHx0cnVuY2F0ZXx1cGRhdGV8c2V0fHNob3d8cHJhZ21hKVxcYiIsZToi +O3wkIixjOlsic3RyaW5nIiwibnVtYmVyIiwibmV3bGluZSJdLGw6WyJbYS16QS1a +XVthLXpBLVowLTlfXFwuXSoiXSxrOntrZXl3b3JkOnthbGw6MSxwYXJ0aWFsOjEs +Z2xvYmFsOjEsbW9udGg6MSxjdXJyZW50X3RpbWVzdGFtcDoxLHVzaW5nOjEsZ286 +MSxyZXZva2U6MSxzbWFsbGludDoxLGluZGljYXRvcjoxLCJlbmQtZXhlYyI6MSxk +aXNjb25uZWN0OjEsem9uZToxLCJ3aXRoIjoxLGNoYXJhY3RlcjoxLGFzc2VydGlv +bjoxLHRvOjEsYWRkOjEsY3VycmVudF91c2VyOjEsdXNhZ2U6MSxpbnB1dDoxLGxv +Y2FsOjEsYWx0ZXI6MSxtYXRjaDoxLGNvbGxhdGU6MSxyZWFsOjEsdGhlbjoxLHJv +bGxiYWNrOjEsZ2V0OjEscmVhZDoxLHRpbWVzdGFtcDoxLHNlc3Npb25fdXNlcjox +LG5vdDoxLGludGVnZXI6MSxiaXQ6MSx1bmlxdWU6MSxkYXk6MSxtaW51dGU6MSxk +ZXNjOjEsaW5zZXJ0OjEsZXhlY3V0ZToxLGxpa2U6MSxpbGlrZToyLGxldmVsOjEs +ZGVjaW1hbDoxLGRyb3A6MSwiY29udGludWUiOjEsaXNvbGF0aW9uOjEsZm91bmQ6 +MSx3aGVyZToxLGNvbnN0cmFpbnRzOjEsZG9tYWluOjEscmlnaHQ6MSxuYXRpb25h +bDoxLHNvbWU6MSxtb2R1bGU6MSx0cmFuc2FjdGlvbjoxLHJlbGF0aXZlOjEsc2Vj +b25kOjEsY29ubmVjdDoxLGVzY2FwZToxLGNsb3NlOjEsc3lzdGVtX3VzZXI6MSwi +Zm9yIjoxLGRlZmVycmVkOjEsc2VjdGlvbjoxLGNhc3Q6MSxjdXJyZW50OjEsc3Fs +c3RhdGU6MSxhbGxvY2F0ZToxLGludGVyc2VjdDoxLGRlYWxsb2NhdGU6MSxudW1l +cmljOjEsInB1YmxpYyI6MSxwcmVzZXJ2ZToxLGZ1bGw6MSwiZ290byI6MSxpbml0 +aWFsbHk6MSxhc2M6MSxubzoxLGtleToxLG91dHB1dDoxLGNvbGxhdGlvbjoxLGdy +b3VwOjEsYnk6MSx1bmlvbjoxLHNlc3Npb246MSxib3RoOjEsbGFzdDoxLGxhbmd1 +YWdlOjEsY29uc3RyYWludDoxLGNvbHVtbjoxLG9mOjEsc3BhY2U6MSxmb3JlaWdu +OjEsZGVmZXJyYWJsZToxLHByaW9yOjEsY29ubmVjdGlvbjoxLHVua25vd246MSxh +Y3Rpb246MSxjb21taXQ6MSx2aWV3OjEsb3I6MSxmaXJzdDoxLGludG86MSwiZmxv +YXQiOjEseWVhcjoxLHByaW1hcnk6MSxjYXNjYWRlZDoxLGV4Y2VwdDoxLHJlc3Ry +aWN0OjEsc2V0OjEscmVmZXJlbmNlczoxLG5hbWVzOjEsdGFibGU6MSxvdXRlcjox +LG9wZW46MSxzZWxlY3Q6MSxzaXplOjEsYXJlOjEscm93czoxLGZyb206MSxwcmVw +YXJlOjEsZGlzdGluY3Q6MSxsZWFkaW5nOjEsY3JlYXRlOjEsb25seToxLG5leHQ6 +MSxpbm5lcjoxLGF1dGhvcml6YXRpb246MSxzY2hlbWE6MSxjb3JyZXNwb25kaW5n +OjEsb3B0aW9uOjEsZGVjbGFyZToxLHByZWNpc2lvbjoxLGltbWVkaWF0ZToxLCJl +bHNlIjoxLHRpbWV6b25lX21pbnV0ZToxLGV4dGVybmFsOjEsdmFyeWluZzoxLHRy +YW5zbGF0aW9uOjEsInRydWUiOjEsImNhc2UiOjEsZXhjZXB0aW9uOjEsam9pbjox +LGhvdXI6MSwiZGVmYXVsdCI6MSwiZG91YmxlIjoxLHNjcm9sbDoxLHZhbHVlOjEs +Y3Vyc29yOjEsZGVzY3JpcHRvcjoxLHZhbHVlczoxLGRlYzoxLGZldGNoOjEscHJv +Y2VkdXJlOjEsImRlbGV0ZSI6MSxhbmQ6MSwiZmFsc2UiOjEsImludCI6MSxpczox +LGRlc2NyaWJlOjEsImNoYXIiOjEsYXM6MSxhdDoxLCJpbiI6MSx2YXJjaGFyOjEs +Im51bGwiOjEsdHJhaWxpbmc6MSxhbnk6MSxhYnNvbHV0ZToxLGN1cnJlbnRfdGlt +ZToxLGVuZDoxLGdyYW50OjEscHJpdmlsZWdlczoxLHdoZW46MSxjcm9zczoxLGNo +ZWNrOjEsd3JpdGU6MSxjdXJyZW50X2RhdGU6MSxwYWQ6MSxiZWdpbjoxLHRlbXBv +cmFyeToxLGV4ZWM6MSx0aW1lOjEsdXBkYXRlOjEsY2F0YWxvZzoxLHVzZXI6MSxz +cWw6MSxkYXRlOjEsb246MSxpZGVudGl0eToxLHRpbWV6b25lX2hvdXI6MSxuYXR1 +cmFsOjEsd2hlbmV2ZXI6MSxpbnRlcnZhbDoxLHdvcms6MSxvcmRlcjoxLGNhc2Nh +ZGU6MSxkaWFnbm9zdGljczoxLG5jaGFyOjEsaGF2aW5nOjEsbGVmdDoxLGNhbGw6 +MSwiZG8iOjEsaGFuZGxlcjoxLGxvYWQ6MSxyZXBsYWNlOjEsdHJ1bmNhdGU6MSxz +dGFydDoxLGxvY2s6MSxzaG93OjEscHJhZ21hOjF9LGFnZ3JlZ2F0ZTp7Y291bnQ6 +MSxzdW06MSxtaW46MSxtYXg6MSxhdmc6MX19fSx7Y046Im5ld2xpbmUiLGI6Ilxc +biIsZToiXiIsbk06dHJ1ZX0saGxqcy5DTk0saGxqcy5DQkxDTE0se2NOOiJjb21t +ZW50IixiOiItLSIsZToiJCJ9LHtjTjoic3RyaW5nIixiOiInIixlOiInIixjOlsi +ZXNjYXBlIiwic3F1b3RlIl0scjowfSx7Y046InNxdW90ZSIsYjoiJyciLGU6Il4i +LG5NOnRydWV9LHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxjOlsiZXNjYXBlIiwi +ZHF1b3RlIl0scjowfSx7Y046ImRxdW90ZSIsYjonIiInLGU6Il4iLG5NOnRydWV9 +LHtjTjoic3RyaW5nIixiOiJgIixlOiJgIixjOlsiZXNjYXBlIl19LGhsanMuQkVd +fTtobGpzLkxBTkdVQUdFUy5wZXJsPWZ1bmN0aW9uKCl7dmFyIGI9WyJjb21tZW50 +Iiwic3RyaW5nIiwibnVtYmVyIiwicmVnZXhwIiwic3ViIiwidmFyaWFibGUiLCJv +cGVyYXRvciIsInBvZCJdO3ZhciBhPXtnZXRwd2VudDoxLGdldHNlcnZlbnQ6MSxx +dW90ZW1ldGE6MSxtc2dyY3Y6MSxzY2FsYXI6MSxraWxsOjEsZGJtY2xvc2U6MSx1 +bmRlZjoxLGxjOjEsbWE6MSxzeXN3cml0ZToxLHRyOjEsc2VuZDoxLHVtYXNrOjEs +c3lzb3BlbjoxLHNobXdyaXRlOjEsdmVjOjEscXg6MSx1dGltZToxLGxvY2FsOjEs +b2N0OjEsc2VtY3RsOjEsbG9jYWx0aW1lOjEscmVhZHBpcGU6MSwiZG8iOjEsInJl +dHVybiI6MSxmb3JtYXQ6MSxyZWFkOjEsc3ByaW50ZjoxLGRibW9wZW46MSxwb3A6 +MSxnZXRwZ3JwOjEsbm90OjEsZ2V0cHduYW06MSxyZXdpbmRkaXI6MSxxcToxLGZp +bGVubzoxLHF3OjEsZW5kcHJvdG9lbnQ6MSx3YWl0OjEsc2V0aG9zdGVudDoxLGJs +ZXNzOjEsczoxLG9wZW5kaXI6MSwiY29udGludWUiOjEsZWFjaDoxLHNsZWVwOjEs +ZW5kZ3JlbnQ6MSxzaHV0ZG93bjoxLGR1bXA6MSxjaG9tcDoxLGNvbm5lY3Q6MSxn +ZXRzb2NrbmFtZToxLGRpZToxLHNvY2tldHBhaXI6MSxjbG9zZToxLGZsb2NrOjEs +ZXhpc3RzOjEsaW5kZXg6MSxzaG1nZXQ6MSxzdWI6MSwiZm9yIjoxLGVuZHB3ZW50 +OjEscmVkbzoxLGxzdGF0OjEsbXNnY3RsOjEsc2V0cGdycDoxLGFiczoxLGV4aXQ6 +MSxzZWxlY3Q6MSxwcmludDoxLHJlZjoxLGdldGhvc3RieWFkZHI6MSx1bnNoaWZ0 +OjEsZmNudGw6MSxzeXNjYWxsOjEsImdvdG8iOjEsZ2V0bmV0YnlhZGRyOjEsam9p +bjoxLGdtdGltZToxLHN5bWxpbms6MSxzZW1nZXQ6MSxzcGxpY2U6MSx4OjEsZ2V0 +cGVlcm5hbWU6MSxyZWN2OjEsbG9nOjEsc2V0c29ja29wdDoxLGNvczoxLGxhc3Q6 +MSxyZXZlcnNlOjEsZ2V0aG9zdGJ5bmFtZToxLGdldGdybmFtOjEsc3R1ZHk6MSxm +b3JtbGluZToxLGVuZGhvc3RlbnQ6MSx0aW1lczoxLGNob3A6MSxsZW5ndGg6MSxn +ZXRob3N0ZW50OjEsZ2V0bmV0ZW50OjEscGFjazoxLGdldHByb3RvZW50OjEsZ2V0 +c2VydmJ5bmFtZToxLHJhbmQ6MSxta2RpcjoxLHBvczoxLGNobW9kOjEseToxLHN1 +YnN0cjoxLGVuZG5ldGVudDoxLHByaW50ZjoxLG5leHQ6MSxvcGVuOjEsbXNnc25k +OjEscmVhZGRpcjoxLHVzZToxLHVubGluazoxLGdldHNvY2tvcHQ6MSxnZXRwcmlv +cml0eToxLHJpbmRleDoxLHdhbnRhcnJheToxLGhleDoxLHN5c3RlbToxLGdldHNl +cnZieXBvcnQ6MSxlbmRzZXJ2ZW50OjEsImludCI6MSxjaHI6MSx1bnRpZToxLHJt +ZGlyOjEscHJvdG90eXBlOjEsdGVsbDoxLGxpc3RlbjoxLGZvcms6MSxzaG1yZWFk +OjEsdWNmaXJzdDoxLHNldHByb3RvZW50OjEsImVsc2UiOjEsc3lzc2VlazoxLGxp +bms6MSxnZXRncmdpZDoxLHNobWN0bDoxLHdhaXRwaWQ6MSx1bnBhY2s6MSxnZXRu +ZXRieW5hbWU6MSxyZXNldDoxLGNoZGlyOjEsZ3JlcDoxLHNwbGl0OjEscmVxdWly +ZToxLGNhbGxlcjoxLGxjZmlyc3Q6MSx1bnRpbDoxLHdhcm46MSwid2hpbGUiOjEs +dmFsdWVzOjEsc2hpZnQ6MSx0ZWxsZGlyOjEsZ2V0cHd1aWQ6MSxteToxLGdldHBy +b3RvYnludW1iZXI6MSwiZGVsZXRlIjoxLGFuZDoxLHNvcnQ6MSx1YzoxLGRlZmlu +ZWQ6MSxzcmFuZDoxLGFjY2VwdDoxLCJwYWNrYWdlIjoxLHNlZWtkaXI6MSxnZXRw +cm90b2J5bmFtZToxLHNlbW9wOjEsb3VyOjEscmVuYW1lOjEsc2VlazoxLCJpZiI6 +MSxxOjEsY2hyb290OjEsc3lzcmVhZDoxLHNldHB3ZW50OjEsbm86MSxjcnlwdDox +LGdldGM6MSxjaG93bjoxLHNxcnQ6MSx3cml0ZToxLHNldG5ldGVudDoxLHNldHBy +aW9yaXR5OjEsZm9yZWFjaDoxLHRpZToxLHNpbjoxLG1zZ2dldDoxLG1hcDoxLHN0 +YXQ6MSxnZXRsb2dpbjoxLHVubGVzczoxLGVsc2lmOjEsdHJ1bmNhdGU6MSxleGVj +OjEsa2V5czoxLGdsb2I6MSx0aWVkOjEsY2xvc2VkaXI6MSxpb2N0bDoxLHNvY2tl +dDoxLHJlYWRsaW5rOjEsImV2YWwiOjEseG9yOjEscmVhZGxpbmU6MSxiaW5tb2Rl +OjEsc2V0c2VydmVudDoxLGVvZjoxLG9yZDoxLGJpbmQ6MSxhbGFybToxLHBpcGU6 +MSxhdGFuMjoxLGdldGdyZW50OjEsZXhwOjEsdGltZToxLHB1c2g6MSxzZXRncmVu +dDoxLGd0OjEsbHQ6MSxvcjoxLG5lOjEsbToxfTtyZXR1cm57ZE06e2w6W2hsanMu +SVJdLGM6YixrOmF9LG06W3tjTjoidmFyaWFibGUiLGI6IlxcJFxcZCIsZToiXiJ9 +LHtjTjoidmFyaWFibGUiLGI6IltcXCRcXCVcXEBcXCpdKFxcXlxcd1xcYnwjXFx3 +KyhcXDpcXDpcXHcrKSp8W15cXHNcXHd7XXx7XFx3K318XFx3KyhcXDpcXDpcXHcq +KSopIixlOiJeIn0se2NOOiJzdWJzdCIsYjoiWyRAXVxceyIsZToifSIsbDpbaGxq +cy5JUl0sazphLGM6YixyOjEwfSx7Y046Im51bWJlciIsYjoiKFxcYjBbMC03X10r +KXwoXFxiMHhbMC05YS1mQS1GX10rKXwoXFxiWzEtOV1bMC05X10qKFxcLlswLTlf +XSspPyl8WzBfXVxcYiIsZToiXiIscjowfSx7Y046InN0cmluZyIsYjoicVtxd3hy +XT9cXHMqXFwoIixlOiJcXCkiLGM6WyJlc2NhcGUiLCJzdWJzdCIsInZhcmlhYmxl +Il0scjo1fSx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMqXFxbIixlOiJcXF0i +LGM6WyJlc2NhcGUiLCJzdWJzdCIsInZhcmlhYmxlIl0scjo1fSx7Y046InN0cmlu +ZyIsYjoicVtxd3hyXT9cXHMqXFx7IixlOiJcXH0iLGM6WyJlc2NhcGUiLCJzdWJz +dCIsInZhcmlhYmxlIl0scjo1fSx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMq +XFx8IixlOiJcXHwiLGM6WyJlc2NhcGUiLCJzdWJzdCIsInZhcmlhYmxlIl0scjo1 +fSx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMqXFw8IixlOiJcXD4iLGM6WyJl +c2NhcGUiLCJzdWJzdCIsInZhcmlhYmxlIl0scjo1fSx7Y046InN0cmluZyIsYjoi +cXdcXHMrcSIsZToicSIsYzpbImVzY2FwZSIsInN1YnN0IiwidmFyaWFibGUiXSxy +OjV9LHtjTjoic3RyaW5nIixiOiInIixlOiInIixjOlsiZXNjYXBlIl0scjowfSx7 +Y046InN0cmluZyIsYjonIicsZTonIicsYzpbImVzY2FwZSIsInN1YnN0IiwidmFy +aWFibGUiXSxyOjB9LGhsanMuQkUse2NOOiJzdHJpbmciLGI6ImAiLGU6ImAiLGM6 +WyJlc2NhcGUiXX0se2NOOiJyZWdleHAiLGI6IihzfHRyfHkpLyhcXFxcLnxbXi9d +KSovKFxcXFwufFteL10pKi9bYS16XSoiLGU6Il4iLHI6MTB9LHtjTjoicmVnZXhw +IixiOiIobXxxcik/LyIsZToiL1thLXpdKiIsYzpbImVzY2FwZSJdLHI6MH0se2NO +OiJzdHJpbmciLGI6IntcXHcrfSIsZToiXiIscjowfSx7Y046InN0cmluZyIsYjoi +LT9cXHcrXFxzKlxcPVxcPiIsZToiXiIscjowfSx7Y046InN1YiIsYjoiXFxic3Vi +XFxiIixlOiIoXFxzKlxcKC4qP1xcKSk/Wzt7XSIsbDpbaGxqcy5JUl0sazp7c3Vi +OjF9LHI6NX0se2NOOiJvcGVyYXRvciIsYjoiLVxcd1xcYiIsZToiXiIscjowfSxo +bGpzLkhDTSx7Y046ImNvbW1lbnQiLGI6Il4oX19FTkRfX3xfX0RBVEFfXykiLGU6 +IlxcbiQiLHI6NX0se2NOOiJwb2QiLGI6IlxcPVxcdyIsZToiXFw9Y3V0In1dfX0o +KTtobGpzLkxBTkdVQUdFUy5zY2FsYT17ZE06e2w6W2hsanMuVUlSXSxjOlsiamF2 +YWRvYyIsImNvbW1lbnQiLCJzdHJpbmciLCJjbGFzcyIsIm51bWJlciIsImFubm90 +YXRpb24iXSxrOnt0eXBlOjEseWllbGQ6MSxsYXp5OjEsb3ZlcnJpZGU6MSxkZWY6 +MSwid2l0aCI6MSx2YWw6MSwidmFyIjoxLCJmYWxzZSI6MSwidHJ1ZSI6MSxzZWFs +ZWQ6MSwiYWJzdHJhY3QiOjEsInByaXZhdGUiOjEsdHJhaXQ6MSxvYmplY3Q6MSwi +bnVsbCI6MSwiaWYiOjEsImZvciI6MSwid2hpbGUiOjEsInRocm93IjoxLCJmaW5h +bGx5IjoxLCJwcm90ZWN0ZWQiOjEsImV4dGVuZHMiOjEsImltcG9ydCI6MSwiZmlu +YWwiOjEsInJldHVybiI6MSwiZWxzZSI6MSwiYnJlYWsiOjEsIm5ldyI6MSwiY2F0 +Y2giOjEsInN1cGVyIjoxLCJjbGFzcyI6MSwiY2FzZSI6MSwicGFja2FnZSI6MSwi +ZGVmYXVsdCI6MSwidHJ5IjoxLCJ0aGlzIjoxLG1hdGNoOjEsImNvbnRpbnVlIjox +LCJ0aHJvd3MiOjF9fSxtOlt7Y046ImNsYXNzIixsOltobGpzLlVJUl0sYjoiKChj +YXNlICk/Y2xhc3MgfG9iamVjdCB8dHJhaXQgKSIsZToiKHt8JCkiLGk6IjoiLGs6 +eyJjYXNlIjoxLCJjbGFzcyI6MSx0cmFpdDoxLG9iamVjdDoxfSxjOlsiaW5oZXJp +dGFuY2UiLCJ0aXRsZSIsInBhcmFtcyJdfSx7Y046ImluaGVyaXRhbmNlIixiOiIo +ZXh0ZW5kc3x3aXRoKSIsZToiXiIsbk06dHJ1ZSxsOltobGpzLklSXSxrOnsiZXh0 +ZW5kcyI6MSwid2l0aCI6MX0scjoxMH0se2NOOiJ0aXRsZSIsYjpobGpzLlVJUixl +OiJeIn0se2NOOiJwYXJhbXMiLGI6IlxcKCIsZToiXFwpIixjOlsic3RyaW5nIiwi +YW5ub3RhdGlvbiJdfSxobGpzLkNOTSxobGpzLkFTTSxobGpzLlFTTSxobGpzLkJF +LGhsanMuQ0xDTSx7Y046ImphdmFkb2MiLGI6Ii9cXCpcXCoiLGU6IlxcKi8iLGM6 +WyJqYXZhZG9jdGFnIl0scjoxMH0se2NOOiJqYXZhZG9jdGFnIixiOiJAW0EtWmEt +el0rIixlOiJeIn0saGxqcy5DQkxDTE0se2NOOiJhbm5vdGF0aW9uIixiOiJAW0Et +WmEtel0rIixlOiJeIn0se2NOOiJzdHJpbmciLGI6J3U/cj8iIiInLGU6JyIiIics +cjoxMH1dfTtobGpzLkxBTkdVQUdFUy5jcHA9ZnVuY3Rpb24oKXt2YXIgYT17a2V5 +d29yZDp7ImZhbHNlIjoxLCJpbnQiOjEsImZsb2F0IjoxLCJ3aGlsZSI6MSwicHJp +dmF0ZSI6MSwiY2hhciI6MSwiY2F0Y2giOjEsImV4cG9ydCI6MSx2aXJ0dWFsOjEs +b3BlcmF0b3I6MixzaXplb2Y6MixkeW5hbWljX2Nhc3Q6Mix0eXBlZGVmOjIsY29u +c3RfY2FzdDoyLCJjb25zdCI6MSxzdHJ1Y3Q6MSwiZm9yIjoxLHN0YXRpY19jYXN0 +OjIsdW5pb246MSxuYW1lc3BhY2U6MSx1bnNpZ25lZDoxLCJsb25nIjoxLCJ0aHJv +dyI6MSwidm9sYXRpbGUiOjIsInN0YXRpYyI6MSwicHJvdGVjdGVkIjoxLGJvb2w6 +MSx0ZW1wbGF0ZToxLG11dGFibGU6MSwiaWYiOjEsInB1YmxpYyI6MSxmcmllbmQ6 +MiwiZG8iOjEsInJldHVybiI6MSwiZ290byI6MSxhdXRvOjEsInZvaWQiOjIsImVu +dW0iOjEsImVsc2UiOjEsImJyZWFrIjoxLCJuZXciOjEsZXh0ZXJuOjEsdXNpbmc6 +MSwidHJ1ZSI6MSwiY2xhc3MiOjEsYXNtOjEsImNhc2UiOjEsdHlwZWlkOjEsInNo +b3J0IjoxLHJlaW50ZXJwcmV0X2Nhc3Q6MiwiZGVmYXVsdCI6MSwiZG91YmxlIjox +LHJlZ2lzdGVyOjEsZXhwbGljaXQ6MSxzaWduZWQ6MSx0eXBlbmFtZToxLCJ0cnki +OjEsInRoaXMiOjEsInN3aXRjaCI6MSwiY29udGludWUiOjEsd2NoYXJfdDoxLGlu +bGluZToxLCJkZWxldGUiOjF9LGJ1aWx0X2luOntzdGQ6MSxzdHJpbmc6MSxjaW46 +MSxjb3V0OjEsY2VycjoxLGNsb2c6MSxzdHJpbmdzdHJlYW06MSxpc3RyaW5nc3Ry +ZWFtOjEsb3N0cmluZ3N0cmVhbToxLGF1dG9fcHRyOjEsZGVxdWU6MSxsaXN0OjEs +cXVldWU6MSxzdGFjazoxLHZlY3RvcjoxLG1hcDoxLHNldDoxLGJpdHNldDoxLG11 +bHRpc2V0OjEsbXVsdGltYXA6MX19O3JldHVybntkTTp7bDpbaGxqcy5VSVJdLGk6 +IjwvIixjOlsiY29tbWVudCIsInN0cmluZyIsIm51bWJlciIsInByZXByb2Nlc3Nv +ciIsInN0bF9jb250YWluZXIiXSxrOmF9LG06W2hsanMuQ0xDTSxobGpzLkNCTENM +TSxobGpzLkNOTSxobGpzLlFTTSxobGpzLkJFLHtjTjoic3RyaW5nIixiOiInIixl +OiJbXlxcXFxdJyIsaToiW15cXFxcXVteJ10ifSx7Y046InByZXByb2Nlc3NvciIs +YjoiIyIsZToiJCJ9LHtjTjoic3RsX2NvbnRhaW5lciIsYjoiXFxiKGRlcXVlfGxp +c3R8cXVldWV8c3RhY2t8dmVjdG9yfG1hcHxzZXR8Yml0c2V0fG11bHRpc2V0fG11 +bHRpbWFwKVxccyo8IixlOiI+IixjOlsic3RsX2NvbnRhaW5lciJdLGw6W2hsanMu +VUlSXSxrOmEscjoxMH1dfX0oKTs= + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=commentForm.js +Content-Type: application/x-javascript; charset=utf-8; name=commentForm.js +Content-Location: http://habrahabr.ru/js/1307631427/commentForm.js +Content-Transfer-Encoding: Base64 + +LyoNCgljb21tZW50Rm9ybUNsYXNzDQoJ0YDQsNCx0L7RgtCw0LXRgiDQv9C+INC/ +0YDQuNC90YbQuNC/0YMg0YHRgtCw0YLQuNGH0LXRgdC60L7Qs9C+INC60LvQsNGB +0YHQsDoNCgnQtNC70Y8g0YDQsNCx0L7RgtGLINGC0YDQtdCx0YPQtdGCINGB0L7Q +t9C00LDQvdC40Y8g0L7QtNC90L7Qs9C+INC+0LHRitC10LrRgtCwDQoJdmFyIGNv +bW1lbnRGb3JtDQoqLw0KDQp2YXIgY29tbWVudEZvcm1DbGFzcyA9IGZ1bmN0aW9u +KCl7DQoJY29tbWVudEZvcm1DbGFzcy5zdXBlckNsYXNzLmFwcGx5KHRoaXMsIGFy +Z3VtZW50cyk7DQoJDQoJJGV4dGVuZCh0aGlzLCB0bS5jdXN0b21FdmVudE1hbmFn +ZXIpOw0KCQ0KCXRoaXMubmV3X3JlcGxpZXNfaSA9IC0xOw0KCQ0KCU9iamVjdC5l +eHRlbmRPYmplY3QoDQoJCXRoaXMuYWpheFVybHMsIHsNCgkJCXNhdmU6ICh3aW5k +b3cuYmFzZVVSTCB8fCAnJykgKyAnL2FqYXgvY29tbWVudHMvYWRkLycsDQoJCQlw +cmV2aWV3OiAod2luZG93LmJhc2VVUkwgfHwgJycpICsgJy9hamF4L2NvbW1lbnRz +L3ByZXZpZXcvJywNCgkJCWZlZWRiYWNrOiAod2luZG93LmJhc2VVUkwgfHwgJycp +ICsgJy9hamF4L2NvbW1lbnRzL2FkZF9mZWVkYmFjay8nDQoJfSk7DQoJDQoJLy8g +0JjRgdC/0L7Qu9GM0LfRg9C10LzRi9C1INCyINGE0L7RgNC80LUgY2xhc3NOYW1l +cw0KCXRoaXMuY2xhc3NOYW1lcyA9IHsNCgkJZmllbGRIb2xkZXI6ICdqcy1maWVs +ZC1ob2xkZXInLCAvLyDQutC+0L3RgtC10LnQvdC10YAt0YDQvtC00LjRgtC10LvR +jCDQv9C+0LvRjyDRhNC+0YDQvNGLINC4INC+0YjQuNCx0LrQuA0KCQlmaWVsZERh +dGE6ICdqcy1maWVsZC1kYXRhJywgLy8g0L/QvtC70LUg0YTQvtGA0LzRiywg0LrQ +vtGC0L7RgNC+0LUg0L3Rg9C20L3QviDRgdC10YDQuNCw0LvQuNC30L7QstCw0YLR +jA0KCQlmaWVsZEVycm9yTXNnQm94OiAnanMtZmllbGQtZXJyb3ItbXNnJywgLy8g +0LrQvtC90YLQtdC50L3QtdGAINC00LvRjyDQstGL0LLQvtC00LAg0YHQvtC+0LHR +idC10L3QuNGPINC+0LEg0L7RiNC40LHQutC1DQoJCWZpZWxkTWFya2VkRXJyb3I6 +ICdqcy1tYXJrZWQtZXJyb3InLCAvLyDQv9C+0LzQtdGH0LDQtdC8INC60L7QvdGC +0LXQudC90LXRgCwg0LXRgdC70Lgg0LIg0L/QvtC70LUgLSDQvtGI0LjQsdC60LAN +CgkJZmllbGRNYXJrZWRDaGVja2VkOiAnanMtbWFya2VkLWNoZWNrZWQnLCAvLyDQ +v9C+0LzQtdGH0LDQtdC8INC60L7QvdGC0LXQudC90LXRgCwg0LXRgdC70Lgg0L/Q +vtC70LUg0L/RgNC+0YjQu9C+INC/0YDQvtCy0LXRgNC60YMNCgkJZmllbGRJc1Jl +cXVpcmVkOiAnanMtcmVxdWlyZWQnLCAvLyDQv9C+0LvQtSwg0L7QsdGP0LfQsNGC +0LXQu9GM0L3QvtC1INC00LvRjyDQt9Cw0L/QvtC70L3QtdC90LjRjyANCgkJZmll +bGRQYXNzXzE6ICdqcy1wYXNzLWZpZWxkLW1haW4nLCAvLyDQv9C+0LvQtSDRgSDQ +vtGB0L3QvtCy0L3Ri9C8INC/0LDRgNC+0LvQtdC8DQoJCWZpZWxkUGFzc18yOiAn +anMtcGFzcy1maWVsZC1yZXBlYXQnLCAvLyDQv9C+0LvQtSDRgSDQv9C+0LLRgtC+ +0YDQvtC8INC/0LDRgNC+0LvRjw0KCQlpc0xvYWRpbmc6ICdsb2FkaW5nJywgLy8g +0L/RgNC10LvQvtCw0LTQtdGADQoJCXVua25vd25FcnJvckhvbGRlcjogJ2pzLXVu +a25vd24tZXJyb3ItaG9sZGVyJywgLy8g0LTQtdGA0LbQsNGC0LXQu9GMINCy0YvQ +stC+0LTQsCDQvdC10L7Qv9C+0LfQvdCw0L3QvdC+0Lkg0L7RiNC40LHQutC4DQoJ +CXVua25vd25FcnJvck1zZzogJ2pzLXVua25vd24tZXJyb3ItbXNnJywgLy8g0YHQ +sNC80L4g0L/QvtC70LUg0L3QtdC+0L/QvtC30L3QsNC90L3QvtC5INC+0YjQuNCx +0LrQuA0KCQljb21tZW50c0NvdW50OiAnanMtY29tbWVudHMtY291bnQnLCAvL9C6 +0L7Qu9C40YfQtdGB0YLQstC+INC60L7QvNC80LXQvdGC0LDRgNC40LXQsg0KCQlw +cmV2aWV3SG9sZGVyOiAnY29tbWVudC1wcmV2aWV3JywgLy/Qv9GA0LXQtNC/0YDQ +vtGB0LzQvtGC0YANCgkJdGhyZWFkOiAnaGVudHJ5JywgLy8g0LLQtdGC0LrQsCDQ +utC+0LzQvNC10L3RgtCw0YDQuNC10LINCgkJY29tbWVudEl0ZW06ICdjb21tZW50 +X2hvbGRlciB2b3RlX2hvbGRlcicgLy/QutC+0LzQvNC10L3RgtCw0YDQuNC5DQoJ +fTsNCgkNCglPYmplY3QuZXh0ZW5kT2JqZWN0KA0KCQl0aGlzLnhtbFJlc3BvbnNl +LCB7DQoJCXRpbWVmaWVsZDogew0KCQkJbm9kZTogJ3RpbWVmaWVsZCcsDQoJCQlo +YW5kbGVyOiBudWxsDQoJCX0sDQoJCWNvbW1lbnQ6IHsNCgkJCW5vZGU6ICdjb21t +ZW50JywNCgkJCWhhbmRsZXI6ICd4bWxSZXNwb25zZUhhbmRsZXJfY29tbWVudCcN +CgkJfSwNCgkJY29tcGFueV9jb21tZW50OiB7DQoJCQlub2RlOiAnY29tcGFueV9j +b21tZW50JywNCgkJCWhhbmRsZXI6ICd4bWxSZXNwb25zZUhhbmRsZXJfY29tcGFu +eV9jb21tZW50Jw0KCQl9LA0KCQlwcmV2aWV3OiB7DQoJCQlub2RlOiAncHJldmll +dycsDQoJCQloYW5kbGVyOiAneG1sUmVzcG9uc2VIYW5kbGVyX3ByZXZpZXcnDQoJ +CX0sDQoJCWVycm9yOiB7DQoJCQlub2RlOiAnZXJyb3InLA0KCQkJaGFuZGxlcjog +J3htbFJlc3BvbnNlSGFuZGxlcl9lcnJvcicNCgkJfQ0KCX0pOw0KfTsNCmNvbW1l +bnRGb3JtQ2xhc3MuaW5oZXJpdHNGcm9tKGFqYXhGb3JtQ2xhc3MpOw0KDQpPYmpl +Y3QuZXh0ZW5kT2JqZWN0KA0KCWNvbW1lbnRGb3JtQ2xhc3MucHJvdG90eXBlLCB7 +DQoJDQoJYnVpbGQ6IHsNCgkJY29tbWVudDogZnVuY3Rpb24oaWQsIHRleHQpew0K +CQkJdmFyIGVudHJ5X3JlcGx5X2l0ZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50 +KCdsaScpOw0KCQkJZW50cnlfcmVwbHlfaXRlbS5pZCA9ICdjb21tZW50XycgKyBp +ZDsNCgkJCWVudHJ5X3JlcGx5X2l0ZW0uY2xhc3NOYW1lID0gY29tbWVudEZvcm0u +Y2xhc3NOYW1lcy5jb21tZW50SXRlbTsNCgkJCWVudHJ5X3JlcGx5X2l0ZW0uaW5u +ZXJIVE1MID0gdGV4dDsNCgkJCXRoaXMuX2hpZ2hsaWdodChlbnRyeV9yZXBseV9p +dGVtKTsNCgkJCXJldHVybiBlbnRyeV9yZXBseV9pdGVtOwkJCQ0KCQl9LA0KCQkN +CgkJdGhyZWFkOiBmdW5jdGlvbigpew0KCQkJdmFyIGVudHJ5X3JlcGx5X3RocmVh +ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3VsJyk7DQoJCQllbnRyeV9yZXBs +eV90aHJlYWQuY2xhc3NOYW1lID0gY29tbWVudEZvcm0uY2xhc3NOYW1lcy50aHJl +YWQ7DQoJCQlyZXR1cm4gZW50cnlfcmVwbHlfdGhyZWFkOw0KCQl9LA0KCQ0KCSAg +ICBfaGlnaGxpZ2h0OiBmdW5jdGlvbihub2RlKSB7DQoJICAgICAgICB2YXIgcHJl +cyA9IG5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3ByZScpOw0KCSAgICAgICAg +Zm9yICh2YXIgaSA9IDA7IGkgPCBwcmVzLmxlbmd0aDsgaSsrKSB7DQogICAgICAg +ICAgICAgIHZhciBjb2RlID0gcHJlc1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgn +Y29kZScpOw0KICAgICAgICAgICAgICBpZiAoY29kZS5sZW5ndGgpIGhsanMuaGln +aGxpZ2h0QmxvY2soY29kZVswXSwgaGxqcy50YWJSZXBsYWNlKTsNCiAgICAgICAg +ICAgIH0NCgkgICAgfQ0KCX0sDQoJDQoJX2FkZENvbW1lbnRzOiBmdW5jdGlvbih4 +bWxOb2RlcywgbWVzc19ib3gpew0KCQl2YXIgcmVwbGllcyA9IFtdOw0KCQl2YXIg +Y29tbWVudHNIb2xkZXIgPSAkKCdjb21tZW50cycpOw0KCQlmb3IodmFyIGk9MDsg +aTx4bWxOb2Rlcy5jb21tZW50Lmxlbmd0aDsgaSsrKSB7DQoJCQl2YXIgdGV4dCA9 +IHhtbE5vZGVzLmNvbW1lbnRbaV0uZmlyc3RDaGlsZC5kYXRhOw0KCQkJdmFyIGVu +dHJ5X3JlcGx5X2l0ZW0gPSB0aGlzLmJ1aWxkLmNvbW1lbnQoeG1sTm9kZXMuY29t +bWVudFtpXS5nZXRBdHRyaWJ1dGUoJ2NvbW1lbnRfaWQnKSwgdGV4dCk7DQoJCQly +ZXBsaWVzW3JlcGxpZXMubGVuZ3RoXSA9IGVudHJ5X3JlcGx5X2l0ZW07DQoJCQlp +Zih4bWxOb2Rlcy5jb21tZW50W2ldLmdldEF0dHJpYnV0ZSgncGFyZW50X2lkJykh +PTApIHsNCgkJCQl2YXIgZW50cnkgPSAkKCdjb21tZW50XycgKyB4bWxOb2Rlcy5j +b21tZW50W2ldLmdldEF0dHJpYnV0ZSgncGFyZW50X2lkJykpOw0KCQkJCXZhciBl +bnRyeV9yZXBseV90aHJlYWQgPSBlbnRyeS5nZXRFbGVtZW50KCcuJyArIHRoaXMu +Y2xhc3NOYW1lcy50aHJlYWQpOw0KCQkJCWlmKCFlbnRyeV9yZXBseV90aHJlYWQp +IHsNCgkJCQkJZW50cnlfcmVwbHlfdGhyZWFkID0gdGhpcy5idWlsZC50aHJlYWQo +KTsNCgkJCQkJZW50cnlfcmVwbHlfdGhyZWFkLmFwcGVuZENoaWxkKGVudHJ5X3Jl +cGx5X2l0ZW0pOw0KCQkJCQllbnRyeS5hcHBlbmRDaGlsZChlbnRyeV9yZXBseV90 +aHJlYWQpOw0KCQkJCX0NCgkJCQllbnRyeV9yZXBseV90aHJlYWQuYXBwZW5kQ2hp +bGQoZW50cnlfcmVwbHlfaXRlbSk7DQoJCQl9IGVsc2Ugew0KCQkJCXZhciByZXBs +eV9ob2xkZXIgPSAkKCdjb21tZW50cycpLmdldEVsZW1lbnQoJy4nICsgdGhpcy5j +bGFzc05hbWVzLnRocmVhZCkNCg0KCQkJCQ0KCQkJCQ0KCQkJCQ0KCQkJCQ0KCQkJ +CWlmKCFyZXBseV9ob2xkZXIpIHsNCgkJCQkJdmFyIHJlcGx5X2hvbGRlciA9IGRv +Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3VsJyk7DQoJCQkJCXJlcGx5X2hvbGRlci5j +bGFzc05hbWUgPSB0aGlzLmNsYXNzTmFtZXMudGhyZWFkOw0KCQkJCQljb21tZW50 +c0hvbGRlci5pbnNlcnRCZWZvcmUocmVwbHlfaG9sZGVyLCBjb21tZW50c0hvbGRl +ci5nZXRFbGVtZW50KCcuYWRkLWNvbW1lbnQnKSk7DQoJCQkJfQ0KCQkJCWlmICgh +bWVzc19ib3gpew0KCQkJCQlyZXBseV9ob2xkZXIuYXBwZW5kQ2hpbGQoZW50cnlf +cmVwbHlfaXRlbSk7DQoJCQkJfSBlbHNlew0KCQkJCQllbnRyeV9yZXBseV9pdGVt +LmdldEVsZW1lbnQoJ3AucmVwbHknKS5kaXNwb3NlKHRydWUpOw0KCQkJCQkkKHJl +cGx5X2hvbGRlcikuZ3JhYihlbnRyeV9yZXBseV9pdGVtLCAndG9wJykNCgkJCQl9 +DQoJCQkJDQoJCQl9DQoJCQlpZih4bWxOb2Rlcy5jb21tZW50W2ldLmdldEF0dHJp +YnV0ZSgndXNlcl9jb21tZW50Jyk9PTEpIHsgDQoJCQkJJCgnY29tbWVudF8nICsg +eG1sTm9kZXMuY29tbWVudFtpXS5nZXRBdHRyaWJ1dGUoJ2NvbW1lbnRfaWQnKSku +YWRkQ2xhc3MoJ2pzLW15LXJlcGx5Jyk7CQ0KCQkJfSBlbHNlIHsNCgkJCQkkKCdj +b21tZW50XycgKyB4bWxOb2Rlcy5jb21tZW50W2ldLmdldEF0dHJpYnV0ZSgnY29t +bWVudF9pZCcpKS5nZXRFbGVtZW50KCdkaXYubXNnLW1ldGEnKS5hZGRDbGFzcygn +bmV3LXJlcGx5Jyk7DQoJCQl9IA0KCQl9DQoJCWlmIChyZXBsaWVzLmxlbmd0aCA+ +IDApIHsNCgkJCXZhciBjb21tZW50c0hlYWRlciA9ICQoJ2NvbW1lbnRzJykuZ2V0 +RWxlbWVudCgnLmNvbW1lbnRzLWhlYWRlcicpOw0KCQkJaWYgKGNvbW1lbnRzSGVh +ZGVyICYmIGNvbW1lbnRzSGVhZGVyLmhhc0NsYXNzKCdoaWRkZW4nKSkgew0KCQkJ +CWNvbW1lbnRzSGVhZGVyLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTsNCgkJCX0NCgkJ +fQ0KDQoJCXJldHVybiByZXBsaWVzOw0KCX0sDQoJDQoJeG1sUmVzcG9uc2VIYW5k +bGVyX2NvbW1lbnQ6IGZ1bmN0aW9uKHhtbE5vZGVzLCBwYXJhbXMpew0KCQlpZih4 +bWxOb2Rlcy5tZXNzYWdlICYmIHhtbE5vZGVzLm1lc3NhZ2UubGVuZ3RoICYmIHht +bE5vZGVzLmNvbW1lbnQgJiYgeG1sTm9kZXMuY29tbWVudC5sZW5ndGgpIHsNCgkJ +CXBhcmFtcy5mb3JtLmVsZW1lbnRzWyd0aW1lZmllbGQnXS52YWx1ZSA9IHhtbE5v +ZGVzLnRpbWVmaWVsZFswXS5maXJzdENoaWxkLmRhdGE7DQoJCQl2YXIgY29tbWVu +dHNIb2xkZXIgPSAkKCdjb21tZW50cycpOw0KCQkJDQoJCQl2YXIganNmbGRobGQ7 +DQoJCQlqc2ZsZGhsZCA9ICQoJ2pzLWZpZWxkLWhvbGRlci13aXRoLWhlbHAnKTsN +CgkJCWlmICghanNmbGRobGQpIHsNCgkJCQlqc2ZsZGhsZCA9ICQoJ2pzLWZpZWxk +LWhvbGRlcicpOw0KCQkJfTsNCgkJCXZhciBwcmV2aWV3SG9sZGVyID0ganNmbGRo +bGQuZ2V0RWxlbWVudCgnLicgKyB0aGlzLmNsYXNzTmFtZXMucHJldmlld0hvbGRl +cik7DQoJCQlpZiAoIWpzZmxkaGxkLmNsYXNzTmFtZS5tYXRjaCgvbWVzc2FnZS1i +b3gtZm9ybS8pKXsNCgkJCQlqc2ZsZGhsZC5hZGRDbGFzcygnaGlkZGVuJyk7DQoJ +CQkJdGhpcy5fYWRkQ29tbWVudHMoeG1sTm9kZXMpOw0KCQkJfSBlbHNlew0KCQkJ +CXRoaXMuX2FkZENvbW1lbnRzKHhtbE5vZGVzLCB0cnVlKTsNCgkJCQkNCgkJCQlw +YXJhbXMuZm9ybVsnY29tbWVudFttZXNzYWdlXSddLnZhbHVlPSIiOw0KCQkJfQ0K +CQkJDQoJCQkkKHBhcmFtcy5mb3JtKS5yZW1vdmVDbGFzcyhwYXJhbXMubG9hZGlu +Z0NsYXNzTmFtZSk7DQoJCQl0aGlzLmFkZE5ld0NvbW1lbnRzVG9CYXIoKTsNCgkJ +CXZhciBjb21tZW50c19oZWFkZXIgPSAkKCdjb21tZW50cy1oZWFkZXInKTsNCgkJ +CWlmIChjb21tZW50c19oZWFkZXIpIHsNCgkJCQljb21tZW50c19oZWFkZXIuYWRk +Q2xhc3MoJ2NvbW1lbnRzLWhlYWRlci12aXNpYmxlJyk7DQoJCQl9DQoJCQlwYXJh +bXMuZm9ybS5sYXN0X3RleHQgPSBwYXJhbXMuZm9ybVsnY29tbWVudFttZXNzYWdl +XSddLnZhbHVlOw0KCQkJdmFyIGlucHV0c190b19ibHVyID0gJChwYXJhbXMuZm9y +bSkuZ2V0RWxlbWVudHMoJ2lucHV0Jyk7DQoJCQlmb3IgKHZhciBpPTAsIGwgPSBp +bnB1dHNfdG9fYmx1ci5sZW5ndGg7IGkgPCBsOyBpKyspIHsNCgkJCQlpbnB1dHNf +dG9fYmx1cltpXS5ibHVyKCk7DQoJCQl9Ow0KCQl9DQoJCWlmICh4bWxOb2Rlcy5j +b21tZW50ICYmIHhtbE5vZGVzLmNvbW1lbnQubGVuZ3RoKQ0KCQkJdGhpcy5maXJl +RXZlbnQoJ3RtOmxvYWRpbmctZmluaXNoZWQnKTsNCgkJdGhpcy51cGRhdGVBbGxD +b21tZW50c0NvdW50KCk7DQoJCSQocGFyYW1zLmZvcm0pLnJlbW92ZUNsYXNzKCds +b2FkaW5nJyk7DQoJCQ0KCX0sDQoNCgl4bWxSZXNwb25zZUhhbmRsZXJfY29tcGFu +eV9jb21tZW50OiBmdW5jdGlvbih4bWxOb2RlcywgcGFyYW1zKXsNCgkJaWYoeG1s +Tm9kZXMubWVzc2FnZSAmJiB4bWxOb2Rlcy5tZXNzYWdlLmxlbmd0aCAmJiB4bWxO +b2Rlcy5jb21wYW55X2NvbW1lbnQgJiYgeG1sTm9kZXMuY29tcGFueV9jb21tZW50 +Lmxlbmd0aCkgew0KCQkJcGFyYW1zLmZvcm0uZWxlbWVudHNbJ3RpbWVmaWVsZCdd +LnZhbHVlID0geG1sTm9kZXMudGltZWZpZWxkWzBdLmZpcnN0Q2hpbGQuZGF0YTsN +CgkJCXZhciBjb21tZW50c0hvbGRlciA9ICQoJ2NvbW1lbnRzJyk7DQoJCQl2YXIg +cmVwbHlfaG9sZGVyID0gY29tbWVudHNIb2xkZXIuZ2V0RWxlbWVudCgnLicgKyB0 +aGlzLmNsYXNzTmFtZXMudGhyZWFkKTsNCgkJCXZhciBlbnRyeV9yZXBsaWVzID0g +Y29tbWVudHNIb2xkZXIuZ2V0RWxlbWVudHMoJy4nICsgdGhpcy5jbGFzc05hbWVz +LmNvbW1lbnRJdGVtKTsNCgkJCWZvcih2YXIgaT0wLCB4bWxfbGVuZ3RoID0geG1s +Tm9kZXMuY29tcGFueV9jb21tZW50Lmxlbmd0aDsgaTx4bWxfbGVuZ3RoOyBpKysp +IHsNCgkJCQllbnRyeV9yZXBsaWVzLnNvcnQodGhpcy5zb3J0QXJyYXkpOw0KCQkJ +CXJlcGx5X2hvbGRlci5pbnNlcnRCZWZvcmUoZW50cnlfcmVwbHlfaXRlbSwgZW50 +cnlfcmVwbGllc1swXSk7DQoJCQkJdGhpcy5idWlsZC5jb21tZW50KHhtbE5vZGVz +LmNvbXBhbnlfY29tbWVudFtpXS5nZXRBdHRyaWJ1dGUoJ2NvbW1lbnRfaWQnKSwg +eG1sTm9kZXMuY29tcGFueV9jb21tZW50W2ldLmZpcnN0Q2hpbGQuZGF0YSk7DQoJ +CQkJIGlmKHhtbE5vZGVzLmNvbXBhbnlfY29tbWVudFtpXS5nZXRBdHRyaWJ1dGUo +J3VzZXJfY29tbWVudCcpPT0xKSB7IA0KCQkJCQkkKCdjb21tZW50XycgKyB4bWxO +b2Rlcy5jb21wYW55X2NvbW1lbnRbaV0uZ2V0QXR0cmlidXRlKCdjb21tZW50X2lk +JykpLmFkZENsYXNzKCdteS1yZXBseScpOw0KCQkJCX0gZWxzZSB7DQoJCQkJCSQo +J2NvbW1lbnRfJyArIHhtbE5vZGVzLmNvbXBhbnlfY29tbWVudFtpXS5nZXRBdHRy +aWJ1dGUoJ2NvbW1lbnRfaWQnKSkuYWRkQ2xhc3MoJ25ldy1yZXBseScpOw0KCQkJ +CX0NCgkJCX0NCgkJCXZhciBqc2ZsZGhsZCA9ICQoJ2pzLWZpZWxkLWhvbGRlcicp +Ow0KCQkJdmFyIHByZXZpZXdIb2xkZXIgPSBqc2ZsZGhsZC5nZXRFbGVtZW50KCcu +JyArIHRoaXMuY2xhc3NOYW1lcy5wcmV2aWV3SG9sZGVyKTsNCgkJCWpzZmxkaGxk +LmFkZENsYXNzKCdoaWRkZW4nKTsNCgkJCSQocGFyYW1zLmZvcm0pLnJlbW92ZUNs +YXNzKHBhcmFtcy5sb2FkaW5nQ2xhc3NOYW1lKTsNCgkJCXRoaXMuYWRkTmV3Q29t +bWVudHNUb0JhcigpOw0KCQl9DQoJCWlmICh4bWxOb2Rlcy5jb21wYW55X2NvbW1l +bnQgJiYgeG1sTm9kZXMuY29tcGFueV9jb21tZW50Lmxlbmd0aCkNCgkJCXRoaXMu +ZmlyZUV2ZW50KCd0bTpsb2FkaW5nLWZpbmlzaGVkJyk7DQoJCXRoaXMudXBkYXRl +QWxsQ29tbWVudHNDb3VudCgpOw0KCQkkKHBhcmFtcy5mb3JtKS5yZW1vdmVDbGFz +cygnbG9hZGluZycpOw0KCX0sDQoJDQoJeG1sUmVzcG9uc2VIYW5kbGVyX3ByZXZp +ZXc6IGZ1bmN0aW9uKHhtbE5vZGVzLCBwYXJhbXMpew0KCQlpZih4bWxOb2Rlcy5w +cmV2aWV3ICYmIHhtbE5vZGVzLnByZXZpZXcubGVuZ3RoKSB7DQoJCQl2YXIgcHJl +dmlld0hvbGRlciA9ICQoJ2pzLWZpZWxkLWhvbGRlcicpLmdldEVsZW1lbnQoJy4n +ICsgdGhpcy5jbGFzc05hbWVzLnByZXZpZXdIb2xkZXIpOw0KCQkJcHJldmlld0hv +bGRlci5yZW1vdmVDbGFzcygnaGlkZGVuJykNCgkJCXByZXZpZXdIb2xkZXIuaW5u +ZXJIVE1MID0geG1sTm9kZXMucHJldmlld1swXS5maXJzdENoaWxkLmRhdGE7DQoJ +CQkkKHBhcmFtcy5mb3JtKS5yZW1vdmVDbGFzcyhwYXJhbXMubG9hZGluZ0NsYXNz +TmFtZSk7DQoJCQkkKHBhcmFtcy5mb3JtKS5yZW1vdmVDbGFzcygnbG9hZGluZycp +Ow0KCQkJaWYgKHBhcmFtcy5mb3JtLmlucHV0X3ByZXZpZXcpew0KCQkJCSQocGFy +YW1zLmZvcm0uaW5wdXRfcHJldmlldykucmVtb3ZlQ2xhc3MoJ2xvYWRpbmcnKTsN +CgkJCX0NCgkJCXRoaXMuYnVpbGQuX2hpZ2hsaWdodChwcmV2aWV3SG9sZGVyKTsN +CgkJfQ0KCX0sDQoJDQoJeG1sUmVzcG9uc2VIYW5kbGVyX2Vycm9yOiBmdW5jdGlv +bih4bWxOb2RlcywgcGFyYW1zKXsNCgkJaWYoeG1sTm9kZXMuZXJyb3IgJiYgeG1s +Tm9kZXMuZXJyb3IubGVuZ3RoKSB7DQoJCQkkKHBhcmFtcy5mb3JtKS5yZW1vdmVD +bGFzcyhwYXJhbXMubG9hZGluZ0NsYXNzTmFtZSk7DQoJCQlmb3IgKHZhciBpPTA7 +IGk8eG1sTm9kZXMuZXJyb3IubGVuZ3RoOyBpKyspew0KCQkJCXZhciBlcnJvck1l +c3NhZ2UgPSB4bWxOb2Rlcy5lcnJvcltpXS5maXJzdENoaWxkID8geG1sTm9kZXMu +ZXJyb3JbaV0uZmlyc3RDaGlsZC5kYXRhIDogdGhpcy5lcnJvck1lc3NhZ2VzLnVu +a25vd25FcnJvcjsNCgkJCX0NCgkJCXRoaXMuc2hvd0Vycm9yKGVycm9yTWVzc2Fn +ZSk7DQoJCX0NCgkJJChwYXJhbXMuZm9ybSkucmVtb3ZlQ2xhc3MoJ2xvYWRpbmcn +KTsNCgkJaWYgKHBhcmFtcy5mb3JtLmlucHV0X3ByZXZpZXcpew0KCQkJJChwYXJh +bXMuZm9ybS5pbnB1dF9wcmV2aWV3KS5yZW1vdmVDbGFzcygnbG9hZGluZycpOw0K +CQl9DQoJfSwNCgkNCglzZW5kQ29tbWVudDogZnVuY3Rpb24oZm9ybSwgc3VibWl0 +VHlwZSwgbm9kZSkgew0KCQkkKCdqcy1maWVsZC1ob2xkZXInKS5yZW1vdmVDbGFz +cygnanMtbWFya2VkLWVycm9yJyk7DQoJCSQobm9kZSkuYWRkQ2xhc3MoJ2xvYWRp +bmcnKQ0KCQl0aGlzLnNlbmREYXRhKGZvcm0sIHN1Ym1pdFR5cGUpOw0KCQl0aGlz +LmZpcmVFdmVudCgndG06bG9hZGluZy1zdGFydGVkJyk7DQoJfSwNCgkNCglzZW5k +T25FbnRlcjogZnVuY3Rpb24odGV4dGFyZWEpIHsNCgkJdGV4dGFyZWEub25rZXl1 +cCA9IGZ1bmN0aW9uKGV2KSB7DQoJCQlpZighZXYpIHsNCgkJCQlldiA9IHdpbmRv +dy5ldmVudDsNCgkJCX0NCgkJCXZhciBrZXkgPSBnZXRDaGFyQ29kZShldik7DQoJ +CQlpZihrZXk9PTEzICYmIGV2LmN0cmxLZXkpIHsNCgkJCQljb21tZW50Rm9ybS5z +ZW5kQ29tbWVudCh0aGlzLmZvcm0sICdjb21tZW50JywgdGhpcy5mb3JtKTsNCgkJ +CX0NCgkJfQ0KCX0sDQoJDQoJbW92ZUZvcm06IGZ1bmN0aW9uKHJlcGx5X2Zvcm1f +aWQpIHsNCgkJdmFyIGZvcm1Ib2xkZXIgPSAkKHJlcGx5X2Zvcm1faWQpOw0KCQl2 +YXIgcGFyZW50X2lkID0gcmVwbHlfZm9ybV9pZC5tYXRjaCgvcmVwbHlfZm9ybV8o +LiopLylbMV07DQoJCXBhcmVudF9pZCA9IHBhcnNlSW50KHBhcmVudF9pZCk7DQoJ +CWlmICghYXJndW1lbnRzLmNhbGxlZS5hZGRjKSB7DQoJCQlhcmd1bWVudHMuY2Fs +bGVlLmFkZGMgPSAkKCd3cmFwcGVyJykuZ2V0RWxlbWVudCgnLmFkZC1jb21tZW50 +Jyk7DQoJCQkNCgkJfQ0KCQl2YXIgaW5mb2xpbmVIb2xkZXIgPSBhcmd1bWVudHMu +Y2FsbGVlLmFkZGM7DQoJCWlmIChpbmZvbGluZUhvbGRlcikgew0KCQkNCgkJCQ0K +CQkJaWYgKCFhcmd1bWVudHMuY2FsbGVlLmpzZmxkaGxkKSB7DQoJCQkJaWYgKCEo +YXJndW1lbnRzLmNhbGxlZS5qc2ZsZGhsZCA9ICQoJ2pzLWZpZWxkLWhvbGRlci13 +aXRoLWhlbHAnKSkpIHsNCgkJCQkJYXJndW1lbnRzLmNhbGxlZS5qc2ZsZGhsZCA9 +ICQoJ2pzLWZpZWxkLWhvbGRlcicpOw0KCQkJCX0gZWxzZXsNCgkJCQkJYXJndW1l +bnRzLmNhbGxlZS53aXRoaGVscCA9IHRydWU7DQoJCQkJfQ0KCQkJCWFyZ3VtZW50 +cy5jYWxsZWUuY29tbWhvbGRyID0gYXJndW1lbnRzLmNhbGxlZS5qc2ZsZGhsZC5n +ZXRFbGVtZW50KCcjanMtZmllbGQtY29tbWVudCcpOw0KCQkJCWFyZ3VtZW50cy5j +YWxsZWUucHJ3aGxkID0gYXJndW1lbnRzLmNhbGxlZS5qc2ZsZGhsZC5nZXRFbGVt +ZW50KCcuJyArIHRoaXMuY2xhc3NOYW1lcy5wcmV2aWV3SG9sZGVyKTsNCgkJCQlh +cmd1bWVudHMuY2FsbGVlLnRyZWVpbnB1dCA9ICBhcmd1bWVudHMuY2FsbGVlLmpz +ZmxkaGxkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdmb3JtJylbMF0uZWxlbWVudHNb +J2NvbW1lbnRbcGFyZW50X2lkXSddOw0KDQoJCQl9DQoJCQlpZiAoIWFyZ3VtZW50 +cy5jYWxsZWUud2l0aGhlbHApIHsNCgkJCQl2YXIgaW5mb2xpbmUgPSBpbmZvbGlu +ZUhvbGRlci5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGwnKVswXTsNCgkJCQlpZiAo +aW5mb2xpbmUpIHsNCgkJCQkJaWYocGFyZW50X2lkPT0wKSB7DQoJCQkJCQkkKGlu +Zm9saW5lKS5yZW1vdmVDbGFzcygnaGlkZGVuJyk7DQoJCQkJCX0NCgkJCQkJZWxz +ZSB7DQoJCQkJCQkkKGluZm9saW5lKS5hZGRDbGFzcygnaGlkZGVuJyk7DQoJCQkJ +CX0NCgkJCQl9DQoJCQl9DQoJCQkNCgkJCXZhciBqc2ZsZGhsZCA9IGFyZ3VtZW50 +cy5jYWxsZWUuanNmbGRobGQ7DQoJCQl2YXIgY29tbWVudEhvbGRlciA9IGFyZ3Vt +ZW50cy5jYWxsZWUuY29tbWhvbGRyOw0KCQkJdmFyIHByZXZpZXdIb2xkZXIgPSBh +cmd1bWVudHMuY2FsbGVlLnByd2hsZDsNCgkJCXZhciB0cmVlaW5wdXQgPSBhcmd1 +bWVudHMuY2FsbGVlLnRyZWVpbnB1dDsNCgkJCWlmKGpzZmxkaGxkKSB7DQoJCQkJ +Zm9ybUhvbGRlci5hcHBlbmRDaGlsZChqc2ZsZGhsZCk7DQoJCQkJdHJlZWlucHV0 +LnZhbHVlID0gcGFyZW50X2lkOw0KCQkJCSQocHJldmlld0hvbGRlcikuYWRkQ2xh +c3MoJ2hpZGRlbicpOw0KCQkJCXByZXZpZXdIb2xkZXIuaW5uZXJIVE1MID0gJyc7 +DQoJCQkJY29tbWVudEhvbGRlci52YWx1ZSA9ICcnOw0KCQkJCWpzZmxkaGxkLnJl +bW92ZUNsYXNzKCdoaWRkZW4nKTsNCgkJCQljb21tZW50SG9sZGVyLmZvY3VzKCk7 +DQoJCQl9DQoJCX0NCg0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0sDQoJDQoJc2Ny +b2xsVG9BbmNob3I6IGZ1bmN0aW9uKGFuY2hvcil7DQoJCXdpbmRvdy5sb2NhdGlv +bi5ocmVmID0gd2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoJyMnKVswXSArIGFu +Y2hvcjsgDQoJfSwNCgkNCglyZWxvYWRDb21tZW50czogZnVuY3Rpb24oKSB7DQoJ +CXZhciB1cmwgPSAnL2FqYXgvY29tbWVudHMvZ2V0X25ld19jb21tZW50cy8nOw0K +CQlpZihkb2N1bWVudC5mb3Jtc1snY29tbWVudF9mb3JtJ10pIHsNCgkJCXZhciB0 +aW1lZmllbGQgPSBkb2N1bWVudC5mb3Jtc1snY29tbWVudF9mb3JtJ10uZWxlbWVu +dHNbJ3RpbWVmaWVsZCddLnZhbHVlOw0KCQkJdmFyIGRhdGEgPSAndGFyZ2V0X2lk +PScrIHRoaXMudGFyZ2V0SWQgKycmdGFyZ2V0X3R5cGU9JyArIHRoaXMudGFyZ2V0 +VHlwZSArICcmdGltZWZpZWxkPScgKyB0aW1lZmllbGQ7DQoJCQlfdGhpcyA9IHRo +aXM7DQoJCQlhamF4UG9zdCgNCgkJCQkJdXJsLA0KCQkJCQlkYXRhLA0KCQkJCQl0 +aGlzLnJlbG9hZENvbW1lbnRzT25sb2FkLA0KCQkJCQlfdGhpcw0KCQkJCQkpOw0K +CQkJfQ0KCQl0aGlzLmZpcmVFdmVudCgndG06bG9hZGluZy1zdGFydGVkJyk7DQoJ +CXJldHVybiBmYWxzZTsNCgl9LA0KCQ0KCXJlbG9hZENvbW1lbnRzT25sb2FkOiBm +dW5jdGlvbihhamF4T2JqLCBfdGhpcykgew0KCQl2YXIgY29tbWVudHNIb2xkZXIg +PSAkKCdjb21tZW50cycpOw0KCQl2YXIgeG1sT2JqID0gYWpheE9iai5yZXNwb25z +ZVhNTDsNCgkJdmFyIHhtbE5vZGVzID0gX3RoaXMucGFyc2VYTUwoeG1sT2JqKTsN +CgkJY29tbWVudHNIb2xkZXIuZ2V0RWxlbWVudHMoJy5uZXctcmVwbHknKS5yZW1v +dmVDbGFzcygnbmV3LXJlcGx5Jyk7DQoJCWlmKHhtbE5vZGVzLm1lc3NhZ2UgJiYg +eG1sTm9kZXMubWVzc2FnZS5sZW5ndGggJiYgeG1sTm9kZXMuY29tbWVudCAmJiB4 +bWxOb2Rlcy5jb21tZW50Lmxlbmd0aCkgew0KCQkJZG9jdW1lbnQuZm9ybXNbJ2Nv +bW1lbnRfZm9ybSddLmVsZW1lbnRzWyd0aW1lZmllbGQnXS52YWx1ZSA9IHhtbE5v +ZGVzLnRpbWVmaWVsZFswXS5maXJzdENoaWxkLmRhdGE7DQoJCQlfdGhpcy5fYWRk +Q29tbWVudHMoeG1sTm9kZXMpOw0KCQl9DQoJCV90aGlzLmFkZE5ld0NvbW1lbnRz +VG9CYXIoKTsNCgkJY29tbWVudEZvcm0uZmlyZUV2ZW50KCd0bTpsb2FkaW5nLWZp +bmlzaGVkJyk7DQoJCV90aGlzLnVwZGF0ZUFsbENvbW1lbnRzQ291bnQoKTsNCgl9 +LA0KCQ0KCWFkZE5ld0NvbW1lbnRzVG9CYXI6IGZ1bmN0aW9uKCkgew0KCQl0aGlz +Lm5ld19yZXBsaWVzID0gJChkb2N1bWVudCkuZ2V0RWxlbWVudHMoJy5uZXctcmVw +bHknKTsNCgkJZm9yICh2YXIgaT10aGlzLm5ld19yZXBsaWVzLmxlbmd0aC0xO2k+ +PTA7aS0tKSB7DQoJCQlpZiAodGhpcy5uZXdfcmVwbGllc1tpXS5oYXNDbGFzcygn +bXktcmVwbHknKSkgew0KCQkJCXRoaXMubmV3X3JlcGxpZXMuc3BsaWNlKGksIDEp +Ow0KCQkJfSBlbHNlIGlmICh0aGlzLm5ld19yZXBsaWVzW2ldLmhhc0NsYXNzKCdz +ZWVuJykpIHsNCgkJCQl0aGlzLm5ld19yZXBsaWVzLnNwbGljZShpLCAxKTsNCgkJ +CX0NCgkJfQ0KCQl0aGlzLnVwZGF0ZU5ld0NvbW1lbnRzQ291bnQoKTsNCgl9LA0K +CQ0KCW5leHROZXdDb21tZW50OiBmdW5jdGlvbigpew0KCQlpZiAodGhpcy5uZXdf +cmVwbGllcyAmJiB0aGlzLm5ld19yZXBsaWVzLmxlbmd0aCkgew0KCQkJdmFyIGNv +bW1lbnQgPSB0aGlzLm5ld19yZXBsaWVzWzBdOw0KCQkJY29tbWVudC5hZGRDbGFz +cygnc2VlbicpOw0KCQkJdGhpcy5uZXdfcmVwbGllcy5zcGxpY2UoMCwgMSk7DQoJ +CQl0aGlzLmdvVG9Db21tZW50KGNvbW1lbnQpOw0KCQkJdGhpcy51cGRhdGVOZXdD +b21tZW50c0NvdW50KCk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0sDQoJDQoJ +dXBkYXRlQWxsQ29tbWVudHNDb3VudDogZnVuY3Rpb24oKSB7DQoJCWlmICgkKCdj +b21tZW50cycpLmdldEVsZW1lbnQoJy5jb21tZW50cy1oZWFkZXIgLmpzLWNvbW1l +bnRzLWNvdW50JykpDQoJCQkkKCdjb21tZW50cycpLmdldEVsZW1lbnQoJy5jb21t +ZW50cy1oZWFkZXIgLmpzLWNvbW1lbnRzLWNvdW50JykuaW5uZXJIVE1MID0gJCgn +Y29tbWVudHMnKS5nZXRFbGVtZW50cygnLm1zZy1tZXRhJykubGVuZ3RoLnRvU3Ry +aW5nKCk7DQoJfSwNCgkNCgl1cGRhdGVOZXdDb21tZW50c0NvdW50OiBmdW5jdGlv +bigpIHsNCgkJaWYgKHRoaXMubmV3X3JlcGxpZXMpIHsNCgkJCXZhciBjb3VudCA9 +IHRoaXMubmV3X3JlcGxpZXMubGVuZ3RoOw0KCQkJdGhpcy5maXJlRXZlbnQoJ3Rt +Om5ldy1jb21tZW50cy1jb3VudC1jaGFuZ2VkJywgdGhpcy5uZXdfcmVwbGllcy5s +ZW5ndGgpOw0KCQl9DQoJfSwNCgkNCglnb1RvQ29tbWVudDogZnVuY3Rpb24oY29t +bWVudCkgew0KCQl0aGlzLmZpcmVFdmVudCgidG06Z28tdG8tY29tbWVudCIsIGNv +bW1lbnQucGFyZW50Tm9kZSk7DQoJCXRoaXMuc2Nyb2xsZXIgPSAodGhpcy5zY3Jv +bGxlciB8fCBuZXcgRnguU2Nyb2xsKHdpbmRvdykpOw0KCQl0aGlzLnNjcm9sbGVy +LnRvRWxlbWVudChjb21tZW50KTsNCgkJcmV0dXJuIGZhbHNlOw0KCX0sDQoJDQoJ +cXVpY2tHb1RvQ29tbWVudDogZnVuY3Rpb24oY29tbWVudCkgew0KCQl0aGlzLmZp +cmVFdmVudCgidG06Z28tdG8tY29tbWVudCIsIGNvbW1lbnQucGFyZW50Tm9kZSk7 +DQoJCXdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIiMiICsgY29tbWVudC5wYXJlbnRO +b2RlLmlkOw0KCQlyZXR1cm4gZmFsc2U7DQoJfSwNCg0KCWdvVG9QYXJlbnRDb21t +ZW50OiBmdW5jdGlvbihsaW5rKSB7DQoJCXZhciBpZCA9IGxpbmsuaHJlZi5zdWJz +dHIobGluay5ocmVmLmluZGV4T2YoJyMnKSsxKTsNCgkJdmFyIGVsbSA9ICQoaWQp +Ow0KCQlsaW5rID0gJChsaW5rKTsNCgkJZWxtLmdldEVsZW1lbnQoJy5kb3duLXRv +LWNoaWxkJykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpOw0KCQllbG0uZ2V0RWxlbWVu +dCgnLmRvd24tdG8tY2hpbGQgYScpLmhyZWYgPSAnIycgKyBsaW5rLmdldFBhcmVu +dCgnLmNvbW1lbnRfaG9sZGVyJykuaWQ7DQoNCgkJdGhpcy5zY3JvbGxlciA9ICh0 +aGlzLnNjcm9sbGVyIHx8IG5ldyBGeC5TY3JvbGwod2luZG93KSk7DQoJCXRoaXMu +c2Nyb2xsZXIudG9FbGVtZW50KGVsbSk7DQoNCgkJcmV0dXJuIGZhbHNlOwkJDQoJ +fSwNCgkNCglnb1RvQ2hpbGRDb21tZW50OiBmdW5jdGlvbihsaW5rKSB7DQoJCXZh +ciBpZCA9IGxpbmsuaHJlZi5zdWJzdHIobGluay5ocmVmLmluZGV4T2YoJyMnKSsx +KTsNCgkJdmFyIGVsbSA9ICQoaWQpOw0KCQlsaW5rID0gJChsaW5rKTsNCgkJbGlu +ay5nZXRQYXJlbnQoJy5jb21tZW50X2hvbGRlcicpLmdldEVsZW1lbnQoJy5kb3du +LXRvLWNoaWxkJykuYWRkQ2xhc3MoJ2hpZGRlbicpOw0KDQoJCXRoaXMuc2Nyb2xs +ZXIgPSAodGhpcy5zY3JvbGxlciB8fCBuZXcgRnguU2Nyb2xsKHdpbmRvdykpOw0K +CQl0aGlzLnNjcm9sbGVyLnRvRWxlbWVudChlbG0pOw0KDQoJCXJldHVybiBmYWxz +ZTsJCQ0KCX0sDQoJCQ0KCWdvVG9JZDogZnVuY3Rpb24oaWQpIHsNCgkJdGhpcy5z +Y3JvbGxlciA9ICh0aGlzLnNjcm9sbGVyIHx8IG5ldyBGeC5TY3JvbGwod2luZG93 +KSk7DQoJCXRoaXMuc2Nyb2xsZXIudG9FbGVtZW50KCQoaWQpKTsNCgkJcmV0dXJu +IGZhbHNlOw0KCX0sDQoJDQoJc29ydEFycmF5OiBmdW5jdGlvbihhLCBiKSB7DQoJ +ICBpZiAoYS5vZmZzZXRUb3AgPCBiLm9mZnNldFRvcCkNCgkgICAgcmV0dXJuIC0x +Ow0KCSAgaWYgKGEub2Zmc2V0VG9wID4gYi5vZmZzZXRUb3ApDQoJICAgIHJldHVy +biAxOw0KCSAgcmV0dXJuIDA7CQkNCgl9LA0KCQ0KDQoJc2hvd0Vycm9yOiBmdW5j +dGlvbihlcnJvck1zZyl7DQoJCWlmICghZXJyb3JNc2cpIHsNCgkJCWVycm9yTXNn +ID0gRkFULnZvdGluZ3NfdW5rbm93bl9lcnJvcjsNCgkJfQ0KCQlmdXR1X2FsZXJ0 +KEZBVC52b3RpbmdzX2hlYWRlciwgZXJyb3JNc2csIHRydWUsICdlcnJvcicpOw0K +CX0NCgkNCn0pOw0KDQp2YXIgY29tbWVudEZvcm0gPSBuZXcgY29tbWVudEZvcm1D +bGFzcygpOw0KdG0uaW5pdC5hZGQoZnVuY3Rpb24oKXsNCgl2YXIgY19mb3JtX25v +ZGUgPSAkKCdjb21tZW50X2Zvcm0nKTsNCglpZiAoY19mb3JtX25vZGUpIHsNCgkJ +Y19mb3JtX25vZGUuaW5wdXRfcHJldmlldyA9IGNfZm9ybV9ub2RlLmdldEVsZW1l +bnQoJ2lucHV0LnByZXZpZXcnKTsNCgkJaWYgKGNfZm9ybV9ub2RlLmlucHV0X3By +ZXZpZXcpew0KCQkJDQoJCQljX2Zvcm1fbm9kZS5pbnB1dF9wcmV2aWV3LmFkZEV2 +ZW50KCdjbGljaycsZnVuY3Rpb24oKXsNCgkJCQljb21tZW50Rm9ybS5zZW5kQ29t +bWVudChjX2Zvcm1fbm9kZSwgJ3ByZXZpZXcnLCBjX2Zvcm1fbm9kZS5pbnB1dF9w +cmV2aWV3KQ0KCQkJfSk7DQoJCX0NCgkJDQoJCXZhciBjX2Zvcm1fc3VibWl0ID0g +ZnVuY3Rpb24oKXsNCgkJCWlmIChjX2Zvcm1fbm9kZS5sYXN0X3RleHQgPT0gY19m +b3JtX25vZGVbJ2NvbW1lbnRbbWVzc2FnZV0nXS52YWx1ZSl7DQoJCQkJDQoJCQl9 +IGVsc2Ugew0KCQkJCWNvbW1lbnRGb3JtLnNlbmRDb21tZW50KGNfZm9ybV9ub2Rl +LCBjb21tZW50X3R5cGUsIGNfZm9ybV9ub2RlKTsgDQoJCQkJDQoJCQl9DQoJCX0N +CgkJDQoJCXZhciBjb21tZW50X3R5cGUgPSBjX2Zvcm1fbm9kZS5nZXRFbGVtZW50 +KCcjY29tbWVudF90eXBlJykudGl0bGU7DQoJCWNfZm9ybV9ub2RlLmFkZEV2ZW50 +cyh7DQoJCQknc3VibWl0JzpmdW5jdGlvbigpew0KCQkJCWNfZm9ybV9zdWJtaXQo +KTsNCgkJCQlyZXR1cm4gZmFsc2U7CQ0KCQkJfSwNCgkJCSdrZXl1cCc6ZnVuY3Rp +b24oZSl7DQoJCQkJaWYoZS5jb250cm9sICYmIChlLmtleSA9PSAnZW50ZXInKSkg +ew0KCQkJCQljX2Zvcm1fc3VibWl0KCk7DQoJCQkJfQ0KCQkJfQ0KCQkJDQoJCX0p +DQoJCQ0KCQkNCgkJDQoJfQ0KfSkNCg== + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=voting.js +Content-Type: application/x-javascript; charset=utf-8; name=voting.js +Content-Location: http://habrahabr.ru/js/1307631427/voting.js +Content-Transfer-Encoding: Base64 + +LyoNCjxkaXYgaWQ9InVzZXJ7eyAkaWQgfX0iIGNsYXNzPSJ2b3RlX2hvbGRlciAo +bG9naW5faG9sZGVyKSI+DQoJCTxkaXYgY2xhc3M9InZvdGluZyAocG9zaXRpdmUg +fHwgbmVnYXRpdmUpIChtaW5lIHx8IHZvdGVkKSAocGx1cyB8fCBtaW51cykiPg0K +CQkJPHNwYW4gY2xhc3M9InZvdGVfdGl0bGUiPtCa0LDRgNC80LAg0L/QvtC70YzQ +t9C+0LLQsNGC0LXQu9GPPC9zcGFuPg0KCQkJPHNwYW4gY2xhc3M9InZvdGVfcG9p +bnRzIj4NCgkJCQk8ZW0+e3sgJHNjb3JlIH19PC9lbT4NCgkJCQk8c3Ryb25nPnt7 +ICRjb3VudCB9fSAgL3N0cm9uZz4NCgkJCTwvc3Bhbj4NCgkJCTxkaXYgY2xhc3M9 +InZvdGVfYnV0dG9ucyI+DQoJCQkJPGEgb25jbGljaz0icmV0dXJuIFZvdGVyLnZv +dGUoZXZlbnQsIHRoaXMsICd1c2VyIHx8IGNvbW1lbnQgfHwgcG9zdCcsICdwbHVz +Jyk7IiBjbGFzcz0idm90ZV9wbHVzIiBocmVmPSIiPjwvYT4NCgkJCQk8YSBvbmNs +aWNrPSJyZXR1cm4gVm90ZXIudm90ZShldmVudCwgdGhpcywgJ3VzZXIgfHwgY29t +bWVudCB8fCBwb3N0JywgJ21pbnVzJyk7IiBjbGFzcz0idm90ZV9taW51cyIgaHJl +Zj0iIj48L2E+DQoJCQk8L2Rpdj4NCgkJPC9kaXY+DQoJPC9kaXY+DQo8L2Rpdj4N +CiovDQoNCg0KDQpWb3RlciA9IHsNCgl2b3RlVHlwZTogew0KCQkJcG9zdDogew0K +CQkJCQl1cmw6ICh3aW5kb3cuYmFzZVVSTCB8fCAnJykgKyAnL2FqYXgvdm90aW5n +LycsDQoJCQkJCWREYXRhOiB7IC8vIGRlZmF1bHQgZGF0YQ0KCQkJCQkJYWN0aW9u +OiAndm90ZScsDQoJCQkJCQltb2RlOiAncG9zdHMnLA0KCQkJCQkJdGFyZ2V0X25h +bWU6ICdwb3N0JywNCgkJCQkJCWRibFZvdGU6IGZhbHNlIC8vIGRvdWJsZSB2b3Rp +bmcgaXMgYWxsb3dkZWQNCgkJCQkJfQ0KCQkJfSwNCg0KCQkJcG9zdF9jb21tZW50 +OiB7DQoJCQkJCXVybDogKHdpbmRvdy5iYXNlVVJMIHx8ICcnKSArICcvYWpheC92 +b3RpbmcvJywNCgkJCQkJZERhdGE6IHsNCgkJCQkJCWFjdGlvbjogJ3ZvdGUnLA0K +CQkJCQkJdGFyZ2V0X25hbWU6ICdwb3N0X2NvbW1lbnQnLA0KCQkJCQkJZGJsVm90 +ZTogZmFsc2UNCgkJCQkJfQ0KCQkJfSwNCg0KCQkJdXNlcjogew0KCQkJCQl1cmw6 +ICh3aW5kb3cuYmFzZVVSTCB8fCAnJykgKyAnL2FqYXgvdm90aW5nLycsDQoJCQkJ +CWREYXRhOiB7DQoJCQkJCQlhY3Rpb246ICd2b3RlJywNCgkJCQkJCW1vZGU6ICd1 +c2VycycsDQoJCQkJCQl0YXJnZXRfbmFtZTogJ3VzZXInLA0KCQkJCQkJZGJsVm90 +ZTogdHJ1ZQ0KCQkJCQl9DQoJCQl9LA0KDQoJCQljb21wYW55OiB7DQoJCQkJCXVy +bDogKHdpbmRvdy5iYXNlVVJMIHx8ICcnKSArICcvYWpheC92b3RpbmcvJywNCgkJ +CQkJZERhdGE6IHsNCgkJCQkJCWFjdGlvbjogJ3ZvdGUnLA0KCQkJCQkJbW9kZTog +J2NvbXBhbnknLA0KCQkJCQkJdGFyZ2V0X25hbWU6ICdjb21wYW55JywNCgkJCQkJ +CWRibFZvdGU6IHRydWUNCgkJCQkJfQ0KCQkJfSwNCg0KCQkJYmxvZzogew0KCQkJ +CQl1cmw6ICh3aW5kb3cuYmFzZVVSTCB8fCAnJykgKyAnL2FqYXgvdm90aW5nLycs +DQoJCQkJCWREYXRhOiB7DQoJCQkJCQlhY3Rpb246ICd2b3RlJywNCgkJCQkJCW1v +ZGU6ICdibG9nJywNCgkJCQkJCXRhcmdldF9uYW1lOiAnYmxvZycsDQoJCQkJCQlk +YmxWb3RlOiB0cnVlDQoJCQkJCX0NCgkJCX0sDQoNCgkJCWNvbXBhbnlfY29tbWVu +dDogew0KCQkJCQl1cmw6ICh3aW5kb3cuYmFzZVVSTCB8fCAnJykgKyAnL2FqYXgv +dm90aW5nLycsDQoJCQkJCWREYXRhOiB7DQoJCQkJCQlhY3Rpb246ICd2b3RlJywN +CgkJCQkJCXRhcmdldF9uYW1lOiAnY29tcGFueV9jb21tZW50JywNCgkJCQkJCWRi +bFZvdGU6IHRydWUNCgkJCQkJfQ0KCQkJfSwNCg0KCQkJcWFfcXVlc3Rpb246IHsN +CgkJCQkJdXJsOiAod2luZG93LmJhc2VVUkwgfHwgJycpICsgJy9hamF4L3ZvdGlu +Zy8nLA0KCQkJCQlkRGF0YTogeyAvLyBkZWZhdWx0IGRhdGENCgkJCQkJCWFjdGlv +bjogJ3ZvdGUnLA0KCQkJCQkJbW9kZTogJ3Bvc3RzJywNCgkJCQkJCXRhcmdldF9u +YW1lOiAncWFfcXVlc3Rpb24nLA0KCQkJCQkJZGJsVm90ZTogZmFsc2UgLy8gZG91 +YmxlIHZvdGluZyBpcyBhbGxvd2RlZA0KCQkJCQl9DQoJCQl9LA0KDQoJCQlxYV9h +bnN3ZXI6IHsNCgkJCQkJdXJsOiAod2luZG93LmJhc2VVUkwgfHwgJycpICsgJy9h +amF4L3ZvdGluZy8nLA0KCQkJCQlkRGF0YTogeyAvLyBkZWZhdWx0IGRhdGENCgkJ +CQkJCWFjdGlvbjogJ3ZvdGUnLA0KCQkJCQkJdGFyZ2V0X25hbWU6ICdxYV9hbnN3 +ZXInLA0KCQkJCQkJZGJsVm90ZTogZmFsc2UgLy8gZG91YmxlIHZvdGluZyBpcyBh +bGxvd2RlZA0KCQkJCQl9DQoJCQl9DQoJfSwNCg0KDQoJdm90ZU1hcms6IHsNCgkJ +CXBsdXM6IHsNCgkJCQkJc3RyaW5nOiAncGx1cycsDQoJCQkJCW51bWJlcjogMQ0K +CQkJfSwNCg0KCQkJbWludXM6IHsNCgkJCQkJc3RyaW5nOiAnbWludXMnLA0KCQkJ +CQludW1iZXI6IC0xDQoJCQl9LA0KDQoJCQlyZXN1bHRzOiB7DQoJCQkJCXN0cmlu +ZzogJ3Jlc3VsdHMnLA0KCQkJCQludW1iZXI6IDANCgkJCX0NCgl9LA0KDQoJaHRt +bE5vZGVOYW1lczogew0KCQkJc2NvcmU6ICdzcGFuJywNCgkJCWNvdW50OiAnZW0n +LA0KCQkJbWFyazogJ3N0cm9uZycNCgl9LA0KDQoJeG1sTm9kZU5hbWVzOiB7DQoJ +CQllcnJvcjogJ2Vycm9yJywNCgkJCXNjb3JlOiAnc2NvcmUnLA0KCQkJY291bnQ6 +ICdjb3VudCcsDQoJCQltYXJrOiAnbWFyaycsDQoJCQljaGFyZ2Vfc3RyaW5nOiAn +Y2hhcmdlX3N0cmluZycNCgl9LA0KDQoJY2xhc3NOYW1lczogew0KCQkJdm90ZUhv +bGRlcjogJ3ZvdGVfaG9sZGVyJywNCgkJCXZvdGluZ0Jsb2NrOiAndm90aW5nJywN +CgkJCXZvdGVQb2ludHM6ICdtYXJrJywNCgkJCXZvdGVDb3VudDogJ3RvdGFsJywN +CgkJCWxvZ2luSG9sZGVyOiAnbG9naW5faG9sZGVyJywNCg0KCQkJaW51c2U6ICdp +bnVzZScsIC8vIGRlcHJpY2F0ZWQgKG5vdCB1c2VkKQ0KCQkJc2hvd0Nob2ljZTog +J3Nob3dfY2hvaWNlJywNCg0KCQkJaXNNaW5lOiAnbWluZScsDQoJCQlpc0V4cGly +ZWQ6ICdleHBpcmVkJywNCgkJCW5vQWNjZXNzOiAnbm9fYXV0aCcsDQoJCQkvL25v +Vm90aW5nOiAnbm9fdm90aW5nJywNCg0KCQkJaXNQb3NpdGl2ZTogJ3Bvc2l0aXZl +JywNCgkJCWlzTmVnYXRpdmU6ICduZWdhdGl2ZScsDQoNCgkJCWlzVm90ZWQ6ICd2 +b3RlZCcsDQoJCQlpc1ZvdGVkUGx1czogJ3ZvdGVkX3BsdXMnLA0KCQkJaXNWb3Rl +ZE1pbnVzOiAndm90ZWRfbWludXMnLA0KDQoJCQlpc0xvYWRpbmc6ICdpc0xvYWRp +bmcnDQoJfSwNCg0KCWNob2ljZTogew0KCQkJc2hvdzogZnVuY3Rpb24obGluayl7 +DQoJCQkJCXZhciBsaW5rR2xvYmFsUGFyZW50ID0gJChsaW5rKS5nZXRQYXJlbnQo +Jy4nICsgVm90ZXIuY2xhc3NOYW1lcy52b3RlSG9sZGVyKTsNCgkJCQkJLy9hbGVy +dChsaW5rR2xvYmFsUGFyZW50KTsgcmV0dXJuOw0KCQkJCQl2YXIgbGlua0xvY2Fs +UGFyZW50ID0gbGluazsNCgkJCQkJaWYgKCEkKGxpbmtMb2NhbFBhcmVudCkuaGFz +Q2xhc3MoVm90ZXIuY2xhc3NOYW1lcy5pc01pbmUpICYmIC8vIGlmIG5vdCBtaW5l +DQoJCQkJCQkhJChsaW5rTG9jYWxQYXJlbnQpLmhhc0NsYXNzKFZvdGVyLmNsYXNz +TmFtZXMuaXNWb3RlZCkgJiYgLy8gaWYgbm90IHZvdGVkDQoJCQkJCQkhJChsaW5r +TG9jYWxQYXJlbnQpLmhhc0NsYXNzKFZvdGVyLmNsYXNzTmFtZXMuaXNFeHBpcmVk +KSkgeyAvLyDQstGA0LXQvNGPINCz0L7Qu9C+0YHQvtCy0LDQvdC40Y8g0L/RgNC+ +0YjQu9C+DQoJCQkJCQkkKGxpbmtHbG9iYWxQYXJlbnQpLmFkZENsYXNzKFZvdGVy +LmNsYXNzTmFtZXMuc2hvd0Nob2ljZSk7DQoJCQkJCX0NCgkJCX0sDQoNCgkJCWhp +ZGU6IGZ1bmN0aW9uKGV2ZW50LCBsaW5rKXsNCgkJCQkJaWYoIWV2ZW50KSBldmVu +dCA9IHdpbmRvdy5ldmVudDsNCgkJCQkJdmFyIGxpbmtDaGlsZHJlbiA9IGxpbmsu +Z2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKTsNCgkJCQkJdmFyIGxpbmtHbG9iYWxQ +YXJlbnQgPSAkKGxpbmspLmdldFBhcmVudCgnLicgKyBWb3Rlci5jbGFzc05hbWVz +LnZvdGVIb2xkZXIpOw0KDQoJCQkJCS8vINC10YHQu9C4INGN0LvQtdC80LXQvdGC +LCDQvdCwINC60L7RgtC+0YDRi9C5INC/0LXRgNC10LTQstC40LPQsNC10Lwg0LzR +i9GI0YwsINC70LXQttC40YIg0LLQvdGD0YLRgNC4INGH0L7QudGBINCx0LvQvtC6 +0LAsINCy0YvRhdC+0LTQuNC8DQoJCQkJCWlmIChldmVudC5yZWxhdGVkVGFyZ2V0 +KSB7DQoJCQkJCQl2YXIgd2hlcmUgPSBldmVudC5yZWxhdGVkVGFyZ2V0Ow0KCQkJ +CQkJaWYgKHdoZXJlID09IGxpbmspIHJldHVybjsNCgkJCQkJCWlmICh3aGVyZS5u +b2RlVHlwZSA9PSAzKSB3aGVyZSA9IHdoZXJlLnBhcmVudE5vZGU7DQoJCQkJCQlm +b3IodmFyIGk9MDsgaTxsaW5rQ2hpbGRyZW4ubGVuZ3RoOyBpKyspew0KCQkJCQkJ +CWlmICh3aGVyZSA9PSBsaW5rQ2hpbGRyZW5baV0pIHsNCgkJCQkJCQkJcmV0dXJu +Ow0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfSBlbHNlIGlmIChldmVudC50b0Vs +ZW1lbnQgJiYgbGluay5jb250YWlucyhldmVudC50b0VsZW1lbnQpKSB7DQoJCQkJ +CQlyZXR1cm47DQoJCQkJCX0NCg0KCQkJCQkkKGxpbmtHbG9iYWxQYXJlbnQpLnJl +bW92ZUNsYXNzKFZvdGVyLmNsYXNzTmFtZXMuc2hvd0Nob2ljZSk7DQoJCQl9DQoJ +fSwNCg0KCXZvdGU6IGZ1bmN0aW9uKGV2ZW50LCBsaW5rLCB2b3RlVHlwZSwgdm90 +ZU1hcmspew0KCQkJaWYoIShsaW5rICYmIHZvdGVUeXBlICYmIFZvdGVyLnZvdGVU +eXBlW3ZvdGVUeXBlXSAmJiB2b3RlTWFyaykpIHJldHVybiBmYWxzZTsgLy8gaWYg +cGFyYW1zIGFyZSBpbmNvbXBsZXRlZA0KDQoNCg0KCQkJdmFyIGxpbmtHbG9iYWxQ +YXJlbnQgPSAkKGxpbmspLmdldFBhcmVudCgnLicgKyBWb3Rlci5jbGFzc05hbWVz +LnZvdGVIb2xkZXIpOw0KCQkJdmFyIGxpbmtMb2NhbFBhcmVudCA9ICQobGluayku +Z2V0UGFyZW50KCcuJyArIFZvdGVyLmNsYXNzTmFtZXMudm90aW5nQmxvY2spOw0K +DQoJCQlpZiAoIWxpbmtHbG9iYWxQYXJlbnQgfHwgIWxpbmtMb2NhbFBhcmVudCB8 +fCAvLyBnbG9iYWwgb3IgbG9jYWwgcGFyZW50IHdhcyBub3QgZm91bmQNCgkJCQkk +KGxpbmtMb2NhbFBhcmVudCkuaGFzQ2xhc3MoVm90ZXIuY2xhc3NOYW1lcy5pc1Zv +dGVkKSAmJiAhVm90ZXIudm90ZVR5cGVbdm90ZVR5cGVdLmREYXRhLmRibFZvdGUg +fHwgLy8gd2FzIHZvdGVkIGFscmVhZHkgYW5kIGRvdWJsZSB2b3RlIGlzIG5vdCBh +bGxvd2RlZA0KCQkJCSQobGlua0xvY2FsUGFyZW50KS5oYXNDbGFzcyhWb3Rlci5j +bGFzc05hbWVzLmlzVm90ZWQpICYmIChWb3Rlci52b3RlVHlwZVt2b3RlVHlwZV0u +ZERhdGEuZGJsVm90ZSAmJiAkKGxpbmtMb2NhbFBhcmVudCkuaGFzQ2xhc3Modm90 +ZU1hcmspKSB8fCAvLyB3YXMgdm90ZWQgYWxyZWFkeSBhbmQgZG91YmxlIHZvdGUg +aXMgYWxsb3dkZWQgYW5kDQoJCQkJJChsaW5rTG9jYWxQYXJlbnQpLmhhc0NsYXNz +KFZvdGVyLmNsYXNzTmFtZXMuaXNMb2FkaW5nKSkgeyAvLyBpcyBsb2FkaW5nDQoJ +CQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0KCQkJaWYgKCQobGlua0xvY2FsUGFyZW50 +KS5oYXNDbGFzcyhWb3Rlci5jbGFzc05hbWVzLmlzTWluZSkpIHsNCgkJCQlmdXR1 +X2FsZXJ0KEZBVC52b3RpbmdzX2hlYWRlciwgRkFULnZvdGluZ3NfZXJyb3Jfc2Vs +ZiwgZmFsc2UsICdlcnJvcicpOw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0NCgkJ +CWlmICgkKGxpbmtMb2NhbFBhcmVudCkuaGFzQ2xhc3MoVm90ZXIuY2xhc3NOYW1l +cy5pc0V4cGlyZWQpKSB7DQoJCQkJZnV0dV9hbGVydChGQVQudm90aW5nc19oZWFk +ZXIsIEZBVC52b3RpbmdzX2Vycm9yX2lzX2V4cGlyZWQsIGZhbHNlLCAnZXJyb3In +KTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoNCg0KDQoJCQlpZiAoJChsaW5r +TG9jYWxQYXJlbnQpLmhhc0NsYXNzKFZvdGVyLmNsYXNzTmFtZXMubm9BY2Nlc3Mp +KSB7DQoJCQkJZnV0dV9hbGVydChGQVQudm90aW5nc19oZWFkZXIsIEZBVC52b3Rp +bmdzX2Vycm9yX25vX2FjY2VzcywgZmFsc2UsICdlcnJvcicpOw0KCQkJCXJldHVy +biBmYWxzZTsNCgkJCX0NCgkJCWlmICgkKGxpbmtMb2NhbFBhcmVudCkuaGFzQ2xh +c3MoVm90ZXIuY2xhc3NOYW1lcy5sb2dpbkhvbGRlcikgJiYgbG9naW5Gb3JtICYm +IGxvZ2luRm9ybS5zaG93KSB7IC8vIHRyeSB0byB2b3RlIGFzIGd1ZXN0DQoJCQkJ +aWYoIWxvZ2luRm9ybS5odG1sLmJsb2NrKXsgLy8gaWYgdGhlcmUgaXMgbm8gYW55 +IGh0bWwgb2YgbG9naW5fZm9ybSBvbiB0aGUgcGFnZSAodXNlciBpcyBub3QgYSBn +dWVzdCkNCgkJCQkJZnV0dV9hbGVydChGQVQudm90aW5nc19oZWFkZXIsIEZBVC52 +b3RpbmdzX2Vycm9yX3Byb2hpYml0ZWQsIHRydWUsICdlcnJvcicpOw0KCQkJCX0g +ZWxzZSB7DQoJCQkJCWxvZ2luRm9ybS5zaG93KGV2ZW50LCBsaW5rKTsNCgkJCQl9 +DQoNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoNCg0KDQoJCQlWb3Rlci5zZXJ2 +ZXIuc2VuZERhdGEobGlua0dsb2JhbFBhcmVudCwgbGlua0xvY2FsUGFyZW50LCB2 +b3RlVHlwZSwgdm90ZU1hcmspOw0KCQkJcmV0dXJuIGZhbHNlOw0KCX0sDQoNCglz +ZXJ2ZXI6IHsNCgkJCXNlbmREYXRhOiBmdW5jdGlvbihsaW5rR2xvYmFsUGFyZW50 +LCBsaW5rTG9jYWxQYXJlbnQsIHZvdGVUeXBlLCB2b3RlTWFyayl7DQoJCQkJCXZh +ciB1cmwgPSAgVm90ZXIudm90ZVR5cGVbdm90ZVR5cGVdLnVybDsNCg0KCQkJCQl2 +YXIgYWN0aW9uID0gVm90ZXIudm90ZVR5cGVbdm90ZVR5cGVdLmREYXRhLmFjdGlv +bjsNCgkJCQkJdmFyIHRhcmdldF9uYW1lID0gVm90ZXIudm90ZVR5cGVbdm90ZVR5 +cGVdLmREYXRhLnRhcmdldF9uYW1lOw0KCQkJCQl2YXIgbWFyayA9IFZvdGVyLnZv +dGVNYXJrW3ZvdGVNYXJrXSA/IFZvdGVyLnZvdGVNYXJrW3ZvdGVNYXJrXS5udW1i +ZXIgOiAnJzsNCgkJCQkJdmFyIHRhcmdldF9pZCA9IGxpbmtHbG9iYWxQYXJlbnQu +Z2V0QXR0cmlidXRlKCdpZCcpID8gbGlua0dsb2JhbFBhcmVudC5nZXRBdHRyaWJ1 +dGUoJ2lkJykubWF0Y2goL1xkKy9nKVswXSA6ICcnOw0KDQoJCQkJCXZhciBkYXRh +ID0gJ2FjdGlvbj0nICsgYWN0aW9uICsgJyZ0YXJnZXRfbmFtZT0nICsgdGFyZ2V0 +X25hbWUgKyAnJnRhcmdldF9pZD0nICsgdGFyZ2V0X2lkICsgJyZtYXJrPScgKyBt +YXJrOw0KCQkJCQl2YXIgcGFyYW1zID0gew0KCQkJCQkJbGlua0dsb2JhbFBhcmVu +dDogbGlua0dsb2JhbFBhcmVudCwNCgkJCQkJCWxpbmtMb2NhbFBhcmVudDogbGlu +a0xvY2FsUGFyZW50LA0KCQkJCQkJbWFyayA6IG1hcmssDQoJCQkJCQl2b3RlVHlw +ZSA6IHZvdGVUeXBlDQoJCQkJCX0NCgkJCQkJJChsaW5rTG9jYWxQYXJlbnQpLmFk +ZENsYXNzKFZvdGVyLmNsYXNzTmFtZXMuaXNMb2FkaW5nKTsNCgkJCQkJYWpheExv +YWRQb3N0KHVybCwgZGF0YSwgVm90ZXIuc2VydmVyLnNlbmREYXRhT25sb2FkLCB3 +aW5kb3csIHBhcmFtcyk7DQoJCQl9LA0KDQoJCQlzZW5kRGF0YU9ubG9hZDogZnVu +Y3Rpb24oYWpheE9iaiwgcGFyYW1zKXsNCgkJCQkJLyoNCgkJCQkJCXBhcmFtcyA9 +IHsNCgkJCQkJCQlsaW5rR2xvYmFsUGFyZW50DQoJCQkJCQkJbGlua0xvY2FsUGFy +ZW50DQoJCQkJCQkJbWFyaw0KCQkJCQkJCXZvdGVUeXBlDQoJCQkJCQl9DQoJCQkJ +CSovDQoJCQkJCWlmKGFqYXhPYmogJiYgYWpheE9iai5yZXNwb25zZVhNTCl7DQoJ +CQkJCQl2YXIgeG1sID0gYWpheE9iai5yZXNwb25zZVhNTDsNCgkJCQkJCXZhciBl +cnJvcnMgPSB4bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoVm90ZXIueG1sTm9kZU5h +bWVzLmVycm9yKTsNCgkJCQkJCWlmKGVycm9ycy5sZW5ndGggJiYgZXJyb3JzWzBd +ICYmIGVycm9yc1swXS5maXJzdENoaWxkLm5vZGVUeXBlID09IDMpIHsNCgkJCQkJ +CQlWb3Rlci5zaG93RXJyb3IoZXJyb3JzWzBdLmZpcnN0Q2hpbGQuZGF0YSk7DQoJ +CQkJCQkJJChwYXJhbXMubGlua0xvY2FsUGFyZW50KS5yZW1vdmVDbGFzcyhWb3Rl +ci5jbGFzc05hbWVzLmlzTG9hZGluZyk7DQoJCQkJCQkJcmV0dXJuOw0KCQkJCQkJ +fSBlbHNlIHsNCgkJCQkJCQl2YXIgc2NvcmVzID0geG1sLmdldEVsZW1lbnRzQnlU +YWdOYW1lKFZvdGVyLnhtbE5vZGVOYW1lcy5zY29yZSk7DQoJCQkJCQkJaWYoc2Nv +cmVzLmxlbmd0aCAmJiBzY29yZXNbMF0gJiYgc2NvcmVzWzBdLmZpcnN0Q2hpbGQu +bm9kZVR5cGUgPT0gMykgew0KCQkJCQkJCQlwYXJhbXMuc2NvcmUgPSBzY29yZXNb +MF0uZmlyc3RDaGlsZC5kYXRhOw0KCQkJCQkJCX0NCg0KCQkJCQkJCXZhciBjb3Vu +dCA9IHhtbC5nZXRFbGVtZW50c0J5VGFnTmFtZShWb3Rlci54bWxOb2RlTmFtZXMu +Y291bnQpOw0KCQkJCQkJCWlmKGNvdW50Lmxlbmd0aCAmJiBjb3VudFswXSAmJiBj +b3VudFswXS5maXJzdENoaWxkLm5vZGVUeXBlID09IDMpIHsNCgkJCQkJCQkJcGFy +YW1zLmNvdW50ID0gY291bnRbMF0uZmlyc3RDaGlsZC5kYXRhOw0KCQkJCQkJCX0N +Cg0KCQkJCQkJCXZhciBtYXJrID0geG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKFZv +dGVyLnhtbE5vZGVOYW1lcy5tYXJrKTsNCgkJCQkJCQlpZihtYXJrLmxlbmd0aCAm +JiBtYXJrWzBdICYmIG1hcmtbMF0uZmlyc3RDaGlsZC5ub2RlVHlwZSA9PSAzKSB7 +DQoJCQkJCQkJCXBhcmFtcy5tYXJrID0gbWFya1swXS5maXJzdENoaWxkLmRhdGE7 +DQoJCQkJCQkJfQ0KDQoJCQkJCQkJdmFyIGNoYXJnZV9zdHJpbmcgPSB4bWwuZ2V0 +RWxlbWVudHNCeVRhZ05hbWUoVm90ZXIueG1sTm9kZU5hbWVzLmNoYXJnZV9zdHJp +bmcpOw0KCQkJCQkJCWlmKGNoYXJnZV9zdHJpbmcubGVuZ3RoICYmIGNoYXJnZV9z +dHJpbmdbMF0pIHsNCgkJCQkJCQkJcGFyYW1zLmNoYXJnZV9zdHJpbmcgPSBjaGFy +Z2Vfc3RyaW5nWzBdLmZpcnN0Q2hpbGQuZGF0YTsNCgkJCQkJCQl9DQoNCgkJCQkJ +CQkkKHBhcmFtcy5saW5rTG9jYWxQYXJlbnQpLnJlbW92ZUNsYXNzKFZvdGVyLmNs +YXNzTmFtZXMuaXNMb2FkaW5nKTsNCgkJCQkJCQlWb3Rlci5zZXRTY29yZShwYXJh +bXMpOw0KCQkJCQkJfQ0KDQoNCgkJCQkJfQ0KDQoJCQl9DQoJfSwNCg0KCXNldFNj +b3JlOiBmdW5jdGlvbihwYXJhbXMpew0KCQkJLyoNCgkJCQlwYXJhbXN7DQoJCQkJ +CWxpbmtHbG9iYWxQYXJlbnQNCgkJCQkJbGlua0xvY2FsUGFyZW50DQoJCQkJCW1h +cmsNCgkJCQkJc2NvcmUNCgkJCQkJY291bnQNCgkJCQl9DQoJCQkqLw0KCQkJDQoJ +CQkkKHBhcmFtcy5saW5rTG9jYWxQYXJlbnQpLmFkZENsYXNzKFZvdGVyLmNsYXNz +TmFtZXMuaXNWb3RlZCk7DQoNCgkJCSQocGFyYW1zLmxpbmtMb2NhbFBhcmVudCku +cmVtb3ZlQ2xhc3MoVm90ZXIuY2xhc3NOYW1lcy5pc1ZvdGVkUGx1cyk7DQoJCQkk +KHBhcmFtcy5saW5rTG9jYWxQYXJlbnQpLnJlbW92ZUNsYXNzKFZvdGVyLmNsYXNz +TmFtZXMuaXNWb3RlZE1pbnVzKTsNCg0KCQkJJChwYXJhbXMubGlua0xvY2FsUGFy +ZW50KS5yZW1vdmVDbGFzcyhWb3Rlci5jbGFzc05hbWVzLmlzUG9zaXRpdmUpOw0K +CQkJJChwYXJhbXMubGlua0xvY2FsUGFyZW50KS5yZW1vdmVDbGFzcyhWb3Rlci5j +bGFzc05hbWVzLmlzTmVnYXRpdmUpOw0KDQoJCQkvL3JlbW92ZUNsYXNzKHBhcmFt +cy5saW5rR2xvYmFsUGFyZW50LCBWb3Rlci5jbGFzc05hbWVzLmludXNlKTsNCg0K +CQkJaWYocGFyYW1zLnNjb3JlICYmIHBhcmFtcy5zY29yZS5jaGFyQXQoMCkgPT0g +J+KAkycpIHsNCgkJCQkkKHBhcmFtcy5saW5rTG9jYWxQYXJlbnQpLmFkZENsYXNz +KFZvdGVyLmNsYXNzTmFtZXMuaXNOZWdhdGl2ZSk7DQoJCQl9IGVsc2UgaWYgKHBh +cmFtcy5zY29yZSAmJiBwYXJhbXMuc2NvcmUuY2hhckF0KDApICE9ICfigJMnKSB7 +DQoJCQkJJChwYXJhbXMubGlua0xvY2FsUGFyZW50KS5hZGRDbGFzcyhWb3Rlci5j +bGFzc05hbWVzLmlzUG9zaXRpdmUpOw0KCQkJfQ0KDQoJCQlpZihwYXJhbXMubWFy +ayAmJiBwYXJhbXMubWFyayA9PSAnKycpew0KCQkJCSQocGFyYW1zLmxpbmtMb2Nh +bFBhcmVudCkuYWRkQ2xhc3MoVm90ZXIuY2xhc3NOYW1lcy5pc1ZvdGVkUGx1cyk7 +DQoJCQl9IGVsc2UgaWYocGFyYW1zLm1hcmsgJiYgcGFyYW1zLm1hcmsgPT0gJ+KA +kycpIHsNCgkJCQkkKHBhcmFtcy5saW5rTG9jYWxQYXJlbnQpLmFkZENsYXNzKFZv +dGVyLmNsYXNzTmFtZXMuaXNWb3RlZE1pbnVzKTsNCgkJCX0NCg0KCQkJdmFyIHVz +ZXJjaGFyZ2UgPSAkKCd1c2VyY2hhcmdlJyk7DQoJCQl1c2VyY2hhcmdlICYmICh1 +c2VyY2hhcmdlLmlubmVySFRNTCA9IHBhcmFtcy5jaGFyZ2Vfc3RyaW5nKTsNCg0K +CQkJdHJ5IHsNCgkJCQl2YXIgdm90ZVBvaW50cyA9ICQocGFyYW1zLmxpbmtMb2Nh +bFBhcmVudCkuZ2V0RWxlbWVudCgnLicgKyBWb3Rlci5jbGFzc05hbWVzLnZvdGVQ +b2ludHMpOw0KDQoJCQkJdmFyIHNjb3JlQm94ID0gdm90ZVBvaW50cy5nZXRFbGVt +ZW50c0J5VGFnTmFtZShWb3Rlci5odG1sTm9kZU5hbWVzLnNjb3JlKVswXTsNCgkJ +CQl2YXIgbWFya0JveCA9IHZvdGVQb2ludHMuZ2V0RWxlbWVudHNCeVRhZ05hbWUo +Vm90ZXIuaHRtbE5vZGVOYW1lcy5tYXJrKVswXTsNCg0KCQkJCXNjb3JlQm94Lmlu +bmVySFRNTCA9IHBhcmFtcy5zY29yZTsNCgkJCQlzY29yZUJveC5zZXRBdHRyaWJ1 +dGUoJ3RpdGxlJywgcGFyYW1zLmNvdW50KTsNCgkJCQltYXJrQm94LmlubmVySFRN +TCA9ICcgKCcgKyBwYXJhbXMubWFyayArICcpJzsNCg0KLyoJCQkJdm90ZUNvdW50 +ID0gJChwYXJhbXMubGlua0xvY2FsUGFyZW50KS5nZXRFbGVtZW50cygnLicgKyBW +b3Rlci5jbGFzc05hbWVzLnZvdGVDb3VudClbMF07DQoJCQkJdmFyIGNvdW50Qm94 +ID0gdm90ZUNvdW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFZvdGVyLmh0bWxOb2Rl +TmFtZXMuY291bnQpWzBdOw0KCQkJCWNvdW50Qm94LmlubmVySFRNTCA9IHBhcmFt +cy5jb3VudDsqLw0KDQoJCQl9IGNhdGNoKGUpew0KCQkJCS8vYWxlcnQoZSk7DQoJ +CQl9DQoJfSwNCg0KCXNob3dFcnJvcjogZnVuY3Rpb24oZXJyb3JNc2cpew0KCQlp +ZiAoIWVycm9yTXNnKSB7DQoJCQllcnJvck1zZyA9IEZBVC52b3RpbmdzX3Vua25v +d25fZXJyb3I7DQoJCX0NCgkJZnV0dV9hbGVydChGQVQudm90aW5nc19oZWFkZXIs +IGVycm9yTXNnLCBmYWxzZSwgJ2Vycm9yJyk7DQoJfQ0KfTsNCnRtLmluaXQuYWRk +KGZ1bmN0aW9uKCl7DQoJdmFyIGNvbW1lbnRzQ29udGFpbmVyID0gJCgiY29tbWVu +dHMiKTsNCglpZiAoY29tbWVudHNDb250YWluZXIpIHsNCgkJdmFyIGluZm9wYW5l +bCA9ICQoY29tbWVudHNDb250YWluZXIucGFyZW50Tm9kZSkuZ2V0RWxlbWVudCgi +LmVudHJ5LWluZm8iKTsNCgkJaWYgKGluZm9wYW5lbCkgew0KCQkJdmFyIHBvc3RJ +ZCA9IHBhcnNlSW50KGluZm9wYW5lbC5pZC5yZXBsYWNlKCJpbmZvcGFuZWwiLCIi +KSksDQoJCQloYXNWb3RlTWFya05vZGUsc2NvcmVOb2RlOw0KDQoNCg0KCQkJdmFy +IHZvdGUgPSBmdW5jdGlvbihvKXsNCgkJCSAgDQoJCQkJCQ0KCQkJCWlmICh0ZW1w +LnVzZXIpIHsNCg0KCQkJCQlpZiAoby5pc19hbnN3ZXIgPT0gdHJ1ZSkNCgkJCQkJ +ew0KDQoJCQkJICAgICAgICAobmV3IFJlcXVlc3Qoew0KCQkJCSAgICAgICAgICAg +ICd1cmwnOiAnL2FqYXgvdm90aW5nLycsDQoJCQkJICAgICAgICAgICAgJ2RhdGEn +OiB7DQoJCQkJICAgICAgICAgICAgICAgICdhY3Rpb24nOiAndm90ZScsDQoJCQkJ +ICAgICAgICAgICAgICAgICdtYXJrJzogby50LA0KCQkJCSAgICAgICAgICAgICAg +ICAndGFyZ2V0X2lkJzogby50aWQsDQoJCQkJCQkJCSd0YXJnZXRfbmFtZScgOiAi +cWFfYW5zd2VyIg0KCQkJCSAgICAgICAgICAgIH0sDQoJCQkJCQkJIm9uUmVxdWVz +dCI6ZnVuY3Rpb24oKXsNCgkJCQkJCQkJZ2V0Tm9kZXNGb3JNYXJraW5nKG8udm90 +ZUJ1dHRvbikNCgkJCQkJCQl9LA0KCQkJCQkJCSJvbkNvbXBsZXRlIjogb25Db21w +bGV0ZQ0KCQkJCSAgICAgICAgfSkpLnNlbmQoKTsNCg0KCQkJCSAgICB9DQoJCQkg +ICAgICAgZWxzZQ0KCQkJICAgICAgIHsNCg0KCQkJICAgICAgIAkgKG5ldyBSZXF1 +ZXN0KHsNCgkJCQkgICAgICAgICAgICAndXJsJzogJy9hamF4L3ZvdGluZy8nLA0K +CQkJCSAgICAgICAgICAgICdkYXRhJzogew0KCQkJCSAgICAgICAgICAgICAgICAn +YWN0aW9uJzogJ3ZvdGUnLA0KCQkJCSAgICAgICAgICAgICAgICAnbWFyayc6IG8u +dCwNCgkJCQkgICAgICAgICAgICAgICAgJ3RhcmdldF9pZCc6IG8udGlkLA0KCQkJ +CQkJCQkndGFyZ2V0X25hbWUnIDogInBvc3RfY29tbWVudCIsDQoJCQkJCQkJCSdz +aWduZWRfaWQnIDogby5wb3N0aWQNCgkJCQkgICAgICAgICAgICB9LA0KCQkJCQkJ +CSJvblJlcXVlc3QiOmZ1bmN0aW9uKCl7DQoJCQkJCQkJCWdldE5vZGVzRm9yTWFy +a2luZyhvLnZvdGVCdXR0b24pDQoJCQkJCQkJfSwNCgkJCQkJCQkib25Db21wbGV0 +ZSI6IG9uQ29tcGxldGUNCgkJCQkgICAgICAgIH0pKS5zZW5kKCk7DQoNCgkJCSAg +ICAgICB9DQoNCgkJCQl9DQoJCQl9DQoJCQl2YXIgZ2V0Tm9kZXNGb3JNYXJraW5n +ID0gZnVuY3Rpb24odm90ZUJ1dHRvbikgew0KCQkJCWhhc1ZvdGVNYXJrTm9kZSA9 +ICQodm90ZUJ1dHRvbikuZ2V0UGFyZW50KCJ1bC52b3RlIik7DQoJCQkJc2NvcmVO +b2RlID0gaGFzVm90ZU1hcmtOb2RlLmdldEVsZW1lbnQoIi5tYXJrIHNwYW4iKTsN +CgkJCX0NCgkJCXZhciBvbkNvbXBsZXRlID0gZnVuY3Rpb24ocmVzcG9uc2VIVE1M +LCByZXNwb25zZVhNTCl7DQoNCgkJCQl2YXIgZXJyb3JzID0gcmVzcG9uc2VYTUwu +Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ2Vycm9yJyk7DQoJCQkJaWYgKGVycm9ycy5s +ZW5ndGgpIHsNCgkJCQkJdmFyIGVycm9ydGV4dCA9ICIiOw0KCQkJCQlmb3IgKHZh +ciBpPTAgLCBsID0gZXJyb3JzLmxlbmd0aDsgaSA8IGw7IGkrKykgew0KCQkJCQkJ +aWYgKGVycm9yc1tpXS50YWdOYW1lID09ICJlcnJvciIpew0KCQkJCQkJCWVycm9y +dGV4dCArPSBlcnJvcnNbaV0uZmlyc3RDaGlsZC5kYXRhICsgIjwvYnI+IjsNCgkJ +CQkJCX0NCgkJCQkJfTsNCgkJCQkJZnV0dV9hbGVydCgi0J/RgNC+0LjRgdGI0LXR +gdGC0LLQuNC1INCy0L4g0LLRgNC10LzRjyDQstGL0LHQvtGA0L7QsiIsIGVycm9y +dGV4dCwgZmFsc2UsICdlcnJvcicpOw0KCQkJCX0gZWxzZXsNCgkJCQkJdmFyIHNj +b3JlID0gcmVzcG9uc2VYTUwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3Njb3JlJylb +MF0uZmlyc3RDaGlsZC5kYXRhLA0KCQkJCQlzY29yZU51bSA9IHBhcnNlSW50KHNj +b3JlLnJlcGxhY2UoIuKAkyIsIi0iKSksDQoJCQkJCXZvdGVUeXBlID0gcmVzcG9u +c2VYTUwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ21hcmsnKVswXS5maXJzdENoaWxk +LmRhdGEgKyAiIjsNCgkJCQkJJCgndXNlcmNoYXJnZScpLmlubmVySFRNTCA9IHJl +c3BvbnNlWE1MLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjaGFyZ2Vfc3RyaW5nJylb +MF0uZmlyc3RDaGlsZC5kYXRhDQoJCQkJCXNjb3JlTm9kZS5zZXQoInRleHQiLHNj +b3JlKTsNCgkJCQkJaGFzVm90ZU1hcmtOb2RlLmFkZENsYXNzKCJ2b3RlZCIpLnJl +bW92ZUNsYXNzKCJ2b3RlZF9taW51cyIpLnJlbW92ZUNsYXNzKCJ2b3RlZF9wbHVz +IikucmVtb3ZlQ2xhc3MoInBvc2l0aXZlIikucmVtb3ZlQ2xhc3MoIm5lZ2F0aXZl +Iik7DQoJCQkJCQ0KCQkJCQlpZiAodm90ZVR5cGUgPT0gIuKAkyIpIHsNCgkJCQkJ +CWhhc1ZvdGVNYXJrTm9kZS5hZGRDbGFzcygidm90ZWRfbWludXMiKTsNCgkJCQkJ +fSBlbHNlIGlmICh2b3RlVHlwZSA9PSAiKyIpew0KCQkJCQkJaGFzVm90ZU1hcmtO +b2RlLmFkZENsYXNzKCJ2b3RlZF9wbHVzIik7DQoJCQkJCX0NCgkJCQkJaWYgKHNj +b3JlTnVtID4gMCkgew0KCQkJCQkJaGFzVm90ZU1hcmtOb2RlLmFkZENsYXNzKCJw +b3NpdGl2ZSIpDQoJCQkJCX0gZWxzZSBpZiAoc2NvcmVOdW0gPCAwKSB7DQoJCQkJ +CQloYXNWb3RlTWFya05vZGUuYWRkQ2xhc3MoIm5lZ2F0aXZlIikNCgkJCQkJfQ0K +DQoJCQkJfQ0KDQoJCQl9DQoJCQljb21tZW50c0NvbnRhaW5lci5hZGRFdmVudCgi +Y2xpY2siLGZ1bmN0aW9uKGUpew0KCQkJCXZhciBub2RlID0gZS50YXJnZXQsDQoJ +CQkJbm9kZUNsYXNzTmFtZSA9IG5vZGUuY2xhc3NOYW1lOw0KCQkJCS8vQ2hhbmdl +ZCBhdCAyMC8wNy8yMDEwDQoJCQkJaWYgKG5vZGVDbGFzc05hbWUuaW5kZXhPZigi +dm90ZS1mb3ItYW5zd2VyIikgIT0gLTEpIHsNCgkJCQkJLy9BbnN3ZXJzIHZvdGlu +Zw0KCQkJCQl2YXIgY29tbWVudElkID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlKCJy +ZXYiKS5yZXBsYWNlKCJ2b3Rlci1mb3ItYW5zd2VyOiIsIiIpLCB2b3RlVHlwZTsN +CgkJCQkJaWYgKG5vZGVDbGFzc05hbWUuaW5kZXhPZigidm90ZV9taW51cyIpICE9 +IC0xKSB7DQoJCQkJCQl2b3RlVHlwZSA9IC0xOw0KCQkJCQl9IGVsc2UgaWYgKG5v +ZGVDbGFzc05hbWUuaW5kZXhPZigidm90ZV9wbHVzIikgIT0gLTEpICB7DQoJCQkJ +CQl2b3RlVHlwZSA9IDE7DQoJCQkJCX0gZWxzZSB7DQoJCQkJCQlyZXR1cm4gZmFs +c2U7DQoJCQkJCX0NCg0KCQkJCQl2b3RlKHsNCgkJCQkJCSJ0aWQiOmNvbW1lbnRJ +ZCwNCgkJCQkJCSJ0Ijp2b3RlVHlwZSwNCgkJCQkJCSJwb3N0aWQiOnBvc3RJZCwN +CgkJCQkJCSJ2b3RlQnV0dG9uIjplLnRhcmdldCwNCgkJCQkJCSJpc19hbnN3ZXIi +OnRydWUNCgkJCQkJfSk7DQoJCQkJCXJldHVybiBmYWxzZQ0KCQkJCX0NCgkJCQlp +ZiAobm9kZUNsYXNzTmFtZS5pbmRleE9mKCJ2b3RlLWZvci1jb21tZW50IikgIT0g +LTEpIHsNCgkJCQkJdmFyIGNvbW1lbnRJZCA9IGUudGFyZ2V0LmdldEF0dHJpYnV0 +ZSgicmV2IikucmVwbGFjZSgidm90ZXItZm9yLWNvbW1lbnQ6IiwiIiksDQoJCQkJ +CXZvdGVUeXBlOw0KCQkJCQlpZiAobm9kZUNsYXNzTmFtZS5pbmRleE9mKCJ2b3Rl +X21pbnVzIikgIT0gLTEpIHsNCgkJCQkJCXZvdGVUeXBlID0gLTE7DQoJCQkJCX0g +ZWxzZSBpZiAobm9kZUNsYXNzTmFtZS5pbmRleE9mKCJ2b3RlX3BsdXMiKSAhPSAt +MSkgIHsNCgkJCQkJCXZvdGVUeXBlID0gMTsNCgkJCQkJfSBlbHNlIHsNCgkJCQkJ +CXJldHVybiBmYWxzZTsNCgkJCQkJfQ0KDQoJCQkJCXZvdGUoew0KCQkJCQkJInRp +ZCI6Y29tbWVudElkLA0KCQkJCQkJInQiOnZvdGVUeXBlLA0KCQkJCQkJInBvc3Rp +ZCI6cG9zdElkLA0KCQkJCQkJInZvdGVCdXR0b24iOmUudGFyZ2V0DQoJCQkJCX0p +Ow0KCQkJCQlyZXR1cm4gZmFsc2UNCgkJCQl9IGVsc2UgaWYgKG5vZGVDbGFzc05h +bWUuaW5kZXhPZignanMtc2luZ2xlLXRyZWUnKSAhPSAtMSkgew0KCQkJCQl2YXIg +bGFzdF9jb21tZW50X2xpID0gbm9kZS5wYXJlbnROb2RlLnBhcmVudE5vZGUucGFy +ZW50Tm9kZS5wYXJlbnROb2RlLA0KCQkJCQkJcGFyZW50X2xpOw0KCQkJCQlsYXN0 +X2NvbW1lbnRfbGkuc2luZ2xlX3RocmVhZF9ub2RlcyA9IFtdOw0KCQkJCQlmb3Ig +KHZhciBsaSA9IGxhc3RfY29tbWVudF9saS5wYXJlbnROb2RlLnBhcmVudE5vZGU7 +IGxpLm5vZGVOYW1lID09ICdMSSc7IGxpID0gbGkucGFyZW50Tm9kZS5wYXJlbnRO +b2RlKSB7DQoJCQkJCQkkKGxpKS5hZGRDbGFzcygnc2luZ2xlLXRyZWUtbm9kZScp +LnJlbW92ZUNsYXNzKCdzaW5nbGUtdHJlZS1ub2RlLWxhc3QnKTsNCgkJCQkJCWxh +c3RfY29tbWVudF9saS5zaW5nbGVfdGhyZWFkX25vZGVzLnB1c2gobGkpDQoJCQkJ +CQlsYXN0X2NvbW1lbnRfbGkuZmlyc3RfY29tbWVudF9saSA9IGxpOw0KCQkJCQl9 +Ow0KCQkJCQlpZiAobGFzdF9jb21tZW50X2xpLmZpcnN0X2NvbW1lbnRfbGkpIHsN +CgkJCQkJCWxhc3RfY29tbWVudF9saS5hZGRDbGFzcygnc2luZ2xlLXRyZWUtbm9k +ZS1sYXN0Jyk7DQoJCQkJCQlzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7DQoJCQkJCQkJ +bGFzdF9jb21tZW50X2xpLmZpcnN0X2NvbW1lbnRfbGkuc2Nyb2xsVG9NZSgpOw0K +CQkJCQkJfSwzMDApDQoJCQkJCQlzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7DQoJCQkJ +CQkJbGFzdF9jb21tZW50X2xpLmZpcnN0X2NvbW1lbnRfbGkucmVtb3ZlQ2xhc3Mo +J3NpbmdsZS10cmVlLW5vZGUnKS5hZGRDbGFzcygnc2luZ2xlLXRocmVhZGluZycp +Ow0KCQkJCQkJfSw3MDApDQoNCg0KDQoJCQkJCX0gZWxzZSB7DQoJCQkJCQlmb3Ig +KHZhciBpPTAsIGwgPSBsYXN0X2NvbW1lbnRfbGkuc2luZ2xlX3RocmVhZF9ub2Rl +cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsNCgkJCQkJCQlsYXN0X2NvbW1lbnRfbGku +c2luZ2xlX3RocmVhZF9ub2Rlc1tpXS5yZW1vdmVDbGFzcygnc2luZ2xlLXRyZWUt +bm9kZScpOw0KCQkJCQkJfTsNCgkJCQkJfTsNCgkJCQkJcmV0dXJuIGZhbHNlOw0K +CQkJCX0gZWxzZSBpZihub2RlQ2xhc3NOYW1lLmluZGV4T2YoJ2pzLW11bHRpcGxh +eS10cmVlJykgIT0gLTEpIHsNCgkJCQkJdmFyIGxhc3RfY29tbWVudF9saSA9IG5v +ZGUucGFyZW50Tm9kZS5wYXJlbnROb2RlLnBhcmVudE5vZGUucGFyZW50Tm9kZTsN +CgkJCQkJaWYgKGxhc3RfY29tbWVudF9saS5maXJzdF9jb21tZW50X2xpKSB7DQoN +CgkJCQkJCWxhc3RfY29tbWVudF9saS5maXJzdF9jb21tZW50X2xpLnJlbW92ZUNs +YXNzKCdzaW5nbGUtdGhyZWFkaW5nJyk7DQoNCgkJCQkJCWZvciAodmFyIGk9MCwg +bCA9IGxhc3RfY29tbWVudF9saS5zaW5nbGVfdGhyZWFkX25vZGVzLmxlbmd0aDsg +aSA8IGw7IGkrKykgew0KCQkJCQkJCWxhc3RfY29tbWVudF9saS5zaW5nbGVfdGhy +ZWFkX25vZGVzW2ldLnJlbW92ZUNsYXNzKCdzaW5nbGUtdHJlZS1ub2RlJyk7DQoJ +CQkJCQl9Ow0KDQoJCQkJCQkkKGxhc3RfY29tbWVudF9saSkuc2Nyb2xsVG9NZSgp +Ow0KCQkJCQkJc2V0VGltZW91dChmdW5jdGlvbigpew0KCQkJCQkJCWxhc3RfY29t +bWVudF9saS5yZW1vdmVDbGFzcygnc2luZ2xlLXRyZWUtbm9kZS1sYXN0Jyk7DQoJ +CQkJCQl9LDgwMCkNCgkJCQkJfQ0KDQoJCQkJfQ0KCQkJfSkNCgkJfQ0KDQoJfQ0K +fSk= + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=swfobject.js +Content-Type: application/x-javascript; charset=utf-8; name=swfobject.js +Content-Location: http://habrahabr.ru/js/1307631427/swfobject.js +Content-Transfer-Encoding: Base64 + +LyoqCiAqIFNXRk9iamVjdCB2MS40LjQ6IEZsYXNoIFBsYXllciBkZXRlY3Rpb24g +YW5kIGVtYmVkIC0gaHR0cDovL2Jsb2cuZGVjb25jZXB0LmNvbS9zd2ZvYmplY3Qv +CiAqCiAqIFNXRk9iamVjdCBpcyAoYykgMjAwNiBHZW9mZiBTdGVhcm5zIGFuZCBp +cyByZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2U6CiAqIGh0dHA6Ly93d3cu +b3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwCiAqCiAqICoq +U1dGT2JqZWN0IGlzIHRoZSBTV0YgZW1iZWQgc2NyaXB0IGZvcm1lcmx5IGtub3du +IGFzIEZsYXNoT2JqZWN0LiBUaGUgbmFtZSB3YXMgY2hhbmdlZCBmb3IKICogICBs +ZWdhbCByZWFzb25zLgogKi8KaWYodHlwZW9mIGRlY29uY2VwdD09InVuZGVmaW5l +ZCIpe3ZhciBkZWNvbmNlcHQ9bmV3IE9iamVjdCgpO30KaWYodHlwZW9mIGRlY29u +Y2VwdC51dGlsPT0idW5kZWZpbmVkIil7ZGVjb25jZXB0LnV0aWw9bmV3IE9iamVj +dCgpO30KaWYodHlwZW9mIGRlY29uY2VwdC5TV0ZPYmplY3RVdGlsPT0idW5kZWZp +bmVkIil7ZGVjb25jZXB0LlNXRk9iamVjdFV0aWw9bmV3IE9iamVjdCgpO30KZGVj +b25jZXB0LlNXRk9iamVjdD1mdW5jdGlvbihfMSxpZCx3LGgsXzUsYyxfNyxfOCxf +OSxfYSxfYil7aWYoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKXtyZXR1cm47fQp0 +aGlzLkRFVEVDVF9LRVk9X2I/X2I6ImRldGVjdGZsYXNoIjsKdGhpcy5za2lwRGV0 +ZWN0PWRlY29uY2VwdC51dGlsLmdldFJlcXVlc3RQYXJhbWV0ZXIodGhpcy5ERVRF +Q1RfS0VZKTsKdGhpcy5wYXJhbXM9bmV3IE9iamVjdCgpOwp0aGlzLnZhcmlhYmxl +cz1uZXcgT2JqZWN0KCk7CnRoaXMuYXR0cmlidXRlcz1uZXcgQXJyYXkoKTsKaWYo +XzEpe3RoaXMuc2V0QXR0cmlidXRlKCJzd2YiLF8xKTt9CmlmKGlkKXt0aGlzLnNl +dEF0dHJpYnV0ZSgiaWQiLGlkKTt9CmlmKHcpe3RoaXMuc2V0QXR0cmlidXRlKCJ3 +aWR0aCIsdyk7fQppZihoKXt0aGlzLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixoKTt9 +CmlmKF81KXt0aGlzLnNldEF0dHJpYnV0ZSgidmVyc2lvbiIsbmV3IGRlY29uY2Vw +dC5QbGF5ZXJWZXJzaW9uKF81LnRvU3RyaW5nKCkuc3BsaXQoIi4iKSkpO30KdGhp +cy5pbnN0YWxsZWRWZXI9ZGVjb25jZXB0LlNXRk9iamVjdFV0aWwuZ2V0UGxheWVy +VmVyc2lvbigpOwppZihjKXt0aGlzLmFkZFBhcmFtKCJiZ2NvbG9yIixjKTt9CnZh +ciBxPV84P184OiJoaWdoIjsKdGhpcy5hZGRQYXJhbSgicXVhbGl0eSIscSk7CnRo +aXMuc2V0QXR0cmlidXRlKCJ1c2VFeHByZXNzSW5zdGFsbCIsXzcpOwp0aGlzLnNl +dEF0dHJpYnV0ZSgiZG9FeHByZXNzSW5zdGFsbCIsZmFsc2UpOwp2YXIgX2Q9KF85 +KT9fOTp3aW5kb3cubG9jYXRpb247CnRoaXMuc2V0QXR0cmlidXRlKCJ4aVJlZGly +ZWN0VXJsIixfZCk7CnRoaXMuc2V0QXR0cmlidXRlKCJyZWRpcmVjdFVybCIsIiIp +OwppZihfYSl7dGhpcy5zZXRBdHRyaWJ1dGUoInJlZGlyZWN0VXJsIixfYSk7fX07 +CmRlY29uY2VwdC5TV0ZPYmplY3QucHJvdG90eXBlPXtzZXRBdHRyaWJ1dGU6ZnVu +Y3Rpb24oX2UsX2Ypewp0aGlzLmF0dHJpYnV0ZXNbX2VdPV9mOwp9LGdldEF0dHJp +YnV0ZTpmdW5jdGlvbihfMTApewpyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW18xMF07 +Cn0sYWRkUGFyYW06ZnVuY3Rpb24oXzExLF8xMil7CnRoaXMucGFyYW1zW18xMV09 +XzEyOwp9LGdldFBhcmFtczpmdW5jdGlvbigpewpyZXR1cm4gdGhpcy5wYXJhbXM7 +Cn0sYWRkVmFyaWFibGU6ZnVuY3Rpb24oXzEzLF8xNCl7CnRoaXMudmFyaWFibGVz +W18xM109XzE0Owp9LGdldFZhcmlhYmxlOmZ1bmN0aW9uKF8xNSl7CnJldHVybiB0 +aGlzLnZhcmlhYmxlc1tfMTVdOwp9LGdldFZhcmlhYmxlczpmdW5jdGlvbigpewpy +ZXR1cm4gdGhpcy52YXJpYWJsZXM7Cn0sZ2V0VmFyaWFibGVQYWlyczpmdW5jdGlv +bigpewp2YXIgXzE2PW5ldyBBcnJheSgpOwp2YXIga2V5Owp2YXIgXzE4PXRoaXMu +Z2V0VmFyaWFibGVzKCk7CmZvcihrZXkgaW4gXzE4KXtfMTYucHVzaChrZXkrIj0i +K18xOFtrZXldKTt9CnJldHVybiBfMTY7fSxnZXRTV0ZIVE1MOmZ1bmN0aW9uKCl7 +dmFyIF8xOT0iIjsKaWYobmF2aWdhdG9yLnBsdWdpbnMmJm5hdmlnYXRvci5taW1l +VHlwZXMmJm5hdmlnYXRvci5taW1lVHlwZXMubGVuZ3RoKXsKaWYodGhpcy5nZXRB +dHRyaWJ1dGUoImRvRXhwcmVzc0luc3RhbGwiKSl7CnRoaXMuYWRkVmFyaWFibGUo +Ik1NcGxheWVyVHlwZSIsIlBsdWdJbiIpO30KXzE5PSI8ZW1iZWQgdHlwZT1cImFw +cGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoXCIgc3JjPVwiIit0aGlzLmdldEF0 +dHJpYnV0ZSgic3dmIikrIlwiIHdpZHRoPVwiIit0aGlzLmdldEF0dHJpYnV0ZSgi +d2lkdGgiKSsiXCIgaGVpZ2h0PVwiIit0aGlzLmdldEF0dHJpYnV0ZSgiaGVpZ2h0 +IikrIlwiIjsKXzE5Kz0iIGlkPVwiIit0aGlzLmdldEF0dHJpYnV0ZSgiaWQiKSsi +XCIgbmFtZT1cIiIrdGhpcy5nZXRBdHRyaWJ1dGUoImlkIikrIlwiICI7CnZhciBf +MWE9dGhpcy5nZXRQYXJhbXMoKTsKZm9yKHZhciBrZXkgaW4gXzFhKXtfMTkrPVtr +ZXldKyI9XCIiK18xYVtrZXldKyJcIiAiO30KdmFyIF8xYz10aGlzLmdldFZhcmlh +YmxlUGFpcnMoKS5qb2luKCImIik7CmlmKF8xYy5sZW5ndGg+MCl7XzE5Kz0iZmxh +c2h2YXJzPVwiIitfMWMrIlwiIjt9XzE5Kz0iLz4iOwp9ZWxzZXtpZih0aGlzLmdl +dEF0dHJpYnV0ZSgiZG9FeHByZXNzSW5zdGFsbCIpKXt0aGlzLmFkZFZhcmlhYmxl +KCJNTXBsYXllclR5cGUiLCJBY3RpdmVYIik7fQpfMTk9IjxvYmplY3QgaWQ9XCIi +K3RoaXMuZ2V0QXR0cmlidXRlKCJpZCIpKyJcIiBjbGFzc2lkPVwiY2xzaWQ6RDI3 +Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwXCIgd2lkdGg9XCIiK3Ro +aXMuZ2V0QXR0cmlidXRlKCJ3aWR0aCIpKyJcIiBoZWlnaHQ9XCIiK3RoaXMuZ2V0 +QXR0cmlidXRlKCJoZWlnaHQiKSsiXCI+IjsKXzE5Kz0iPHBhcmFtIG5hbWU9XCJt +b3ZpZVwiIHZhbHVlPVwiIit0aGlzLmdldEF0dHJpYnV0ZSgic3dmIikrIlwiIC8+ +IjsKdmFyIF8xZD10aGlzLmdldFBhcmFtcygpOwpmb3IodmFyIGtleSBpbiBfMWQp +e18xOSs9IjxwYXJhbSBuYW1lPVwiIitrZXkrIlwiIHZhbHVlPVwiIitfMWRba2V5 +XSsiXCIgLz4iO30KdmFyIF8xZj10aGlzLmdldFZhcmlhYmxlUGFpcnMoKS5qb2lu +KCImIik7CmlmKF8xZi5sZW5ndGg+MCl7XzE5Kz0iPHBhcmFtIG5hbWU9XCJmbGFz +aHZhcnNcIiB2YWx1ZT1cIiIrXzFmKyJcIiAvPiI7fV8xOSs9Ijwvb2JqZWN0PiI7 +fQpyZXR1cm4gXzE5Owp9LHdyaXRlOmZ1bmN0aW9uKF8yMCl7CmlmKHRoaXMuZ2V0 +QXR0cmlidXRlKCJ1c2VFeHByZXNzSW5zdGFsbCIpKXsKdmFyIF8yMT1uZXcgZGVj +b25jZXB0LlBsYXllclZlcnNpb24oWzYsMCw2NV0pOwppZih0aGlzLmluc3RhbGxl +ZFZlci52ZXJzaW9uSXNWYWxpZChfMjEpJiYhdGhpcy5pbnN0YWxsZWRWZXIudmVy +c2lvbklzVmFsaWQodGhpcy5nZXRBdHRyaWJ1dGUoInZlcnNpb24iKSkpewp0aGlz +LnNldEF0dHJpYnV0ZSgiZG9FeHByZXNzSW5zdGFsbCIsdHJ1ZSk7CnRoaXMuYWRk +VmFyaWFibGUoIk1NcmVkaXJlY3RVUkwiLGVzY2FwZSh0aGlzLmdldEF0dHJpYnV0 +ZSgieGlSZWRpcmVjdFVybCIpKSk7CmRvY3VtZW50LnRpdGxlPWRvY3VtZW50LnRp +dGxlLnNsaWNlKDAsNDcpKyIgLSBGbGFzaCBQbGF5ZXIgSW5zdGFsbGF0aW9uIjsK +dGhpcy5hZGRWYXJpYWJsZSgiTU1kb2N0aXRsZSIsZG9jdW1lbnQudGl0bGUpO319 +CmlmKHRoaXMuc2tpcERldGVjdHx8dGhpcy5nZXRBdHRyaWJ1dGUoImRvRXhwcmVz +c0luc3RhbGwiKXx8dGhpcy5pbnN0YWxsZWRWZXIudmVyc2lvbklzVmFsaWQodGhp +cy5nZXRBdHRyaWJ1dGUoInZlcnNpb24iKSkpewp2YXIgbj0odHlwZW9mIF8yMD09 +InN0cmluZyIpP2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKF8yMCk6XzIwOwpuLmlu +bmVySFRNTD10aGlzLmdldFNXRkhUTUwoKTtyZXR1cm4gdHJ1ZTsKfWVsc2V7aWYo +dGhpcy5nZXRBdHRyaWJ1dGUoInJlZGlyZWN0VXJsIikhPSIiKXtkb2N1bWVudC5s +b2NhdGlvbi5yZXBsYWNlKHRoaXMuZ2V0QXR0cmlidXRlKCJyZWRpcmVjdFVybCIp +KTt9fQpyZXR1cm4gZmFsc2U7fX07CmRlY29uY2VwdC5TV0ZPYmplY3RVdGlsLmdl +dFBsYXllclZlcnNpb249ZnVuY3Rpb24oKXsKdmFyIF8yMz1uZXcgZGVjb25jZXB0 +LlBsYXllclZlcnNpb24oWzAsMCwwXSk7CmlmKG5hdmlnYXRvci5wbHVnaW5zJiZu +YXZpZ2F0b3IubWltZVR5cGVzLmxlbmd0aCl7CnZhciB4PW5hdmlnYXRvci5wbHVn +aW5zWyJTaG9ja3dhdmUgRmxhc2giXTsKaWYoeCYmeC5kZXNjcmlwdGlvbil7XzIz +PW5ldyBkZWNvbmNlcHQuUGxheWVyVmVyc2lvbih4LmRlc2NyaXB0aW9uLnJlcGxh +Y2UoLyhbYS16QS1aXXxccykrLywiIikucmVwbGFjZSgvKFxzK3J8XHMrYlswLTld +KykvLCIuIikuc3BsaXQoIi4iKSk7fQp9ZWxzZXt0cnl7dmFyIGF4bz1uZXcgQWN0 +aXZlWE9iamVjdCgiU2hvY2t3YXZlRmxhc2guU2hvY2t3YXZlRmxhc2guNyIpO30K +Y2F0Y2goZSl7dHJ5e3ZhciBheG89bmV3IEFjdGl2ZVhPYmplY3QoIlNob2Nrd2F2 +ZUZsYXNoLlNob2Nrd2F2ZUZsYXNoLjYiKTsKXzIzPW5ldyBkZWNvbmNlcHQuUGxh +eWVyVmVyc2lvbihbNiwwLDIxXSk7YXhvLkFsbG93U2NyaXB0QWNjZXNzPSJhbHdh +eXMiO30KY2F0Y2goZSl7aWYoXzIzLm1ham9yPT02KXtyZXR1cm4gXzIzO319dHJ5 +e2F4bz1uZXcgQWN0aXZlWE9iamVjdCgiU2hvY2t3YXZlRmxhc2guU2hvY2t3YXZl +Rmxhc2giKTt9CmNhdGNoKGUpe319aWYoYXhvIT1udWxsKXtfMjM9bmV3IGRlY29u +Y2VwdC5QbGF5ZXJWZXJzaW9uKGF4by5HZXRWYXJpYWJsZSgiJHZlcnNpb24iKS5z +cGxpdCgiICIpWzFdLnNwbGl0KCIsIikpO319CnJldHVybiBfMjM7fTsKZGVjb25j +ZXB0LlBsYXllclZlcnNpb249ZnVuY3Rpb24oXzI3KXsKdGhpcy5tYWpvcj1fMjdb +MF0hPW51bGw/cGFyc2VJbnQoXzI3WzBdKTowOwp0aGlzLm1pbm9yPV8yN1sxXSE9 +bnVsbD9wYXJzZUludChfMjdbMV0pOjA7CnRoaXMucmV2PV8yN1syXSE9bnVsbD9w +YXJzZUludChfMjdbMl0pOjA7Cn07CmRlY29uY2VwdC5QbGF5ZXJWZXJzaW9uLnBy +b3RvdHlwZS52ZXJzaW9uSXNWYWxpZD1mdW5jdGlvbihmdil7CmlmKHRoaXMubWFq +b3I8ZnYubWFqb3Ipe3JldHVybiBmYWxzZTt9CmlmKHRoaXMubWFqb3I+ZnYubWFq +b3Ipe3JldHVybiB0cnVlO30KaWYodGhpcy5taW5vcjxmdi5taW5vcil7cmV0dXJu +IGZhbHNlO30KaWYodGhpcy5taW5vcj5mdi5taW5vcil7cmV0dXJuIHRydWU7fQpp +Zih0aGlzLnJldjxmdi5yZXYpewpyZXR1cm4gZmFsc2U7Cn1yZXR1cm4gdHJ1ZTt9 +OwpkZWNvbmNlcHQudXRpbD17Z2V0UmVxdWVzdFBhcmFtZXRlcjpmdW5jdGlvbihf +Mjkpewp2YXIgcT1kb2N1bWVudC5sb2NhdGlvbi5zZWFyY2h8fGRvY3VtZW50Lmxv +Y2F0aW9uLmhhc2g7CmlmKHEpe3ZhciBfMmI9cS5zdWJzdHJpbmcoMSkuc3BsaXQo +IiYiKTsKZm9yKHZhciBpPTA7aTxfMmIubGVuZ3RoO2krKyl7CmlmKF8yYltpXS5z +dWJzdHJpbmcoMCxfMmJbaV0uaW5kZXhPZigiPSIpKT09XzI5KXsKcmV0dXJuIF8y +YltpXS5zdWJzdHJpbmcoKF8yYltpXS5pbmRleE9mKCI9IikrMSkpO319fQpyZXR1 +cm4gIiI7fX07CmRlY29uY2VwdC5TV0ZPYmplY3RVdGlsLmNsZWFudXBTV0ZzPWZ1 +bmN0aW9uKCl7aWYod2luZG93Lm9wZXJhfHwhZG9jdW1lbnQuYWxsKXtyZXR1cm47 +fQp2YXIgXzJkPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJPQkpFQ1Qi +KTsKZm9yKHZhciBpPTA7aTxfMmQubGVuZ3RoO2krKyl7XzJkW2ldLnN0eWxlLmRp +c3BsYXk9Im5vbmUiO2Zvcih2YXIgeCBpbiBfMmRbaV0pewppZih0eXBlb2YgXzJk +W2ldW3hdPT0iZnVuY3Rpb24iKXtfMmRbaV1beF09ZnVuY3Rpb24oKXt9O319fX07 +CmRlY29uY2VwdC5TV0ZPYmplY3RVdGlsLnByZXBVbmxvYWQ9ZnVuY3Rpb24oKXtf +X2ZsYXNoX3VubG9hZEhhbmRsZXI9ZnVuY3Rpb24oKXt9OwpfX2ZsYXNoX3NhdmVk +VW5sb2FkSGFuZGxlcj1mdW5jdGlvbigpe307CmlmKHR5cGVvZiB3aW5kb3cub251 +bmxvYWQ9PSJmdW5jdGlvbiIpewp2YXIgXzMwPXdpbmRvdy5vbnVubG9hZDsKd2lu +ZG93Lm9udW5sb2FkPWZ1bmN0aW9uKCl7CmRlY29uY2VwdC5TV0ZPYmplY3RVdGls +LmNsZWFudXBTV0ZzKCk7XzMwKCk7fTsKfWVsc2V7d2luZG93Lm9udW5sb2FkPWRl +Y29uY2VwdC5TV0ZPYmplY3RVdGlsLmNsZWFudXBTV0ZzO319OwppZih0eXBlb2Yg +d2luZG93Lm9uYmVmb3JldW5sb2FkPT0iZnVuY3Rpb24iKXsKdmFyIG9sZEJlZm9y +ZVVubG9hZD13aW5kb3cub25iZWZvcmV1bmxvYWQ7CndpbmRvdy5vbmJlZm9yZXVu +bG9hZD1mdW5jdGlvbigpewpkZWNvbmNlcHQuU1dGT2JqZWN0VXRpbC5wcmVwVW5s +b2FkKCk7Cm9sZEJlZm9yZVVubG9hZCgpO307Cn1lbHNle3dpbmRvdy5vbmJlZm9y +ZXVubG9hZD1kZWNvbmNlcHQuU1dGT2JqZWN0VXRpbC5wcmVwVW5sb2FkO30KaWYo +QXJyYXkucHJvdG90eXBlLnB1c2g9PW51bGwpewpBcnJheS5wcm90b3R5cGUucHVz +aD1mdW5jdGlvbihfMzEpewp0aGlzW3RoaXMubGVuZ3RoXT1fMzE7CnJldHVybiB0 +aGlzLmxlbmd0aDt9O30KdmFyIGdldFF1ZXJ5UGFyYW1WYWx1ZT1kZWNvbmNlcHQu +dXRpbC5nZXRSZXF1ZXN0UGFyYW1ldGVyOwp2YXIgRmxhc2hPYmplY3Q9ZGVjb25j +ZXB0LlNXRk9iamVjdDsKdmFyIFNXRk9iamVjdD1kZWNvbmNlcHQuU1dGT2JqZWN0 +Owo= + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=postsHandler.js +Content-Type: application/x-javascript; charset=utf-8; name=postsHandler.js +Content-Location: http://habrahabr.ru/js/1307631427/postsHandler.js +Content-Transfer-Encoding: Base64 + +dmFyIHBvc3RzSGFuZGxlciA9IGZ1bmN0aW9uKCkgew0KCXRoaXMucG9zdHNfaXQg +PSAtMTsNCgl0aGlzLnBvc3RzID0gW107DQoJdGhpcy5jdXJyZW50UGFnZSA9ICcn +Ow0KCXRoaXMuaXNQb3N0QmVpbmdSZWFkID0gZmFsc2U7DQp9DQoJDQpwb3N0c0hh +bmRsZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbigpIHsNCg0KCXZhciBfdGhp +cyA9IHRoaXM7DQoJDQoJdGhpcy5wb3N0cyA9ICQoJ3dyYXBwZXInKS5nZXRFbGVt +ZW50cygnLmhlbnRyeScpOw0KCXRoaXMucG9zdHMuc29ydChwb3N0c0hhbmRsZXIu +c29ydEFycmF5KTsNCgkNCglkb2N1bWVudC5vbmtleXVwID0gZnVuY3Rpb24oZXYp +IHsNCgkJDQoJCXZhciB0YXJnOw0KCQlpZighZXYpCWV2PXdpbmRvdy5ldmVudDsN +CgkJaWYgKCFkb2N1bWVudC5hbGwpIGV2LnByZXZlbnREZWZhdWx0KCk7IGVsc2Ug +ZXYucmV0dXJuVmFsdWUgPSBmYWxzZTsNCgkNCgkJaWYgKGV2LnRhcmdldCkgdGFy +ZyA9IGV2LnRhcmdldDsNCgkJZWxzZSBpZiAoZXYuc3JjRWxlbWVudCkgdGFyZyA9 +IGV2LnNyY0VsZW1lbnQ7DQoJCWlmICh0YXJnLm5vZGVUeXBlID09IDMpIHRhcmcg +PSB0YXJnLnBhcmVudE5vZGU7DQoJCQ0KCQl2YXIga2V5ID0gZ2V0Q2hhckNvZGUo +ZXYpOw0KCQkNCgkJaWYodGFyZy50YWdOYW1lICE9ICdURVhUQVJFQScgJiYgdGFy +Zy50YWdOYW1lICE9ICdJTlBVVCcpIHsNCgkJCWlmKGtleT09NzIpIHsNCgkJCQlf +dGhpcy50b3AoZXYpOw0KCQkJfQ0KCQkJZWxzZSBpZihrZXk9PTc1KSB7DQoJCQkJ +X3RoaXMucHJldihldik7DQoJCQl9DQoJCQllbHNlIGlmKGtleT09NzQpIHsNCgkJ +CQlfdGhpcy5uZXh0KGV2KTsNCgkJCX0NCgkJfQ0KCX0NCn07DQoNCnBvc3RzSGFu +ZGxlci5wcm90b3R5cGUuc29ydEFycmF5ID0gZnVuY3Rpb24oYSwgYikgew0KICBp +ZiAoYS5vZmZzZXRUb3AgPCBiLm9mZnNldFRvcCkNCiAgICByZXR1cm4gLTE7DQog +IGlmIChhLm9mZnNldFRvcCA+IGIub2Zmc2V0VG9wKQ0KICAgIHJldHVybiAxOw0K +ICByZXR1cm4gMDsJCQ0KfTsNCg0KLy/vv73vv73vv73vv73vv73vv73vv73vv73v +v73vv70g77+977+977+977+977+977+977+9IO+/ve+/ve+/ve+/vQ0KcG9zdHNI +YW5kbGVyLnByb3RvdHlwZS5kZXRlY3RDdXJyZW50UG9zdCA9IGZ1bmN0aW9uKCkg +ew0KCXRoaXMuaXNQb3N0QmVpbmdSZWFkID0gZmFsc2U7DQoJdmFyIGJvdW5kcyA9 +IHRoaXMuZ2V0V2luZG93Qm91bmRzKCk7DQoJdmFyIHBvc3QgPSAtMTsNCgl2YXIg +cG9zdHNfbGVuZ3RoID0gdGhpcy5wb3N0cy5sZW5ndGg7DQoJZm9yKHZhciBpPTA7 +IGk8cG9zdHNfbGVuZ3RoOyBpKyspIHsNCgkJaWYodGhpcy5wb3N0c1tpKzFdKSB7 +DQoJCQlpZigkKHRoaXMucG9zdHNbaV0pLmdldFBvc2l0aW9uKCkueTw9Ym91bmRz +LnkgJiYgJCh0aGlzLnBvc3RzW2ldKS5nZXRQb3NpdGlvbigpLnk+PWJvdW5kcy55 +KSB7DQoJCQkJdmFyIHBvc3QgPSBpOw0KCQkJfQ0KCQl9DQoJCWVsc2UgaWYgKCQo +dGhpcy5wb3N0c1tpXSkuZ2V0UG9zaXRpb24oKS55PD1ib3VuZHMueSkgew0KCQkJ +dmFyIHBvc3QgPSBpOw0KCQl9DQoJfQ0KCWlmKHBvc3Q+LTEgJiYgYm91bmRzLnkh +PSQodGhpcy5wb3N0c1twb3N0XSkuZ2V0UG9zaXRpb24oKS55KSB7DQoJCXRoaXMu +aXNQb3N0QmVpbmdSZWFkID0gdHJ1ZTsNCgl9DQoJcmV0dXJuIHBvc3Q7DQp9Ow0K +DQovL++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vSDvv73vv73vv73vv73vv73vv73v +v73vv73vv73vv70g77+977+977+977+977+977+977+9IO+/ve+/ve+/ve+/ve+/ +ve+/ve+/vQ0KcG9zdHNIYW5kbGVyLnByb3RvdHlwZS5nZXRXaW5kb3dCb3VuZHMg +PSBmdW5jdGlvbigpIHsNCiAgICB2YXIgdywgaCwgeCwgeTsNCg0KICAgIGlmICh3 +aW5kb3cuZ2Vja28pIHsNCiAgICAgICAgdmFyIGIgPSBkb2N1bWVudC5ib2R5Ow0K +ICAgICAgICB3ID0gYi5jbGllbnRXaWR0aDsNCiAgICAgICAgaCA9IGIuY2xpZW50 +SGVpZ2h0Ow0KICAgICAgICB4ID0gd2luZG93LnNjcm9sbFg7DQogICAgICAgIHkg +PSB3aW5kb3cuc2Nyb2xsWTsNCiAgICB9DQogICAgZWxzZSBpZiAod2luZG93Lndl +YmtpdCkgew0KICAgICAgICB3ID0gd2luZG93LmlubmVyV2lkdGg7DQogICAgICAg +IGggPSB3aW5kb3cuaW5uZXJIZWlnaHQ7DQogICAgICAgIHggPSB3aW5kb3cuc2Ny +b2xsWDsNCiAgICAgICAgeSA9IHdpbmRvdy5zY3JvbGxZOw0KICAgIH0NCiAgICBl +bHNlIGlmICh3aW5kb3cub3BlcmEpIHsNCiAgICAgICAgdyA9IHdpbmRvdy5pbm5l +cldpZHRoOw0KICAgICAgICBoID0gd2luZG93LmlubmVySGVpZ2h0Ow0KICAgICAg +ICB4ID0gd2luZG93LnBhZ2VYT2Zmc2V0Ow0KICAgICAgICB5ID0gd2luZG93LnBh +Z2VZT2Zmc2V0Ow0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICAgdmFyIGQgPSBk +b2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7DQogICAgICAgIHZhciBiID0gZG9jdW1l +bnQuYm9keTsNCiAgICAgICAgdyA9IGQuY2xpZW50V2lkdGggID8gZC5jbGllbnRX +aWR0aCAgOiBiLmNsaWVudFdpZHRoICA/IGIuY2xpZW50V2lkdGggIDogMDsNCiAg +ICAgICAgaCA9IGQuY2xpZW50SGVpZ2h0ID8gZC5jbGllbnRIZWlnaHQgOiBiLmNs +aWVudEhlaWdodCA/IGIuY2xpZW50SGVpZ2h0IDogMDsNCiAgICAgICAgeCA9IGQu +c2Nyb2xsTGVmdCAgID8gZC5zY3JvbGxMZWZ0ICAgOiBiLnNjcm9sbExlZnQgICA/ +IGIuc2Nyb2xsTGVmdCAgIDogMDsNCiAgICAgICAgeSA9IGQuc2Nyb2xsVG9wICAg +ID8gZC5zY3JvbGxUb3AgICAgOiBiLnNjcm9sbFRvcCAgICA/IGIuc2Nyb2xsVG9w +ICAgIDogMDsNCiAgICB9DQoNCiAgICByZXR1cm4gew0KICAgICAgICAndyc6IHcs +DQogICAgICAgICdoJzogaCwNCiAgICAgICAgJ3gnOiB4LA0KICAgICAgICAneSc6 +IHkNCiAgICB9Ow0KCQ0KfTsNCg0KcG9zdHNIYW5kbGVyLnByb3RvdHlwZS50b3Ag +PSBmdW5jdGlvbihldikgew0KCWlmKCFldikJZXY9d2luZG93LmV2ZW50Ow0KCWlm +ICghZG9jdW1lbnQuYWxsKSBldi5wcmV2ZW50RGVmYXVsdCgpOyBlbHNlIGV2LnJl +dHVyblZhbHVlID0gZmFsc2U7DQoJDQoJd2luZG93LnNjcm9sbFRvKDAsMCk7DQp9 +Ow0KDQpwb3N0c0hhbmRsZXIucHJvdG90eXBlLnByZXYgPSBmdW5jdGlvbihldikg +ew0KCWlmKCFldikJZXY9d2luZG93LmV2ZW50Ow0KCWlmICghZG9jdW1lbnQuYWxs +KSBldi5wcmV2ZW50RGVmYXVsdCgpOyBlbHNlIGV2LnJldHVyblZhbHVlID0gZmFs +c2U7CQ0KCQ0KCXRoaXMucG9zdHNfaXQgPSB0aGlzLmRldGVjdEN1cnJlbnRQb3N0 +KCk7DQoNCglpZih0aGlzLnBvc3RzICYmIHRoaXMucG9zdHMubGVuZ3RoKSB7DQoJ +CWlmKHRoaXMucG9zdHNfaXQ8PXRoaXMucG9zdHMubGVuZ3RoICYmIHRoaXMucG9z +dHNfaXQ+MCkgew0KCQkJaWYoIXRoaXMuaXNQb3N0QmVpbmdSZWFkKSB7DQoJCQkJ +dGhpcy5wb3N0c19pdC0tOw0KCQkJfQ0KCQkJd2luZG93LnNjcm9sbFRvKDAsJCh0 +aGlzLnBvc3RzW3RoaXMucG9zdHNfaXRdKS5nZXRQb3NpdGlvbigpLnkpOw0KCQl9 +DQoJCWVsc2UgaWYgKHRoaXMucG9zdHNfaXQ8PTApew0KCQkJdGhpcy5wcmV2UGFn +ZSgpOw0KCQl9DQoJCWVsc2UgaWYodGhpcy5wb3N0c19pdD50aGlzLnBvc3RzLmxl +bmd0aCkgew0KCQkJdGhpcy5wb3N0c19pdCA9IHRoaXMucG9zdHMubGVuZ3RoLTI7 +DQoJCQl3aW5kb3cuc2Nyb2xsVG8oMCwkKHRoaXMucG9zdHNbdGhpcy5wb3N0c19p +dF0pLmdldFBvc2l0aW9uKCkueSk7DQoJCX0NCgl9DQp9Ow0KDQpwb3N0c0hhbmRs +ZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihldikgew0KCWlmKCFldikgZXY9 +d2luZG93LmV2ZW50Ow0KCWlmICghZG9jdW1lbnQuYWxsKSBldi5wcmV2ZW50RGVm +YXVsdCgpOyBlbHNlIGV2LnJldHVyblZhbHVlID0gZmFsc2U7DQoJDQoJdGhpcy5w +b3N0c19pdCA9IHRoaXMuZGV0ZWN0Q3VycmVudFBvc3QoKTsNCg0KCWlmKHRoaXMu +cG9zdHMgJiYgdGhpcy5wb3N0cy5sZW5ndGgpIHsNCgkJdmFyIGJvdW5kcyA9IHRo +aXMuZ2V0V2luZG93Qm91bmRzKCk7DQoJCXZhciBkb2NIZWlnaHQgPSAkKCdoZWFk +ZXItd3JhcHBlcicpLm9mZnNldEhlaWdodCskKCd3cmFwcGVyJykub2Zmc2V0SGVp +Z2h0KyQoJ2Zvb3RlcicpLm9mZnNldEhlaWdodCs1MDsNCgkJaWYoKGJvdW5kcy55 +ICsgYm91bmRzLmgpID09IGRvY0hlaWdodCB8fCAoYm91bmRzLnkgKyBib3VuZHMu +aCkgPT0gZG9jSGVpZ2h0KzEwKXsNCgkJCXRoaXMubmV4dFBhZ2UoKTsNCgkJfQ0K +CQlpZih0aGlzLnBvc3RzX2l0PHRoaXMucG9zdHMubGVuZ3RoLTEgJiYgdGhpcy5w +b3N0c19pdD49LTEpIHsNCgkJCXRoaXMucG9zdHNfaXQrKzsNCgkJCXdpbmRvdy5z +Y3JvbGxUbygwLCQodGhpcy5wb3N0c1t0aGlzLnBvc3RzX2l0XSkuZ2V0UG9zaXRp +b24oKS55KTsNCgkJfQ0KCX0NCn07DQoNCnBvc3RzSGFuZGxlci5wcm90b3R5cGUu +bmV4dFBhZ2UgPSBmdW5jdGlvbigpIHsNCglpZih3aW5kb3cubG9jYXRpb24uaHJl +Zi5tYXRjaCgvXGQrL2cpKSB7DQoJCXRoaXMuY3VycmVudFBhZ2UgPSB3aW5kb3cu +bG9jYXRpb24uaHJlZi5tYXRjaCgvXGQrL2cpWzBdOw0KCQl0aGlzLmN1cnJlbnRQ +YWdlID0gcGFyc2VJbnQodGhpcy5jdXJyZW50UGFnZSk7DQoJCXRoaXMubmV4dFBh +Z2UgPSB0aGlzLmN1cnJlbnRQYWdlICsgMTsNCgkJd2luZG93LmxvY2F0aW9uLmhy +ZWYgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5yZXBsYWNlKHRoaXMuY3VycmVudFBh +Z2UsIHRoaXMubmV4dFBhZ2UpOw0KCX0NCgllbHNlIHsNCgkJdGhpcy5uZXh0UGFn +ZSA9IDI7DQoJCXdpbmRvdy5sb2NhdGlvbi5ocmVmID0gd2luZG93LmxvY2F0aW9u +LmhyZWYgKyAncGFnZScgKyB0aGlzLm5leHRQYWdlOw0KCX0NCn07DQoNCnBvc3Rz +SGFuZGxlci5wcm90b3R5cGUucHJldlBhZ2UgPSBmdW5jdGlvbigpIHsNCglpZih3 +aW5kb3cubG9jYXRpb24uaHJlZi5tYXRjaCgvXGQrL2cpKSB7DQoJCXRoaXMuY3Vy +cmVudFBhZ2UgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5tYXRjaCgvXGQrL2cpWzBd +Ow0KCQlpZih0aGlzLmN1cnJlbnRQYWdlIT0nMScpIHsNCgkJCXRoaXMuY3VycmVu +dFBhZ2UgPSBwYXJzZUludCh0aGlzLmN1cnJlbnRQYWdlKTsNCgkJCXRoaXMubmV4 +dFBhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlLTE7DQoJCQl3aW5kb3cubG9jYXRpb24u +aHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnJlcGxhY2UodGhpcy5jdXJyZW50 +UGFnZSwgdGhpcy5uZXh0UGFnZSk7DQoJCX0NCgkJZWxzZSB7DQoJCQl3aW5kb3cu +c2Nyb2xsVG8oMCwwKTsNCgkJfQ0KCX0NCgllbHNlIHsNCgkJd2luZG93LnNjcm9s +bFRvKDAsMCk7DQoJfQ0KCQ0KfTsNCg0KdmFyIHBvc3RzSGFuZGxlciA9IG5ldyBw +b3N0c0hhbmRsZXIoKTsNCg0Kd2luZG93LmFkZEV2ZW50KCdkb21yZWFkeScsIGZ1 +bmN0aW9uKCkgew0KCXBvc3RzSGFuZGxlci5pbml0KCk7DQp9KTs= + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=habraWYG.js +Content-Type: application/x-javascript; charset=utf-8; name=habraWYG.js +Content-Location: http://habrahabr.ru/js/1307631427/habraWYG.js +Content-Transfer-Encoding: Base64 + +LyoKCWhhYnJhV1lHIC0g0L/RgNC+0YHRgtC+0Lkg0LLQuNC30LjQstC40LMKKi8K +CmhhYnJhV1lHID0gewoKCWluc2VydFRhZ1dpdGhUZXh0OiBmdW5jdGlvbiAobGlu +aywgdGFnTmFtZSl7CgkJdmFyIHN0YXJ0VGFnID0gJzwnICsgdGFnTmFtZSArICc+ +JzsKCQl2YXIgZW5kVGFnID0gJzwvJyArIHRhZ05hbWUgKyAnPic7CgkJaGFicmFX +WUcuaW5zZXJ0VGFnKGxpbmssIHN0YXJ0VGFnLCBlbmRUYWcpOwoJCXJldHVybiBm +YWxzZTsKCX0sCgoJaW5zZXJ0SW1hZ2U6IGZ1bmN0aW9uKGxpbmspewoJCXZhciBz +cmMgPSBwcm9tcHQoJ9CS0LLQtdC00LjRgtC1IHNyYyDQutCw0YDRgtC40L3QutC4 +JywgJ2h0dHA6Ly8nKTsKCQlpZihzcmMpewoJCQloYWJyYVdZRy5pbnNlcnRUYWco +bGluaywgJzxpbWcgc3JjPSInICsgc3JjICsgJyIgYWx0PSJpbWFnZSIvPicsICcn +KTsKCQl9CgkJcmV0dXJuIGZhbHNlOwoJfSwKCglpbnNlcnRMaW5rOiBmdW5jdGlv +bihsaW5rKXsKCQl2YXIgaHJlZiA9IHByb21wdCgn0JLQstC10LTQuNGC0LUgVVJM +INGB0YHRi9C70LrQuCcsICdodHRwOi8vJyk7CgkJaWYoaHJlZil7CgkJCWhhYnJh +V1lHLmluc2VydFRhZyhsaW5rLCAnPGEgaHJlZj0iJyArIGhyZWYgKyAnIj4nLCAn +PC9hPicpOwoJCX0KCQlyZXR1cm4gZmFsc2U7Cgl9LAoKCWluc2VydFVzZXI6IGZ1 +bmN0aW9uKGxpbmspewoJCXZhciBsb2dpbiA9IHByb21wdCgn0JLQstC10LTQuNGC +0LUg0L3QuNC60L3QtdC50Lwg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPJywgJycp +OwoJCWlmKGxvZ2luKXsKCQkJaGFicmFXWUcuaW5zZXJ0VGFnKGxpbmssICc8aGgg +dXNlcj0iJyArIGxvZ2luICsgJyIvPicsICcnKTsKCQl9CgkJcmV0dXJuIGZhbHNl +OwoJfSwKCglpbnNlcnRIYWJyYWN1dDogZnVuY3Rpb24obGluayl7CgkJaGFicmFX +WUcuaW5zZXJ0VGFnKGxpbmssICc8aGFicmFjdXQgLz4nLCAnJyk7CgkJcmV0dXJu +IGZhbHNlOwoJfSwKCglpbnNlcnRUYWc6IGZ1bmN0aW9uKGxpbmssIHN0YXJ0VGFn +LCBlbmRUYWcsIHJlcE9iail7CgkJCXZhciB0ZXh0YXJlYVBhcmVudCA9ICQobGlu +aykuZ2V0UGFyZW50KCcuZWRpdG9yJyk7CgkJCXZhciB0ZXh0YXJlYSA9IHRleHRh +cmVhUGFyZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0ZXh0YXJlYScpWzBdOwoJ +CQl0ZXh0YXJlYS5mb2N1cygpOwoKCQkJdmFyIHNjcnRvcCA9IHRleHRhcmVhLnNj +cm9sbFRvcDsKCgkJCXZhciBjdXJzb3JQb3MgPSBoYWJyYVdZRy5nZXRDdXJzb3Io +dGV4dGFyZWEpOwoJCQl2YXIgdHh0X3ByZSA9IHRleHRhcmVhLnZhbHVlLnN1YnN0 +cmluZygwLCBjdXJzb3JQb3Muc3RhcnQpOwoJCQl2YXIgdHh0X3NlbCA9IHRleHRh +cmVhLnZhbHVlLnN1YnN0cmluZyhjdXJzb3JQb3Muc3RhcnQsIGN1cnNvclBvcy5l +bmQpOwoJCQl2YXIgdHh0X2FmdCA9IHRleHRhcmVhLnZhbHVlLnN1YnN0cmluZyhj +dXJzb3JQb3MuZW5kKTsKCgkJCWlmKHJlcE9iail7CgkJCQl0eHRfc2VsID0gdHh0 +X3NlbC5yZXBsYWNlKC9cci9nLCAnJyk7CgkJCQl0eHRfc2VsID0gdHh0X3NlbCAh +PSAnJyA/IHR4dF9zZWwgOiAnICc7CgkJCQl0eHRfc2VsID0gdHh0X3NlbC5yZXBs +YWNlKG5ldyBSZWdFeHAocmVwT2JqLmZpbmRTdHIsICdnbScpLCByZXBPYmoucmVw +U3RyKTsKCQkJfQoKCQkJaWYgKGN1cnNvclBvcy5zdGFydCA9PSBjdXJzb3JQb3Mu +ZW5kKXsKCQkJCXZhciBudUN1cnNvclBvcyA9IGN1cnNvclBvcy5zdGFydCArIHN0 +YXJ0VGFnLmxlbmd0aDsKCQkJfWVsc2V7CgkJCQl2YXIgbnVDdXJzb3JQb3M9U3Ry +aW5nKHR4dF9wcmUgKyBzdGFydFRhZyArIHR4dF9zZWwgKyBlbmRUYWcpLmxlbmd0 +aDsKCQkJfQoKCQkJdGV4dGFyZWEudmFsdWUgPSB0eHRfcHJlICsgc3RhcnRUYWcg +KyB0eHRfc2VsICsgZW5kVGFnICsgdHh0X2FmdDsKCgoJCQkvKgoJCQlpZih0ZXh0 +YXJlYS5zZXRTZWxlY3Rpb25SYW5nZSkgewoJCQkJdGV4dGFyZWEuc2V0U2VsZWN0 +aW9uUmFuZ2UobnVDdXJzb3JQb3MgLSA1LCBudUN1cnNvclBvcyk7CgkJCX0KCQkJ +Ki8KCQkJaGFicmFXWUcuc2V0Q3Vyc29yKHRleHRhcmVhLCBudUN1cnNvclBvcywg +bnVDdXJzb3JQb3MpOwoKCQkJaWYgKHNjcnRvcCkgdGV4dGFyZWEuc2Nyb2xsVG9w +ID0gc2NydG9wOwoKCQkJcmV0dXJuIGZhbHNlOwoJfSwKCglpbnNlcnRUYWdGcm9t +RHJvcEJveDogZnVuY3Rpb24obGluayl7CgkJCWhhYnJhV1lHLmluc2VydFRhZ1dp +dGhUZXh0KGxpbmssIGxpbmsudmFsdWUpOwoJCQlsaW5rLnNlbGVjdGVkSW5kZXgg +PSAwOwoJfSwKCglpbnNlcnRMaXN0OiBmdW5jdGlvbihsaW5rKXsKCgkJCXZhciBz +dGFydFRhZyA9ICc8JyArIGxpbmsudmFsdWUgKyAnPlxuJzsKCQkJdmFyIGVuZFRh +ZyA9ICdcbjwvJyArIGxpbmsudmFsdWUgKyAnPic7CgoJCQl2YXIgcmVwT2JqID0g +ewoJCQkJZmluZFN0cjogJ14oLispJywKCQkJCXJlcFN0cjogJ1x0PGxpPiQxPC9s +aT4nCgkJCX0KCgkJCWhhYnJhV1lHLmluc2VydFRhZyhsaW5rLCBzdGFydFRhZywg +ZW5kVGFnLCByZXBPYmopOwoKCQkJbGluay5zZWxlY3RlZEluZGV4ID0gMDsKCX0s +CgoJaW5zZXJ0VGFiOiBmdW5jdGlvbihlLCB0ZXh0YXJlYSl7CgkJCWlmKCFlKSBl +ID0gd2luZG93LmV2ZW50OwoJCQlpZiAoZS5rZXlDb2RlKSB2YXIga2V5Q29kZSA9 +IGUua2V5Q29kZTsKCQkJZWxzZSBpZiAoZS53aGljaCkgdmFyIGtleUNvZGUgPSBl +LndoaWNoOwoKCQkJLy9hbGVydChrZXlDb2RlKTsKCQkJc3dpdGNoKGUudHlwZSl7 +CgkJCQljYXNlICdrZXlkb3duJzoKCQkJCQlpZihrZXlDb2RlID09IDE2KXsKCQkJ +CQkJaGFicmFXWUcuc2hpZnQgPSB0cnVlOwoJCQkJCQkvL2FsZXJ0KCcxJyk7CgkJ +CQkJfQoJCQkJCWJyZWFrOwoKCQkJCWNhc2UgJ2tleXVwJzoKCQkJCQlpZihrZXlD +b2RlID09IDE2KSB7CgkJCQkJCWhhYnJhV1lHLnNoaWZ0ID0gZmFsc2U7CgkJCQkJ +CS8vYWxlcnQoJzInKTsKCQkJCQl9CgoJCQkJCWJyZWFrOwoJCQl9CgoJCQl0ZXh0 +YXJlYS5mb2N1cygpOwoJCQl2YXIgY3Vyc29yUG9zID0gaGFicmFXWUcuZ2V0Q3Vy +c29yKHRleHRhcmVhKTsKCgkJCWlmIChjdXJzb3JQb3Muc3RhcnQgPT0gY3Vyc29y +UG9zLmVuZCl7CgkJCQlyZXR1cm4gdHJ1ZTsKCgoJCQl9IGVsc2UgaWYoa2V5Q29k +ZSA9PSA5ICYmICFoYWJyYVdZRy5zaGlmdCl7CgkJCQl2YXIgcmVwT2JqID0gewoJ +CQkJCWZpbmRTdHI6ICdeKC4rKScsCgkJCQkJcmVwU3RyOiAnXHQkMScKCQkJCX0K +CQkJCWhhYnJhV1lHLmluc2VydFRhZyh0ZXh0YXJlYSwgJycsICcnLCByZXBPYmop +OwoJCQkJcmV0dXJuIGZhbHNlOwoKCQkJfSBlbHNlIGlmKGtleUNvZGUgPT0gOSAm +JiBoYWJyYVdZRy5zaGlmdCl7CgkJCQl2YXIgcmVwT2JqID0gewoJCQkJCWZpbmRT +dHI6ICdeXHQoLispJywKCQkJCQlyZXBTdHI6ICckMScKCQkJCX0KCQkJCWhhYnJh +V1lHLmluc2VydFRhZyh0ZXh0YXJlYSwgJycsICcnLCByZXBPYmopOwoJCQkJcmV0 +dXJuIGZhbHNlOwoJCQl9Cgl9LAoKCWdldEN1cnNvcjogZnVuY3Rpb24oaW5wdXQp +ewoJCQl2YXIgcmVzdWx0ID0ge3N0YXJ0OiAwLCBlbmQ6IDB9OwoJCQlpZiAoaW5w +dXQuc2V0U2VsZWN0aW9uUmFuZ2UpewoJCQkJcmVzdWx0LnN0YXJ0PSBpbnB1dC5z +ZWxlY3Rpb25TdGFydDsKCQkJCXJlc3VsdC5lbmQgPSBpbnB1dC5zZWxlY3Rpb25F +bmQ7CgkJCX0gZWxzZSBpZiAoIWRvY3VtZW50LnNlbGVjdGlvbikgewoJCQkJcmV0 +dXJuIGZhbHNlOwoJCQl9IGVsc2UgaWYgKGRvY3VtZW50LnNlbGVjdGlvbiAmJiBk +b2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UpIHsKCQkJCXZhciByYW5nZSA9 +IGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpOwoJCQkJdmFyIHN0b3Jl +ZF9yYW5nZSA9IHJhbmdlLmR1cGxpY2F0ZSgpOwoJCQkJc3RvcmVkX3JhbmdlLm1v +dmVUb0VsZW1lbnRUZXh0KGlucHV0KTsKCQkJCXN0b3JlZF9yYW5nZS5zZXRFbmRQ +b2ludCgnRW5kVG9FbmQnLCByYW5nZSk7CgkJCQlyZXN1bHQuc3RhcnQgPSBzdG9y +ZWRfcmFuZ2UudGV4dC5sZW5ndGggLSByYW5nZS50ZXh0Lmxlbmd0aDsKCQkJCXJl +c3VsdC5lbmQgPSByZXN1bHQuc3RhcnQgKyByYW5nZS50ZXh0Lmxlbmd0aDsKCQkJ +fQoJCQlyZXR1cm4gcmVzdWx0OwoJfSwKCglzZXRDdXJzb3I6IGZ1bmN0aW9uKHRl +eHRhcmVhLCBzdGFydCwgZW5kKXsKCQkJaWYodGV4dGFyZWEuY3JlYXRlVGV4dFJh +bmdlKSB7CgkJCQl2YXIgcmFuZ2UgPSB0ZXh0YXJlYS5jcmVhdGVUZXh0UmFuZ2Uo +KTsKCQkJCXJhbmdlLm1vdmUoImNoYXJhY3RlciIsIHN0YXJ0KTsKCQkJCXJhbmdl +LnNlbGVjdCgpOwoJCQl9IGVsc2UgaWYodGV4dGFyZWEuc2VsZWN0aW9uU3RhcnQp +IHsKCQkJCXRleHRhcmVhLnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpOwoJ +CQl9Cgl9Cgp9Cgo= + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=friending.js +Content-Type: application/x-javascript; charset=utf-8; name=friending.js +Content-Location: http://habrahabr.ru/js/1307631427/friending.js +Content-Transfer-Encoding: Base64 + +ZnJpZW5kaW5nSGFuZGxlciA9IHsNCgl1cmw6ICcvYWpheC91c2Vycy9mcmllbmRz +LycsDQoJeG1sOiB7DQoJCXJlc3BvbnNlTm9kZXM6IHsNCgkJCWVycm9yIDogJ2Vy +cm9yJywNCgkJCXJlc3VsdCA6ICdtZXNzYWdlJywNCgkJCXRleHQgOiAndGV4dCcN +CgkJfSwNCg0KCQlwYXJzZTogZnVuY3Rpb24oeG1sT2JqKXsNCgkJCXZhciB4bWxO +b2RlcyA9IHt9Ow0KCQkJZm9yIChwcm9wIGluIGZyaWVuZGluZ0hhbmRsZXIueG1s +LnJlc3BvbnNlTm9kZXMpIHsNCgkJCQl4bWxOb2Rlc1twcm9wXSA9IHhtbE9iai5n +ZXRFbGVtZW50c0J5VGFnTmFtZShmcmllbmRpbmdIYW5kbGVyLnhtbC5yZXNwb25z +ZU5vZGVzW3Byb3BdKTsNCgkJCX0NCgkJCXJldHVybiB4bWxOb2RlczsNCgkJfQ0K +CX0sDQoJDQoJZnJpZW5kVW5mcmllbmQgOiBmdW5jdGlvbihmcmllbmRJZCwgZnJp +ZW5kKSB7DQoJCXByb2ZpbGVGb3JtLmhpZGVQYW5lbHMoKTsNCgkJaWYgKGZyaWVu +ZCkgew0KCQkJJCgnanMtYWRkRnJpZW5kTWVzc2FnZScpLnJlbW92ZUNsYXNzKCdo +aWRkZW4nKTsNCgkJCSQoJ2pzLWFkZEZyaWVuZFNlbmRCdXR0b24nKS5yZW1vdmVD +bGFzcygnaGlkZGVuJyk7DQoJCX0gZWxzZSB7DQoJCQkkKCdqcy1hZGRGcmllbmRN +ZXNzYWdlJykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpOw0KCQkJJCgnanMtcmVtb3Zl +RnJpZW5kU2VuZEJ1dHRvbicpLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTsNCgkJfQ0K +CX0sDQoJDQoJYWRkRnJpZW5kU2VuZCA6IGZ1bmN0aW9uIChmcmllbmRJZCkgew0K +CQl2YXIgZGF0YSA9ICdhY3Rpb249ZnJpZW5kJmZyaWVuZElkPScgKyBmcmllbmRJ +ZCArICcmbXNnPScgKyAkKCdqcy1GcmllbmRVbmZyaWVuZE1lc3NhZ2UnKS52YWx1 +ZTsNCgkJYWpheExvYWRQb3N0KGZyaWVuZGluZ0hhbmRsZXIudXJsLCBkYXRhLCBm +dW5jdGlvbihhamF4T2JqKSB7DQogICAgICAgICAgICBmcmllbmRpbmdIYW5kbGVy +LmFkZEZyaWVuZE9ubG9hZChhamF4T2JqKQ0KICAgICAgICB9KTsNCgl9LA0KCQ0K +CXJlbW92ZUZyaWVuZFNlbmQgOiBmdW5jdGlvbiAoZnJpZW5kSWQpIHsNCgkJdmFy +IGRhdGEgPSAnYWN0aW9uPXVuZnJpZW5kJmZyaWVuZElkPScgKyBmcmllbmRJZCAr +ICcmbXNnPScgKyAkKCdqcy1GcmllbmRVbmZyaWVuZE1lc3NhZ2UnKS52YWx1ZTsN +CgkJYWpheExvYWRQb3N0KGZyaWVuZGluZ0hhbmRsZXIudXJsLCBkYXRhLCBmcmll +bmRpbmdIYW5kbGVyLnJlbW92ZUZyaWVuZE9ubG9hZCk7DQoJfSwNCgkNCglhZGRG +cmllbmRPbmxvYWQgOiBmdW5jdGlvbihhamF4T2JqKSB7DQoJCWlmKGFqYXhPYmog +JiYgYWpheE9iai5yZXNwb25zZVhNTCl7DQoJCQl2YXIgeG1sT2JqID0gYWpheE9i +ai5yZXNwb25zZVhNTDsNCgkJCXZhciB4bWxOb2RlcyA9IGZyaWVuZGluZ0hhbmRs +ZXIueG1sLnBhcnNlKHhtbE9iaik7DQoJCQlpZih4bWxOb2Rlcy5lcnJvciAmJiB4 +bWxOb2Rlcy5lcnJvci5sZW5ndGgpew0KCQkJCXZhciBlcnJvcnNfbGVuZ3RoID0g +eG1sTm9kZXMuZXJyb3IubGVuZ3RoOw0KCQkJCWZvciAodmFyIGkgPSAwOyBpIDwg +ZXJyb3JzX2xlbmd0aDsgaSsrKSB7DQoJCQkJCWZ1dHVfYWxlcnQoRkFULmZyaWVu +ZGxpZXJfaGVhZGVyLCB4bWxOb2Rlcy5lcnJvcltpXS5maXJzdENoaWxkLmRhdGEs +IHRydWUsICdlcnJvcicpOw0KCQkJCX0NCgkJCX0NCgkJCWlmKHhtbE5vZGVzLnJl +c3VsdCAmJiB4bWxOb2Rlcy5yZXN1bHQubGVuZ3RoKSB7DQoJCQkJaWYoeG1sTm9k +ZXMudGV4dCAmJiB4bWxOb2Rlcy50ZXh0Lmxlbmd0aCkgew0KCQkJCQlmdXR1X2Fs +ZXJ0KEZBVC5mcmllbmRsaWVyX2hlYWRlciwgeG1sTm9kZXMudGV4dFswXS5maXJz +dENoaWxkLmRhdGEsIGZhbHNlLCAnbWVzc2FnZScpOw0KCQkJCX0NCgkJCQkkKCdq +cy1GcmllbmRVbmZyaWVuZE1lc3NhZ2UnKS52YWx1ZSA9ICcnOw0KCQkJCSQoJ2pz +LWFkZEZyaWVuZE1lc3NhZ2UnKS5hZGRDbGFzcygnaGlkZGVuJyk7DQoJCQkJJCgn +anMtYWRkRnJpZW5kU2VuZEJ1dHRvbicpLmFkZENsYXNzKCdoaWRkZW4nKTsNCg0K +CQkJCS8vJCgnanMtYWRkRnJpZW5kQnV0dG9uJykuYWRkQ2xhc3MoJ2hpZGRlbicp +Ow0KCQkJCS8vJCgnanMtZGVsZXRlRnJpZW5kQnV0dG9uJykucmVtb3ZlQ2xhc3Mo +J2hpZGRlbicpOw0KICAgICAgICAgICAgICAgIA0KCSAgICAgICAgICAgICQkKCJw +cm9maWxlLWFjdGlvbnMtZnJpZW5kLWFkZCIpLnNldFN0eWxlKCdkaXNwbGF5Jywg +J25vbmUnKQ0KCSAgICAgICAgICAgICQkKCJwcm9maWxlLWFjdGlvbnMtZnJpZW5k +LWRlbCIpLnNldFN0eWxlKCdkaXNwbGF5JywgJ2lubGluZScpDQoJCQl9DQoJCX0N +Cgl9LA0KCQ0KCXJlbW92ZUZyaWVuZE9ubG9hZCA6IGZ1bmN0aW9uKGFqYXhPYmop +IHsNCgkJaWYoYWpheE9iaiAmJiBhamF4T2JqLnJlc3BvbnNlWE1MKXsNCgkJCXZh +ciB4bWxPYmogPSBhamF4T2JqLnJlc3BvbnNlWE1MOw0KCQkJdmFyIHhtbE5vZGVz +ID0gZnJpZW5kaW5nSGFuZGxlci54bWwucGFyc2UoeG1sT2JqKTsNCgkJCWlmKHht +bE5vZGVzLmVycm9yICYmIHhtbE5vZGVzLmVycm9yLmxlbmd0aCl7DQoJCQkJdmFy +IGVycm9yc19sZW5ndGggPSB4bWxOb2Rlcy5lcnJvci5sZW5ndGg7DQoJCQkJZm9y +ICh2YXIgaSA9IDA7IGkgPCBlcnJvcnNfbGVuZ3RoOyBpKyspIHsNCgkJCQkJZnV0 +dV9hbGVydChGQVQuZnJpZW5kbGllcl9oZWFkZXIsIHhtbE5vZGVzLmVycm9yW2ld +LmZpcnN0Q2hpbGQuZGF0YSwgdHJ1ZSwgJ2Vycm9yJyk7DQoJCQkJfQ0KCQkJfQ0K +CQkJaWYoeG1sTm9kZXMucmVzdWx0ICYmIHhtbE5vZGVzLnJlc3VsdC5sZW5ndGgp +IHsNCgkJCQlmdXR1X2FsZXJ0KEZBVC5mcmllbmRsaWVyX2hlYWRlciwgJ9CS0Ysg +0YPQtNCw0LvQuNC70Lgg0LTRgNGD0LPQsCA6KCcsIGZhbHNlLCAnbWVzc2FnZScp +Ow0KCQkJCSQoJ2pzLUZyaWVuZFVuZnJpZW5kTWVzc2FnZScpLnZhbHVlID0gJyc7 +DQoJCQkJJCgnanMtYWRkRnJpZW5kTWVzc2FnZScpLmFkZENsYXNzKCdoaWRkZW4n +KTsNCgkJCQkkKCdqcy1yZW1vdmVGcmllbmRTZW5kQnV0dG9uJykuYWRkQ2xhc3Mo +J2hpZGRlbicpOw0KDQoJCQkJLy8kKCdqcy1hZGRGcmllbmRCdXR0b24nKS5yZW1v +dmVDbGFzcygnaGlkZGVuJyk7DQoJCQkJLy8kKCdqcy1kZWxldGVGcmllbmRCdXR0 +b24nKS5hZGRDbGFzcygnaGlkZGVuJyk7DQoJCQl9DQoJCX0NCgl9LA0KCQ0KCWFu +c3dlciA6IGZ1bmN0aW9uKGFuc3dlciwgbWVzc2FnZV9pZCwgdXNlcl9pZCwgZnJp +ZW5kX2lkKSB7DQoJCXZhciBkYXRhID0gJ2FjdGlvbj1yZXBseSZhbnN3ZXI9JyAr +IGFuc3dlciArICcmbWVzc2FnZV9pZD0nICsgbWVzc2FnZV9pZCArICcmdXNlcl9p +ZD0nICsgdXNlcl9pZCArICcmZnJpZW5kX2lkPScgKyBmcmllbmRfaWQ7DQoJCWFq +YXhMb2FkUG9zdChmcmllbmRpbmdIYW5kbGVyLnVybCwgZGF0YSwgZnJpZW5kaW5n +SGFuZGxlci5hbnN3ZXJPbmxvYWQpOw0KCX0sDQoJYW5zd2VyT25sb2FkIDogZnVu +Y3Rpb24oYWpheE9iaikgew0KCQlpZihhamF4T2JqICYmIGFqYXhPYmoucmVzcG9u +c2VYTUwpew0KCQkJdmFyIHhtbE9iaiA9IGFqYXhPYmoucmVzcG9uc2VYTUw7DQoJ +CQl2YXIgeG1sTm9kZXMgPSBmcmllbmRpbmdIYW5kbGVyLnhtbC5wYXJzZSh4bWxP +YmopOw0KCQkJaWYoeG1sTm9kZXMuZXJyb3IgJiYgeG1sTm9kZXMuZXJyb3IubGVu +Z3RoKXsNCgkJCQl2YXIgZXJyb3JzX2xlbmd0aCA9IHhtbE5vZGVzLmVycm9yLmxl +bmd0aDsNCgkJCQlmb3IgKHZhciBpID0gMDsgaSA8IGVycm9yc19sZW5ndGg7IGkr +Kykgew0KCQkJCQlmdXR1X2FsZXJ0KEZBVC5mcmllbmRsaWVyX2hlYWRlciwgeG1s +Tm9kZXMuZXJyb3JbaV0uZmlyc3RDaGlsZC5kYXRhLCB0cnVlLCAnZXJyb3InKTsN +CgkJCQl9DQoJCQl9DQoJCQlpZih4bWxOb2Rlcy50ZXh0ICYmIHhtbE5vZGVzLnRl +eHQubGVuZ3RoKSB7DQoJCQkJJCgnZnJpZW5kLW1haWwtYWN0aW9uJykuaW5uZXJI +VE1MID0geG1sTm9kZXMudGV4dFswXS5maXJzdENoaWxkLmRhdGE7DQoJCQl9DQoJ +CX0JDQoJfQ0KfTsNCg0KY29tcGFuaWVzSGFuZGxlciA9IHsNCgl3b3JrZXJTZW5k +IDogZnVuY3Rpb24gKGNvbXBhbnlfaWQsIGFkZCwgZmF2KSB7DQoJCXZhciBwZW9w +bGVMaXN0LHBlb3BsZUNvdW50ZXIscGVvcGxlTWVudTsNCgkJKG5ldyBSZXF1ZXN0 +KHsNCiAgICAgICAgICAgICd1cmwnOiB0ZW1wLmJhc2UgKyAnYWpheC9jb21wYW55 +L3NldC8nLA0KICAgICAgICAgICAgJ2RhdGEnOiB7DQogICAgICAgICAgICAgICAg +J2FjdGlvbic6IGFkZCA/ICggZmF2ID8gJ2Zhbl9hZGQnIDogJ3dvcmtlcl9hZGQn +KSA6ICggZmF2ID8gJ2Zhbl9kZWwnIDogJ3dvcmtlcl9kZWwnKSwNCgkJCQknY29t +cGFueV9pZCcgOiBjb21wYW55X2lkDQogICAgICAgICAgICB9LA0KCQkJIm9uUmVx +dWVzdCI6ZnVuY3Rpb24oKXsNCgkJCQlwZW9wbGVMaXN0ID0gZmF2ID8gJCgnanMt +Y29tcGFueUZhbnNMaXN0JykgOiAkKCdqcy1jb21wYW55V29ya2Vyc0xpc3QnKTsN +CgkJCQlwZW9wbGVDb3VudGVyID0gZmF2ID8gJCgnanMtY29tcGFueUZhbnNDb3Vu +dCcpIDogJCgnanMtY29tcGFueVdvcmtlcnNDb3VudCcpOw0KCQkJCXBlb3BsZU1l +bnUgPSAkKGRvY3VtZW50KS5nZXRFbGVtZW50KCIucHJvZmlsZS1hY3Rpb25zLW1l +bnUgLmpzLXlvdXItd29yay1zdGF0ZSIpOw0KCQkJfSwNCgkJCSJvblN1Y2Nlc3Mi +OiBmdW5jdGlvbihyLHJ4bWwpew0KCQkJCXZhciBlcnJvcnMgPSByeG1sLmdldEVs +ZW1lbnRzQnlUYWdOYW1lKCJlcnJvciIpOw0KCQkJCWlmIChlcnJvcnMgJiYgZXJy +b3JzLmxlbmd0aCkgew0KCQkJCQl2YXIgZXJyb3JzdGV4dCA9ICIiOw0KCQkJCQlm +b3IgKHZhciBpPTAsbD1lcnJvcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7DQoJCQkJ +CQllcnJvcnN0ZXh0ICs9IGVycm9yc1tpXS5maXJzdENoaWxkLmRhdGEgKyAiPC9i +cj4iOw0KCQkJCQl9Ow0KCQkJCQlmdXR1X2FsZXJ0KCLQntC5LdC+0Lkt0L7QuSDR +gSDQutC+0LvQsdCw0YHQvtC5ISIsIGVycm9yc3RleHQsIGZhbHNlLCAnZXJyb3In +KTsNCgkJCQl9DQoJCQkJdmFyIG1lc3NhZ2UgPSByeG1sLmdldEVsZW1lbnRzQnlU +YWdOYW1lKCJtZXNzYWdlIilbMF07DQoJCQkJdmFyIGNvbXBhbnkgPSByeG1sLmdl +dEVsZW1lbnRzQnlUYWdOYW1lKCJjb21wYW55IilbMF07CQkJCQ0KCQkJCQ0KCQkJ +CWlmIChtZXNzYWdlKSB7DQoJCQkJCXZhciB1c2VyTm9kZSA9IHJ4bWwuZ2V0RWxl +bWVudHNCeVRhZ05hbWUoJ3VzZXInKVswXSwNCgkJCQkJCXVzZXJOYW1lID0gdXNl +ck5vZGUuZmlyc3RDaGlsZC5kYXRhLA0KCQkJCQkJdXNlclVybCAgPSB1c2VyTm9k +ZS5nZXRBdHRyaWJ1dGUoJ3VybCcpOw0KCQkJCQlpZiAoYWRkKSB7CQkJCQkJDQoJ +CQkJCQlwZW9wbGVNZW51ICYmIHBlb3BsZU1lbnUuYWRkQ2xhc3MoIGZhdiA/ICJq +cy15b3UtbG92ZS10aGlzLWNvcnAiIDogImpzLXlvdS13b3JrLWhlcmUiKTsNCgkJ +CQkJCXBlb3BsZUxpc3QgJiYgKCgobmV3IEVsZW1lbnQoJ2xpJykpLmFkb3B0KChu +ZXcgRWxlbWVudCgiYSIsIHsndGV4dCc6IHVzZXJOYW1lICwgJ2hyZWYnOiAiaHR0 +cDovLyIgKyB1c2VyVXJsICsnLyd9KSkpKS5pbmplY3QocGVvcGxlTGlzdCkpOw0K +CQkJCQkJcGVvcGxlQ291bnRlciAmJiAoKHBlb3BsZUNvdW50ZXIuaW5uZXJIVE1M +ID0gTnVtYmVyKHBlb3BsZUNvdW50ZXIuaW5uZXJIVE1MKSArIDEpKTsNCgkJCQkJ +fSBlbHNlIHsNCgkJCQkJCXBlb3BsZU1lbnUgJiYgcGVvcGxlTWVudS5yZW1vdmVD +bGFzcyggZmF2ID8gImpzLXlvdS1sb3ZlLXRoaXMtY29ycCIgOiAianMteW91LXdv +cmstaGVyZSIpOw0KCQkJCQkJcGVvcGxlQ291bnRlciAmJiAocGVvcGxlQ291bnRl +ci5pbm5lckhUTUwgPSBOdW1iZXIocGVvcGxlQ291bnRlci5pbm5lckhUTUwpIC0g +MSk7DQoJCQkJCQl2YXIgdXNlclF1ZXJ5ID0gJ2FbaHJlZj1odHRwOi8vJyt1c2Vy +VXJsKycvXSc7DQoJCQkJCQlwZW9wbGVMaXN0ICYmIHBlb3BsZUxpc3QuZ2V0RWxl +bWVudCh1c2VyUXVlcnkpLmdldFBhcmVudCgpLmRpc3Bvc2UoKTsNCgkJCQkJfQ0K +CQkJCQkkKCdmYW5zX2NvdW50Jykuc2V0KCdodG1sJyxjb21wYW55LmdldEF0dHJp +YnV0ZSgnZmFuc19jb3VudF9zdHInKSk7DQoJCQkJfQ0KCQkJCQ0KCQkJfQ0KICAg +ICAgICB9KSkuc2VuZCgpOw0KCX0sDQoJZmFuU2VuZCA6IGZ1bmN0aW9uIChjb21w +YW55X2lkLCBhZGRGYW4pIHsNCgkJdGhpcy53b3JrZXJTZW5kKGNvbXBhbnlfaWQs +IGFkZEZhbiwgdHJ1ZSk7DQoJfQ0KfTsNCg== + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=write-topic.webp +Content-Type: image/webp; name=write-topic.webp +Content-Location: http://habrahabr.ru/i/write-topic.png +Content-Transfer-Encoding: Base64 + +UklGRh4CAABXRUJQVlA4IBICAACQDACdASoiACMAA8cIhYWIhYSICQJPoF0+QHP9 +ALcB/oFksIVx/8B/FD8o+Td7NcQDT3+J+4DeAeYB/gPsB87z+A6gD6DnlD/tr8GX +7h/s17Q5gBZk3kVBdI/0ewt/XMrvHbi6zJXBFjLc4EtTAP7uO/8xfiD/1747frr4 +bwsL4NbcPwwe7///idrULNYx7f/U/bnug8zo547cf+uYz/eznMGlv9ORQBHMbkyo +vC9kr/nK9mQOi1VWYj4ZnTJZi+zmB3VfDsNbR7bWuqOHhSfyhIEoAIaerCIT8xfD +E5vGME0r8erPpsmt/bETk06lChQfi176E5GF/B/LZM5H+uxHRBjuHX5piVo/eT1/ +5yeU0GZ+XCwON/2qkf11ddzzOiyAfRhDBAnxhqoJg0WPFvbcvG6IsnRFmNnSbbh9 +LXAoBnxTkXeYKs75977vF8wfVubm17mb4P1qXV+LPkWmlOedHWeYCLxQZQ4cHwxr +8uLTG+Yi4hPGFEyI6lsp7SpL5AVZwYjo5HNKXNfeo81ssWK+xtqz5e6ePg6/haww +FHpc4vP3obSkw5L49H/cFsyP8wntdluGtwOUf0sLjzmazR/V1w3F4ecu8pXWMeCH +7+KOHpZ/531ZHSkD3BFNk9PjZP1cCv2O9F3Pzw9mSUxmRykX4ODf2jA3xpHPpd7U +3pqyfu/4utz9lbxw1uFyMKEAmnBgAA== + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=mootools-drag.js +Content-Type: application/x-javascript; charset=utf-8; name=mootools-drag.js +Content-Location: http://habrahabr.ru/js/1307631427/tm/mootools-drag.js +Content-Transfer-Encoding: Base64 + +Ly9Nb29Ub29scyBNb3JlLCA8aHR0cDovL21vb3Rvb2xzLm5ldC9tb3JlPi4gQ29w +eXJpZ2h0IChjKSAyMDA2LTIwMDggVmFsZXJpbyBQcm9pZXR0aSwgPGh0dHA6Ly9t +YWQ0bWlsay5uZXQ+LCBNSVQgU3R5bGUgTGljZW5zZS4KdmFyIERyYWc9bmV3IENs +YXNzKHtJbXBsZW1lbnRzOltFdmVudHMsT3B0aW9uc10sb3B0aW9uczp7c25hcDo2 +LHVuaXQ6InB4IixncmlkOmZhbHNlLHN0eWxlOnRydWUsbGltaXQ6ZmFsc2UsaGFu +ZGxlOmZhbHNlLGludmVydDpmYWxzZSxwcmV2ZW50RGVmYXVsdDpmYWxzZSxtb2Rp +ZmllcnM6e3g6ImxlZnQiLHk6InRvcCJ9fSxpbml0aWFsaXplOmZ1bmN0aW9uKCl7 +dmFyIEI9QXJyYXkubGluayhhcmd1bWVudHMse29wdGlvbnM6T2JqZWN0LnR5cGUs +ZWxlbWVudDokZGVmaW5lZH0pOwp0aGlzLmVsZW1lbnQ9JChCLmVsZW1lbnQpO3Ro +aXMuZG9jdW1lbnQ9dGhpcy5lbGVtZW50LmdldERvY3VtZW50KCk7dGhpcy5zZXRP +cHRpb25zKEIub3B0aW9uc3x8e30pO3ZhciBBPSR0eXBlKHRoaXMub3B0aW9ucy5o +YW5kbGUpO3RoaXMuaGFuZGxlcz0oQT09ImFycmF5Inx8QT09ImNvbGxlY3Rpb24i +KT8kJCh0aGlzLm9wdGlvbnMuaGFuZGxlKTokKHRoaXMub3B0aW9ucy5oYW5kbGUp +fHx0aGlzLmVsZW1lbnQ7CnRoaXMubW91c2U9e25vdzp7fSxwb3M6e319O3RoaXMu +dmFsdWU9e3N0YXJ0Ont9LG5vdzp7fX07dGhpcy5zZWxlY3Rpb249KEJyb3dzZXIu +RW5naW5lLnRyaWRlbnQpPyJzZWxlY3RzdGFydCI6Im1vdXNlZG93biI7dGhpcy5i +b3VuZD17c3RhcnQ6dGhpcy5zdGFydC5iaW5kKHRoaXMpLGNoZWNrOnRoaXMuY2hl +Y2suYmluZCh0aGlzKSxkcmFnOnRoaXMuZHJhZy5iaW5kKHRoaXMpLHN0b3A6dGhp +cy5zdG9wLmJpbmQodGhpcyksY2FuY2VsOnRoaXMuY2FuY2VsLmJpbmQodGhpcyks +ZXZlbnRTdG9wOiRsYW1iZGEoZmFsc2UpfTsKdGhpcy5hdHRhY2goKTt9LGF0dGFj +aDpmdW5jdGlvbigpe3RoaXMuaGFuZGxlcy5hZGRFdmVudCgibW91c2Vkb3duIix0 +aGlzLmJvdW5kLnN0YXJ0KTtyZXR1cm4gdGhpczt9LGRldGFjaDpmdW5jdGlvbigp +e3RoaXMuaGFuZGxlcy5yZW1vdmVFdmVudCgibW91c2Vkb3duIix0aGlzLmJvdW5k +LnN0YXJ0KTsKcmV0dXJuIHRoaXM7fSxzdGFydDpmdW5jdGlvbihDKXtpZih0aGlz +Lm9wdGlvbnMucHJldmVudERlZmF1bHQpe0MucHJldmVudERlZmF1bHQoKTt9dGhp +cy5maXJlRXZlbnQoImJlZm9yZVN0YXJ0Iix0aGlzLmVsZW1lbnQpO3RoaXMubW91 +c2Uuc3RhcnQ9Qy5wYWdlOwp2YXIgQT10aGlzLm9wdGlvbnMubGltaXQ7dGhpcy5s +aW1pdD17eDpbXSx5OltdfTtmb3IodmFyIEQgaW4gdGhpcy5vcHRpb25zLm1vZGlm +aWVycyl7aWYoIXRoaXMub3B0aW9ucy5tb2RpZmllcnNbRF0pe2NvbnRpbnVlO31p +Zih0aGlzLm9wdGlvbnMuc3R5bGUpe3RoaXMudmFsdWUubm93W0RdPXRoaXMuZWxl +bWVudC5nZXRTdHlsZSh0aGlzLm9wdGlvbnMubW9kaWZpZXJzW0RdKS50b0ludCgp +Owp9ZWxzZXt0aGlzLnZhbHVlLm5vd1tEXT10aGlzLmVsZW1lbnRbdGhpcy5vcHRp +b25zLm1vZGlmaWVyc1tEXV07fWlmKHRoaXMub3B0aW9ucy5pbnZlcnQpe3RoaXMu +dmFsdWUubm93W0RdKj0tMTt9dGhpcy5tb3VzZS5wb3NbRF09Qy5wYWdlW0RdLXRo +aXMudmFsdWUubm93W0RdOwppZihBJiZBW0RdKXtmb3IodmFyIEI9MjtCLS07Qil7 +aWYoJGNoayhBW0RdW0JdKSl7dGhpcy5saW1pdFtEXVtCXT0kbGFtYmRhKEFbRF1b +Ql0pKCk7fX19fWlmKCR0eXBlKHRoaXMub3B0aW9ucy5ncmlkKT09Im51bWJlciIp +e3RoaXMub3B0aW9ucy5ncmlkPXt4OnRoaXMub3B0aW9ucy5ncmlkLHk6dGhpcy5v +cHRpb25zLmdyaWR9Owp9dGhpcy5kb2N1bWVudC5hZGRFdmVudHMoe21vdXNlbW92 +ZTp0aGlzLmJvdW5kLmNoZWNrLG1vdXNldXA6dGhpcy5ib3VuZC5jYW5jZWx9KTt0 +aGlzLmRvY3VtZW50LmFkZEV2ZW50KHRoaXMuc2VsZWN0aW9uLHRoaXMuYm91bmQu +ZXZlbnRTdG9wKTt9LGNoZWNrOmZ1bmN0aW9uKEEpe2lmKHRoaXMub3B0aW9ucy5w +cmV2ZW50RGVmYXVsdCl7QS5wcmV2ZW50RGVmYXVsdCgpOwp9dmFyIEI9TWF0aC5y +b3VuZChNYXRoLnNxcnQoTWF0aC5wb3coQS5wYWdlLngtdGhpcy5tb3VzZS5zdGFy +dC54LDIpK01hdGgucG93KEEucGFnZS55LXRoaXMubW91c2Uuc3RhcnQueSwyKSkp +O2lmKEI+dGhpcy5vcHRpb25zLnNuYXApe3RoaXMuY2FuY2VsKCk7dGhpcy5kb2N1 +bWVudC5hZGRFdmVudHMoe21vdXNlbW92ZTp0aGlzLmJvdW5kLmRyYWcsbW91c2V1 +cDp0aGlzLmJvdW5kLnN0b3B9KTsKdGhpcy5maXJlRXZlbnQoInN0YXJ0Iix0aGlz +LmVsZW1lbnQpLmZpcmVFdmVudCgic25hcCIsdGhpcy5lbGVtZW50KTt9fSxkcmFn +OmZ1bmN0aW9uKEEpe2lmKHRoaXMub3B0aW9ucy5wcmV2ZW50RGVmYXVsdCl7QS5w +cmV2ZW50RGVmYXVsdCgpO310aGlzLm1vdXNlLm5vdz1BLnBhZ2U7CmZvcih2YXIg +QiBpbiB0aGlzLm9wdGlvbnMubW9kaWZpZXJzKXtpZighdGhpcy5vcHRpb25zLm1v +ZGlmaWVyc1tCXSl7Y29udGludWU7fXRoaXMudmFsdWUubm93W0JdPXRoaXMubW91 +c2Uubm93W0JdLXRoaXMubW91c2UucG9zW0JdO2lmKHRoaXMub3B0aW9ucy5pbnZl +cnQpe3RoaXMudmFsdWUubm93W0JdKj0tMTsKfWlmKHRoaXMub3B0aW9ucy5saW1p +dCYmdGhpcy5saW1pdFtCXSl7aWYoJGNoayh0aGlzLmxpbWl0W0JdWzFdKSYmKHRo +aXMudmFsdWUubm93W0JdPnRoaXMubGltaXRbQl1bMV0pKXt0aGlzLnZhbHVlLm5v +d1tCXT10aGlzLmxpbWl0W0JdWzFdO31lbHNle2lmKCRjaGsodGhpcy5saW1pdFtC +XVswXSkmJih0aGlzLnZhbHVlLm5vd1tCXTx0aGlzLmxpbWl0W0JdWzBdKSl7dGhp +cy52YWx1ZS5ub3dbQl09dGhpcy5saW1pdFtCXVswXTsKfX19aWYodGhpcy5vcHRp +b25zLmdyaWRbQl0pe3RoaXMudmFsdWUubm93W0JdLT0odGhpcy52YWx1ZS5ub3db +Ql0ldGhpcy5vcHRpb25zLmdyaWRbQl0pO31pZih0aGlzLm9wdGlvbnMuc3R5bGUp +e3RoaXMuZWxlbWVudC5zZXRTdHlsZSh0aGlzLm9wdGlvbnMubW9kaWZpZXJzW0Jd +LHRoaXMudmFsdWUubm93W0JdK3RoaXMub3B0aW9ucy51bml0KTsKfWVsc2V7dGhp +cy5lbGVtZW50W3RoaXMub3B0aW9ucy5tb2RpZmllcnNbQl1dPXRoaXMudmFsdWUu +bm93W0JdO319dGhpcy5maXJlRXZlbnQoImRyYWciLHRoaXMuZWxlbWVudCk7fSxj +YW5jZWw6ZnVuY3Rpb24oQSl7dGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudCgibW91 +c2Vtb3ZlIix0aGlzLmJvdW5kLmNoZWNrKTsKdGhpcy5kb2N1bWVudC5yZW1vdmVF +dmVudCgibW91c2V1cCIsdGhpcy5ib3VuZC5jYW5jZWwpO2lmKEEpe3RoaXMuZG9j +dW1lbnQucmVtb3ZlRXZlbnQodGhpcy5zZWxlY3Rpb24sdGhpcy5ib3VuZC5ldmVu +dFN0b3ApO3RoaXMuZmlyZUV2ZW50KCJjYW5jZWwiLHRoaXMuZWxlbWVudCk7Cn19 +LHN0b3A6ZnVuY3Rpb24oQSl7dGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudCh0aGlz +LnNlbGVjdGlvbix0aGlzLmJvdW5kLmV2ZW50U3RvcCk7dGhpcy5kb2N1bWVudC5y +ZW1vdmVFdmVudCgibW91c2Vtb3ZlIix0aGlzLmJvdW5kLmRyYWcpO3RoaXMuZG9j +dW1lbnQucmVtb3ZlRXZlbnQoIm1vdXNldXAiLHRoaXMuYm91bmQuc3RvcCk7Cmlm +KEEpe3RoaXMuZmlyZUV2ZW50KCJjb21wbGV0ZSIsdGhpcy5lbGVtZW50KTt9fX0p +O0VsZW1lbnQuaW1wbGVtZW50KHttYWtlUmVzaXphYmxlOmZ1bmN0aW9uKEEpe3Jl +dHVybiBuZXcgRHJhZyh0aGlzLCRtZXJnZSh7bW9kaWZpZXJzOnt4OiJ3aWR0aCIs +eToiaGVpZ2h0In19LEEpKTsKfX0pO0RyYWcuTW92ZT1uZXcgQ2xhc3Moe0V4dGVu +ZHM6RHJhZyxvcHRpb25zOntkcm9wcGFibGVzOltdLGNvbnRhaW5lcjpmYWxzZX0s +aW5pdGlhbGl6ZTpmdW5jdGlvbihDLEIpe3RoaXMucGFyZW50KEMsQik7dGhpcy5k +cm9wcGFibGVzPSQkKHRoaXMub3B0aW9ucy5kcm9wcGFibGVzKTsKdGhpcy5jb250 +YWluZXI9JCh0aGlzLm9wdGlvbnMuY29udGFpbmVyKTtpZih0aGlzLmNvbnRhaW5l +ciYmJHR5cGUodGhpcy5jb250YWluZXIpIT0iZWxlbWVudCIpe3RoaXMuY29udGFp +bmVyPSQodGhpcy5jb250YWluZXIuZ2V0RG9jdW1lbnQoKS5ib2R5KTt9Qz10aGlz +LmVsZW1lbnQ7CnZhciBEPUMuZ2V0U3R5bGUoInBvc2l0aW9uIik7dmFyIEE9KEQh +PSJzdGF0aWMiKT9EOiJhYnNvbHV0ZSI7aWYoQy5nZXRTdHlsZSgibGVmdCIpPT0i +YXV0byJ8fEMuZ2V0U3R5bGUoInRvcCIpPT0iYXV0byIpe0MucG9zaXRpb24oQy5n +ZXRQb3NpdGlvbihDLm9mZnNldFBhcmVudCkpOwp9Qy5zZXRTdHlsZSgicG9zaXRp +b24iLEEpO3RoaXMuYWRkRXZlbnQoInN0YXJ0IixmdW5jdGlvbigpe3RoaXMuY2hl +Y2tEcm9wcGFibGVzKCk7fSx0cnVlKTt9LHN0YXJ0OmZ1bmN0aW9uKEIpe2lmKHRo +aXMuY29udGFpbmVyKXt2YXIgRD10aGlzLmVsZW1lbnQsSj10aGlzLmNvbnRhaW5l +cixFPUouZ2V0Q29vcmRpbmF0ZXMoRC5vZmZzZXRQYXJlbnQpLEY9e30sQT17fTsK +WyJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiXS5lYWNoKGZ1bmN0aW9uKEsp +e0ZbS109Si5nZXRTdHlsZSgicGFkZGluZy0iK0spLnRvSW50KCk7QVtLXT1ELmdl +dFN0eWxlKCJtYXJnaW4tIitLKS50b0ludCgpO30sdGhpcyk7dmFyIEM9RC5vZmZz +ZXRXaWR0aCtBLmxlZnQrQS5yaWdodCxJPUQub2Zmc2V0SGVpZ2h0K0EudG9wK0Eu +Ym90dG9tOwp2YXIgSD1bRS5sZWZ0K0YubGVmdCxFLnJpZ2h0LUYucmlnaHQtQ107 +dmFyIEc9W0UudG9wK0YudG9wLEUuYm90dG9tLUYuYm90dG9tLUldO3RoaXMub3B0 +aW9ucy5saW1pdD17eDpILHk6R307fXRoaXMucGFyZW50KEIpO30sY2hlY2tBZ2Fp +bnN0OmZ1bmN0aW9uKEIpe0I9Qi5nZXRDb29yZGluYXRlcygpOwp2YXIgQT10aGlz +Lm1vdXNlLm5vdztyZXR1cm4oQS54PkIubGVmdCYmQS54PEIucmlnaHQmJkEueTxC +LmJvdHRvbSYmQS55PkIudG9wKTt9LGNoZWNrRHJvcHBhYmxlczpmdW5jdGlvbigp +e3ZhciBBPXRoaXMuZHJvcHBhYmxlcy5maWx0ZXIodGhpcy5jaGVja0FnYWluc3Qs +dGhpcykuZ2V0TGFzdCgpOwppZih0aGlzLm92ZXJlZCE9QSl7aWYodGhpcy5vdmVy +ZWQpe3RoaXMuZmlyZUV2ZW50KCJsZWF2ZSIsW3RoaXMuZWxlbWVudCx0aGlzLm92 +ZXJlZF0pO31pZihBKXt0aGlzLm92ZXJlZD1BO3RoaXMuZmlyZUV2ZW50KCJlbnRl +ciIsW3RoaXMuZWxlbWVudCxBXSk7fWVsc2V7dGhpcy5vdmVyZWQ9bnVsbDsKfX19 +LGRyYWc6ZnVuY3Rpb24oQSl7dGhpcy5wYXJlbnQoQSk7aWYodGhpcy5kcm9wcGFi +bGVzLmxlbmd0aCl7dGhpcy5jaGVja0Ryb3BwYWJsZXMoKTt9fSxzdG9wOmZ1bmN0 +aW9uKEEpe3RoaXMuY2hlY2tEcm9wcGFibGVzKCk7dGhpcy5maXJlRXZlbnQoImRy +b3AiLFt0aGlzLmVsZW1lbnQsdGhpcy5vdmVyZWRdKTsKdGhpcy5vdmVyZWQ9bnVs +bDtyZXR1cm4gdGhpcy5wYXJlbnQoQSk7fX0pO0VsZW1lbnQuaW1wbGVtZW50KHtt +YWtlRHJhZ2dhYmxlOmZ1bmN0aW9uKEEpe3JldHVybiBuZXcgRHJhZy5Nb3ZlKHRo +aXMsQSk7fX0pOw== + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=sidebar.js +Content-Type: application/x-javascript; charset=utf-8; name=sidebar.js +Content-Location: http://habrahabr.ru/js/1307631427/tm/sidebar/sidebar.js +Content-Transfer-Encoding: Base64 + +dmFyIHRtID0gKHR5cGVvZih0bSkgIT0gJ3VuZGVmaW5lZCcpID8gdG0gOiB7fTsK +CnRtLnNpZGViYXIgPSAodHlwZW9mKHRtLnNpZGViYXIpICE9ICd1bmRlZmluZWQn +KSA/IHRtLnNpZGViYXIgOiB7fTsKdG0uc2lkZWJhci5idXR0b25zID0gKHR5cGVv +Zih0bS5zaWRlYmFyLmJ1dHRvbnMpICE9ICd1bmRlZmluZWQnKSA/IHRtLnNpZGVi +YXIuYnV0dG9ucyA6IHt9OwoKdG0uc2lkZWJhci5iYXIgPSB7CglsaXN0OiBudWxs +LAoJYnV0dG9uczogW10sCgltb3ZlcjogbnVsbCwKCW1vdmVyTGluazogbnVsbCwK +CQoJaW5pdGlhbGl6ZTogZnVuY3Rpb24oKXsKCQkKCQl0aGlzLmxpc3QgPSAkKGRv +Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3VsJykpOwoJCXRoaXMubGlzdC5pZCA9ICd4 +c2lkZWJhcic7CgkJdmFyIHBsYWNlciA9ICQoJ3hzaWRlYmFyLXBsYWNlcicpOwoJ +CXBsYWNlciAmJiBwbGFjZXIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5s +aXN0LCBwbGFjZXIpOwoJCXRoaXMubGlzdC5zZXRPcGFjaXR5KDAuNSk7CgkJCgkJ +dGhpcy5saXN0LmFkZEV2ZW50KCdtb3VzZW92ZXInLCAoZnVuY3Rpb24oKXsKCQkJ +dGhpcy5saXN0LnNldE9wYWNpdHkoMSk7CgkJfSkuYmluZCh0aGlzKSk7CgkJCgkJ +dGhpcy5saXN0LmFkZEV2ZW50KCdtb3VzZW91dCcsIChmdW5jdGlvbigpewoJCQl0 +aGlzLmxpc3Quc2V0T3BhY2l0eSgwLjUpOwoJCX0pLmJpbmQodGhpcykpOwoJCQoJ +CXRoaXMubW92ZXIgPSAkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJykpOwoJ +CXRoaXMubW92ZXIuY2xhc3NOYW1lID0gJ21vdmVyJzsKCQl0aGlzLm1vdmVyLnN0 +eWxlLnBhZGRpbmcgPSAnMHB4JzsKCQl0aGlzLm1vdmVyLnN0eWxlLnRleHRBbGln +biA9ICdjZW50ZXInOwoJCXRoaXMubW92ZXIuc3R5bGUuYmFja2dyb3VuZENvbG9y +ID0gIndoaXRlIjsKCQl0aGlzLmxpc3QuYXBwZW5kQ2hpbGQodGhpcy5tb3Zlcik7 +CgkJCgkJCgkJdGhpcy5tb3ZlckxpbmsgPSAkKGRvY3VtZW50LmNyZWF0ZUVsZW1l +bnQoJ2EnKSk7CgkJdGhpcy5tb3ZlckxpbmsuaW5uZXJIVE1MID0gJyZsYXJyOyc7 +CgkJdGhpcy5tb3ZlckxpbmsuaHJlZiA9ICcjJzsKCgkJaWYgKENvb2tpZS5yZWFk +KCd4c2lkZWJhci1wb3MnKSkgewoJCQlpZiAoQ29va2llLnJlYWQoJ3hzaWRlYmFy +LXBvcycpID09ICdsZWZ0JykgewoJCQkJdGhpcy5saXN0LmFkZENsYXNzKCdsZWZ0 +Jyk7CgkJCQl0aGlzLm1vdmVyTGluay5pbm5lckhUTUwgPSAnJnJhcnI7JzsKCQkJ +fQoJCX0KCgkJdGhpcy5tb3ZlckxpbmsuYWRkRXZlbnQoJ2NsaWNrJywgKGZ1bmN0 +aW9uKGUpewoJCQlpZiAodGhpcy5saXN0Lmhhc0NsYXNzKCdsZWZ0JykpIHsKCQkJ +CXRoaXMubGlzdC5yZW1vdmVDbGFzcygnbGVmdCcpOwoJCQkJdGhpcy5tb3Zlckxp +bmsuaW5uZXJIVE1MID0gJyZsYXJyOyc7CgkJCQlDb29raWUud3JpdGUoJ3hzaWRl +YmFyLXBvcycsICdyaWdodCcsIHtkdXJhdGlvbjogMTAwMDB9KTsKCQkJfSBlbHNl +IHsKCQkJCXRoaXMubGlzdC5hZGRDbGFzcygnbGVmdCcpOwoJCQkJdGhpcy5tb3Zl +ckxpbmsuaW5uZXJIVE1MID0gJyZyYXJyOyc7CgkJCQlDb29raWUud3JpdGUoJ3hz +aWRlYmFyLXBvcycsICdsZWZ0Jywge2R1cmF0aW9uOiAxMDAwMH0pOwoJCQl9CgkJ +CWUuc3RvcCgpOwoJCX0pLmJpbmQodGhpcykpOwoJCQoJCXRoaXMubW92ZXIuYXBw +ZW5kQ2hpbGQodGhpcy5tb3ZlckxpbmspOwoJfSwKCQoJYWRkQnV0dG9uOiBmdW5j +dGlvbihidG4pewoJCXRoaXMuYnV0dG9ucy5wdXNoKGJ0bik7CgkJYnRuLl9saXN0 +SXRlbSA9IG5ldyBFbGVtZW50KCdsaScpOwoJCWJ0bi5fbGlzdEl0ZW0uYXBwZW5k +Q2hpbGQoYnRuLmdldEVsZW1lbnQoKSk7CgkJdGhpcy5saXN0LmFwcGVuZENoaWxk +KGJ0bi5fbGlzdEl0ZW0pOwovLwkJdGhpcy5saXN0Lmluc2VydEJlZm9yZShidG4u +X2xpc3RJdGVtLCB0aGlzLm1vdmVyKTsKCX0sCgoJYWRkQnV0dG9uQmVmb3JlOiBm +dW5jdGlvbihidG4sIG9sZEJ0bil7CgkJdGhpcy5idXR0b25zLnB1c2goYnRuKTsK +CQlidG4uX2xpc3RJdGVtID0gbmV3IEVsZW1lbnQoJ2xpJyk7CgkJYnRuLl9saXN0 +SXRlbS5hcHBlbmRDaGlsZChidG4uZ2V0RWxlbWVudCgpKTsKCQl0aGlzLmxpc3Qu +aW5zZXJ0QmVmb3JlKGJ0bi5fbGlzdEl0ZW0sIG9sZEJ0bi5fbGlzdEl0ZW0pOwov +LwkJdGhpcy5saXN0LmFwcGVuZENoaWxkKGJ0bi5fbGlzdEl0ZW0pOwoJfSwKCQoJ +c2hvd0J1dHRvbjogZnVuY3Rpb24oYnRuKSB7CgkJYnRuLl9saXN0SXRlbS5yZW1v +dmVDbGFzcygnaGlkZGVuJyk7Cgl9LAoJCgloaWRlQnV0dG9uOiBmdW5jdGlvbihi +dG4pIHsKCQlidG4uX2xpc3RJdGVtLmFkZENsYXNzKCdoaWRkZW4nKTsKCX0KCQoK +fTsKCnRtLnNpZGViYXIuYnV0dG9ucy5yZWZyZXNoQnV0dG9uID0gewoJCglkaXY6 +IG51bGwsCglidXR0b25MaW5rOiBudWxsLAoJY291bnRMaW5rOiBudWxsLAoJY291 +bnRCYXI6IG51bGwsCgkKCWluaXRpYWxpemU6IGZ1bmN0aW9uKCkgewoJCXRoaXMu +YnV0dG9uTGluayA9ICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpKTsKCQl0 +aGlzLmJ1dHRvbkxpbmsuY2xhc3NOYW1lID0gJ2J1dHRvbic7CgkJdGhpcy5idXR0 +b25MaW5rLmhyZWYgPSAnIyc7CgkJdGhpcy5idXR0b25MaW5rLnRpdGxlID0gJ9Ce +0LHQvdC+0LLQuNGC0Ywg0LrQvtC80LzQtdC90YLQsNGA0LjQuCDQsdC10Lcg0L/Q +tdGA0LXQt9Cw0LPRgNGD0LfQutC4INGB0YLRgNCw0L3QuNGG0YsgKEFsdCArIFNo +aWZ0ICsgUiknOwoJCXRoaXMuYnV0dG9uTGluay5hZGRFdmVudCgnY2xpY2snLCAo +ZnVuY3Rpb24oZSl7CgkJCWUuc3RvcCgpOwoJCQl0aGlzLnJlbG9hZENvbW1lbnRz +KCk7CgkJfSkuYmluZCh0aGlzKSk7CgkJCgkJdGhpcy5jb3VudExpbmsgPSAkKGRv +Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKSk7CgkJdGhpcy5jb3VudExpbmsuY2xh +c3NOYW1lID0gJ2NvdW50JzsKCQl0aGlzLmNvdW50TGluay5ocmVmID0gJyMnOwoJ +CXRoaXMuY291bnRMaW5rLnRpdGxlID0gJ9Cf0LXRgNC10LnRgtC4INC6INGB0LvQ +tdC00YPRjtGJ0LXQvNGDINC90L7QstC+0LzRgyDQutC+0LzQvNC10L3RgtCw0YDQ +uNGOIChBbHQgKyBTaGlmdCArIEMpJzsKCQl0aGlzLmNvdW50TGluay5hZGRFdmVu +dCgnY2xpY2snLCAoZnVuY3Rpb24oZSl7CgkJCWUuc3RvcCgpOwoJCQl0aGlzLm5l +eHROZXdDb21tZW50KCk7CgkJfSkuYmluZCh0aGlzKSk7CgkJCgkJdGhpcy5jb3Vu +dEJhciA9ICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOwoJCXRoaXMu +Y291bnRCYXIuY2xhc3NOYW1lID0gJ25ldy1tZXNzYWdlcyBoaWRkZW4nOwoJCQoJ +CXZhciBkaXZpZGVyID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7 +CgkJZGl2aWRlci5jbGFzc05hbWUgPSAnZGl2aWRlcic7CgkJCgkJdGhpcy5jb3Vu +dEJhci5hcHBlbmRDaGlsZChkaXZpZGVyKTsKCQl0aGlzLmNvdW50QmFyLmFwcGVu +ZENoaWxkKHRoaXMuY291bnRMaW5rKTsKCQkKCQl0aGlzLmRpdiA9IGRvY3VtZW50 +LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwoJCXRoaXMuZGl2LmlkID0gJ3JlZnJlc2gt +Y29tbWVudHMtYnV0dG9uJzsKCQkKCQl0aGlzLmRpdi5hcHBlbmRDaGlsZCh0aGlz +LmJ1dHRvbkxpbmspOwoJCXRoaXMuZGl2LmFwcGVuZENoaWxkKHRoaXMuY291bnRC +YXIpOwoKCQkkKHdpbmRvdykuYWRkRXZlbnQoJ2tleXByZXNzJywgZnVuY3Rpb24o +ZSl7CgkJCWlmICgoZS5hbHQgJiYgKGUua2V5ID09ICdyJyB8fCBlLmtleSA9PSAi +0LoiKSkgfHwgKGUua2V5ID09ICLCriIgfHwgZS5rZXkgPT0gItGcIiB8fCBlLmtl +eSA9PSAn4oCwJyB8fCBlLmtleT09J9CMJykpIHsKCQkJCXRtLnNpZGViYXIuYnV0 +dG9ucy5yZWZyZXNoQnV0dG9uLnJlbG9hZENvbW1lbnRzKCk7CgkJCQllLnN0b3Ao +KTsKCQkJfSBlbHNlIGlmICgoZS5hbHQgJiYgKGUua2V5ID09ICdjJyB8fCBlLmtl +eSA9PSAn0YEnKSkgfHwgKGUua2V5ID09ICLDpyIgfHwgZS5rZXkgPT0nw4cnKSkg +ewoJCQkJdG0uc2lkZWJhci5idXR0b25zLnJlZnJlc2hCdXR0b24ubmV4dE5ld0Nv +bW1lbnQoKTsKCQkJCWUuc3RvcCgpOwoJCQl9CgkJfSk7CgoJCWNvbW1lbnRGb3Jt +LmFkZEV2ZW50KCd0bTpsb2FkaW5nLXN0YXJ0ZWQnLCAoZnVuY3Rpb24oKXsKCQkJ +dGhpcy5zZXRMb2FkaW5nKHRydWUpOwoJCX0pLmJpbmQodGhpcykpOwoJCQoJCWNv +bW1lbnRGb3JtLmFkZEV2ZW50KCd0bTpsb2FkaW5nLWZpbmlzaGVkJywgKGZ1bmN0 +aW9uKCl7CgkJCXRoaXMuc2V0TG9hZGluZyhmYWxzZSk7CgkJfSkuYmluZCh0aGlz +KSk7CgoJCWNvbW1lbnRGb3JtLmFkZEV2ZW50KCd0bTpuZXctY29tbWVudHMtY291 +bnQtY2hhbmdlZCcsIChmdW5jdGlvbihjb3VudCl7CgkJCXRoaXMuc2V0Q291bnQo +Y291bnQpOwoJCX0pLmJpbmQodGhpcykpOwoJCQoJCWNvbW1lbnRGb3JtLmFkZE5l +d0NvbW1lbnRzVG9CYXIoKTsKCX0sCgkKCXNldENvdW50OiBmdW5jdGlvbihjKSB7 +CgkJaWYgKGMgPT0gMCkgewoJCQl0aGlzLmNvdW50QmFyLmFkZENsYXNzKCdoaWRk +ZW4nKTsKCQl9IGVsc2UgewoJCQl0aGlzLmNvdW50QmFyLnJlbW92ZUNsYXNzKCdo +aWRkZW4nKTsKCQkJdGhpcy5jb3VudExpbmsuaW5uZXJIVE1MID0gYy50b1N0cmlu +ZygpOwoJCX0KCX0sCgkKCXNldExvYWRpbmc6IGZ1bmN0aW9uKGwpIHsKCQlpZiAo +bCkgewoJCQl0aGlzLmJ1dHRvbkxpbmsuYWRkQ2xhc3MoJ2xvYWRpbmcnKTsKCQl9 +IGVsc2UgewoJCQl0aGlzLmJ1dHRvbkxpbmsucmVtb3ZlQ2xhc3MoJ2xvYWRpbmcn +KTsKCQl9Cgl9LAoJCglyZWxvYWRDb21tZW50czogZnVuY3Rpb24oKSB7CgkJY29t +bWVudEZvcm0ucmVsb2FkQ29tbWVudHMoKTsKCX0sCgkKCW5leHROZXdDb21tZW50 +OiBmdW5jdGlvbigpIHsKCQljb21tZW50Rm9ybS5uZXh0TmV3Q29tbWVudCgpOwoJ +fSwKCQoJZ2V0RWxlbWVudDogZnVuY3Rpb24oKSB7CgkJcmV0dXJuIHRoaXMuZGl2 +OwoJfQoJCn07Cgp0bS5zaWRlYmFyLmJhci5pbml0aWFsaXplKCk7Cgp3aW5kb3cu +YWRkRXZlbnQoJ2RvbXJlYWR5JywgZnVuY3Rpb24oKXsKCXRtLnNpZGViYXIuYnV0 +dG9ucy5yZWZyZXNoQnV0dG9uLmluaXRpYWxpemUoKTsKCXRtLnNpZGViYXIuYmFy +LmFkZEJ1dHRvbih0bS5zaWRlYmFyLmJ1dHRvbnMucmVmcmVzaEJ1dHRvbik7CQp9 +KTs= + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=stub-user-small.gif +Content-Type: image/gif; name=stub-user-small.gif +Content-Location: http://habrahabr.ru/i/avatars/stub-user-small.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhFwAXAOYAAKSYmJGEhJ2VlaCUlJKFhZyRkZ+SkpOIiLGnp6menqKWlrqy +srOpqb21tZCDg8bExMrIyMzKytHOzsjGxuzn597Z2u7o6JWKiuvl5e/q6fHs6+7o +6d7Z2evl5tbS0peKipeNjdvX1+nj45WJiezo55mNjZqOjtvY1+7p6M/Ly/Dq65OG +hpmQkOfi4pSIiJaLi9TR0JKGhtnW1efj4ufi46abm/Dr697a2dTQ0ZiMjNbS07Sr +q+nj5JSHh+nk45uSktnV1ZiLi5SJic/LzNTQ0NnV1pOHh5aMjJeMjOzn6Letrevm +5ZaJicS8vMfAwNbT0pmMjKyiopuQkN7a2qugoMrDw7ivr5yPj52SksW+vs/MzL+3 +t5aKisK6uvDr6ryzs/Hs7MC4uJuPj66jo5WLi83GxpGFhZmOjpeLi9vY2K+lpaOY +mO7p6eXh4Onk5J6RkaecnKWZmdvX2Ozo6MvFxe/q6u/p6pWIiJ+YmOXg4PHr7O/p +6ePe3vDq6uDc3PHr6yH5BAAAAAAALAAAAAAXABcAAAf/gH8af4R6hIUag3+Gi3qG +GmCMgoqMkYeNhSp9m16bfSqaNpyifaSfdRl7qnape6mtrqqyGRkWFhsbFii6G2VV +Tk0bKChswra5JBTJFBRJFHROWV1bX83Jc8okSRgdHRjcHb9NYQ0LSjtL398dSx08 +Pjw8Im4i0tRWSgwIPiJwcWsi+M2g0YIGjYHkzO1AMIZKixlxFAxo8TCPxYt5vlhZ +qCZKghpt8gwwgOUin5MoTy5smCAOSiwFpKD0Q7NmTY81ANgUY8JEzRscKgCtIDRo +haAcplQwcaYEiApTOJxIcyJE1RByco6MGaJEDiRgT1SVUUSGDCBlIw4ocMUElBxo +m17IBUIWiIcnOjzoeLJmZFsoQT5w4XKBzBG9HjzgIAKjMREDBUyUCMxkhOULL47A +wLFYgmfPb8RM/mDZhWkhF4589qwlheshXj/ccdHDiJEDB4SQATFkSOsUEYIH/8Ck +x4rjMW6jBsFCeHAI0KEbJ0A9RvLlLH5Ehz6he3cCAQKYGR/jwAXmPwR47/6gfXsH +8MWXP59dAB737QMBADs= + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=3162_24x24.webp +Content-Type: image/webp; name=3162_24x24.webp +Content-Location: http://habrahabr.ru/media/thumb/d6/60/06/3162/3162_24x24.jpg +Content-Transfer-Encoding: Base64 + +UklGRgYBAABXRUJQVlA4IPoAAADwBgCdASoYABgAAMcIhYWIhYSICQIATgGsZzQH ++16LNppPn0/0v2zegr7Af6T/3z82NjNVE7lTIqfWip3hSgEcAP7+/3dyidSDkrWP +nD4cZJPN++F8f3hxvjP++9o+n6h+TOwu62Qn72meX2MBUI4nn/H/JFXiAtf/ybfx +cWkmDhWA5lTliY9RfneWEMnXS4jPtylWbjNhf/y5CtBIO92+3Pjv62n/3w1Oe/B/ +Oda7O4LZ/4cahS0RjLg3fxoGpmOO9nH/ybfxybDNz99peHx3n4rtSLWLYl/ZmhN7 +FRdbB0ZMPX/tDlJ7rFWWYduWCGucJtkkEULKWgAA + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=37010_24x24.webp +Content-Type: image/webp; name=37010_24x24.webp +Content-Location: http://habrahabr.ru/media/thumb/9f/fa/a3/37010/37010_24x24.png +Content-Transfer-Encoding: Base64 + +UklGRmQBAABXRUJQVlA4IFgBAADwBgCdASoYABgAAccIhYWIhYSICQICdbofn2ID +zz2mcq7BTBJlfkG+ksnRUOAkxKi+l1cVXap/zdRW4GUbKYyywP6jevt1//lH8AnE +5Gw6pAv3sg96Suf6HUNvlB9j9yxINyRzesE1LMO5uGtQc9lFIVPdwQNDOBFiCUOk +IKi5hlS0UfoJ+0sqVNm9SJv27thjD60lFp7++QTtDfAVtnPbPmn1s884Ft2xTnf9 +oO260EshoBoNDcHAYhT98S0/dX6NHQTv9RbVvf1suD9hpW0N+Q3tyhQ4Kqv0mgoz +Ip2MSGzJX18scaN5arncR/n6/44poIpg4M7lZgDp8h+c0PXbrNvpv19H7ujkqLz+ +V8ZsKm1A1quJC8Qj1aWfaMxaAswn440ijUjUv8Co8IDLyLgoW2IS88kA5GAkHqPh +rYn+Plza3WYvGTPYmZhCDb+/QPbuELBfIpnhgA== + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=29612_24x24.webp +Content-Type: image/webp; name=29612_24x24.webp +Content-Location: http://habrahabr.ru/media/thumb/47/77/79/29612/29612_24x24.jpg +Content-Transfer-Encoding: Base64 + +UklGRjgBAABXRUJQVlA4ICwBAAAQBQCdASoYABgAAUcIhYWIhYSICQICdQp+Fpg+ +M3XkxzwlM4HY/pfKPAqqDbxIE8qgAP7+9xGUC7ycxrnyP+e5yUYi6pWziJY13ON+ +4ibYXKcniATboKDtTLQva6TX4ThkPKg0H+YDFOgniCHcoqPeZmo4VDhdkDaYu+J5 +YyhyezLAnoZ3V/Zvj00BUh2Te0b+F5owr14SiukhM+70NfkA5w9USzilXLSbABtF +ZhvwOYsK/gnzHNFJrPD3wfQz6BsmCOTX3wIvHx2o+avWWrQ7YX3/bq5wa48Rn+JZ +TOOtl9n61sib47t6rhH3w0ref/KqFY6NrWTW7MIKAChfbaduNbQTFw3ycDuyh1zY +o9M4qmbxZt5fZUk6SySScscxCAz0TmW46BIzj/QKAAA= + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=44267_24x24.webp +Content-Type: image/webp; name=44267_24x24.webp +Content-Location: http://habrahabr.ru/media/thumb/01/14/4c/44267/44267_24x24.jpg +Content-Transfer-Encoding: Base64 + +UklGRqwBAABXRUJQVlA4IKABAADQBwCdASoYABgAAkcIhYWIhYSICQN2WwHycA/r +EclldV/FXk6d3WxqHf7pKf+lh+zISozxufOWTvk1n5pOzY5EqCTHU7VMSgD++ZC/ +DfwL/8TH+3+uv8m39gv/M17Q//lmjb4N3nz1lwfdd/k++tnN2cfbVbYD/bzvWHVj +b8Z/6lyyN/+Jj9OX+lzHEXuU9yDnCNqpX5wiRsgSP496veqxj7YId/+Y3QqGgZ7r +f6XP4XaDUylzLXX7vVwLRe5RNKFTgBKPrd2MRDc9T4JblETk+yEyGOk3XxDcg4tm +uJ1vPiL8ike0YUoL561ppRJvynK8c/lIgrNMYGPzx1c8vHXPLhhkfWTyp6/H+tPf +V88PO0YKbnhaHmJLYmGjROPmNqoyeHoXQ3DHfFjHV2O+mJ76zbJW+EFsx/ovwvau +h/5U+v309+njxOE+mGDpMkOP+nH61rl4hlzOD/uv/4Io7mdXECc40TIShW/vO54X +07iEDRfZ5ETv/wjWzp69R+R41NB44/fkujrUOpm5/TfP0lYwl7mmS+vioSUzcIX9 +aH6AAA== + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=21610_24x24.webp +Content-Type: image/webp; name=21610_24x24.webp +Content-Location: http://habrahabr.ru/media/thumb/ef/f1/15/21610/21610_24x24.jpg +Content-Transfer-Encoding: Base64 + +UklGRiIBAABXRUJQVlA4IBYBAAAQBgCdASoYABgAAIcIhYWIhYSICQIAEQb8e/zH +/r+CN+0HXkx9t+/9bELL7gm3u0VHJPpdfVWm0YaA8I4buAqs4ESWf1lG8Lyt8m5N +/JgHBx3xYaQx0/a/xrQPkHsD2On+M1ISTcL8pJk/mjke9Y9nG9hcfxAKq3DBcjcS +E8FqS0EK62piTk9zqXeeJHlzD/8btrMxHdKPV13Z2dDauDKnj3+m2/7YcMzHwf/+ +GvsLcWcHk0S2BrZBWlCcHOvne+6e7kIhmbKfR4Nvlkse0dDFHE4SSSPeTz8lw4xt +25zQHoWzxRN4fX4L07vzf1hvr/OWfbk3b0xwufRLtdUcJBQKn9O3c1Pan+745wLK +msWDFmaTqwAAAA== + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=30637_24x24.webp +Content-Type: image/webp; name=30637_24x24.webp +Content-Location: http://habrahabr.ru/media/thumb/7f/fb/ba/30637/30637_24x24.jpg +Content-Transfer-Encoding: Base64 + +UklGRnwBAABXRUJQVlA4IHABAACQBgCdASoYABgAAIcIhYWIhYSICQIDGftT2Jzw +UPNbzSvQ/sBdHb9kvRV9sVXfS53bigZm4eWkNxWMdVvqgP7+7X6vw1/l3prj/Y4T +aqtfR+H/8iAtDfU8svg1FPk0eM5YPx1d/7Dq7DCVMpd67fO0LCVK5RMPX/pFJ8q/ +hP5mQq98/w8I7BA/X/gzqFBmh/RnoBN2doEnpAH9u7JHDn3xzWzmiNJQti4j2ai7 +gPMaqKuHhvXMHM/zBC/0sb39A2pXwevAfePbnLHS9zD8oecNG2XLFZtTqIfxICaD +5O2CEKO2cpz3lAMG3zOGIa9WbBSc38Dk2TRHJtOeyoBPW9nnSf9R5CsYVLqYiMw2 +oDwe/Krv4JAIrvBIWsqZ6zxMAyjNo5k7RU8WU3/1W4OjZ8L4zx6D9GyUm1//F205 +36yqxnRcTgvTsqLmAAjMMSVLq5/3+ouo0qbF2ltXy0oiJKZpnt6pI69kcWaxV8a4 +tPMMAA== + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=bold_ru.gif +Content-Type: image/gif; name=bold_ru.gif +Content-Location: http://habrahabr.ru/i/panel/bold_ru.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhFAAUALMNAHGTqq7BzoajtnubsLjJ1PX3+dbg5+vw88zY4ZCrvGeMpMLR +2l2Env///wAAAAAAACH5BAEAAA0ALAAAAAAUABQAAARAsMlJq7046827NwLDDIMS +dIcoAQzRqU14cmrBIi8jsG7eGKzZBkaADRkShDGTYhQaCd1mwRoBBoGnZ8vter+W +CAA7 + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=italic_ru.gif +Content-Type: image/gif; name=italic_ru.gif +Content-Location: http://habrahabr.ru/i/panel/italic_ru.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhFAAUALMMAKS6yXGTqpCrvIajtuvw88zY4bjJ1OHo7a7BzmeMpHubsF2E +nv///wAAAAAAAAAAACH5BAEAAAwALAAAAAAUABQAAAQwkMlJq7046827n8AiDh+D +LEXJDIvKLIp6LIBqoKqwEGoQqISFoAQILBI1l3LJbGIiADs= + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=underline_ru.gif +Content-Type: image/gif; name=underline_ru.gif +Content-Location: http://habrahabr.ru/i/panel/underline_ru.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhFAAUALMMAIajtmeMpHubsHGTqq7BzqS6yfX3+evw88LR2uHo7dbg512E +nv///wAAAAAAAAAAACH5BAEAAAwALAAAAAAUABQAAAQ/kMlJq7046817T8OyCFIh +BkhmjJSyGNsCVAsn0/ZM1bE+8ZrbjhMYUA7GjakgOQgIHULgBPVYJaKsVnTtejsR +ADs= + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=strikethrough.gif +Content-Type: image/gif; name=strikethrough.gif +Content-Location: http://habrahabr.ru/i/panel/strikethrough.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhFAAUALMNAGeMpHGTqvX3+a7BzpCrvKS6ycLR2uHo7XubsOvw88zY4Yaj +tl2Env///wAAAAAAACH5BAEAAA0ALAAAAAAUABQAAAQ/sMlJq7046827lwWwAMHS +DYHQCITJLciUuNvCDOp3AAxDKJyecNj7GBg0TYBS6jAKqgPD0BH1AIOPdsvteicR +ADs= + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=code.gif +Content-Type: image/gif; name=code.gif +Content-Location: http://habrahabr.ru/i/panel/code.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhHgAUAKIEAI+pum2PpfT2+Et1kP///wAAAAAAAAAAACH5BAEAAAQALAAA +AAAeABQAAANMSLrc/jDKSau9OOsNB48eJQSBAAzeOQCEmqLAWC6yQIS34oW7TtQ/ +ki3ny/GIoRqQiGyiVgogEHesMpbBkqoF40JVMeFnTC6bz2hLAgA7 + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=link.gif +Content-Type: image/gif; name=link.gif +Content-Location: http://habrahabr.ru/i/panel/link.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhFAAUANU9AEhxjqrJ4vf+/1t/mq3O5WePqFmAnLLP4nSZs0lwjtDq9uTq +70hwjYeuynGWs6zV6qzN5Tlkgp7I4V2Go63P5ePy+6DG356/1Jm91IOpw/L3+oyw +yUt0kY6wypK1zPH9/5q/1X+lvX6kvH6gvD1nhZe60n6jvvj///T//z5ohXaatnOZ +sn+gvOL2/dLq/3WatsfU3aDA1lR8mUVtiDtnhV+DnklzkaTE2OTu9W6Wt3eatnmc +t////////wAAAAAAACH5BAEAAD0ALAAAAAAUABQAAAaQwJ5wSCwaj8ikcslsLjWH +gDRwwEWnB00xJuB5eYJS9yu4FTufyybjqZgqnszm8ukUQwpRb6RyvBw6LD0iCiFF +CA8rPTstJzwoLjk9iAhFBRIFPQwkETQRKQw9l5lEBhYTBgkcDTMNHAkGExYGRTIY +BBAEFCA2IBS4BBg1RQsDAMcAAzDGyAMLTtDR0tPU1URBADs= + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=image.gif +Content-Type: image/gif; name=image.gif +Content-Location: http://habrahabr.ru/i/panel/image.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhFAAUAOZ/ALrb7Huow3elwfj///n//7re8Pf///z///b///v//+z//5q9 +1Je60aPE2nqfupK2zoCivKfH3ef///P//32jve3///T//+H+/4yux46xy7vU54aq +xKDA17fc8Haet4Knwer//1OBqbbb8G6dw6DK4L3g8anP5Yy1zLjc8G2ew+7//7TZ +65S/2I241qbP5MDf8YGtxs/y/0p5pJ7J33qoy9fv+bve8GCPt9jy/eH7/9r5/+T+ +/+X//67W6Yy0zaXP5dHt+Lnc8Iaz0s/p95C50OH3/6rT59j0/975/53E4Lrc8Cxb +k4awyV6MsE+Ar5vC2ZzD35zF3LLZ7jlqoLXb78Hi8mqYwcnq9tPu+ZfB3I650en9 +/+n+/5K10oKvyP7//5a+1K/S6Y61zY22zaHJ3tf6/36oxdTv+6jR5JC7z+H4/4iu +zdn7//3//4WvyMbm8+T//+D//6vO5rTX66/U6aTM4qTO4420zY261tjx/F2NueP+ +/3OYtKvL4////////yH5BAEAAH8ALAAAAAAUABQAAAf6gH+Cg4SFhoeIhhp9jI2O +jhqEEX6UlZaWEYQNfh0FBR1KniIiKAVBfg2EHH5SEiAgcAoScTwKFVR+HIQLfmFs +ZRcVKgoKexc7dH4LhAx+Jjo5Wy0vQ1BcSDF1fgyED35kanJ4TlYpNzRJR1F+D4QZ +fiw4UyNZPT9CektFT34ZhBh+tJzpEiLEjSYyZKzJA8YPBkIb/KQpUeUNFiBXagCx +YYTIlw2EPvgZY2eGCwArfgCYg4aElwMfCFHwIyCAmRM+3ARgckcMDAEEKBBy0OaA +0QQJCBAYwNSAAQQOCHlIurTpUwQWLEyY4IEQBD5gw4oVCyGR2bNo0x4KBAA7 + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=big.png +Content-Type: image/png; name=big.png +Content-Location: http://habrahabr.ru/i/special/bookmate/big.png +Content-Transfer-Encoding: Base64 + +iVBORw0KGgoAAAANSUhEUgAAABQAAAAcCAYAAABh2p9gAAAAGXRFWHRTb2Z0d2Fy +ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHxJREFUeNpi/PDhOQMxIDw84T8++ZUr +FzCCaCYGKgNGmAthLoDZhMtFMHlcLqe6C1nQbUa3kZCL0QHVXTj4DWQhVQOh2Kd9 +OiQE6J8OCeWQAU+HLOhhMvwT9sCnQ/qX2O7u7ljTIbmxT/vSBpfLiHX5aDokvhyk +mwsBAgwA8KdP9B+WVFkAAAAASUVORK5CYII= + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=bg_cicle_help.png +Content-Type: image/png; name=bg_cicle_help.png +Content-Location: http://habrahabr.ru/i/bg_cicle_help.png +Content-Transfer-Encoding: Base64 + +iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2Fy +ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXRJREFUeNqkUz1rg1AUvUpCgsQQkqFT +oFPAyVl/QLPkJxQczZCtc6f+hULI3ilzFjNkjKtOmYT+AR1CQUGQ3iPvhaeRLDlw +UN+95355n5YkCbXwxlwyXaYlzi7MMzNgHlVnTQnwytww/dlsNhoOh9Tv92tDWZZU +FAWlafrHnzvmN/MXtp4i/ppOp+/j8Zh0XW+UNBgMapqmObperx9Zlr3w8SeCSM8N +xJPJ5E6sAjb4wFdUW1eAnn1klgjDkPb7PeV5DmdyXZdWq9XNDl+uwsc8EGCJntuZ +IZjP5xRFER0OB7Jtu/6WlUDDM1kigIuBqXAc5/a+WCzodDpRHMe3AIDQuEhryWl3 +Aa0AqECF0Fg9eoDtdltn9jyvkb0xWCwJ/nMXIF6v142WJITmggBnLEkX0D8Pq9Mm +NGcECLBhVVU1HPisDmAYxp0YvmIrA13s9o437C4Afh+ebQhfrPRR3oWHq6xmhpiX +6Eeu8tOXSXv2Ov8LMADqM6TU3F3u5gAAAABJRU5ErkJggg== + +------------KWbw7cErKpPXlw3YJNkT2K +Content-Disposition: inline; filename=favicon_1202.ico +Content-Type: image/x-icon; name=favicon_1202.ico +Content-Location: http://habrahabr.ru/media/company/favicon/12/favicon_1202.ico +Content-Transfer-Encoding: Base64 + +AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAABML +AAATCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAamRaGGZgVm1jXFO0YltT0WNd +VNJmYFe5amRadmpjWiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZmBWcGJc +Uu92b2f/in+B/5CAjv+IeYX/fHJy/3FrY/9vaWD2cmxignlyaAUAAAAAAAAAAAAA +AAAAAAAAYlxTm3VsaP+vnbP/yq/f/7GEzP+bX7n/klG3/41Jvv+NYKz/h3mB/3x2 +bv99d2yyf3lvCQAAAAAAAAAAYlxTf35xdv+pf87/om24/4VCfP94LWb/cyhf/3An +YP9xJ2v/eiWQ/4U1p/+Qeo3/h4J6/4aAdpgAAAAAZ2FYKnRrafSXZMH/j0um/34w +av9+MGj/fzJq/3wxZf95LmP/dClg/2wkWf9zJXP/gjOR/5aHjv+Qi4P/joh+P2tl +XIeKa5v/hC6z/4Ezgf+CM4T/gzWF/4M2gf+BNHj/gDNs/3swZf92K2P/bSVc/3Yk +dP+OXo3/n5qT/5qTiqF8dG3Hh0mq/4Amn/+EN5b/hTKf/4Ipm/+EM5b/hDaM/4I0 +gP+AM2//ezBl/3QqYf9wJWP/gTp8/6qfn/+kn5fchHd644tWnf+cipn/qJ+g/7Ch +sP+lhbj/jk6w/4Iqn/+ENI//gzZ//4Azbf95LmP/cSZi/340bv+xo6f/sKym6oqB +feSVjYz/opWh/6yas//Bub3/zMrJ/9bQ1/+rhsL/hDGf/4AsiP+BNHb/ezBl/3Ml +Xv+FR3P/xsC+/7y4suqNiILJk3mM/4g7p/+gZtH/roLS/8Oq1P/j3+P/5+bl/8y6 +0v+UW6D/gC57/3stYP97NGf/vKW0/9XU0v/Gwrzcko6IiY1mgv9/K4D/sYTU/97K +7//Eot//s4zS/+Td5f/u7ez/6+nr/8u3yf+6nbH/1crQ/+fm5f/e3Nn/zsrFo52Y +kSuZiY32dytj/4xKiv/NseL/yqrm/6l20/+jc8v/6+br//b08v/08/P/8O/v/+3s +6//p6Of/4uDe/9fUz0IAAAAAqaahg5N1jP92KWL/hUB5/7mTwv+dZb7/gyi0/6uC +vP/6+fb/+Pby//Lw7f/u7On/6ejm/+Tj4pwAAAAAAAAAALKspQK6uLWho4ik/5hp +nf+cbJr/dyhs/3cncv+EQ37/8Ovs//b18v/y8Oz/7evo/+nn5bbl5OMLAAAAAAAA +AAAAAAAAu7avAcnHxXbOx87ytZjB/6F3tf+cbLH/wKbL//Lx7//x7+v/7+3q9+vp +6Ifo5+UHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1dPPHOHf3nPo5+a06+rp0uzr +69Tt6+i57evpfOzq6CQAAAAAAAAAAAAAAAAAAAAA//8AAPgfAADwBwAA4AMAAMAD +AADAAQAAgAEAAIABAACAAQAAgAEAAMABAADAAwAA4AcAAPAPAAD4HwAA//8AAA== + +------------KWbw7cErKpPXlw3YJNkT2K-- diff --git a/4-JffArticles/2-BlocksAndCollections/BlocksAndCollections.txt b/4-JffArticles/2-BlocksAndCollections/BlocksAndCollections.txt new file mode 100644 index 0000000..3857977 --- /dev/null +++ b/4-JffArticles/2-BlocksAndCollections/BlocksAndCollections.txt @@ -0,0 +1,344 @@ +О блоках и их использовании в Objective-C часть 2-ая + + + Продолжение топика — О блоках и их использовании в Objective-C часть 1-ая. + + Многие из тех кто впервые сталкивается с блоками (или замыканиями), задают вопрос — «а зачем? Если и без них можно». Да можно. Но использование блоков имеет не мало преимуществ, и первое из них — существенная экономия на количестве кода, а следовательно и на времени написания и поддержке. Дальше буду говорить примерами. + +Содержание: + + 1. Работа с контейнерами на примере NSArray. + 2. Guards на примере UITableView. + 3. Использование блоков вместо классов на примере scheduled операций. + 4. Блоки вместо делегатов в UIAlertView. + 5. UIView анимации, последовательность анимаций. + 6. Асинхронные операции и управление ими. Переписываем пример с анимациями. + +1. Работа с контейнерами на примере NSArray. + + Самым часто приводимым примером использования блоков является работа с контейнерами. Этот топик не будет исключением, посмотрим на решения некоторых стандартных задач используя блоки. + +Задача1 + + Написать функцию создающую массив чисел из массива строк, каждый элемент которого является длинной соответсвующей строки входящего массива. + + Решение1: +NSArray* stringsLengths( NSArray* strings_ ) + { + NSMutableArray* strings_lengths_ = + [ NSMutableArray arrayWithCapacity: [ strings_ count ] ]; + for ( NSString* string_ in strings_ ) + { + NSNumber* length_ = [ NSNumber numberWithUnsignedInt: [ string_ length ] ]; + [ strings_lengths_ addObject: length_ ]; + } + return [ NSArray arrayWithArray: strings_lengths_ ]; + } + +* This source code was highlighted with Source Code Highlighter. + + Решение2 с блоками: +NSArray* stringsLengths( NSArray* strings_ ) + { + return [ strings_ map: ^( id string_ ) + { + return (id)[ NSNumber numberWithUnsignedInt: [ string_ length ] ]; + } ]; + } + +* This source code was highlighted with Source Code Highlighter. + + Задача2 + + Задан массив структур с таким интерфейсом: +@interface Element : NSObject + + @property ( nonatomic, retain, readonly ) NSArray* subElements; + + @end + +* This source code was highlighted with Source Code Highlighter. +нужно создать новый массив, который содержит все элементы всех subElements. + + Решение1: +NSArray* allSubElements( NSArray* elements_ ) + { + NSMutableArray* result_ = [ NSMutableArray array ]; + + for ( Element* element_ in elements_ ) + { + NSArray* object_items_ = element_.subElements; + [ result_ addObjectsFromArray: object_items_ ]; + }; + + return [ NSArray arrayWithArray: result_ ]; + } + +* This source code was highlighted with Source Code Highlighter. + + Решение2 с блоками: +NSArray* allSubElements( NSArray* elements_ ) + { + return [ elements_ flatten: ^( id element_ ) + { + return [ element_ subElements ]; + } ]; + } + +* This source code was highlighted with Source Code Highlighter. + + Еще несколько удобных расширений класса NSArray можно найти в файле NSArray+BlocksAdditions.m + +2. Guards на примере UITableView. + + Если необходимо выполнить несколько подряд апдейтов контента в UITableView с анимациями (например один элемент добавить, другой удалить), то что бы в результирующей анимации все выглядело аккуратно, необходимо эти действия поместить в пределах вызова двух методов: beginUpdates и endUpdates. В таком коде можно допустить несколько ошибок, например такую: +[ self beginUpdates ]; + + [ self.tableView deleteRowsAtIndexPaths: delete_index_pathes_ + withRowAnimation: UITableViewRowAnimationBottom ]; + +//здесь ошибка если condition_ == true, мы не вызовем endUpdates +if ( condition_ ) + return; + + [ self.tableView insertRowsAtIndexPaths: insert_index_pathes_ + withRowAnimation: UITableViewRowAnimationTop ]; + + [ self endUpdates ]; + +* This source code was highlighted with Source Code Highlighter. + + В таких случаях, как и вслучае работы с файлами или другими ресурсами которые нужно освобождать, на помощь приходят так называемые охранники-guards, которые легко реализуются с помощью блоков. Добавим расширение класса UITableView с методом withinUpdates: +@interface UITableView (BlocksAdditions) + + -(void)withinUpdates:( void (^)( void ) )block_; + + @end + + @implementation UITableView (BlocksAdditions) + + -(void)withinUpdates:( void (^)( void ) )block_ + { + [ self beginUpdates ]; + + @try + { + block_(); + } + @finally + { + [ self endUpdates ]; + } + } + + @end + +* This source code was highlighted with Source Code Highlighter. + + исправляем ошибку с анимациями: +[ self.tableView withinUpdates: ^( void ) + { + [ self.tableView deleteRowsAtIndexPaths: delete_index_pathes_ + withRowAnimation: UITableViewRowAnimationBottom ]; + + if ( condition_ ) + return; + + [ self.tableView insertRowsAtIndexPaths: insert_index_pathes_ + withRowAnimation: UITableViewRowAnimationTop ]; + } ]; + +* This source code was highlighted with Source Code Highlighter. + +3. Использование блоков вместо классов на примере scheduled операций. + + Решаемая задача в этом примере не имеет прямого отношения к блокам, но показывает насколько может быть локанично решена проблема с их применением. + + Те кто тесно работал с методами: – [ NSObject performSelector:withObject:afterDelay: ] и + [ NSTimer timerWithTimeInterval:target:selector:userInfo:repeats: ] полагаю заметили что для «target» будет вызван метод «retain» в момент создания отложеного вызова, и «release», если запланированые действия больше не будут вызыватся. Как показывает практика, такое поведение не очень удобно, так как часто требует написания дополнительной логики по вызову + [ NSObject cancelPreviousPerformRequestsWithTarget: ] и — [ NSTimer invalidate ] для отмены запланированых вызовов, и последующей возможности освобождения объекта «target». + Здесь мы приходим к идее того что, было бы удобней иметь возможность создать отложеный вызов, который бы не вызывал «retain» и самоотменялся при удалении «target» из памяти. + Нашей целью будет написание метода работающего описаным выше способом с таким интерфейсом: +@interface NSObject (Scheduler) + + -(void)performSelector:( SEL )selector_ + timeInterval:( NSTimeInterval )time_interval_ + userInfo:( id )user_info_ + repeats:( BOOL )repeats_; + + @end + +* This source code was highlighted with Source Code Highlighter. + + Для начала реализуем класс JFFScheduler с таким интерфейсом: +//тип блока для отмены запланированого действия + typedef void (^JFFCancelScheduledBlock) ( void ); +//тип блока сожержащего запланированое действие + typedef void (^JFFScheduledBlock) ( JFFCancelScheduledBlock cancel_ ); + + @interface JFFScheduler : NSObject + +//создать новый "планировщик" + +(id)scheduler; + +//получить "общий планировщик" + +(id)sharedScheduler; + +//добавить новое запланированое действие +//результат - блок для отмены запланированого действия + -(JFFCancelScheduledBlock)addBlock:( JFFScheduledBlock )block_ + duration:( NSTimeInterval )duration_; + +//отмена всех запланированых действий для скедулера, вызывается также в dealloc класса JFFScheduler + -(void)cancelAllScheduledOperations; + + @end + + +* This source code was highlighted with Source Code Highlighter. + + Реализация метода -(JFFCancelScheduledBlock)addBlock:( JFFScheduledBlock )block_ duration:( NSTimeInterval )duration_ +-(JFFCancelScheduledBlock)addBlock:( JFFScheduledBlock )block_ + duration:( NSTimeInterval )duration_ + { + //просто хранящий блок класс + JFFSimpleBlockHolder* cancel_block_holder_ = [ JFFSimpleBlockHolder simpleBlockHolder ]; + + block_ = [ [ block_ copy ] autorelease ]; + //заворачиаем объект block_ в блок без аргументов + //что бы можно было вызвать его методом performBlock + void (^schedule_block_) ( void ) = [ [ ^ + { + block_( cancel_block_holder_.simpleBlock ); + } copy ] autorelease ]; + + //запускаем таймер с блоком вместо "target" + __block NSTimer* timer_ = [ NSTimer scheduledTimerWithTimeInterval: duration_ + target: schedule_block_ + selector: @selector( performBlock ) + userInfo: nil + repeats: YES ]; + + __block NSObject* cancel_ptr_ = nil; + __block JFFScheduler* scheduler_ = self; + + //создам блок для отмены запланированого вызова + cancel_block_holder_.simpleBlock = ^ + { + if ( scheduler_ ) + { + [ timer_ invalidate ]; + //удаляем выполненный блок + [ scheduler_.cancelBlocks removeObject: cancel_ptr_ ]; + scheduler_ = nil; + } + }; + + cancel_ptr_ = (id)cancel_block_holder_.simpleBlock; + //сохраняем блок отмены для запланированого вызова в dealloc + [ self.cancelBlocks addObject: cancel_ptr_ ]; + + return cancel_block_holder_.simpleBlock; + } + +* This source code was highlighted with Source Code Highlighter. + + Весь код релизации класса JFFScheduler. + + Дальше что бы все работало, нам понадобится несколько дополнительных методов: + 1. — [ NSObject performBlock ] — выполнить блок +@implementation NSObject (PerformBlock) + +//вызвать себя как блок + -(void)performBlock + { + void* self_ = self; + JFFSimpleBlock block_ = (JFFSimpleBlock)self_; + block_(); + } + + @end + +//пример использования + [ ^ { + NSLog( @"test" ); + } performBlock ]; + +* This source code was highlighted with Source Code Highlighter. + + 2. — [ NSString numberOfCharacterFromString: ] количество вхождений символа заданого в строке. Пример: +NSLog( @"num of \":\" - %d", [ @":test:" numberOfCharacterFromString: @":" ] ); + +* This source code was highlighted with Source Code Highlighter. + + печатает — num of ":" — 2 + + 3. — [ NSObject addOnDeallocBlock: ] — добавить блок, который должен выполнится при удалении владельца из памяти (в методе dealloc). Пример: +NSObject* object_ = [ [ NSObject alloc ] init ]; + [ object_ addOnDeallocBlock: ^ + { + NSLog( @"test" ); + } ]; +//здеь печатается - test + [ object_ release ]; + +* This source code was highlighted with Source Code Highlighter. + + Теперь у нас есть все необходимое для реализации первичной задачи главы — написания метода порождающего отложеный вызов после заданого времени, который не вызывает «retain» для «target». Реализация: +-(void)performSelector:( SEL )selector_ + timeInterval:( NSTimeInterval )time_interval_ + userInfo:( id )user_info_ + repeats:( BOOL )repeats_ + { + //валидация аргументов + NSString* selector_string_ = NSStringFromSelector( selector_ ); + NSUInteger num_of_args_ = [ selector_string_ numberOfCharacterFromString: @":" ]; + NSString* assert_warning_ = [ NSString stringWithFormat: @"selector \"%@\" should has 0 or 1 parameters", selector_string_ ]; + NSAssert( num_of_args_ == 0 || num_of_args_ == 1, assert_warning_ ); + + //что бы избежать циклической ссылки - исользуем в блоке __block self_ вместо self + __block id self_ = self; + + //создаем scheduled блок, который вызывает селектор + JFFScheduledBlock block_ = ^( JFFCancelScheduledBlock cancel_ ) + { + //отменяем дальнейшее выполнение блока если повторы не нужны + if ( !repeats_ ) + { + [ self_ removeOnDeallocBlock: cancel_ ]; + cancel_(); + } + + //вызываем селектор + num_of_args_ == 1 + ? objc_msgSend( self_, selector_, user_info_ ) + : objc_msgSend( self_, selector_ ); + }; + + JFFScheduler* scheduler_ = [ JFFScheduler sharedScheduler ]; + + //планируем вызовы блока с заданным интервалом + JFFCancelScheduledBlock cancel_ = [ scheduler_ addBlock: block_ + duration: time_interval_ ]; + //отменяем выполнение scheduled блока при удалнии из памяти объекта self + [ self addOnDeallocBlock: cancel_ ]; + } + +* This source code was highlighted with Source Code Highlighter. + + И конечно же пример использования этого метода: +SomeClass* object_ = [ [ SomeClass alloc ] init ]; + +//создать отложеный вызов метода print + [ object_ performSelector: @selector( print ) + timeInterval: 1. + userInfo: nil + repeats: NO ]; + +//после release метод print не вызовется никогда, +//так как таймер отменяется при удалении object_ из памяти + [ object_ release ]; + +* This source code was highlighted with Source Code Highlighter. + + Итог. Подобный метод в проекте который я пишу существовал и до появления блоков, но его имплементация содержала ровно в 2.5-ой раза больше строк кода и исправлялись не один раз. Реализация же с блоками далась мне с первого раза и до сих пор ошибок не находили. Надеюсь приведеные примеры были для Вас интересны. + + Пока все, остальные главы в следующем топике. \ No newline at end of file diff --git a/4-JffArticles/3-BlocksAndAnimations/BlocksAndAnimations.habr b/4-JffArticles/3-BlocksAndAnimations/BlocksAndAnimations.habr new file mode 100644 index 0000000..e69de29 diff --git a/4-JffArticles/3-BlocksAndAnimations/BlocksAndAnimations.mht b/4-JffArticles/3-BlocksAndAnimations/BlocksAndAnimations.mht new file mode 100644 index 0000000..0fde39f --- /dev/null +++ b/4-JffArticles/3-BlocksAndAnimations/BlocksAndAnimations.mht @@ -0,0 +1,15543 @@ +Content-Type: multipart/related; start=; boundary=----------PpIBkhw2W6q3fLw1sbJ92q +Content-Location: http://habrahabr.ru/blogs/macosxdev/120317/ +Subject: =?utf-8?Q?=D0=9E=20=D0=B1=D0=BB=D0=BE=D0=BA=D0=B0=D1=85=20=D0=B8=20=D0=B8=D1=85=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B8=20=D0=B2=20Objective-C=20=D1=87=D0=B0=D1=81=D1=82=D1=8C=203-=D0=B0=D1=8F=20/=20=D0=A0=D0=B0=D0=B7=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B0=20=D0=BF=D0=BE=D0=B4=20Apple=20iOS=20/=20=D0=A5=D0=B0=D0=B1=D1=80=D0=B0=D1=85=D0=B0=D0=B1=D1=80?= +MIME-Version: 1.0 + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline; filename=default.htm +Content-Type: text/html; charset=utf-8; name=default.htm +Content-ID: +Content-Location: http://habrahabr.ru/blogs/macosxdev/120317/ +Content-Transfer-Encoding: 8bit + + + + + + + + О блоках и их использовании в Objective-C часть 3-ая / Разработка под Apple iOS / Хабрахабр + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+ moborb + + + + + + настройки + выйти + + +
+
+ + личная почта + избранное + + +
+
У вас осталось 14 голосов за карму, топики, вопросы и 28 за ответы и комментарии
+
+ + + +
+ +
+   +
+ + +
+ + + +
    + + + + +
  • Посты
  • + + + + + + + + +
  • Q&A
  • + + + + + +
  • Блоги
  • + + + + + +
  • Люди
  • + + + + + +
  • Компании
  • + + + + + + +
  • + + + + +
  • +
  • + + + +
  • + + + +
+ +
+ + +
+
+ + +
+ + + +
+
+

+ Разработка под Apple iOS + + +

+
+
индекс
+
154,10
+
+
+
+ + + + + + + + + + + + + + + +
+ +

+ + + + + + + + + + + О блоках и их использовании в Objective-C часть 3-ая + + + + Редактировать + + + +

+ + + +
+ Так же как и в топике — О блоках и их использовании в Objective-C часть 2-ая, мы продолжим говорить о преимуществах использования блоков на живых примерах.
+Здесь мы рассмотрим удобства использования блоков при управлении последовательностью операций.
+
+
5. UIView анимации, последовательность анимаций.

+Для начала напишем простенький пример, в котором мы будем двигать кнопку с помощью анимаций(без блоков). Затем поменяем порядок анимаций чтобы посмотреть, какие изменения потребуются в коде.
+
+
Шаг 1-ый

+Создадим четыре анимации: «переместить кнопку вверх», "… вниз", "… вправо" и "… влево". Соответственно в методах: moveUpAnimation, moveDownAnimation, moveRightAnimation и moveLeftAnimation.
+Вот пример одной из анимаций:
+
-(void)moveUpAnimation
+{
+  [ UIView beginAnimations: nil context: nil ];
+
+  CGFloat new_y_ = self.animatedButton.frame.origin.y
+   - ( self.view.frame.size.height - button_offset_ * 2 )
+   + self.animatedButton.frame.size.height;
+  self.animatedButton.frame = CGRectMake( self.animatedButton.frame.origin.x
+                     , new_y_
+                     , self.animatedButton.frame.size.width
+                     , self.animatedButton.frame.size.height );
+
+  [ UIView commitAnimations ];
+}

+
+* This source code was highlighted with Source Code Highlighter.

+Затем изменим код таким образом что бы эти четыре анимации передвинули кнопку по контуру экрана по часовой стрелке. Выполнение этих анимаций просто последовательно:
+
-(IBAction)animateButtonAction:( id )sender_
+{
+  [ self moveUpAnimation ];
+  [ self moveRightAnimation ];
+  [ self moveDownAnimation ];
+  [ self moveLeftAnimation ];
+}

+
+* This source code was highlighted with Source Code Highlighter.

+ничего не даст, мы увидим только последнюю анимацию. Правильным решением будет запускать следующую анимацию по завершению предыдущей. Для реализации задуманного нам понадобится установить делегат анимации, и в контексте анимации передать информацию о следующей анимации, в делегате выполнить следующую анимацию из контекста, например так:
+
//интерфейс класса для хранения данных следующей анимации
+@interface JFFNextAnimation : NSObject
+
+@property ( nonatomic, retain ) UIViewAnimationsExampleViewController* controller;
+@property ( nonatomic, assign ) SEL nextAnimationSelector;
+
+@end
+
+-(void)moveUpAnimation
+{
+  JFFNextAnimation* next_animation_ = [ JFFNextAnimation new ];
//устанавливаем информацию о следующей анимации
+  next_animation_.controller = self;
+  next_animation_.nextAnimationSelector = @selector( moveRightAnimation );
//передаем информацию о следующей анимации через контекст
+  [ UIView beginAnimations: nil context: next_animation_ ];
+
+  CGFloat new_y_ = self.animatedButton.frame.origin.y
+   - ( self.view.frame.size.height - button_offset_ * 2 )
+   + self.animatedButton.frame.size.height;
+  self.animatedButton.frame = CGRectMake( self.animatedButton.frame.origin.x
+                     , new_y_
+                     , self.animatedButton.frame.size.width
+                     , self.animatedButton.frame.size.height );
+
//выставляем делегата анимации
+  [ UIView setAnimationDelegate: self ];
+
+  [ UIView commitAnimations ];
+}
+
+//методы moveDownAnimation, moveRightAnimation и moveLeftAnimation аналогичны
+
+-(void)animationDidStop:( NSString* )animation_id_ finished:( NSNumber* )finished_ context:( void* )context_
+{
//выполняем следующую анимацию
+  JFFNextAnimation* context_object_ = context_;
+  [ context_object_.controller performSelector: context_object_.nextAnimationSelector ];
+  [ context_object_ release ];
+}
+
+-(IBAction)animateButtonAction:( id )sender_
+{
//теперь запускаем только первую анимацию
+  [ self moveUpAnimation ];
+}

+
+* This source code was highlighted with Source Code Highlighter.

+Теперь все работает правильно. Но допустим мы захотим анимацию перемещения кнопки не по часовой, а против часовой стрелке. Тогда нам понадобится изменить код каждого из методов moveUpAnimation, moveDownAnimation, moveRightAnimation и moveLeftAnimation. Это не очень удобно, поэтому перепишем наш код так чтобы эта задача решалась проще.
+
+
Шаг 2-ый

+Меняем последовательность вызовов анимаций. Для начала сохраним в контексте не селектор следующей анимации, а все анимации которые нужно выполнить после текущей:
+
@interface JFFNextAnimation : NSObject
+
+@property ( nonatomic, retain ) UIViewAnimationsExampleViewController* controller;
+//храним селекторы анимаций, которые нужно выполнить после текущей анимации в виде строк
+@property ( nonatomic, retain ) NSMutableArray* nextAnimations;
+
+@end

+
+* This source code was highlighted with Source Code Highlighter.

+код методов moveUpAnimation, moveDownAnimation, moveRightAnimation и moveLeftAnimation тоже нужно изменить:
+
//теперь анимация принимает контекст как аргумент, так как он меняется на ходу
+//и устанавливается отдельно от анимации
+-(void)moveUpAnimationWithNextAnimation:( JFFNextAnimation* )next_animation_
+{
+  [ UIView beginAnimations: nil context: next_animation_ ];
+
+  CGFloat new_y_ = self.animatedButton.frame.origin.y
+   - ( self.view.frame.size.height - button_offset_ * 2 )
+   + self.animatedButton.frame.size.height;
+  self.animatedButton.frame = CGRectMake( self.animatedButton.frame.origin.x
+                     , new_y_
+                     , self.animatedButton.frame.size.width
+                     , self.animatedButton.frame.size.height );
+
+  [ UIView setAnimationDelegate: self ];
+
+  [ UIView commitAnimations ];
+}
+
+//методы moveDownAnimation, moveRightAnimation и moveLeftAnimation аналогичны

+
+* This source code was highlighted with Source Code Highlighter.

+Делегат анимации так же нужно переделать:
+
-(void)animationDidStop:( NSString* )animation_id_ finished:( NSNumber* )finished_ context:( void* )context_
+{
//если контекст пуст - дальше ничего не делаем
if ( !context_ )
+   return;
+
+  JFFNextAnimation* context_object_ = context_;
+
//получаем селектор следующей анимации
+  NSString* next_animation_string_ = [ context_object_.nextAnimations objectAtIndex: 0 ];
+  next_animation_string_ = [ [ next_animation_string_ retain ] autorelease ];
//и удаляем его из списка
+  [ context_object_.nextAnimations removeObjectAtIndex: 0 ];
+
+  SEL next_animation_sel_ = NSSelectorFromString( next_animation_string_ );
+
if ( [ context_object_.nextAnimations count ] == 0 )
+  {
+   //если больше нет следующих анимаций
+   //передаем пустой контекст следующей анимации
+   [ context_object_.controller performSelector: next_animation_sel_
+                    withObject: nil ];
+   //освобождаем память
+   [ context_object_ release ];
+  }
else
+  {
+   //передаем измененный контекст следующей анимации
+   [ context_object_.controller performSelector: next_animation_sel_
+                    withObject: context_object_ ];
+  }
+}

+
+* This source code was highlighted with Source Code Highlighter.

+И конечно же результат на который мы работали, теперь последовательность анимаций менять легко:
+
-(IBAction)animateButtonAction:( id )sender_
+{
+  JFFNextAnimation* next_animation_ = [ JFFNextAnimation new ];
+  next_animation_.controller = self;
//определяем список следующих анимаций в порядке вызова
+  next_animation_.nextAnimations = [ NSMutableArray arrayWithObjects:
+                   @"moveUpAnimationWithNextAnimation:"
+                   , @"moveLeftAnimationWithNextAnimation:"
+                   , @"moveDownAnimationWithNextAnimation:"
+                   , nil ];
+
//вызываем первую анимацию
+  [ self moveRightAnimationWithNextAnimation: next_animation_ ];
+}

+
+* This source code was highlighted with Source Code Highlighter.

+Весь код полученных результатов можно найти на gihub.
+
+
Итоги:

+Поставленую задачу в начале топика мы конечно же решили. Но цена решения высока, код небезопасен(строки вместо селекторов), сложен(запутаная логика делегата селектора и управление памятью контекста), подвержен ошибкам. Постараемся частично исправить ситуацию с помощью (конечно же согласно названию топика) блоков. И так…
+
+
Шаг 3-ий

+Переписываем анимации с использованием блокового апи. Первым же делом мы можем удалить класс контекст анимации — JFFNextAnimation и метод делегат анимации, они нам больше не пригодятся. Метод moveUpAnimation упрощается до такого вида:
+
-(JFFSimpleBlock)moveUpAnimationBlock
+{
return [ [ ^
+  {
+   CGFloat new_y_ = self.animatedButton.frame.origin.y
+     - ( self.view.frame.size.height - button_offset_ * 2 )
+     + self.animatedButton.frame.size.height;
+   self.animatedButton.frame = CGRectMake( self.animatedButton.frame.origin.x
+                       , new_y_
+                       , self.animatedButton.frame.size.width
+                       , self.animatedButton.frame.size.height );
+  } copy ] autorelease ];
+}

+
+* This source code was highlighted with Source Code Highlighter.

+Добавим вспомогательный метод создающий блок который выполняет анимацию:
+
//создаем блок который вызывает анимацию и имеет
+//блок обратного вызова для оповещения об окончании анимации
+-(JFFSimpleBlock)animationBlockWithAnimations:( JFFSimpleBlock )animations_
+                  completion:( JFFSimpleBlock )completion_
+{
//отложеный вызов, копируем блок в кучу
//так как на момент вызова этого блока текущий стек будет разрушен
+  completion_ = [ [ completion_ copy ] autorelease ];
return [ [ ^
+  {
+   [ UIView animateWithDuration: 0.2
+            animations: animations_
+            completion: ^( BOOL finished_ )
+   {
+     if ( completion_ )
+      completion_();
+   } ];
+  } copy ] autorelease ];
+}

+
+* This source code was highlighted with Source Code Highlighter.

+И определим последовательность самих анимаций:
+
-(IBAction)animateButtonAction:( id )sender_
+{
//определяем блоки анимаций с конца, то есть первый, тот который выполнится поледним
+  JFFSimpleBlock move_left_animation_block_ = [ self moveLeftAnimationBlock ];
//completion: - следующая за этой анимация, в этом случае ее нет
+  move_left_animation_block_ = [ self animationBlockWithAnimations: move_left_animation_block_
+                             completion: nil ];
+
+  JFFSimpleBlock move_down_animation_block_ = [ self moveDownAnimationBlock ];
//completion: - следующая за этой анимация - "move left"
+  move_down_animation_block_ = [ self animationBlockWithAnimations: move_down_animation_block_
+                             completion: move_left_animation_block_ ];
+
+  JFFSimpleBlock move_right_animation_block_ = [ self moveRightAnimationBlock ];
//completion: - следующая за этой анимация - "move down"
+  move_right_animation_block_ = [ self animationBlockWithAnimations: move_right_animation_block_
+                             completion: move_down_animation_block_ ];
+
//определяем последним блок который должен выполнится первым
+  JFFSimpleBlock move_up_animation_block_ = [ self moveUpAnimationBlock ];
//completion: - следующая за этой анимация - "move right"
+  move_up_animation_block_ = [ self animationBlockWithAnimations: [ self moveUpAnimationBlock ]
+                            completion: move_right_animation_block_ ];
+
//выполняем блок с первой анимацией
+  move_up_animation_block_();
+}

+
+* This source code was highlighted with Source Code Highlighter.

+Теперь как и в предыдущем примере (анимаций без блоков), попытаемся поменять последовательность вызовов анимаций. Благо это уже не так сложно как было в нашем самом первом примере, но не будем останавливатся на достигнутом.
+
+
Шаг 4-ый

+Забежим немножко наперед и посмотрим на функцию sequenceOfAsyncOperations. Эта функция принимает несколько блоков, абстрагирующих собой ассинхронные операции, ввиде аргументов, и возвращает новый блок, который при вызове будет выполнять блоки аргументы этой функции в заданом порядке. Сам блок асинхронной операции имеет тип JFFAsyncOperation, поэтому немножко изменим функцию animationBlockWithAnimations: согласно этому типу:
+
-(JFFAsyncOperation)animationBlockWithAnimations:( JFFSimpleBlock )animations_
+{
return [ [ ^( JFFAsyncOperationProgressHandler progress_callback_
+        , JFFCancelHandler cancel_callback_
+        , JFFDidFinishAsyncOperationHandler done_callback_ )
+  {
+   //отложеный вызов, копируем done_callback_ блок в кучу
+   //так как на момент вызова этого блока текущий стек будет разрушен
+   done_callback_ = [ [ done_callback_ copy ] autorelease ];
+   [ UIView animateWithDuration: 0.2
+            animations: animations_
+            completion: ^( BOOL finished_ )
+   {
+     if ( done_callback_ )
+      done_callback_( [ NSNull null ], nil );
+   } ];
+   return [ [ ^{} copy ] autorelease ];
+  } copy ] autorelease ];
+}

+
+* This source code was highlighted with Source Code Highlighter.

+И получим результат:
+
-(IBAction)animateButtonAction:( id )sender_
+{
+  JFFSimpleBlock move_right_animation_block_ = [ self moveRightAnimationBlock ];
+  JFFAsyncOperation move_right_async_block_ = [ self animationBlockWithAnimations: move_right_animation_block_ ];
+
+  JFFSimpleBlock move_up_animation_block_ = [ self moveUpAnimationBlock ];
+  JFFAsyncOperation move_up_async_block_ = [ self animationBlockWithAnimations: move_up_animation_block_ ];
+
+  JFFSimpleBlock move_left_animation_block_ = [ self moveLeftAnimationBlock ];
+  JFFAsyncOperation move_left_async_block_ = [ self animationBlockWithAnimations: move_left_animation_block_ ];
+
+  JFFSimpleBlock move_down_animation_block_ = [ self moveDownAnimationBlock ];
+  JFFAsyncOperation move_down_async_block_ = [ self animationBlockWithAnimations: move_down_animation_block_ ];
+
//определяем порядок вызова анимаций последовательностью
//передачи аргументов функции - sequenceOfAsyncOperations
+  JFFAsyncOperation result_animation_block_ = sequenceOfAsyncOperations(
+                                     move_right_async_block_
+                                     , move_up_async_block_
+                                     , move_left_async_block_
+                                     , move_down_async_block_
+                                     , nil );
+
//вызываем блок, который в свою очередь вызовет все онимации в заданом порядке
+  result_animation_block_( nil, nil, nil );
+}

+
+* This source code was highlighted with Source Code Highlighter.

+На gihub можно посмотреть весь полученый код.
+
+На этом пока все. Спасибо за внимание. Если эта тема интересна, то в следующей статье постараюсь рассказать об управлении порядком вызова блоков на примере асинхронных операций. + + + + + + +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ + + +
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
Метки лучше разделять запятой. Например: общение, социальные сети, myspace.com, подростки, мердок
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + + + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-page-nav-left.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhCgAKALMAAPf49/P08/j4+PDy8Ovt6+3v7f7+/vHz8fj5+Ozu7P///+rs +6gAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAKAAoAAAQeUElpwEhrKoCXn4EnZko4 +fsgpKp0qqOIBe8W8EHYEADs= + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-page-nav-current-left.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhCgAKAMQAAOPt9tbk8dbk8e3z+O3z+P7+/uHr9P3+/t/q9Njk8v7+/u70 ++tjm8u/0+tXk8f///9Pi8IqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqK +ioqKioqKioqKioqKiiwAAAAACgAKAAAFI+AjiseABND4EALkpo8CvK840+7T4G+R +8K4F0GUYQhhGhzEEADs= + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-page-nav-right.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhCgAKAKIAAPLz8vDy8P7+/vf39+zu7P///+rs6gAAACH5BAAAAAAALAAA +AAAKAAoAAAMaaBQj9c9INWCZE0CcI5fVJxGCCJpGgBKokQAAOw== + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-page-nav-current-right.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhCgAKAPcAAOPt9tbk8dbk8e3z+O3z+P7+/uHr9P3+/t/q9Njk8v7+/u70 ++tjm8u/0+tXk8f///9Pi8IqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqK +ioqKioqKioqKioqKigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAKAAoAAAgyAB0wMLBAwYODByEohJCg +AcIHCxcCMAgxokIACS0qJFBRo4ADGhcSCKkQAUkIAk5CCAgAOw== + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-page-subnav-corner-bottom-left.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhCgAKAPcAAOPt9tbk8dbk8e3z+O3z+P7+/uHr9P3+/t/q9Njk8v7+/u70 ++tjm8u/0+tXk8f///9Pi8IqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqK +ioqKioqKioqKioqKigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAKAAoAAAgtACEIHEhQAMGDCA4SJKBw +4AGDDR8wjPgAAEUFFg8+2PigQQKCHDcqWGCAgYOAADs= + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-page-subnav-corner-bottom-right.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhCgAKAPcAAOPt9tbk8dbk8e3z+O3z+P7+/uHr9P3+/t/q9Njk8v7+/u70 ++tjm8u/0+tXk8f///9Pi8IqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqK +ioqKioqKioqKioqKigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAKAAoAAAgwACEIHDjQAcGDDA4SNKBw +4IKGEBIogNjgQUMADyweBKAgI0EBBDJ6FICAwAGRGQMCADs= + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/png +Content-Location: http://habrahabr.ru/i/icon_asterisk_24.png +Content-Transfer-Encoding: Base64 + +iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2Fy +ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAA +AAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5U +Y3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6 +eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8w +Mi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRw +Oi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpE +ZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRv +YmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv +bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20v +eGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRv +YmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9Inht +cC5paWQ6OUJFNDFFODU1M0NCMTFFMDg4MzdEMjY1MEM4OTlCREEiIHhtcE1NOkRv +Y3VtZW50SUQ9InhtcC5kaWQ6OUJFNDFFODY1M0NCMTFFMDg4MzdEMjY1MEM4OTlC +REEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlp +ZDo5QkU0MUU4MzUzQ0IxMUUwODgzN0QyNjUwQzg5OUJEQSIgc3RSZWY6ZG9jdW1l +bnRJRD0ieG1wLmRpZDo5QkU0MUU4NDUzQ0IxMUUwODgzN0QyNjUwQzg5OUJEQSIv +PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94 +cGFja2V0IGVuZD0iciI/PrQg4+wAAAJaSURBVHjabFNNbxJRFL3zwZuBUEQSgRrQ +0DRCu6D1NxCMstAdG5u0OxduXGjSxJgYjYkL0/gLDKzVjSYijvwGTcF+bAopRiAV +BjIDMwzM1LlTp+GJL7nJeeece++8O+8x8M/6IklPzKl5mxDPdiaTqSBXqVQyhjF5 +yfHchxvZ7PNZP+MCNOljo+D1+mI+rxd6cu8gd+vmCmqfSp/3QxdDqZGmgaaNfooC +2XKL826BydTcCAQCsVQyCZZlgqIqKUn6ev+sDZNKJK4Cy3JwcHgYGw6HG9gTJdYt +4OG5HVnugyzLMB6PIR6Lgd3xGQZi5FBDD3rdvPMC9idVeZ4t1BsN0HUdRFEEv98f +wkCMHGroQe9cAVyiIGyriqp3uz07QYPLi1EnECOHGnqoIb59916zrFNxlhQEAlfi +cfD5vM5+NNLguNm0j2FQf4xlGZ23SfH6eho4jqNEVVVBUZS/M2QglbxG6aZpwrfv +uyJvGGfDmUymlIFh6PuhKCq193h4wFzevjT6brUm0iKxzx6hEn61OnYT+giCIOhU +H0mSont7+/XEUkKcGAb0+wOHDwYvgIcQqB/V9dXVlUQ2m23/9y+0251XhBDx1LKc +83e7XScQI4caeqhBuqBcLqcbjcbdcPiSk3Ry8humU3OAgRg51NBTKpXW5wrYhoeE +CM6wBoOBc+OWl5eeYiBGDjX0tFrtR3MFgsFg0b4w7WqtBq12BxYW/Ef5fP41BmLk +UENPNBp54+adP6ZcLoePY7FQLL5oHjfvrK2lH7iaje/Vaj92wpHwx63NzcezM/gj +wAAc5D2eLLpI7AAAAABJRU5ErkJggg== + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-user2.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhDAAMAOYAANPe5Pz//4KkutDb4szY3/b+/5u5z/3//3KWrfn//8rk8naa +sYGkuszY4Mbg8qG+0dzv9tXg5sTg8t/o7vP8/4iqv9ft9NPe5qfD1Mfc56O/0YKl +u+Lr8M3Z4JCwxuj2/Of0+eDz9+rw9Z68z8/n8sHe8sbT3Ju6zuDv96nE1Onw9Nbh +6cvX39Hq89Hq8u77/srW3tbh54Kku8ba56TD1u37/vL8/vL8/9ft9ebu8+Ps8bzM +1Ymsw7XR4Nnj6Yanvsnj8qrI2Or2/NTf5tvl68vY3+r3/HqdtNji6OXt8eDz+dLc +477c7bDO3t7n7d7v9s3Z4dbs9N/y98Pd6PX+/8/b4f7//+Hp7tDo8vv//+fu84Gj +unKWro6uxHqctOfu9P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAMAAwAAAeEgCJfg4RfWlo5KlpgjI2O +OklWBwcBAVmXCQlXHAUFVBkGBjMUNzZOEy81IF2sXUZCH0QrDyhPGzICAkohUj4X +HhoQKQsLGDgWUTFIJxUjUy0uWNIkQxE9W9gMDD9BCgpLAEBNXl5H5F40DlUDEkxc +71wICDwlDQBQHQ0EBEUsJjswBgQCADs= + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/png +Content-Location: http://habrahabr.ru/i/icon_asterisk_16.png +Content-Transfer-Encoding: Base64 + +iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAGXRFWHRTb2Z0d2Fy +ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAA +AAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5U +Y3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6 +eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8w +Mi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRw +Oi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpE +ZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRv +YmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv +bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20v +eGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRv +YmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9Inht +cC5paWQ6OUJFNDFFODE1M0NCMTFFMDg4MzdEMjY1MEM4OTlCREEiIHhtcE1NOkRv +Y3VtZW50SUQ9InhtcC5kaWQ6OUJFNDFFODI1M0NCMTFFMDg4MzdEMjY1MEM4OTlC +REEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlp +ZDo5QkU0MUU3RjUzQ0IxMUUwODgzN0QyNjUwQzg5OUJEQSIgc3RSZWY6ZG9jdW1l +bnRJRD0ieG1wLmRpZDo5QkU0MUU4MDUzQ0IxMUUwODgzN0QyNjUwQzg5OUJEQSIv +PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94 +cGFja2V0IGVuZD0iciI/Pgl861QAAAHoSURBVHjaLJFBb9MwGIY/x3bStIEmXUFs +tOk4sAOCA2ckfgASEkiIG2f+AkxwA1TxDzhxg8uk9oDEgf0CLggh7TA0RjcgJcua +hCRtVccxnwOWLNmf38fv+9lk98Mu4OBlJa8RII8IIUvcP4R/45VSqqFADZlBv+Be +MBRAKeV1xs1R/2JvI0liiOP4nVZ7nvfAdT04/vnjhhTiLqP0I1uuVsAYywlA0mza +G7ZtwSyOhxpYX78AhBigz3CR19qiKIBzcw+Ntg++Hbz2+763tta5pIGylHB0fBhn +WbatFOwJgQDWn+V5YXNOnTBcKYTh/Llu3UAwnUIYnqiqqm4JIW9aFl+Q0Wi82twc +cCkVAMGJVxmGUQMoxBoGUgQoJfD9cCLYfD6HKIqgFBJ0WMY5cEZrQGCkUggEdJ3C +fDEHlqTpy5Mosp0zjiNLec/z3A797yDRYRYnM86MnSwrcsuyFqzVaj3RAs75HSHE +fQMjTCZHNeD7fWjZtmFy/p5RNpYVxnXbZwGf80qa/nmBidwgmIKUcqJnEAS6BTdO +0iFeeLVp24B/QbFP5WA+FP8CdIGtrcuPtcP+/tc3p6czaLfbbrfbaeF/AdMvgtAn +0+S3semnvV5v2Wg0xhoYDPy3we/Q5iZ/juLPGvgrwAAFU9Nnla+h0wAAAABJRU5E +rkJggg== + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/png +Content-Location: http://habrahabr.ru/i/bg-folding-dot-light.png +Content-Transfer-Encoding: Base64 + +iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAIAAADKYVtkAAAAGXRFWHRTb2Z0d2Fy +ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFFJREFUeNpi/P//PwMDw88/f9lZmBlI +BCxAvPfa46tPX2tLizpryZKkmQlo59UnrwW5OYDk15+/SdMMdK22rOj7Lz+AJDc7 +K0maGSnxM0CAAQBHCiEG+qfxeAAAAABJRU5ErkJggg== + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/comments/bar/refresh.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhHAA6AOYAAN7yzV+1GajqcajfemC1GkF8E37GRHrDP0t8JG6JWpGWjT17 +DJHZVnaMZYSSeo7XUnS8OoPORen522GvIur63OT21sTfsIuUhTl1CXTEMo+VikmC +HJrgYZjeXpbdXJ3iZEZ6HmO1IeL30Wm8JVSqDpXcW0WFE2qHUpPbWZaYk+f42YnT +TJSXkYKQdnKKX6TnbKDlaarKj1itFFqBO1eMLW7ALEaAGZiZl5/kZ1qxE1+DQzt3 +DDx2DoCPc4TQRmS4H0R5GZzhY32PcGWFTKPnbHrIOn7MP4OtYUuZDLfdmXyObj6B +CE6SF3G3OE+GJJDOXYW+V2iuMN/1zlCcE0B3FT53ETh3B1umIIvOVa/QlGe6JGuz +L4/FYtDnvZXUYHjHN2uIVLDTk7fUn7PaklR/MsrpsUyKG+P11Njtxsfgs+X318/p +u4fBV4rBW2iZQY3LWqDDhHekU12RNFqPMFihHX7LPmSWPIXOSW+7Mm2gRYHIR7nW +orzYpr7aqDd0B5mZmSH5BAAAAAAALAAAAAAcADoAAAf/gH+Cg4SFhoeIiYqLjI2O +j5CRghoOF40JIH6am5o6Ghs0TiAgJwqICjZpFWoqKhIUsH5/Fxt5YXtHBSeICQsG +JR0fMC8CFLKzvRN4XHNDiC4LeigdQThEEseCLnIQORM2LYcNJncP09XYhTxjATlT +M4cIED4rDwweHCp+NzeDIH0jAsigYqiFmSJGItRjUEKNHwwYeggCYuHADwLZBs24 +kqFInQhRIDCo4KdAjB1CGtAAYGBECB6GgISokeFLG4hNzpSUAmUHBjFlMtSYgMAQ +hh8jamCx00AIhpMFpDBgAweAlyIZ6OgolMIKgR9akmDo1wNiARElGAwYEMFIERMO +/wxVkRFASxeYgm6kWCCCgwcGD1b42ELm0AwkOX6gKcCCkB81OIJ0QPEgQgElhxws +IJFjjZsEjiUQiTzZwAIXiIYsITGGTwEwpv74oSDgBYwPHUq8sQH60AkrTLJYiFPA +1GwBtW9zKPFkgwZELBIgAALKhgIdnDiB6L2IUmxJ4MOLH0++vPnz6NOrP0/JEiNM +2Td52jDHCRBS3wsp2NAFln//slzgRBxppJHLLockUMAASSRRxoNlUICBIBcoyAWD +djhzCDQMCpCEABFOOIgLdozxgRdOhGNIA2aACKKDxqhTxlpQwGMIAl4IMIaLSRjD +jz9pDPDBE1UURMMAO35YRtwxGPgk0R9AoDHGWhkJMgMUa+34hBchFpAFSipJsJYX +eBEChBcDIBcDDzw8YUwBFMDhUx8ijFlUIRisxWAeDSjxEw9wThkDBUmsFcdWhKSw +wwtrobFACn+UhQGcSYzxoI4C0KAiIVV4wSgAZeq1AKEfNiiAF4UZMkMcaErAGCEY +0HbpGGNsgFlBZnjxwRmfwUrBpWUUugRqhwyRaxdp2FCKILMt6ayOGyTQjyEn8OCG +BV3EYd0fsULo7JTOQScddXNYpwMGS6Sb7gILIMCdIt79MW0hP65n7734RhIIADs= + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-tags2.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhDAAPAOYAAP3///j//83r9czp9c7s9Yuqv9Tx9b7b4b/X5vH//+H4+tr0 +9t72+Ov8/bjY4cvo9fX//9Lv9fT///n//8fm9eH1/+L1/7PT4dPx9cbl9cXk9ef6 +/LnY4cnm9b/d4ej7/N/2+Zi2yoyrwI+tw7/X57rZ4bjR4e36/bLR4Zq3yr3b4ZWy +x+T2/9Dt9ejw9ZGwxNTy9eXx+YurwNHt9ej7/5e0x6/J29v1+LfP4Ov8/6rF2Njz +9eL2/9Hu9abD1bXN3snc6vv8/cDe4tfz9bPS4cTi9e37/Yqqv9n09py5zaS/07LM +3KjD1qvG2LXU4eDu9qXA08LY6OX5/87h7cXa58DY55Wzx5+90MTb6ebu9LLS4crf +65OwxLfX4eL5+snn9fv//77W5fH8//L//6C7z/f6/NPv9djl7525zcrn9dbj7dvx +9ez9/+f6/+v7/e///5Gwxdby9dLu9aO/0uD0/42swf///wAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAMAA8AAAetgHZ2QVhVJAgIUWWCgkAx +jHZPVIxnU3YAmBMBW2p2LmEQAWIFKWAJbiZZOCdjCUZQPwEfG2tLNhMNsxIQDQog +DDpNEl6+DDcLSDtDPkxvC0IeHgcHKgYYc0pscTDWZhFyPTNkVzkRJRwcDg5dBAJo +STQtBO0CAwMPDyEhbQNOFxdEtKDoQGGFFSlpvhDMkEGDhiIv4LDgYcFChQp0MtKp +U2PEiDogRYiQUeAIl0AAOw== + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/icos/entry-info-t-l.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhBQAFALMAAPv7+/X19fz8/Ozs7Pn5+enp6fr6+vT09P7+/vDw8Orq6v// +/wAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAFAAUAAAQQcC0UxhIqEVSMPIm0KIAY +AQA7 + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/icos/entry-info-t-r.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhBQAFALMAAPv7+/X19fz8/Ozs7Pn5+enp6fr6+vT09P7+/vDw8Orq6v// +/wAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAFAAUAAAQPcAS0FklK1GUKrcmxAUoE +ADs= + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/icos/entry-info-b-l.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhBQAFALMAAPHx8fv7++zs7Pn5+fPz8/Dw8Orq6vT09P7+/vz8/Onp6f// +/wAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAFAAUAAAQP0KRFCaALqYCTKgOFHEIE +ADs= + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/icos/entry-info-b-r.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhBQAFALMAAPHx8fv7++zs7Pn5+fPz8/Dw8Orq6vT09P7+/vz8/Onp6f// +/wAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAFAAUAAAQQcMlk5AJEBoVGUckiHIgU +AQA7 + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/icos/icons_vote_posts.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhIQAeAOZ/AOjo6PHx8cjIyPT09O3t7fr6+sXFxeXl5fj4+N7e3urq6vLy +8sPDw/b29s3NzdjY2NXV1dDQ0O7u7s7Ozs3o8fb+/9Lr8ev6+4fKVdnyxrzS4Zi0 +xq3G1pKvw/2JWLy8vJ65zOTt89H+fdvb2+fn5/v//9Hc5aO9z8nm8ajB0t7x9rTL +25Syxd3u+P1iMf+dfMb5bfS5s2atOdfw8/yEaO9lTs3Z4v+yf3udsr71YuxaReH2 +9+by+Of3+lukLv99Rfd7Wdzp8XK5QuHw+4fSF5fdI5LSYNLS0qDcbuRJNJjVaavp +QMHW5P+kcPGxrP+Tc4Kitoyrv/++kP/Kn/ZTKP+WY3zBTP+kg8Xi8ZveMLfxUaPk +M/39/fD7/Mb4d8v8cvxtPb/d8ez3+6zmdOhEJ+lVPv/Yr5u3yf9xOrPuRO+uqev3 +4vP+//RiOdf/i5Csv9n/lPhfM/JuVN06KYakurjnkaXjbd9cVcbZ58fa6M7f6/D1 ++MP2X9Tg5////////yH5BAEAAH8ALAAAAAAhAB4AAAf/gH+Cfxl1GYOIVy+LV4iD +BCMSBY6EY3Bjh45XZlNTT5QSIwiRjhlIcG5udpmDL2ZSUp+IoQgFCAkBg2tIIr0i +Xkqsfy9TNzc0iAMjAwXNCA8Kf7teX18w1zlGrE9STU3IggMPAQPl5QEQBEpevjnu +1kaDNDdVVUCDEAvNBQEB+gMRlGDAYASGFi0DCcq74cGDHHwRIkBAQICAg4sRBmHg +s2QJBkpAmvz4UYNShAYAADighEHLli1W5NWY+QMNGh04Hwo6mdIAJStpihQRMqhG +lR8ukiYF40HHoAkDFCjw6QioUKKCYpTxAIaK1zgeysR4GnUqJSFLiBCRgShGEg9t +/8iATTJ2kIABBw4wOLtFLdu2SYC0AULGiSMDC/J+oCQji2MflJzMkTPH8OEFmBc7 +kuGj819Hau6oofTng2nTpEPoCeGHEhMNsDVQSkCbNqUQeUrgCeHaj+8Vs337eeAo +hIYKfkow4Y1IQ/ISwB0l8MOFC/FBezSIqcC9y4ogzUtUYMOB0gguzSBgX8Hjgnv3 +KjiAF7SigvsUlB4UaNDgyCAOPHBXwQ479MAGD/gJwkEXBJ5ACQQFYOafgiecsOAM +M4CgoYMKXoAhCA82UNFKjqRwgQUWnEFJCj2guAElRzQglQCUnCAGBRSwMEgKG7Cw +wQwostBBByAcIcCRBMxogJQBJP4BQg84djBIB0GogOOVFqiwgQEEBJDSlwoEQKMg +Z/SAAgpRDNJHB1meiQIFWpoAAJdefikmCYNswAMWWNCBiAlRBNECFhS0wIIJgpDA +QJckAHAnIh0MEUYYUDhiAgstZNoBooOQIEA/ARiAJyJvDGEqDpTY8IYFUdhAiV4E +MHAAJVDgYGulqW7gKmkHCDDrIIEAADs= + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/gif +Content-Location: data:image/gif;base64,R0lGODlhDwAaAOZ/APr7/LnO3bXL2uK7Vvz58NLu9friZ/z69arD0tXl7eHr8uL1+tLv89v09921Uf3phfzjcMra5dvl68nX4ef1+fz589rt9e79/+v7/Ka+zs7h6tny9d3EmqjAz+rQc+ft8d/1+PTjttSycvb///f6+/vx0rzR3vL2+P/////4rub5+/3qjf/zlu/0+fH5/MmdQtLh7PfYWP3oe83a4u/jzdi9ke3Ma8aaSbvN2r/T4PXdfunXs+LGivHWh/jbWuT4+a7K2dy2X8qbO8PW4sTc6fjaX/bUU/fUXOr6+9+5Y9bx89u1V//ukOLz9v/2usfV3uTAZ/z369GmQv/yr9yyRNDr9c3r87+RPP/4pPjgbPHWfOfCW8ygQ/zsl+jMc+jKeN719vLZgPjdXPP//7nL19yzUP/wjdCtbvzmcuXIb///x9Ho8vjkou/WgJy3x/HUafznd/nlh9WmPLXQ3fv48t67XdDj7P3pgPnx4Mrd6fjcWtewW/fw3/z46+LCcwAAACH5BAEAAH8ALAAAAAAPABoAAAf/gH+Cgy0KLYOIiTAuMImOJBEoESSOiAoJIwkKjkMmAZ8UF00CpAI5gjkuIxhIKio/CyAYFAGCJwEJYz9gDRsNFxoCJ4MAESYgSgwMGwETAIkACAwFDQVWGc+JEnMFC3YLVUASjjhrFgg4CBZEZI4dGh0ffx8ZeW6OMzPZfwATT5WCSrApARBRDyc9CgrqY0ONjSgKQ4RJoSVEIgJfBmgcsIJFHAcgy/ghQADKlBRMVjy4IwMOBDNdghD4gydJGywyIBjYycLDHj6DDvCog0aMHh9ZlvCokKiClBg+IMQwIoSOox1Uijzw8OCInB2ORLzRwUXECx1bzghCMeiFlxs0EP7QuJHmiiMOHA4ErVFjUCAAOw== +Content-Transfer-Encoding: Base64 + +R0lGODlhDwAaAOZ/APr7/LnO3bXL2uK7Vvz58NLu9friZ/z69arD0tXl7eHr8uL1 ++tLv89v09921Uf3phfzjcMra5dvl68nX4ef1+fz589rt9e79/+v7/Ka+zs7h6tny +9d3EmqjAz+rQc+ft8d/1+PTjttSycvb///f6+/vx0rzR3vL2+P/////4rub5+/3q +jf/zlu/0+fH5/MmdQtLh7PfYWP3oe83a4u/jzdi9ke3Ma8aaSbvN2r/T4PXdfunX +s+LGivHWh/jbWuT4+a7K2dy2X8qbO8PW4sTc6fjaX/bUU/fUXOr6+9+5Y9bx89u1 +V//ukOLz9v/2usfV3uTAZ/z369GmQv/yr9yyRNDr9c3r87+RPP/4pPjgbPHWfOfC +W8ygQ/zsl+jMc+jKeN719vLZgPjdXPP//7nL19yzUP/wjdCtbvzmcuXIb///x9Ho +8vjkou/WgJy3x/HUafznd/nlh9WmPLXQ3fv48t67XdDj7P3pgPnx4Mrd6fjcWtew +W/fw3/z46+LCcwAAACH5BAEAAH8ALAAAAAAPABoAAAf/gH+Cgy0KLYOIiTAuMImO +JBEoESSOiAoJIwkKjkMmAZ8UF00CpAI5gjkuIxhIKio/CyAYFAGCJwEJYz9gDRsN +FxoCJ4MAESYgSgwMGwETAIkACAwFDQVWGc+JEnMFC3YLVUASjjhrFgg4CBZEZI4d +Gh0ffx8ZeW6OMzPZfwATT5WCSrApARBRDyc9CgrqY0ONjSgKQ4RJoSVEIgJfBmgc +sIJFHAcgy/ghQADKlBRMVjy4IwMOBDNdghD4gydJGywyIBjYycLDHj6DDvCog0aM +Hh9ZlvCokKiClBg+IMQwIoSOox1Uijzw8OCInB2ORLzRwUXECx1bzghCMeiFlxs0 +EP7QuJHmiiMOHA4ErVFjUCAAOw== + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-comments2.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhDAAOAOYAANDf6tbt9oWludPi7NHg6sPh8Mvb59Li7IiovLnM2bjM2NHh +6+Pq74SjuNLh64GhtcDV47fL17LG0+jv9cfY47/V46m+zMLT37vO2+rx9oCgtuju +8fz//83d56zBzvv//+ju8uPz+rjM2b/c8M/e6rzP2+/z9dvv+ouou8LV4OPz+4uo +vNXr+srb5sbX4sPY5LXI1sjZ5Njt+omovIinu+Hp7r/R3YmpvNTv8szn8Oz6++r3 +/sHU2q7L0qbE0cjk8N/09tDr8Pf//////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAMAA4AAAdwgBkDAwcOCwQEAAAkEwAc +Q5CRkB8GHUKXmJkxLTo6PJ+gnS4UQKWmpxcpODg9ra6rNiVBs7S1GCI5OT67vLkK +CQE/wsPCATARKjvKJwUFyiESDDczCDQvMiMCAg01kiArECwakpIbKBUP5JImHhaR +gQA7 + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-author-link.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhBQAHAIABAJ2dnf///yH5BAEAAAEALAAAAAAFAAcAAAIKDA5ht8ioTFRJ +FQA7 + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-icon-twitter.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhDgAQAOZGAP///3PU/HLU/HHU/HDU/NfX12/T/Nvb2+jo6Nzc3NbW1t7e +3t3d3d/f39LS0u/v79ra2oHZ/O7u7tPT04jb/fz+/+bm5uPj4/r6+n3X/PT09PHx +8dXV1efn5/z8/Pj4+Pf39+3t7djY2Ljp/enp6eLi4v3+/+Xl5cDs/u35/5zh/f39 +/dHx/uTk5Ob3/vb29qbk/evr65Pe/W7T/Pn5+cnu/tfz/qvm/ZHd/f7+/tnZ2XjW +/OX3/nXV/OHh4Ynb/Ozs7PX19eT3/o/d/fX8/43c/f///wAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAACH5BAEAAEYALAAAAAAOABAAQAeigEYIDRAJIUaIiYgFAAIC +MgCRkR8nB0aMBgYUkpEYHRCCFigBpKWkMA8XCzQRMyobJYqJjAO1trY3QC0iHhmk +NRWSQRcMiBoKJB4pwZErMRwYCB1EQhsLh7JGCgCZFCA6B+EMCIsABOfo5xE2DQ+M +jvDwPy4Q7jk9AUMvnAkWiAwgipgqhYNHAgnaTIzwZWoHCx8IjWhowEHEBAcYJyz4 +YCQQADs= + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/png +Content-Location: http://habrahabr.ru/i/bg-icon-facebook.png +Content-Transfer-Encoding: Base64 + +iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAA +AJ9JREFUOMtjYKAQMDIwMDAkVq75f+vBG5I0qimIMMxvD2FkYmBgYCBVM7IeFmIU +q8oLM3SXeTKICHIzMDAwMNhEzYTLMRFjALJmdECUC7DZTJIL8AG8LjiyLB0rH9kl +eA148/4rihdgfKJdEJC9BMVmGJ+qYUCdQOTiZGPQUBIjqNhIWwbOvnHvFRVdICPO +x3Du6hOcirAlIDUFEQaqAAAnVClioBN0DAAAAABJRU5ErkJggg== + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/link_icon2.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhFAAUAOYAAIGiu+ft8o2xy8nm9YmtxcLe7KnL3u3///r+/5G0zYisyYWp +xnyivc7i79Lu+53B2NLm9Nvt9tHs87nW6pa60mSKpJ3B1pS20PT2+OX8/3ufu+D5 +/+j+/9jy/nCVr7nZ6dXx/s/r+Zi40d74//P+/4+uw8Lh8Zq81Lza7Z2/1rXR5r/b +667N4KLF2uf7/qPB17ra7fX4+pi808nd64ClwL7e7u/z9q7D0YKow8Hg767O5bHT +7dr0/4mqwPb//8Xi8cbg7qnG256909/1/8Ph9LTU5bLT5a/Q4naeuf3///T5/tzl +6qTG28Da8LDR4snW37XW5snl74eow6TD2b7S4L/X5qa8yrfY57/g8rnY55WuwZ67 +0OD4+W2TrOX6+7fZ68vo+sXk8931+Iimu+r8/XmZsMTX5rnO3bHN5JKtv8Th9Mfl ++Mfl9NTx9IOoxXabtczn9qnL5Njz9a/L4LfR6LXW74uyx6PA2L/d66PH3bPH1rTJ +17DM3pSzx7rX4v///yH5BAAAAAAALAAAAAAUABQAAAf/gH+CgkoQTTuIO00QSoOO +ghB1YBsHlQdDazsQj38ITUQcBxwZG6WlQzATCI4TaqOlIzw8HR0gDh0TKoMNKC4j +YEREWFg1MDBfWHAhOjN/MXFDPCA6jZx5Jjk/DxgzKB0OITUtDQgISYMPKB8fLGZz +cHADbGE5Dw1/PuZ/FFBFRkUvZIT4kSNHjSJV8B0gkU+AkyMsjAigAAQFjA9X+Pxx +wcULmYUEDIhkQeACnn5GWkTw0UaOGD8HyOBg0qKFARwCsjxkkeBPBAkS7CChcoDB +gxQpDNDYwkLkzSRRoljAkQJJAAYyKFBI0eeMCJotaJAoAIQGBRkJNGi4kOAEAT02 +b2gEOUojwooVDC6wVaBAgAAhb2z82UPgDgUFQYBMWOBXAF8FIhjcGFSixwkBDJqo +uLCgsxvIGsY4itEDgIgFGuigSUBjQQIhHgDE4HSjCwApAATcmSKkRwUrjjBgCBBg +yRMtZSoor1AmzZMlxIUHAgA7 + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/double-lock.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhIgAUAOZ/AN/t9s7o9tnv+qnI3L7Z6ZG1ztru9s7m8L/h8+36//r//7TG +0rrS4pq60cre7IGlv8rp+M7h7bzY6LnO3LrZ6eP0+6C+04qrwqjI2pa81KHA1bPP +35WzyXieuPX8/7PP4ef2/Of1+6vH267C0cji7rXQ4KfG2/f///X+/5Kzy93x+93w ++Mfn97fT5J6/1M3q+nGXsWSKpGqQqqbF28Tc7V6Fn4mtx1qBmuXu9dLp9LrW5+n3 +/LDN3eDz+oWmvcTZ6KXF2qfF2Orw9bDL3Mvn9dbk7uT0/czq+LjU5rvV5qHB2KPE +2aTC2bTI16bG3XSYsnCVrvD6/vH9/77W5L/U4bTJ2M/n86zL263L3KfC1fj6/P7/ +/4+uxniaspy808Dh8a7N4Nvw+t/x/ODz/Nrm7qXE2Ze3zaXG2uP1/KbG2Zi3zbXS +4bTS467M3LjS4X+kvsLb6L7S4Oj0+pGwxu3z+N/x+4KkvLLJ2rfQ4dXg6NXt+LHO +3Zq+2FZ8lv///////yH5BAEAAH8ALAAAAAAiABQAAAf/gH+CgnQOhg4Ag4qLhYeJ +i4IAAwAKfpYALRGQkZOVl5mLRQ6WCh4eJ1t+AAyQoqSmqKqsgloiKFFUHBcXc3dy +Hj9CirW3ubu9v8GCZBE7WU2KeVwhAHGKzM7Qg9LU1n8TBiF2in5/PiEGHIrg4uTm +6OrfBxVPkCMrB2/r8/WL9/mCqhCoAMUeCAIdFAkkaBChoAk0EnSBtMAIjXGDIEqk +aHEcDj58nIAcSRIkDkEfQ5ZciaMAAhYQIBx5QfPFEQgsWCAoIMglTJk1beLUWcDG +lwB6BKioM0aMijACchD5YkOQUaRKmTqFKpXqgwxnsGwo4aYsng08BizJ8EDQ17Bj +w8u6OZt27YMOFKysAJFAyokTKBKAWGGFQsI/ePXy9QtYMGHDMApowNBm7JoSG/Zc +SeOiAAxBkSdXLnE58+bOMGQMIEAih4EVFdD0MJCDhIQBMgSpZu0atmzatnHH8DLg +Q4skEpLrQMIGjIkGMQQNL348uYTlzZ/HqJGigQYmQGaYMDGjjBIXDVLUEMTdO3jx +5M2jV3/jghkLQYa4mQInyQYRGqhxwQ2C1Hdffvv191+AAy7Qx4MQRhjhAoI4KOGF +Dy4QCAA7 + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/gif +Content-Location: data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIFjA8QqVwAOw== +Content-Transfer-Encoding: Base64 + +R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIFjA8QqVwAOw== + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/gif +Content-Location: data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIGjANgqRwFADs= +Content-Transfer-Encoding: Base64 + +R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIGjANgqRwFADs= + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/gif +Content-Location: data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIGhGOAGt0FADs= +Content-Transfer-Encoding: Base64 + +R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIGhGOAGt0FADs= + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/gif +Content-Location: data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIFDG6YwVEAOw== +Content-Transfer-Encoding: Base64 + +R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIFDG6YwVEAOw== + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/add_comment.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhEgAMAIAAAK+lav///yH5BAAAAAAALAAAAAASAAwAAAIgDI4Jwb0NXXwR +Unarmdryjn1gllUl4iTjU3bHBk4vWAAAOw== + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/comments.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhEgAMAIAAAK+lav///yH5BAAAAAAALAAAAAASAAwAAAIiDI4Jwb0NXXzq +sCfj3KZermVZRYGhoSFOcnZfC1kYfFltAQA7 + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg_avatar_mask_mini.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhGAAYAIABAPn5+QAAACH5BAEAAAEALAAAAAAYABgAQAIdBIKpu8YPo5y0 +2ouz3rx7dHSO+JXmiabqmo6aUQAAOw== + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/webp +Content-Location: http://habrahabr.ru/i/icos/icons_vote_comments_4modes.png +Content-Transfer-Encoding: Base64 + +UklGRmABAABXRUJQVlA4IFQBAABwBwCdASoaADQABIcIhYWIhYSIIwIDOwf/qY5V +PFJY+iVbJQjoL9N5LWGQGu2o69DHOGL3nNhrVemaC1cUevUUUvr5oAD+1w8lDT+P +grWvNh8Gclmyl+s2tpErshZgn5aWfMxrEhI3mUdlVspCJYMLphiyU/Q8lmKv3/UA +ydEe+OST/eOicZLohC9cT+zq5TgKlE4rPwrtuCca3b3V6Y8aephX290owirC5+n8 +t5DmPDR1PdnnBCwGT6eNF9nOAUcVTRgfa8E7Ya0CJNM58ye1wySJzBSb0R5a3Uxe +iJH3vJ/OoxDK1D6NeONm7d2Ri052MZ3ogzhS5gilXPUzbRm4ZKM+rBG8LQFTvOSE +j8/7xPtvsrUFuCWmzB9pREhGUU4Vl1oPpiUUtJJslfIFzPdGGLnpEtcufHT3QJgP +twwvkg2lECyn3Vj+ThKvMMqCTTjwoAAA + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/png +Content-Location: http://habrahabr.ru/i/bg-button-enter.png +Content-Transfer-Encoding: Base64 + +iVBORw0KGgoAAAANSUhEUgAAACAAAACDCAMAAADbLOmGAAAAGXRFWHRTb2Z0d2Fy +ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGBQTFRF8vLy5+fns7Oz////ysrKz8/P +0dHRzs7O09PTx8fHycnJ0NDQyMjI0tLS3NzczMzMzc3N4uLi2dnZy8vL3t7e4ODg +39/f4+Pj5OTk1dXV5ubm+vr6+/v7/v7+/f39////yswFHgAAACB0Uk5T//////// +/////////////////////////////////wBcXBvtAAABWElEQVR42uzW23KDMAwE +UNlgnBYINOn9xv//ZQkhgGQhFwf8xL5yJpNMFs1C8/6R3WLaWHt4aiaBt5fvBOfr +dSrg8As0nwaBxAHqfmAFoJeDMgTUU2AYkAYD7QGaBTYZn18igO4TQALgBcCB6scF +xRQcnxXN8TQFzTHt8tjm4ZoT6mTjCfyj1c53IK1Wzq8Asz2wAtDLQRkCcKsZkAYD +7QGaBVY5rZ4DQ6tnAXgBcKBiAGm183xv9d7qvdVLWp33Mdd0BWcWCB4j3AJBY4Tb +D2hr3A3sCqAMA7c/XtUxQCaDKgbIZXDeAmgCyJbrX9ABpM7Y0+NLzoLxFZ8DQIGV +CxMFMGMP7T5u7KHdhw5Im6LPcEtWOSDSd7gcECX9CjDbA7sCKMPAUKs6BshkUMUA +uQzOWwBNABkY5IBA6iwQfEBcQA4IA4ACKxcmCqhkUHALBI0R7wH5E2AAR7t7jEpR +hqMAAAAASUVORK5CYII= + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg_avatar_mask.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhMAAwAIABAP///////yH5BAEAAAEALAAAAAAwADAAQAJDhBGpy+2/DoK0 +2ouz3rz7D4biSJbmiabdpFpGe7HwTNf2jef6zvfKu5PwDj6Z74hMKpfMpvMJjUqn +1KrVZsxJsjBJAQA7 + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/png +Content-Location: http://habrahabr.ru/i/tags/habred.png +Content-Transfer-Encoding: Base64 + +iVBORw0KGgoAAAANSUhEUgAAAGoAAAAZCAYAAADZl7v4AAAAAXNSR0IArs4c6QAA +CBVJREFUaN7tmG1wlFcVx3+bZF+ThUAIhDYkSAiEl5BQkEAQSwlIJxY7gNUBtdOx +Vew4rU4/6CfbwVacUcdhygdKVUbtCJ0qOENpSVEsFAyDFEqgtEASMCGBhJcl2V32 +eb338cPuPtndZDfhZUY+7H8mM/eec3LO3fN/zr3nXgcJePeTC1ZhgZcs/v/oCyus +mjvNEZ/nJSotYPbU0myWHgAcPtWaNE8mSlpY0spm6QFAKg9JREkk0ooaXI+c5rry +yT0HLPbOpdg3J5v5O4REZiBKgogx2Rs5QbHfSYE7966DhTVBb+gEYz3V2czfKVHJ +PKUQZWFXlGao+NxOJOKug/ncoAVU22cWd0CURaYzSiLEAFGKce8J1gzN9pnFnZxR +mbY+y0qoKAXVUNI6CikKqqHjcbrwe70ZiCJbUXdVUZmaCWEhRJRJ1VCJGFpaR/1K +iFXlb/CXz5+mePRo8j2eIe1Uw237zCKKc+2XAaiqmJSeKJGBKGFJRMIZpZjB9KXp +0Nl+Zi3frd7F9jNrGTfaj8/jGqKiRtk+s4ji+JnoHalySvo7q7DkMM1EwhmlGumJ +yskFfz5sa2lkQ837bGtpZKzfi9ftTCHKNejrANix5yCtHVcBWLmkloW1M2zdr363 +i9IJRaz/2lIAem7cYtvOJn70zCoK/QU0HfqYQH/Y1v/hr/u52RfiJ99ba/vYuGVn +UryVS2qZXFrCtp1NAHg9Lp5sWMDoUQW2DKCyfCLL6mvYtrOJV15YlxT/lRfWJY2H +06XqN27ZyYZ1j/Ps6gYADhz/lA8On0qyH1EzIYTEjB1iqqmgGn3RsW4SVgSaIcEB +DsCyAAcYhuDVg/X8bGkzvz22hPFj3HhcA25VM9/2mYjGL9VSuraBi109bH3nn8yf +Mx2Azu5rKKpOa8dVAv0hRvnzKRlXyLwZk/mwuYW6uTM4drqVnz77JKaUBEO36eq5 +CcDFyz2UPTzejvH8N5YzpbQktg5Je1cPAL9+6ducbevkj3s+4pk1y2wZgGlJzndE +7eLr1jTdnieOh9Ol6uPzfs2gs/saHxw+Ncg+kYv0XZ9lIWNU6qaGKvpj9yHJD2qO +DVvSL9Ud5o0zdZCbY8t0c5ztMxH+Qj8BRaf9yg2KC/22zfn2yzxSVc7N/jDn27uY +N2caurRoXDqPV7fuors3wIqFs8hzu5HS4nx7F+UTi/B6XJxvv0zpxGI7RsQQBBQ9 +6fcBBBQd1RTke11JslS7+JoS53eiS+cromr8renfPFJVzslzHUPmx8rUTAhpYcb+ +STNVtNgZJXHwm4+rMY34i6DDfh00hANNh9eWneEXzdWM8Vto5kAQzVRtn4kI9N9m +2473Afj6ijrb5kxrJ6sbFtAfDNNyoZOa2ZXRNThyqK+ppLmllXnV09Fj2+lnbZ3U +TCvD7Xax78gpHq2fa8f4098/BOCh8WP5cl01eTnRdf9y6zuMHV3AtxqXEDGFLQOY +N3sqMypKk2RxmNKyHwSG03k8Lh5bOIei0QW2Pp7j/YdOUFzop3ZmBSfPdQyZHyGH +IUrEylA3VHQRAsCRC/m+wRWkGznISB6vLWtj09GpFOSbOHIluki0UW2fSRVV4GPT +i+v5b1cvb+4+wA+fnsD1QB+KqrPjvSO23a3+MKP8Pm6FIjS3tFJWUsT+5haW1tcS +DEXo6g3Q1Ruw7Tu6e+2q+v6aBiaXTuD42TbefvcQ61Y9CsCmF9cjLIuwbhK6cs2W +RbdIQevlniRZfI1CSjuBw+mu3giwZUcTX106P5Zbaef4Ylcvz39zJVcDwSTdiImS +0sKMNxNCRZe3025zupGHorh5ub6NnzeX4fVqkGuip8TUhGr7TLqHhcPoBflosepU +NJ22S91MLy/hO7EmYfNb79F6qYuaWZUcOHKSRXOmUldbxeY/76Wqspzuq9eZVFLE +hqdWAPDWnoO0XeqmZPw4AIK6QU9YJRhR8XoGtrmesDpoi8kkC+pGtCqENWLdtWAE +ALfLaesBDh07zeqGBVhOp20/VH5kZqIkMsauYRpYVvrnIyHyeLm+k43NpXg9Ks48 +k6G6cMM0bJ8DJEXYs7+ZW8EwHreT9Y2L8fu8fN5+mae+soieUDQJ82dVcLq1g3yf +l0tdvaxevhDhyOGx+TPZ96//4PU4qa4ss+2nT5nEP462UP/F6Nvi23s/AmDKpAms +e3wxhsNh/844nM5oCl7fvhuAQn8+q5bXJdnFbaSUSeN0ute372bMqALWNy7G6fYk +2VeWTWTixPFo5mBfqVwkwpE42bz3qDVvZkW0fW55gmkV5zNWlJS55OQIXE4zrd2F +9umsr9mb/HXkOBjjc5PriHaP/aqBagomFHi4pRjoIvqB5Lvz8OblEtZMCr1OroU1 +pGXhd+fhceZhWRaKKbitReP7nLn43U56wyol/oELuC4kYU1gYVHkc9nEAjhzcyjy +uRLuL9Cn6El2cZuekJo0TqeL+wmpBsIaiFni93BbNwnF1pvqKxEnPmvnx08scmQ4 +o+LlaGTs8KLkmMN2gqYwBu23Qlr0BAc/T11JkQUVgyDRddzWB2L1KQYog9cX0gaS +0N0/9PNXqlxIMaRtoizRJtU+ky7V10hjj6iZMGP9u7QkhZ4K+tT2u76BF3oqkJaw +fWYxcoy46wNwmA/zhcKyuw7WFxZA55BdTRb3QJS0LOIf/6zi5zh89vf3HHBW8XNk +C+o+v54noqp4DVXFa+4pmCEiOHN92azfBwwiqmTM/UxslqT7SZQ/9gfAvqOfZrPy +4OCheEP7PydxA3UapgnrAAAAAElFTkSuQmCC + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/form/loader_button.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhDAAMAIABAJqamv///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAAABACwA +AAAADAAMAAACGQweeaDY3JJxUy4LZ74aQ96FIgWSpoeOSAEAIfkECQAAAQAsAAAA +AAwADAAAAhpMgHa5oOjaY2vGauC0XGamfVHoYSVFoipQAAAh+QQJAAABACwAAAAA +DAAMAAACGYyBFgiX3taTkSnr7txcRwp54YiB2SiJTgEAIfkECQAAAQAsAAAAAAwA +DAAAAhoEgna5oejaY2vGauC0XGamfVHoYSVFompQAAAh+QQJAAABACwAAAAADAAM +AAACGYSDBhiX3taTkSnr7txcRwp54YiB2SiJTgEAIfkEBQAAAQAsAAAAAAwADAAA +AhkMHnmg2NyScVMuC2e+GkPehSIFkqaHjkgBADs= + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/form/loader_field.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhDAAMAIABAO3t7f///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAAABACwA +AAAADAAMAAACGQweeaDY3JJxUy4LZ74aQ96FIgWSpoeOSAEAIfkECQAAAQAsAAAA +AAwADAAAAhpMgHa5oOjaY2vGauC0XGamfVHoYSVFoipQAAAh+QQJAAABACwAAAAA +DAAMAAACGYyBFgiX3taTkSnr7txcRwp54YiB2SiJTgEAIfkECQAAAQAsAAAAAAwA +DAAAAhlEDnmh2NyScVMuC2e+GkPehSIFkqaHjkgBACH5BAkAAAEALAAAAAAMAAwA +AAIaBIJ2uaHo2mNrxmrgtFxmpn1R6GElRaJqUAAAIfkEBQAAAQAsAAAAAAwADAAA +AhmEgwYYl97Wk5Ep6+7cXEcKeeGIgdkoiU4BADs= + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/bg-corner-top-left.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIFjA8QqVwAOw== + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/tm_logo_sharp.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhHwA8ANU6AKqqqsUrhaKiot2IuqOjo////+4vmtLT08zMzJ2dnctDk+Lk +5P79/P3s9bGxsfHx8u3s6/Xb6+u61p+envX49Pj5+Z+gn/34+sHBwd3d3Jycm+es +zvvk57i4uNRmpsrKyu3D24+Pj/70+uOdxZiYmZqbm8fHx5eWl/jJ3f/5/dxcpsTE +xJGRkf6m1P7//b6+vvz9/v3+/pWWlZWUlPv8+6CgoKKhor0idqWlpcAjfP///wAA +AAAAAAAAAAAAAAAAACH5BAEAADoALAAAAAAfADwAQAb/wITNJiAah0XkcMlU2jQ1 +nHQqFVgFhCxWmqVSa1Gv1NIpHBKTBQRToWAYCI0YLK7bpywZAgHR3XKAgYKDhIU5 +N3+FAYuMOYuAj4WIhjcKBQOIEhwKMA2WmISThqOCiIgGLTo6NnetrTZhYiUOBQgn +GhkMFQ4vDLUJc7F1AlNdXcQEUgAOAAITCUlKSUXR1Es4CKrafqTdlImhCi6YN5oR +HgMcF6CDot7fpwYGAcKu9lJ09/o4sGIJbwwo6MpwgMICCzggVPgwQUy/OmTMJEiw +4MGCAxkWVEAAzMtDhw42JrCQAQIAiwAoMHTIal8dEiFCYDhAs55LKTZmmHiwrafP +/59At4F7984dUW9GAykAESEGBwkDNhRosIhGCnalhpYSR05ChBFMB4jAGijpoACB +Ft14hFaS1qOATN2QZwDFW7inUGyz6SqZnWQW+N70km/wnY+G6xSmAqDxMhyOAShr +rNhmjQ5qClg0kaEABRwOfMUJZueymRIWKj7A8OEBnI5fWs4pc0BDGggHIOAWSbqO +DVoHSqR5QIsCLQQNCQuerKw5ZMnF8C2/R+AEiRofEGAAMP1eDRYhVhxA8KD7vRAA +cquK4veO3/ZcSKygELS+/Z5y8+vfz98sXLf/IXVXgFnBY8ohZQ1o1g0eXHBBAyKk +MMIIDUjwRwQNkBWXggqsg1DIBgx4ooIvGh7C4SWZRABCVBKM9ZZ/h3ySYoMNNFgi +jJVk+GEEAXAAQgA6hjKgkHEhKAhaBxKY4Fx0DUmUKfKk4mRRc22gTX9YypWDCj4F +AQA7 + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/webp +Content-Location: http://habrahabr.ru/i/bg-multilogo.png +Content-Transfer-Encoding: Base64 + +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 +JXgWgAAA + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/gif +Content-Location: http://habrahabr.ru/i/topic_edit.gif +Content-Transfer-Encoding: Base64 + +R0lGODlhEAAQAOZTAM3p+OLp7nmar4eovMLY56jC0+H4/N3l6s7m8ezx9fT2+Ojt +8Xear8La5+T7/9Tv+sLi8+nv87zQ3fX//5q3ycLZ6Ovw89Dc5J67za/H2Ji5zXmc +suvy97PM3ompvvn//+j//4urv9ri6d3z/bfa7uX1+7zT4brZ7d72/fH//+f6/42s +v46sv9ft+IKit+f2+6/T6568zYepvsno9fP3+qzJ2dLr+d/1/YqrwrPG06vQ6dvy +/N/v9o6rvs3r9KvG2Nzl7PH9/+n4/Mrn9czc5pWyxbPO3rXX6MDR3M7o89ry/Iqq +vszr9rDL2+f5/8nX4L7h8t7o8Nrz+////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAACH5BAEAAFMALAAAAAAQABAAAAeRgFOCg4I0BA0mRISLUxwV +BhM8EoyEBAYpQgUJlIMdIEGaUxcePZQ/Dj4YEUg4LSuMUUYoM0cyGidKA4tRTVJM +UCQwOjYIAoS8vlBDNzsjCAwBg8i/AE4UIQMC0YLTUNVLT7C91E7g4snf4YwZUg8Q +6Zw1SRsq5eqUMSUfL+acU0AsirjIIeLAgQALFlhQoEBQIAA7 + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline; filename=all.css +Content-Type: text/css; name=all.css +Content-Location: http://habrahabr.ru/css/1307631427/all.css +Content-Transfer-Encoding: 8bit + + + +/* layout */ +#header-wrapper { + position:relative; + /*overflow:hidden;*/ + min-width:760px; + } + +#wrapper { + width: 95%; + min-width: 725px; + clear: both; + margin:0 auto; +/* overflow: hidden;*/ +} +#inner { + margin:0 auto; + max-width: 1200px; +} + + #main-content { + float: left; + width: 66%; + clear: left; + margin-right: 2%; +/* overflow: hidden;*/ + } + #sidebar { + float: left; + width: 31%; + } + + + + + +/* main */ +body, html { + height: 100%; +} +body { + font: .75em Verdana, sans-serif; /*12px is font-size for main content. Base font size*/ + color:#000; + background:#fff; +} +a{color: #6da3bd;} +a.serv{ + text-decoration:none; + border-bottom:1px solid #6DA3BD; + } +.input-row{ + margin-bottom:9px; +} +a.js-serv{ + border-bottom: 1px dashed #6DA3BD; + text-decoration:none; + cursor:pointer; + } +a.silentlink{ + text-decoration:none; + color:#343434; + } + a.silentlink:hover{ + color:#343434; + } +a:hover{ color:#4D7285;} +.hentry .content a:visited,.entry-content a:visited{ + color:#990099; +} + .hentry .content a:visited:hover,.entry-content a:visited:hover{ + color:#C266C2; + } + .hentry .content .habracut a:visited{ + color:#6DA3BD; + } + .hentry .content .habracut a:visited:hover{ + color:#939393; + } + + .entry-title a.topic:visited{ + color:#B0B0B0; + } + .entry-title a.topic:visited:hover{ + color:#939393; + } +a img { + border:none; +} + +address { + font-style:normal; +} + +fieldset {border:0 solid transparent;} +input, select, textarea { + font-size: 100%; + font-family: verdana, sans-serif; +} + +ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,body,html,blockquote,fieldset,dl,dt,dd,caption {margin:0; padding:0;} +ul,ol {list-style: none;} +pre,code {font-size: 1em;} + +ol{list-style-type: decimal; + list-style-position: inside; + } +.published, +time{ + text-transform: lowercase; +} +h1, h2, h3, h4, h5, h6 { + color:#999999; + font-family:Verdana,sans-serif; + font-weight:normal; + margin:0 0 0 0; + padding:0; +} + +h1 { + font-size:162.5%; + letter-spacing:-1px; + margin-bottom:0.7em; +} + +h2 { + font-size:150%; +} + +h3 { + font-size: 137.5%; +} + +h4 { + font-size: 120%; +} + +h5 { + font-size: 110%; +} + +h6 { + font-size: 100%; +} + +table {border-collapse: collapse;} + +blockquote { + border-left:2px solid #bbb; + margin: .83em 0; + padding-left:15px; + clear: both; +} + +img[align="center"] { + display: block; + margin: 0 auto !important; +} + +.hidden { display: none !important;} +.error{color:red;} + + +/*Header*/ + +/* Sligtly modified code first coded by Aleksey Rybakov (http://flack.ru/temp/habr/head.html) */ + +#header-inner { + margin-right:255px; + } +#nav-adv { + margin-left:240px; + } +#logo { + width:240px; + float:left; + } +#info-search { + width:255px; + float:right; + } + + #logo img { + width:240px; + height:130px; + } + + #main-nav { + padding-top:14px; + text-transform:lowercase; + font:1.75em 'Lucida Grande',Verdana,sans-serif; /*21px*/ + } + #main-nav li { + display:inline; + margin-right:1px; + } + #main-nav li a { + position:relative; + padding:0 3px; + border-bottom:1px solid #b2b2b2; + text-decoration:none; + color:#b2b2b2; + } + #main-nav li.current a { + color: #000; + font-weight: normal; + border-bottom:none; + } + #main-nav li.current a span { + color: #F60; + font-weight: normal; + border-bottom:1px solid #000; + } + #main-nav li .top-Link { + vertical-align: top; + color: #ff9600; + letter-spacing: -1px; + } + #main-nav li .top-link span { + color: #8d8b8b; + } + + /* Subnavigation (nearest menu level) */ + + #sub-nav { + clear: both; + margin-bottom: 20px; + + } + #sub-nav li { + display: inline; + margin-right: 3px; + } + #sub-nav .create-blog, #sub-nav #recommend { + margin-left: 15px; + } + #sub-nav li a { + font-family: Arial, sans-serif; + font-size:1.083em; /*13px*/ + text-decoration: none; + color:#093; + padding: 0 2px; + } + #sub-nav .current a { + color:#fff; + background-color: #ff9525; + padding: 0 5px;} + + /* // Subnavigation (nearest menu level) */ + + + + /*Text advert*/ + + + #head-text-adv { + margin: 2.5em 0 1.5em 0; +/* float: left;*/ + width: 98%; + } + .profile #head-text-adv { + margin: 5em 0 0 0; +/* float: left;*/ + width: 98%; + } + #main-page #head-text-adv { + margin-top: 1.2em; + } + #head-text-adv iframe { + margin: 0; + width: 100%; + } + + /* // Text advert*/ + + + + #info-search { + text-align:right; + width: 255px; + font:.917em Tahoma,Verdana,Helvetica,sans-serif; /*11px*/ + } + #info-search .avatar { + float:right; + width:48px; + height:48px; + margin:7px 19px 0 0; + border:1px solid #DDD; + } + #info-search dl { + float:right; + padding:11px 13px 0 0; + text-transform:lowercase; + width: 170px; + } + #info-search dl a { + color:#999; + } + #info-search dd { + margin-top:1px; + } + #info-search dt { + width: 170px; + } + #info-search dd ul { + color:#000; + } + #info-search dd ul li { + display:inline; + padding:0 5px; + background: url(/i/bg-info-search.gif) no-repeat 100% 100%; + } + #info-search dd ul li.last { + padding:0; + background:none; + } + #info-search dd ul li a { + color:#000; + } + #info-search .habrauser { + text-transform:none; + font-weight:bold; + color:#666; + } + #info-search #last-shot {margin-bottom: -1px;} + #info-search form { + float:left; + margin-top:11px; + margin-right:6px; + } + #info-search fieldset div { + float:left; + width:176px; + padding:3px; + background:#C9D6DE; + } + #info-search fieldset div input { + width:170px; + padding:1px 0 1px 3px; + } + #info-search fieldset .submit { + float:left; + width:49px; + margin:2px 0 0 5px; + } + + .new-mail-indicator {margin-bottom: -1px; margin-left: 2px;} + + /* Menu for unlogined visitors */ + + #info-search ul.guest_panel { + margin: 2em 4.2em 1em 1em; + } + #info-search ul.guest_panel li { + display: inline; + } + +/* // Header */ + +.company_admin #sidebar{ + padding-top:46px; + } +.help .company-help{ + margin:0 20px 20px 20px; +} + +/* Main content */ + +/* Горизонтальное меню над постами */ + + +.page-navigation { + overflow:hidden; + width:100%; + clear:both; + margin-bottom: 20px; + } + + +ul.page-menu{ + overflow:hidden; + } + .page-menu li { + width:20%; + float:left; + } + .page-menu li { + padding: 0; + text-align: center; + background: #eaecea url(/i/bg-page-nav-left.gif) no-repeat 0 0; + vertical-align: top; + } + .page-menu li.current { + background-color: #d3e2f0; + background-image: url(/i/bg-page-nav-current-left.gif); + } + .page-menu li b{ + display:block; + font-weight:400; + height: 28px; + position:relative; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + padding-top: 7px; + background: url(/i/bg-page-nav-right.gif) no-repeat 100% 0; + } + + .page-menu li.current b { + background-image: url(/i/bg-page-nav-current-right.gif); + } +.unlogged-menu{ + padding-left:35px; + } +.blog-menu{ + } + .blog-menu + .page-menu td, + .blog-menu + .page-menu td.current{ + border-bottom-width:0; + } +.top-page-menu{ + padding-left:35px; +} +.page-menu { + width: 100%; + clear: both; + font-size: 1.33em; + border-collapse: collapse; +} + .page-menu td { + padding: 0; + height: 2.19em;/*35px*/ + text-align: center; + background: #eaecea url(/i/bg-page-nav-left.gif) no-repeat 0 0; + vertical-align: top; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + } + .page-menu td.last { + border-right: none; + } + .page-menu td.current { + background-color: #d3e2f0; + background-image: url(/i/bg-page-nav-current-left.gif); + border-bottom: 1px solid #d3e2f0; + } + + .page-menu td div { + padding-top: .5em; + background: url(/i/bg-page-nav-right.gif) no-repeat top right; + } + .page-menu a,.page-menu label { + color: #666; + cursor:pointer; + text-decoration:underline; + } + + + .page-menu a:hover,.page-menu label:hover{ + color:#A3A3A3; + } + .page-menu .current a,.page-menu .current label { + text-decoration: none; + color:#000; + } + #company-index .page-menu td { + background: none; + } + #company-index .page-menu td div { + background: url(/i/bg-page-nav-right-company.gif) no-repeat top right; + background: none; + } + #company-index .page-menu td div a { + color: #b2b2b2; + } + #company-index .page-menu .current div a { + color: #696969; + } + #company-index .page-menu td div .add { + margin-left: .5em; + } + + .profile .page-menu .current, .profile .page-menu .own { + width: 50%; + } + body#top .page-menu .current { + border-bottom-color: #fff; + } + #company-index .page-menu td.current { + background: #f0f0e7 url(/i/corner_3.gif) no-repeat 0 0; + /* border-bottom: 1px solid #f0f0e7; */ + } + .page-menu td.current div { + background: url(/i/bg-page-nav-current-right.gif) no-repeat top right; + } + #company-index .page-menu td.current div { + background: url(/i/corner_1.gif) no-repeat top right; + } + + + .page-menu .top img { + margin-top: .1em; + } + + .page-menu #write { + height: 35px; + width: 34px; + margin: 0; + background: #fff; + } + .page-menu #write img { + margin: 0; + outline: none; + } + + .page-menu sup {font-size:70%; color:#999; vertical-align:baseline; position: relative; top: -8px;line-height:0;} + + /*Tabled page-menu*/ + + .page-menu td { + text-align: center; + } + + + /*2 линия*/ + + .page-submenu { + font-size: 1em; /*12px*/ + float: left; + clear: both; + background: #D3E2F0 url(/i/bg-page-subnav-corner-bottom-left.gif) no-repeat bottom left; + border-right: 1px solid #fff; + } + + .logged { + border-left: 35px solid #fff; + } + + .right { + float: right; + } + + .page-submenu ul { + padding: .5em 20px .5em 0; + background: url(/i/bg-page-subnav-corner-bottom-right.gif) no-repeat bottom right; + } + .page-submenu li { + display: inline; + margin: 0 0 0 10px; + } + .page-submenu li.create-new-blog { + padding-left: 25px; + background: none; + } + + .page-submenu li.current a {text-decoration: none;color:#000 !important;} + + .page-menu td .new, + .page-submenu li .new { + color: #390; + } + .page-submenu li a { + color: #666; + } + .page-submenu li a:hover { + color:#A3A3A3; + } + .page-submenu li .rss img { + margin-bottom: -2px; + } + + +/*Простые табы (без круглых уголков и т.п., см. страницу приглашения в блог)*/ + +.two-simple-tabs { + width: 100%; + float: left; + clear: both; + margin: 20px 0 10px 0; + font-size: 1.58em; /*19/12*/ + white-space: nowrap; +} + .two-simple-tabs li { + float: left; + width: 49%; + text-align: center; + } + .two-simple-tabs li.last { + float: right; + } + .two-simple-tabs div { + padding: .5em .5em; width: 95%; margin: 0 auto; + } + .two-simple-tabs .current div { + background: #faeee2; + } + .two-simple-tabs div, .two-simple-tabs div a { + color: #999; + } + .two-simple-tabs div .new { + font: normal .89em/100% Verdana, sans-serif; /*17/19*/ + color: #390; + } + .two-simple-tabs div a:hover{ + color:#333; + } + + + + + +/* Archive section */ + +.archive-navbar { + margin: 30px auto -10px auto; + text-align: center; +} + .archive-navbar a { + display: inline; + font: 2.17em/100% Verdana, sans-serif; + color: #996; + } + .archive-navbar h1 { + display: inline; + font: normal 2.17em/100% Verdana, sans-serif; + letter-spacing: -1px; + margin: 0 .8em; + color: #69c; + } + + + +/* Информация о блоге */ + + + /* Новые стили 24 апреля 2008 */ + + .blog-descr {clear:both; font-size:14px;} + .blog-text-descr {margin: 10px 0 0;} + .blog-descr .bg-top-r h3 { + clear: both; + margin-bottom: 10px; + font-size: 1.63em; /*26/16*/ + font-weight: normal; + letter-spacing: -1px; + color: #999; + } + .blog-descr .bg-top-r div, .blog-descr .bg-top-r p {font-size: 14px;} + + /* Админы, соавторы и читатели блога */ + + .blog-descr #admins ul, .blog-descr #coauthors ul { + float: left; + width: 100%; + margin: .83em 0; + text-align: center; + } + .blog-descr #admins li, .blog-descr #coauthors li { + float: left; + clear: right; + list-style: none; + margin: 0 5px; + } + .blog-descr #admins dl dt a img, .blog-descr #coauthors dl dt a img { + display: block; + margin: 0 auto; + border: 1px solid #ddd; + } + .blog-descr #admins a, .blog-descr #coauthors a { + font-size: 12px; + } + + .people { + margin: 10px 0; + } + .people ul { + margin-top: 10px; + font-size: 12px; + } + .people ul li { + display: block; + float: left; + margin-right: 5px; + font-size:1em; + font-family:arial; + line-height: 130%; + } + .people ul li, .people ul li a { + color:#999; + } + .people ul li a { + padding: 0 0 0 15px; + background: url(/i/small_default_userpic.gif) 0 50% no-repeat; + } + + + /* // Новые стили 24 апреля 2008 */ + + + +#viva-la-w3c { + width:149%; + } + .blog-title { + overflow:hidden; + padding-top:10px; + margin-top:-20px; + min-height: 48px; + padding-bottom:8px; + padding-left:35px; + } + #viva-la-w3c .blog-title .avatar {border: 1px solid #ddd;float:left;} + +.blog-info { + clear: both; + padding:35px 0 20px 0; +} + .blog-info .title a { + color: #008cd2; + } + .blog-info .title img { + border: 1px solid #ddd; + } + .blog-info .title .avatar { + margin: 0 .83em -.45em 0; + } + .blog-info #buttons { + margin-left: 10px; + white-space: nowrap; + } + .blog-info #buttons img { + margin: 0 .83em -.2em 0; + border: 1px solid #ddd; + } + + .blog-info .more-info { + margin-left: 45px; + } + + .blog-info .more-info .subscribers { + font-size: 1em;/*12/16*/ + position: relative; + top: -.5em; + } + + .blog-info .more-info .rating, + .blog-info .more-info .subscribers { + margin: .2em .1em 0 .1em; + } + .blog-panel #sidebar{ + margin-top:46px; + } + .blogs #viva-la-w3c h2.blog-header { + + margin-top: 0; + float:left; + margin-right:30px; + font: normal 300%/120% Verdana, sans-serif; + letter-spacing: -1px; + color:#333; + + } + .blogs #viva-la-w3c h2.blog-header .silentlink{ + position:relative; + display:block; + float:left; + margin-right:5px; + } + .blogs #viva-la-w3c h2.blog-header .profiled_blog{ + cursor: help;width:16px;height:16px;float:left;margin-left:2px;margin-top:10px;background: transparent url(/i/icon_asterisk_24.png) left top no-repeat; + } + .blogs #viva-la-w3c h2.blog-header .edit{ + display:block;float:left;margin-left:10px;margin-top:18px; + } + .blogs h2.blog-header .blog-whois{ + position:absolute; + font-size:33%; + line-height:1em; + top:-5px; + right:-20px; + color:#66ccff; + + } + .blogs h2.blog-header .blog-whois:hover{ + color:#4890b4; + } + dl.blog-index { + float:left; + margin-right:19px; + position:relative; + } + dl.blog-index dt{ + position:absolute; + width:100%; + text-align:center; + top:-6px; + font-size:83%; + color:#ccc; + } + dl.blog-index dd{ + color:#CC66CC; + font-size:300%; + } + .blog-info .more-info .rating { + font-family:Arial; + font-weight: bold; + padding: 0 .2em; + color:#fff; + background-color: #d479b3; + } + .blog-about-text{ + position:absolute; + padding:27px 27px 30px; + width:550px; + top:200px; + left:47%; + z-index:99; + background:#fff; + border: 1px solid #999; + + } + #js-blog_info.tipBox-too-mach-right{ + margin-left:-575px; + } + .blog-about-text + .close-blog-info{ + position:absolute; + top:10px; + left:10px; + text-decoration:none; + color:#999; + } + .blog-about-text + .close-blog-info:hover{ + color:#ccc; + } + #js-blog_info.tipBox-too-mach-right + .close-blog-info{ + right:10px; + left:auto; + } + .blog-about-text h2{ + color:#333; + font-size:216%; + margin:0 0 13px; + } + .blog-about-text + .blog-about-text-content{ + max-height:440px; + overflow-y:auto; + } + .blog-about-text #js-admins_moderators_holder #admins img, + .blog-about-text #js-admins_moderators_holder #coauthors img, + .blog-about-text #js-admins_moderators_holder span{ + display:none !important; + } + .blog-about-text #js-admins_moderators_holder h3{ + clear:left; + font-size:100%; + float:left; + color:#000; + text-transform:lowercase; + margin-bottom:5px; + margin-right:5px; + } + .blog-about-text #js-admins_moderators_holder #admins, + .blog-about-text #js-admins_moderators_holder #coauthors, + .blog-about-text #js-admins_moderators_holder p{ + float:left; + } + .blog-about-text #js-admins_moderators_holder p{ + margin:0; + color:#ccc; + } + #js-admins_moderators_holder #admins *, #js-admins_moderators_holder #coauthors *{ + display:inline; + padding:0; + margin:0; + } + .blog-about-text .blog-text-descr{ + clear:left; + padding-top:6px; + } + #cool-numbers { + margin: -3.6em 0 2.5em 13.33em; + } + + .blog-counts{ + clear:left; + font-size:133%; + color:#999 ; + margin-bottom:10px; + } + .blog-info #description { + font-size: 1.33em; /*16/12*/ + float: left; + width: 95%; + padding: 0 10px; + background: #dfe9e8 url(/i/bg-description-top-left.gif) no-repeat 0 0; + } + + .blog-info #description #inner { + padding: 20px 10px; + } + .blog-info #description p { + width: 100%; + clear: both; + margin: 0 0 .83em 0; + padding: 0; + } +/* Найти в поисковых системах: Яндекс, Google, bing. */ +.alter_search{padding-left:35px;} + + /* List of blog admins and readers */ +.blogs-search{ + padding-left:35px; +} +.blogs-search +.popular-blogs{ + + margin-left:-2%; +} +.bloglist-suggest-form { font-size: 22px; padding:0; } + #bloglist_suggest_form_input { height: 28px; float: left; width: 99%; } +.blogs-search-side +.side-rubrikator{ + padding:62px 0 17px 37px; + } +.side-rubrikator { margin: 0; line-height:200%;font-size:133%; font-family:Arial,sans-serif;} + .side-rubrikator li { margin: 0; padding: 1px 0; margin:0 6px 0 0;white-space: nowrap;color:#ccc; } + .side-rubrikator li.active{ } + .side-rubrikator li a{padding:0 4px;margin-left:-4px;} + .side-rubrikator li .side-rubrikator-counter{color:#999;} + .side-rubrikator li.active a { color: #333; text-decoration: none; background: #C5DAE5; } + + /* Приглашение в блог */ + + /*(Таблица юзеров, их предпочтений, плюс кнопки Пригласить как читателя, как писателя etc.)*/ + + /*Визуал: хабраникнейм и буллет юзера слева от неё.*/ +.corplist-suggest-form { font-size: 22px; padding:20px 0 0 35px;} + .corplist-suggest-form #corplist_suggest_form_input{height: 28px; float: left; width: 99%;} +.invitation .intro { + clear: both; + margin-top: 20px; +} +.h-user { + padding: 0 0 0 15px; + background: url(/i/bg-user2.gif) 0 90% no-repeat; + color:#999; +} + +.td-h-user { + width: 70%; + font-family: Verdana, Arial, Helvetica, sans-serif; + vertical-align: top; + padding: 10px 0; +} + .td-h-user .avatar { + margin-left: 10px; + margin-right: 10px; + border: 1px solid #ddd; + float: left; + } +.live .td-h-user dl { + margin: 0 0 0 58px; + padding-right: 10px; +} + .td-h-user dl a { + color: #666; + } + .td-h-user dl dd { + font: .83em Verdana, sans-serif; + color: #666; + } + + .td-interests { + display: inline; + } + .td-interests li { + display: inline; + font-weight: normal; + } + .candidates .controls { + padding-right: 10px; + vertical-align: middle; + text-align: center; + } + .candidates .controls li { + margin: 12px 0; + } + .candidates .controls a { + padding: 10px 0 10px 25px; + background: url(/i/corporate_icon.gif) 0 65% no-repeat; + } +.dailybest h3 sup { + font-size: 65%; +} + + + + + + /* Top section, filtrator */ + + #filtrator { + margin: 3.33em 0; + padding-left:35px; + } + #filtrator select { + font-size: 1.67em; /*20/12*/ + color: #333; + width: 100%; + } + + /* // Top section, filtrator */ + + /* Поиск по тегам */ + + .tag-search { + margin: 0 0 14px; + padding-left:35px; + width: 100%; + font: 26px/36px Verdana, sans-serif; + color: #996; + } + /* + .tag-search a {height: 36px; float:left; width: 20px;} + .tag-search a img {margin: 11px 0 0 0;} + */ + .tag-search .bullet {margin: 11px 0 0 0; float:left;} + .tag-search div.rarr {height: 36px; padding-left: 10px; float:left;} + .tag-search .inpt-text { + margin: 0 10px; + padding-left:6px; + float: left; + color: #996; + border: 1px solid #996; + } + .tag-search input.inpt-text {width: 50%;} + + + + /* Поиск habr.ru/search/ */ +.people-section .corps-list{ + padding-top:0; +} +.bloglist .searched-item, +.corps-list .searched-item{ + background:#F0E9AA; +} +.bloglist a .searched-item, +.corps-list a .searched-item{ + text-decoration:inherit; +} +.search-header { + margin: 35px 0 20px 0; +} + .search-header h1 { + margin: 0; + font: 2em/100% Verdana, sans-serif; + color: #69c; + } + .search-header form { + margin: 6px 0 0 20px; + float: left; + } + .search-header p { + float: left; + clear: both; + width: 100%; + margin: 20px 0 0 0; + } + + .searched-item { + background: #fffacd;/* Выделение поискового запроса в тексте выдачи*/ + } + + .search-results { + margin-top:30px; + overflow: hidden; + } + .search-results + .search-content-pad{ + padding-left:35px; + } + .search-results + .items{ + padding-left:35px; + } + /*Меню фильтрации результатов поиска*/ + .search-results-bar {font-size: 1em; margin-bottom: 30px;} + .search-results-bar h2, .search-results-bar #sub-nav { + display: inline; + float: none; + } + .search-results-bar h2 {margin-right: 10px;} + + /*Выдача найденных комментариев*/ + .search .items { + margin: 30px 0 0 0; + } + + /* Выдача найденных компаний */ + + .searched-companies {margin-top: 40px; clear: both;} + .searched-companies .item {margin-bottom: 20px;} + .searched-companies .summary { + margin: -20px 0 0 40px; + } + .searched-companies .summary .name a { + font: 2em/110% Verdana, sans-serif;/*24/12*/ + letter-spacing: -1px; + color: #aeaeae; + } + .searched-companies .summary .ceo, + .searched-companies .summary .url { + margin: 5px 0; + } + + + .search .tag-search { + margin: 60px 0; + } + .search .tag-search .inpt-text { + width: 100%; margin: auto 0; + } + .search .tag-search .inpt-btn { + margin: 20px 0; + background: #996; + color: #fff; + } + +.live-block-page, +.mail-page-content{ + padding-left:35px; +} +.user_profile_edit_holder{ + padding-left:35px; +} +.profile #main-content .userinfo, +.company #main-content .userinfo { + width:auto; + padding-left:35px; +} +.profile #main-content .user-recommend-user{padding-left:35px;} +.profile #main-content .items, +.profile #main-content .live{ + margin-left:35px !important; + width:auto; +} +.site-settings{ + padding-left:35px; +} +#main-content +.hentry +.summary{ + + margin-left:35px !important; +} +.profile #main-content .items +.entry-title , +.profile #main-content .items +.content, +.profile #main-content .items +.entry-info{ + + padding-left:0; + margin-left:0; +} +.profile #main-content .items +.tags{ + margin-left:0; +} +.i-am-your-father-luke{ + padding-left:35px !important; +} +#js-topic-form-title{ + padding-left:35px; +} +#js-topic-form-swither{ + padding-left:35px; +} +#js-topic-form-holder,.add-new-blog #main-content{ + padding-left:35px; +} +.job-content, +.fans-content, +.d-block{ + padding-left:35px; +} +#comments{ + padding-left:35px; +} +/* Пост в блоге */ + +div.hentry { + width: 100%; + float:left; + clear:both; + margin: 0 0 40px; +} + div.hentry + .page-menu, + .message-page-menu{ + margin-bottom:30px; + } +.message-page-menu{ + padding-left:35px; + width:auto; + margin-bottom:0; +} +.message-page-menu li{ + width:50%; +} +h2.single-entry-title{ + padding-left:35px; +} +h2.inbox-message-header{ + color:#000 !important; + margin-top:27px; + margin-bottom:7px !important; +} +h2.entry-title { + font: 2.167em/118% normal Verdana, Tahoma, sans-serif; /*26px*/ + margin-bottom: 20px; + color: #767676; + padding-left:35px; + padding-right:30px; +} + h2.entry-title span{ + color:#333; + } + +.post h2.entry-title { + clear: both; + font: 2.833em/110% Verdana, sans-serif; /*34/26*/ /*Размер заголовка в посте раздела Персональные*/ +} +.post .personal h2.entry-title, +.post .podcast h2.entry-title { + color: #c99; /*Цвет заголовка в посте раздела Персональные*/ +} +.post .translation h2.entry-title { + color: #c99; /*Ц. з. в переводном посте раздела Персональные*/ +} +.post .corporative h2.entry-title { + color: #8277a3; /*Ц. з. в посте раздела Корпоративные*/ +} + +.post .link h2.entry-title { + color: #749f79; /*Ц. з. в переводном посте раздела Персональные*/ + padding-left: 28px; +} + + + + + .entry-title a { + color: #666; + } + .entry-title a:hover{ + color:#A3A3A3; + } + .entry-title a.blog { + color: #6da3bd; + } + .entry-title a.blog:hover{ + color:#4D7285; + } + .entry-title .profiled_blog{cursor: help;padding:0 8px;height:16px;margin-left:5px;font-size:19px;background: transparent url(/i/icon_asterisk_16.png) left top no-repeat;} + + .corporative .entry-title a.blog { + color: #8277a3; + } + .corporative .entry-title a.blog:hover{ + color:#ABA4C2; + } + + .entry-title .remove { + margin: 0 0 0 10px; /*Удаление из избранного*/ + } + + + /* Стили для топика-события */ + + .vevent .entry-title {margin-bottom: 10px;} + /* + .vevent .entry-title a {color:#666; text-decoration:none;} + .entry-title a.event-name {padding: 0 .3em .1em .3em; color:#f0f0e7 !important; background: #8bb0ad; } + */ + .vevent .summary { + margin-bottom: 20px; + padding: .1em 10px; + font: 14px/140% Arial,sans-serif; + color:#666; + background:#f0f0e7; + } + + + + + /* Стили для основного контента внтури любой записи блога */ + .comments { + position:relative; + } + .hentry .content { + font: 1.083em/1.54em Verdana, sans-serif;/*13px*/ + margin-left: 35px; + margin-bottom:0.83em; + overflow:hidden; + } + + .hentry .content, + .tags, + .entry-info { + margin-left: 35px; + } + .comment_holder { + float:left; + width:100%; + } + + .hentry .hentry { + margin-left:20px; + } + + .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry .hentry { + margin-left:0; + } + .hentry .reply_form .js-field-holder, + .hentry .reply_form .help_holder, + .hentry .reply_form .comment-help{ + padding-left: 20px; + } + + .msg-meta { + position:relative; + } +li:hover > .msg-meta > .folding-dot-holder{ + display:block; +} + .msg-meta + .folding-dot-holder{ + display:none; + position:absolute; + top:0; + left:0; + width:1px; + height:1px; + } + + .msg-meta + .folding-dot{ + width:500px; + height:5px; + background:red; + right:0px; + top:11px; + position:absolute; + background: url(/i/bg-folding-dot-light.png) repeat-x 100% 0; + } + + .new-reply { + background: #E8E8FF; + } + .new-reply-old { + background: #F3F3FF; + } + .my-reply { + background: #FDF5E6; + } + + .hentry .content p, + .profile .summary p, .profile .summary img, + .user-flow .summary p, .user-flow .summary img + { + margin: 0 0 .83em 0; + } + .hentry .content img[align=left] { + margin-right: 30px; + margin-top: 5px; + margin-bottom: 5px; + } + .hentry .content img[align=right] { + margin-left: 30px; + margin-top: 5px; + margin-bottom: 5px; + } + .hentry .content img { + max-width: 100%; + vertical-align:bottom; + } + .hentry .content pre { + white-space: pre-wrap; + white-space: -o-pre-wrap; + + } + .hentry .content table { + clear: both; + width: 100%; + margin: 1.5em 0; + border: 1px solid #ccc; + } + .hentry .content table caption { + text-align: left; + text-indent: 1em; + } + .hentry .content table td, .hentry .content table th { + padding: .3em; + border: 1px solid #ccc; + } + .hentry .content ol, .hentry .content ul, + .profile .summary ul, .profile .summary ol, + .user-flow .summary ul, .user-flow .summary ol, + .info-page ul { + margin: 1.5em 1em 1.5em 3em; + padding: 0; + } + .hentry .content ol, + .profile .summary ol, + .user-flow .summary ol { + list-style: decimal; + } + .hentry .content ul, + .profile .summary ul, + .user-flow .summary ul, + .info-page ul { + margin-left: 2.65em; + list-style: disc; + } + + .habraplayer { + margin-bottom: 10px; + } + +.info-page { padding-left: 35px; } + + +ul#xsidebar { + width:32px; + float:right; + position:fixed; + top:43%; + right:0; + background:#999999; +} +ul#xsidebar.left { + left:0; +} +ul#xsidebar .mover { + padding: 0px; + text-align: center; +} +ul#xsidebar .mover a { + color: #dddddd; + text-decoration: none; +} + +ul#xsidebar li { + padding-top: 2px; + padding-bottom: 2px; + padding-left: 2px; +} + +/* Refresh comments button */ +ul#xsidebar #refresh-comments-button .new-messages { + text-align: center; +} +ul#xsidebar #refresh-comments-button a.button { + display: block; + height: 29px; + width: 28px; + background:url(/i/comments/bar/refresh.gif) no-repeat left top; +} +ul#xsidebar #refresh-comments-button a.button:hover { + background:url(/i/comments/bar/refresh.gif) no-repeat left bottom; +} +ul#xsidebar #refresh-comments-button a.button.loading { + background:url(/i/comments/bar/refresh-loading.gif) no-repeat left top; +} +ul#xsidebar #refresh-comments-button a.button.loading:hover { + background:url(/i/comments/bar/refresh-loading.gif) no-repeat left top; +} +ul#xsidebar #refresh-comments-button .divider { + border-top: solid 1px #5c5c5c; + border-bottom: solid 1px #dddddd; + width: 28px; + height: 0px; + margin-top: 1px; +} +ul#xsidebar #refresh-comments-button .new-messages { + text-align: center; +} +ul#xsidebar #refresh-comments-button .new-messages a.count { + color: white; + text-decoration: none; + font-weight: normal; + display: block; + padding: 4px 0px; +} +ul#xsidebar #refresh-comments-button .new-messages a.count:hover { + color: #ffff55; +} + +.tags { + padding: .2em 0 .1em 18px; + clear:both; + list-style: none; + background: #fff url(/i/bg-tags2.gif) no-repeat 0 50%; +} + .tags li { + display: inline; + } + .tags li a { + font-size: .83em; /*10px*/ + } + .tags li a{ + color: #666; + } + .tags li a:hover { + color:#A3A3A3; + } + +.entry-info { + font: .75em/2em Arial, sans-serif; /*9px/16px*/ + margin-top: 2.22em; /*20*/ + float:left; + clear: both; + padding: 0 0 5px; + border: 1px solid #e5e5e5; + z-index:20; + position:relative; +} + + /* Rounded corners */ + + /*.corners { + clear:both; + height:5px; + }*/ + + .corner { + width:5px; + height:5px; + overflow:hidden; + position:absolute; + font-size:0; + } + + .tl { + float:left; + left:-1px; + top:-1px; + background:url(/i/icos/entry-info-t-l.gif) no-repeat 0 0; + } + .tr { + float:left; + right:-1px; + top:-1px; + background:url(/i/icos/entry-info-t-r.gif) no-repeat 0 0; + } + .bl { + float:left; + left:-1px; + bottom:-1px; + background:url(/i/icos/entry-info-b-l.gif) no-repeat 0 0; + } + .br { + float:left; + right:-1px; + bottom:-1px; + background:url(/i/icos/entry-info-b-r.gif) no-repeat 0 0; + } + + .entry-info-wrap {clear:both;padding-left:0.56em;} + .entry-info-wrap .novote {margin-left:5px;} + + + + .entry-info .entry-info-wrap div { + padding: 5px .56em 0; + margin-right: 12px; + float: left; + } + .entry-info div.voting { + padding:0 0 0 3px; + margin-left:-0.56em; + } + .entry-info div.voting div {margin-right: 0;} + .entry-info div.voting .mark { + padding:5px .1em 0; + font-size: 1.3333em; /*12/9*/ + font-weight: bold; + color: #a9a9a9; + } + .entry-info div.voting .mark a{ + color:#6DA3BD; + } + .entry-info div.voting .mark a:hover{ + color:#4D7285; + } + + body.guest .entry-info div.voting .mark a{ + color:#999; + cursor:default; + } + .entry-info div.positive .mark { + color: #390; + } + .entry-info div.negative .mark { + color: #c00; + } + .entry-info div.voting a.vote_plus, .entry-info div.voting span.vote_plus, + .entry-info div.voting a.vote_minus, .entry-info div.voting span.vote_minus { + margin:1px 3px 0; + float:left; + width:11px; + height:15px; + font-size:0; + } + .entry-info div.voting div { + height: 12px; + border: none; + } + .entry-info div.voting .vote_plus { + background:url(/i/icos/icons_vote_posts.gif) no-repeat left bottom; + } + .entry-info div.voting .vote_minus { + background:url(/i/icos/icons_vote_posts.gif) no-repeat -11px bottom; + padding-right: 0 !important; + } + body.guest .entry-info div.voting .vote_plus, + .entry-info div.voting.expired .vote_plus, + .entry-info div.voting.mine .vote_plus{ + background:url(/i/icos/icons_vote_posts.gif) no-repeat -22px top; + cursor:default; + } + body.guest .entry-info div.voting .vote_minus, + .entry-info div.voting.expired .vote_minus, + .entry-info div.voting.mine .vote_minus { + background:url(/i/icos/icons_vote_posts.gif) no-repeat -22px bottom; + cursor:default; + } + .entry-info div.voting.mine a, + .entry-info div.voting.no_auth a, + .entry-info div.voting.voted a { + cursor: default; + } + .cannot-vote { + display: none; + } + .entry-info div.voting.mine .cannot-vote, + .entry-info div.voting.no_auth .cannot-vote, + .entry-info div.voting.voted .cannot-vote, + .entry-info div.voting.expired .cannot-vote { + display: block; + } + .entry-info div.voting.mine .can-vote, + .entry-info div.voting.no_auth .can-vote, + .entry-info div.voting.voted .can-vote, + .entry-info div.voting.expired .can-vote { + display: none; + } + .entry-info div.voting.voted_plus a.vote_plus, .entry-info div.voting.voted_plus span.vote_plus { + background:url(/i/icos/icons_vote_posts.gif) no-repeat left top !important; + } + .entry-info div.voting.voted_minus a.vote_minus, .entry-info div.voting.voted_minus span.vote_minus { + background:url(/i/icos/icons_vote_posts.gif) no-repeat -11px top !important; + } + .entry-info div a { + text-decoration: none; + font-weight: 700; + } + + /* Fav star */ + ul.hentry .fav_added a, + ul.hentry .to-favs a, + .entry-info .to-favs a, + .entry-info .fav_added a { + background: url(data:image/gif;base64,R0lGODlhDwAaAOZ/APr7/LnO3bXL2uK7Vvz58NLu9friZ/z69arD0tXl7eHr8uL1+tLv89v09921Uf3phfzjcMra5dvl68nX4ef1+fz589rt9e79/+v7/Ka+zs7h6tny9d3EmqjAz+rQc+ft8d/1+PTjttSycvb///f6+/vx0rzR3vL2+P/////4rub5+/3qjf/zlu/0+fH5/MmdQtLh7PfYWP3oe83a4u/jzdi9ke3Ma8aaSbvN2r/T4PXdfunXs+LGivHWh/jbWuT4+a7K2dy2X8qbO8PW4sTc6fjaX/bUU/fUXOr6+9+5Y9bx89u1V//ukOLz9v/2usfV3uTAZ/z369GmQv/yr9yyRNDr9c3r87+RPP/4pPjgbPHWfOfCW8ygQ/zsl+jMc+jKeN719vLZgPjdXPP//7nL19yzUP/wjdCtbvzmcuXIb///x9Ho8vjkou/WgJy3x/HUafznd/nlh9WmPLXQ3fv48t67XdDj7P3pgPnx4Mrd6fjcWtewW/fw3/z46+LCcwAAACH5BAEAAH8ALAAAAAAPABoAAAf/gH+Cgy0KLYOIiTAuMImOJBEoESSOiAoJIwkKjkMmAZ8UF00CpAI5gjkuIxhIKio/CyAYFAGCJwEJYz9gDRsNFxoCJ4MAESYgSgwMGwETAIkACAwFDQVWGc+JEnMFC3YLVUASjjhrFgg4CBZEZI4dGh0ffx8ZeW6OMzPZfwATT5WCSrApARBRDyc9CgrqY0ONjSgKQ4RJoSVEIgJfBmgcsIJFHAcgy/ghQADKlBRMVjy4IwMOBDNdghD4gydJGywyIBjYycLDHj6DDvCog0aMHh9ZlvCokKiClBg+IMQwIoSOox1Uijzw8OCInB2ORLzRwUXECx1bzghCMeiFlxs0EP7QuJHmiiMOHA4ErVFjUCAAOw==) no-repeat; + } + + .entry-info .to-favs, + .entry-info .fav_added { padding-top: 3px; margin-right: 0 !important; padding-right: 0 !important; } + .entry-info .to-favs a, + .entry-info .fav_added a { + display: block; + margin-top:2px; + width:15px; + height:13px; + font-size:0; + background-position: left top; + } + + .entry-info .to-favs a:hover, + .entry-info .fav_added a { + background-position: left bottom; + } + .entry-info .published{ + margin-left:-2px; + } + .entry-info .published a, .entry-info .mark-as-spam a {color:#369;} + .entry-info .published a { + display: block; + padding-left: 17px; + background: url(/i/bg-published2.gif) no-repeat 0 50%; + } + .entry-info .published a:hover { + background-image: url(/i/bg-published2.gif); + } + + + .entry-info .vcard a { + color:#CF0000; + padding:2px 0 3px; + background:transparent; + } + .entry-info .vcard.full a{ + padding-left:17px; + background: url(/i/bg-user2.gif) no-repeat 0 50%; + } + + .entry-info div.author { + } + .entry-info div.vote-for-user{ + padding: 8px 0px 3px; + } + .entry-info div.vote-for-user a, + .entry-info div.vote-for-user span{ + background:#74C262; + color:#fff; + display:block; + line-height:1em; + font-size:1em; + } + .entry-info div.vote-for-user a{ + width:11px; + height:12px; + background:#74C262 url(/i/bg-user-vote-up.gif) no-repeat 50% 2px; + } + .entry-info div.vote-for-user a:hover{ + background-color:#96D189; + background-position:50% -8px; + } + .entry-info div.vote-for-user span{ + padding:1px + } + .entry-info div.comments {margin-right: 5px;} + .entry-info a { + color:#CF0000; + } + .entry-info a:hover { + color: #F17D7D; + } + .entry-info1 .vcard a:visited{ + color:#F17D7D; + } + .entry-info1 .vcard a:visited:hover{ + color:#CF0000; + } + .entry-info .comments a { + display: block; + margin-top:-1px; + padding: 1px 0 0px 17px; + background: url(/i/bg-comments2.gif) 0 70% no-repeat; + } + .entry-info .comments a .new { + color: #390; + } + + .entry-info .comments a:hover .new { + color: #85C266; + } + .entry-info original-author{ + max-width:100px; + } + .entry-info .original-author a, + .entry-info .downloaded a, + .entry-info .link a + { + padding-left: 8px; + background: url(/i/bg-author-link.gif) no-repeat 0 .08em; + } + + .entry-info .twitter { margin-right: -2px !important; } + .entry-info .twitter a { display: -moz-inline-stack; display: inline-block; background: url(/i/bg-icon-twitter.gif) 0 0 no-repeat; width: 14px; height: 16px; position: relative; top: 1px; } + .entry-info .facebook { opacity: 0.5; } + .entry-info .facebook:hover { opacity: 1; } + .entry-info .facebook a { display: -moz-inline-stack; display: inline-block; background: url(/i/bg-icon-facebook.png) 0 0 no-repeat; width: 14px; height: 16px; position: relative; top: 1px; } + + /** icons for topics **/ + .translation .topic,.podcast .topic,.link .topic { + padding-left:29px; + background: no-repeat 0 6px; + } + .translation .topic{ + background-image: url(/i/translation_icon2.gif); + } + .podcast .topic{ + background-image: url(/i/podcast_icon2.gif); + } + .link .topic{ + background-image: url(/i/link_icon2.gif); + } + + .corporative .blog { + background: #fff no-repeat 0 60% ; + } + + .podcast .topic, + .post .podcast h2.entry-title { +/* background: #fff url(/i/podcast_icon2.gif) 0 60% no-repeat;*/ + } + + .podcast .topic{ + background-image: url(/i/podcast_icon2.gif); + } + .podcast .details { + font: .5em/1.92em Arial,sans-serif; + color:#767676; + white-space:nowrap; + letter-spacing:-1px; + } + /* .personal .topic { + color: #c99; + } */ + + .link .topic, + .post .link h2.entry-title { + color: #749f79; + /*background: #fff url(/i/link_icon2.gif) 0 60% no-repeat;*/ + } + .link .topic:hover, + .post .link h2.entry-title:hover{ + color:#84B18A !important; + } + .link .topic:visited, + .post .link h2.entry-title:visited{ + color:#A3C0A7 !important; + } + .link .topic:visited:hover, + .post .link h2.entry-title:visited:hover{ + color:#84B18A !important; + } + +/*Опросы*/ +.poll {margin-top:2em;} +.poll:first-child {margin-top:0em;} +.poll dl { + float: left; + clear: both; + width: 100%; + border: .5em solid #fff;/*<- just a little trick*/ +} + + .poll dl dt { + float: left; + width: 12%; + font-size: 97.6%; + text-align: right; + margin-left: -20px; + color: #ccc; + } + .poll dl dt strong { + color:#404040; + text-align: right; + } + .poll dl dd { + width: 87%; + float: left; + margin-left: 20px; + } + +.poll .total { + font-size: 97.6%; + clear: both; + margin-top: 1em; + color: #999; +} + +.poll fieldset { + +} + .poll table.answer-container { + margin: 0; + margin-bottom: 10px; + border: none; + } + .poll .answer-container td.input, .poll .answer-container td.label { + border: none; + padding: 5px 0; + } + .poll .answer-container td.input { + width: 25px; + } + .poll .answer-container input { + padding: 5px 0; + } + + /*обёртка для блока с вариантами ответа*/ + .poll-item { + float: left; + clear:both; + width: 100%; + margin-bottom: 20px; + } + + + .poll-item h3 { + margin-bottom: 5px; + color: #666; + } + + .poll-item dl { + margin: 0; + padding:0; + } + .poll-item dd div { + height: 5px; + background: #dadacd; + } + .poll-item dd div.winner { + background: #7fa0b0; + } + +.sphinx-baner{ + line-height:2em; + margin-bottom:33px; +} +/* Внутренний голос */ + +.i-am-your-father-luke { + display: block; + clear:both; + padding:.6em 0; + border: none; + font: normal 40px/110% Arial,sans-serif; + color: #cc9; + letter-spacing: -2px; + } + +/* НЛО прилетело и написало */ + +.ufo-was-here { + margin-left:35px; + margin-bottom: 20px; + font: normal 16px/110% Verdana,sans-serif; + color:#666; + } + + +/*Класс для подзамочных записей*/ + +.locked { + padding-left: 28px; + background: #fff url(/i/lock.gif) no-repeat 5px 65%; +} + +.double_locked { + padding-left: 43px; + background: #fff url(/i/double-lock.gif) no-repeat 5px 60%; +} + + .hentry .edit img, .user-vacancies .edit img, .profile-title .edit img, + .blog-title .edit img { + border: 1px solid #ccc; + margin-bottom: -2px; + } + .profile-title .edit img {margin-bottom: 0; } + + +/*Листалка по страницам*/ + + /* Вперёд-назад */ + +.page-nav { + overflow:hidden; + clear: both; + margin: 1.88em 0 .63em 0; +} + +.company .live .page-nav { + margin: 0; + padding: .83em 1.67em; + width: 80%; +} + +.next-prev { + font:2em/100% Tahoma, sans-serif; + color:#000; +} + .next-prev li { + display: inline; + padding-right: .3em; + } + + + /* Список предыдущих страниц */ + +#nav-pages { + font: 1.2em/100% arial; + padding: 0 1em 2em 0; + margin: 1em 0; + list-style: none; + clear: both; + } + + #nav-pages li { + float: left; + } + + #nav-pages a, #nav-pages em { + margin:0 0.2em 0 0.1em; + padding: .3em .4em; + display: block; + } + #nav-pages a:hover{ + background:#c5dae5; + } + + #nav-pages em { + background:#7A9BAC; + font-weight: 400; + font-style: normal; + color: #fff; + } +.blogs +#main-content +.page-nav, +.company +#main-content +.page-nav, +.profile +#main-content +.page-nav, +.users-list-container{ + padding-left:35px; +} + /*Страница со всеми тегами*/ + +.all-tags-page #main-content { + width: 100%; + margin-bottom:120px; +} + .all-tags-page #main-content h2 { + font: 26px/110% Verdana, sans-serif; + color: #999; + margin-bottom: 10px; + } + #cloud-for-blogs, #cloud-for-comps {width: 49%;} + #cloud-for-blogs { + float: left; + } + #cloud-for-comps { + float: right; + } + + + + /*Страница со всеми тегами*/ + + +/*// Main content*/ + + + + + + + + + +/* Sidebar. Right column */ + + .banner { + margin: 0 auto 20px auto; + width: 240px; + height: 400px; + clear:both; + } + + .context-note {line-height:150%;} + + + + + /* Live section */ + + + +.live { + font-size:1em; /*12px*/ + font-family:tahoma,arial; + float: left; + width: 100%; + margin: 0 0 20px; + background: #f0f0e7 url(data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIFjA8QqVwAOw==) no-repeat 0 0; +} + .live p { + margin-left: 20px; + margin-right: 20px; + } + .live dl { + margin: 0 1.67em .42em 1.67em; + } + + /* Похожие публикации. Переписать эту лажу. Наложение со стилями из forms.css */ + .live .similar-posts div {margin: 0 0 20px 0;} + .profile .live .similar-posts div {margin: 0 20px 20px 20px;} + .profile .live .similar-posts div dl {margin: 0 0 .42em 0;} + .profile .live .similar-posts div dl dt a {padding:0; background-image:none;} + + + .live h3, + #top-flooders h3 { + font-size: 2em; /*28px*/ + font-weight: normal; + line-height: 1.1em; + letter-spacing: -1px; + text-decoration: none; + margin:0 0 .71em .71em; + padding-top: .54em; + color: #999; + background: url(data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIGjANgqRwFADs=) no-repeat top right; + } + + .live dt, + .live dd, + .live dd dl, + .live dl dd dl dt { + margin: 0; + display: inline; + color:#999; + } + .live dl.air-comment{ + padding:2px 0; + margin:0 1.67em 0.42em !important; + } + + .live span.who a, .live .where, .live .topic { + margin-bottom: 1ex; + line-height: 1.35em; + } + .live .who { + padding-left: 17px; + background: url(/i/bg-user2.gif) 1px 50% no-repeat; + display: inline; + } + .live .who a, .live .where { + color:#999; + } + .live .topic { + color:#666; + } + + /* Live' links behaviour */ + + + + .live .total { + color: #C00; + } + .live .all { + position: relative; + top: 0; + right: 0; + margin: 0 .83em .83em 0; + text-align: right; + color:#999; + } + /*Rounded corners*/ + + .live .bg-top-r { + background: url(data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIGjANgqRwFADs=) no-repeat top right; + float: left; + width: 100%; + } + .live .bg-bott-l { + background: url(data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIGhGOAGt0FADs=) no-repeat bottom right; + float: left; + width: 100%; + } + .live .bg-bott-r { + float: left; + width: 100%; + background: url(data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIFDG6YwVEAOw==) no-repeat bottom left; + } + .live .bg-top-r,.profile .live div.bg-top-r{ + margin-left:0 !important; + background: url(data:image/gif;base64,R0lGODlhBAAEAIAAAPDw5////yH5BAAAAAAALAAAAAAEAAQAAAIGjANgqRwFADs=) no-repeat top right; + } + div.live .bg-top-r, div.live .bg-top-r div{ + margin-bottom:0 !important; + } + /* // Live section */ + + + /* Best Writers */ + .best_writers{} + .best_writers ul{margin: 0 1.67em 1.67em} + .best_writers ul li{overflow:hidden;margin-bottom:10px;} + .best_writers ul li:last-child{margin-bottom:0px;} + .best_writers ul li .avatar{float:left;margin-right:10px;display:block;border:1px solid #999;} + .best_writers ul li .login{float:left;display:block;margin-right:10px;margin-top:3px;} + .best_writers ul li .name{float:left;display:block;font-size:91%;color:#666666;margin-top:5px;} + + + /* Tag cloud */ + +.tag-cloud { + float: left; + width: 90%; + padding: 0px; + margin-top: 10px; + margin-bottom: 10px; + margin-left: 5%; + margin-right: 5%; + text-align: center; +} + +.profile .tag-cloud { + width: 98%; + float:none; + margin:0 auto; + } + + .tag-cloud ul { + white-space: normal; + } + .tag-cloud ul, + .tag-cloud ul li { + display: inline; + } + .tag-cloud a { + font-size: .83em; + color: #369; + text-decoration: none; + line-height:1.4em; + } + .tag-cloud a:hover { + color: #85A3C2; + } + +/* .tag-cloud a {white-space:nowrap;}*/ + .tag-cloud a.w1 { font-size: 80%; } + .tag-cloud a.w2 { font-size: 100%; } + .tag-cloud a.w3 { font-size: 120%; } + .tag-cloud a.w4 { font-size: 140%; } + .tag-cloud a.w5 { font-size: 160%; } + .tag-cloud a.w6 { font-size: 180%; } + .tag-cloud a.w7 { font-size: 200%; } + .tag-cloud a.w8 { font-size: 220%; } + .tag-cloud a.w9 { font-size: 240%; } + .tag-cloud a.w10 { font-size: 260%; } + + + + + /* // Tag cloud */ + + /* Ratings (companies, blogs) */ + + +.rating table { + font-size: 1.33em; /*16px*/ + width: 90%; + clear: both; + margin:0 0 0.71em 1.2em; + border:none; + border-collapse: collapse; +} + .rating table td { + font-family: Arial, sans-serif; + vertical-align: middle; + padding: .3em 0; + } +.rating table th { + font-size: .75em; /*12px*/ + font-weight: normal; + padding-bottom: .5em; + letter-spacing: -1px; + color: #999; +} +.rating table td { + /*padding-left: 5px;*/ +} + .rating .title a { + font: bold .94em/1.13em 'Lucida Grande', Verdana, Sans-Serif; + color:#666; + } + .rating .title a:hover{ + color:#A3A3A3; + } + .rating .karma-value { + font-size:.94em; + font-family:arial; + text-align: center; + color:#6c6; + font-weight:bold; + } + .rating .value { + text-align: center; + } + .rating .value span { + font: normal normal bold .88em Arial, sans-serif; + padding: .1em .5em; + color: #CC66CC; + } + div.companies .value span{ + color:#CC66CC; + } + + .company .rating .title a { + font-size: 1.25em; /*20/16*/ + font-weight: normal; + } + .company .rating .title a.new-feedback { + font-size: 11px; + } + .company .first { + margin-top: 0; + background-image: none; + } + + + + + /* // Ratings (companies, blogs) */ + + + /* Jobs */ + +.jobs { + width: 100%; +} + .jobs dl dt a { + font: 1.17em Arial, sans-serif; /*12/14*/ + color: #663; + + } + .jobs dl dt a:hover{ + color:#A3A350; + } + .jobs dl dt a:visited{ + color:#BEBE84; + } + .jobs dl dt a:visited:hover{ + color:#A3A350; + } + .jobs dl dd { + font: bold 1.33em/1.4em Arial, sans-serif; /*12/16*/ + padding: 0 .2em; + display:inline; + white-space: nowrap; + color: #fff; + background: #99cccc; + } + .live .job_item dt, + .live .job_item dd { + display: inline; + } + + /*// Jobs*/ + + /*Top flooders*/ + + #top-flooders { + font-size: .83em; /*10/16*/ + clear: both; + width: 100%; + margin: 10px 10px 10px 20px; + } + + #top-flooders h3 { + font-size: 280%; + margin-left: 0; + } + + #top-flooders dl, #top-flooders dl dt, #top-flooders dl dd { + margin: 0; + padding: 0; + } + + #top-flooders dl { + margin-bottom: 15px; + } + + #top-flooders dl .flooder { + margin: -2.5em 10px 1em 3em; + } + #top-flooders dl dd dl dt a { + color:#999; + } + #top-flooders dl dd dl dt a:hover{ + color:#333; + } + .flooder dd a { + line-height: 140%; + color:#f60; + } + + /* // Top flooders */ + + + /* Calendar */ + + .calendar-table table { + font-size: .92em; /*11/12*/ + font-family: Arial, Helvetica, sans-serif; + margin: 5px 0; + text-align: center; + } + .calendar-table th { + font-weight: normal; + } + .calendar-table .date { + font-size: 160%; + /*font-weight: bold;*/ + color: #999; + } + .calendar-table .nav th, .calendar-table .nav td { + padding-bottom: 5px; + } + .calendar-table .nav a { + color: #909090; + font-weight: bold + } + /* // Calendar */ + + +/* // Sidebar. Right column*/ + + + + + + + /* Карма. Общие стили для таблиц */ + +.starr { + padding-right: 15px; + background: url(/i/starr.gif) right 70% no-repeat; +} +.rating-dyn { + font-size:.75em; + font-family:arial; + line-height: 110%; + text-align: center; +} +.up { + color:#33cc00; +} +.down { + color:#ff0033; +} + + +/*Прилепляем футер книзу, введя див-обёртку, охватывающую всё кроме подвала*/ + +#nonFooter {position: relative;min-height: 100%;} +* html #nonFooter {height: 100%;} /*для IE*/ +.footerest #wrapper {padding-bottom: 10em;} +.footerest #footer {position: relative;margin-top: -9em;} + + + + + + + + + + + + + +/* Comments */ + + + +/* Форма отправки коммента (или отзыва о компании) */ + +.add-comment { + float: none; + clear: both; + width: 100%; + margin-top: 10px; + padding-bottom:5px; +} + .add-comment h3 { + padding: 0 0 0 20px; + /*margin: 0 0 10px;*/ + margin: 0; + font: 1.67em Verdana, sans-serif; /*20/12*/ + letter-spacing: -1px; + color: #afa56a; + background: url(/i/add_comment.gif) 0 .5em no-repeat; + } + .add-comment > div, + .comment_holder .reply_form + { + position: relative; + } + .add-comment h3 a {color: #afa56a;text-decoration:none; border-bottom: 1px dashed #afa56a;} + .add-comment dl, + dl.comment-help { + float: left; + width: 100%; + font: .92em/100% Arial, sans-serif; /*11/12*/ + /*padding: 10px 0;*/ + } + dl.comment-help{ + padding-top:0; + } + .add-comment dt, + .add-comment dd, + dl.comment-help dt, + dl.comment-help dd { + float: left; + } + .add-comment dt img, + dl.comment-help img { + border: 1px solid #ddd; + } + .add-comment dd, + dl.comment-help dd { + margin: 5px 0 0 10px; + color: #999; + } + .add-comment dd .name, + dl.comment-help dd .name { + font: 1em Tahoma, sans-serif; + font-weight: 700; + color:#666; + } + .add-comment dd span , + dl.comment-help dd span{ + margin-left: 5px; + } + dl.comment-help dd span{ + position: absolute; + right: 0px; + top: -8px; + z-index: 3000; + } + .add-comment form { + clear: both; + width: 100%; + } + .reply_form form { + clear: both; + width: 99%; + margin-bottom: 10px; + } + + .add-comment input, + .reply_form input { + margin: 10px 0; + } + + .add-comment textarea, + .reply_form textarea { + border: 1px solid #c8d2df; + width: 99%; + resize: none; + outline:none; + } + .editor .add-comment textarea, + .editor .reply_form textarea{ + border: 0px solid #c8d2df; + } + .add-comment .post, + .reply_form .post { + margin-left: 7px; + } + .add-comment .js-field-error-msg { color:#ff0000; } + +/* // Форма отправки коммента (или отзыва о компании) */ + + +#comments { + clear: both; + overflow:hidden; +} + .comments-header-mail{ + display:none; + } + .comments-header-visible{ + display:block; + } + #comments h2.comments-header { + margin: 0px 0 20px; + padding-left: 23px; + font: normal 1.67em/105% Verdana, sans-serif; /*20/12*/ + letter-spacing: -1px; + color: #afa56a; + background: #fff url(/i/comments.gif) 0 90% no-repeat; + } + + ul.hentry {clear: both;width: auto;} + ul.hentry ul.author{ + overflow: hidden; + } + ul.hentry ul.author + li{ + vertical-align:baseline !important; + } + ul.hentry ul li{ + line-height:18px; + } + ul.hentry .avatar { + float: left; + width:24px; + height:24px; + list-style: none; + position:relative; + margin-right:10px; + } + + ul.hentry .avatar b{ + position:absolute; + top:0; + left:0; + height:24px; + width:24px; + background:url(/i/bg_avatar_mask_mini.gif) no-repeat 0 0; + } + ul.hentry .avatar img { + display:block; + height:24px; + width:24px; + } + + ul.hentry .fn, + ul.hentry .date, + ul.hentry .bookmark, + ul.hentry .to-favs, + ul.hentry .fav_added, + ul.hentry .up-to-parent, + ul.hentry .down-to-child, + ul.hentry .vote-for-user, + ul.hentry .single-tree{ + font-family:tahoma; + float: left; + color: #666; + padding-top: 5px; + margin-right: 10px; + } + ul.hentry .vote-for-user{ + padding-top: 8px; + margin-right:12px; + margin-left: -7px; + } + ul.hentry .vote-for-user a, + ul.hentry .vote-for-user span{ + background:#74C262; + color:#fff; + + text-decoration:none; + display:block; + line-height:1em; + font-size:1em; + } + ul.hentry .vote-for-user a{ + width:11px; + height:12px; + background:#74C262 url(/i/bg-user-vote-up.gif) no-repeat 50% 2px; + } + ul.hentry .vote-for-user a:hover{ + background-color:#96D189; + background-position:50% -8px; + } + ul.hentry .vote-for-user span{ + padding:1px; + font-size:0.83em; + } + + ul.hentry .up-to-parent a, + ul.hentry .down-to-child a + { + display:block; + float:left; + height:15px; + line-height:15px; + text-decoration: none; + border-bottom: dotted 1px #79B1D4; + } + + ul.hentry .to-favs a, + ul.hentry .fav_added a { + display:block; + margin-top:3px; + width:15px; + height:13px; + font-size:0; + background-position: left top; + } + + ul.hentry .to-favs a:hover, + ul.hentry .fav_added a { + background-position: left bottom; + } + + + ul.hentry .fn a { + font-size: .92em; /*11px/12*/ + font-weight: bold; + color: #666; + } + ul.hentry .fn a:hover{ + color:#333; + } + ul.hentry .fn a:visited{ + + } + ul.hentry .fn a:visited:hover{ + + } + ul.hentry .date, + ul.hentry .bookmark { + + } + ul.hentry .bookmark a, + ul.hentry .date abbr { + border: none; + font-size: .83em; /*10/16*/ + } + ul.hentry .vote { + float: right; + margin-top: .4em; + } + ul.hentry .vote li { + float: left; + font: bold 1.08em/100% Arial, Helvetica, sans-serif; + color: #a9a9a9; + background: none; + } + ul.hentry .vote.positive li { + color: #390; + } + ul.hentry .vote.negative li { + color: #c00; + } + + ul.hentry .vote .buttons, + ul.hentry .vote .buttons .vote-for { + margin-left: 5px; + padding-right: 5px; + } + ul.hentry .vote .buttons a { + margin-top:-11px; + float:left; + width:13px; + height:13px; + font-size:0; + cursor:pointer; + } + ul.hentry .vote .buttons a{ + background:url(/i/icos/icons_vote_comments_4modes.png) no-repeat + } + ul.hentry .vote .buttons a.vote_plus { + margin-left:5px; + background-position: -13px 0; + } + ul.hentry .vote .buttons a.vote_plus:hover{ + background-position:-13px -13px ; + } + ul.hentry .vote .buttons a.vote_minus { + background-position:0 0; + } + ul.hentry .vote .buttons a.vote_minus:hover { + background-position:0 -13px; + } + ul.hentry .vote.expired a.vote_plus, + ul.hentry .vote.mine a.vote_plus, + ul.hentry .vote.no_auth a.vote_plus, + ul.hentry .vote.voted a.vote_plus { + background-position:-13px -39px !important; + cursor:default; + } + ul.hentry .vote.expired a.vote_minus, + ul.hentry .vote.mine a.vote_minus, + ul.hentry .vote.no_auth a.vote_minus, + ul.hentry .vote.voted a.vote_minus { + background-position:0 -39px !important; + cursor:default; + } + ul.hentry .vote.voted_plus a.vote_plus { + background-position:-13px -26px !important; + } + ul.hentry .vote.voted_minus a.vote_minus { + background-position:0 -26px !important; + } + + + ul.hentry .entry-content, + .comment-preview { + font: 1.08em Arial, sans-serif;/*13/12*/ + margin: 0; + padding: 10px 0 10px 0; + clear: both; + + margin-bottom:10px; + } + ul.hentry .entry-content img, + .comment-preview img{ + display: block; + max-width: 100%; + } + + ul.hentry .entry-content .entry-content-only{ + overflow-x:auto; + padding-right:5px; + } + ul.hentry .entry-content .entry-content-only ul, + .comment-preview ul{ + margin: 1px 0 10px 20px; + list-style: inside disc; + } + ul.hentry .entry-content .entry-content-only ol, + .comment-preview ol{ + margin: 1px 0 10px 20px; + list-style: inside decimal; + } + + ul.hentry .bad5 { opacity: 0.2 } + ul.hentry .bad4 { opacity: 0.35 } + ul.hentry .bad3 { opacity: 0.5 } + ul.hentry .bad2 { opacity: 0.65 } + ul.hentry .bad1 { opacity: 0.8 } + + ul.hentry .entry-content-only { + transition: opacity 700ms linear; + -webkit-transition: opacity 700ms linear; + } + ul.hentry .entry-content-only:hover { + opacity: 1; + } + + /* http://bolknote.ru/2008/07/18/~1787 */ + @-moz-document url-prefix(){ + ul.hentry .entry-content .entry-content-only { + line-height:15.1px; + padding:2px 1px; + margin:-2px 0; + } + } + + + + ul.hentry .entry-content .entry-content-only img{ + max-width:100%; + display:block; + } + ul.hentry .entry-content p, .comment-preview p { + margin: 0 0 10px 0; + padding: 0; + } + ul.hentry p.reply, .comment-preview p.reply { + margin: 5px 0 0; + font: .85em Tahoma,Arial, sans-serif;/*11/13*/ + } + ul.hentry .entry-content .bad a { /*Ссылка Показать плохой комментарий*/ + color: #ccc; + } + + /*JS-based show-hide comments*/ + + .show-hide-comments { + font-size: 90%; /*14/12*/ + color: #999; + margin-bottom: 10px; + padding: .1em 0 .2em 10px; + background: #FAEBD7; + } + .show-hide-comments a { + padding: 0 5px 0 0; + background: #FAEBD7; + /*text-decoration: none;*/ + } + .show-hide-comments a:hover { + color: #666; + } + + + /*for JavaScript comments extender*/ + + .extended { + float: left; + padding: 10px 10px 0 10px; + background: #FFFAF0; + } + +/* // Comments */ + + + + + + + + + + + + + + + + + + +/* Популярные комментарии и Прямой эфир + some code from Live section. */ + +/*.live-section #comments { + margin-top: 40px; +} + .live-section #comments h1 { + font: normal 2em/110% Verdana, sans-serif; + letter-spacing: -1px; + color: #69c; + } + .live-section #comments h1 .rss { + margin-left: 5px; + } + .live-section .stat { + margin: 10px 0 30px 0; + } */ + +.popular-comment { + width: 100%; + clear: both; + overflow: hidden; +} + .comment-body { + float:left; + width:80%; + } + .comment-descr { + font: .83em/130% Tahoma, sans-serif; /*10/12*/ + vertical-align: top; + width:15%; + margin-right: 5%; + float:left; + } + .comment-descr dt, + .comment-descr dd { + display: inline; + } + .comment-descr dd { + color:#f00; + } + + + .live .who a, .live .where, + .comment-descr .where { + color:#999; + } + + .live .who a:hover, .live a.where:hover, + .comment-descr .where:hover { + color:#333; + } + + + .live .topic, + .comment-descr .topic, + .side-side a { + color:#666; + } + .live a.topic:hover, + .comment-descr .topic:hover, + .side-side a:hover{ + color:#A3A3A3; + } + .live a.topic:visited, + .comment-descr .topic:visited, + .side-side a:visited { + color:#B5B5B5; + } + .live a.topic:visited:hover, + .comment-descr .topic:visited:hover, + .side-side a:visited:hover { + color:#A3A3A3; + } + .live .total { + color: #C00; + } + .live .all { + position: relative; + top: 0; + right: 0; + margin:20px 25px 10px 0px; + text-align: right; + color:#999; + } + + +/*Блок с мозаикой из юзерпиков с подписями. Офигенная штука. Любите её*/ + +.people-mosaic {margin-top: 10px;} +.people-mosaic ul {float: none;} + .people-mosaic ul li { + float: left; + margin: 10px 10px 0 0; + } + .people-mosaic dl { + display: block; + text-align: center; + } + .people-mosaic dl dd a { + font: 1em Arial, sans-serif; + color: #008cd2; + } + .people-mosaic dl dt a img { + padding: 1px; + background: #ddd; + } + +.img-border { + border: 1px solid #ddd; +} + + + + + + + +.declaration { + font-size:2em; + font-family:arial; + line-height:140%; + color:#404040; +} +.declaration p { + margin-bottom:1em; +} + + +.alert { + color:#f00; +} + +/*Вывод юзеров по странам и городам в разделе "Люди". Код используется также для вывода компаний и блогов в + +результатах поиска.*/ + +.user-flow { + clear:both; + float:left; + margin:30px 0; +} + + +.user-flow-item { + margin: 0 0 40px 0; +} + .user-flow-item dt img { + border: 1px solid #ccc; + } + .user-flow-item .summary { + margin: -50px 0 0 60px; + font-size: 1.08em; /*13/12*/ + } + .search .user-flow-item .summary { + margin-top: -45px; + } + +.who-n-when { + margin: 0 0 10px 0; + color: #aeaeae; +} + .who-n-when a { + letter-spacing: -1px; + color: #aeaeae; + } + .who-n-when .blog-name { + color: #79b1d4; + } + .who-n-when dt { + font: 2em/110% Verdana, sans-serif;/*24/12*/ + } + .who-n-when dd { + margin-top: 5px; + font: .83em/100% Verdana, sans-serif;/*10/12*/ + } + + +/*Выделение особого сообщения (системного, например. Цвет фона как у слова в поиске)*/ + +.special-msg { + background: #fffacd; +} + +/* Сообщение о том, что по тегу ничего не найдено */ + +.no-found {margin-top: 20px; font-size: 150%;padding-left:35px;} +.main-search{ + width:auto !important; + padding-left:35px; + } + .main-search form{ + position:relative; + margin-bottom:30px; + } + + .main-search form .page-menu { + margin-top:35px; + } + .main-search form .page-menu li label{ + + + } + .main-search form .page-menu li input{ + height:0;width:0;border:none;padding:0;position: absolute;background:transparent; + overflow:hidden; + } + .main-search fieldset{ + overflow:hidden; + } + .main-search .inpt-text { + margin: 0 10px 0 0; + padding:0 0 0 6px; + font-size:22px; + float: left; + height:30px; + color: #996; + line-height:30px; + border: 1px solid #996; + } + .main-search input.inpt-text { + width: 78%; + } + .main-search .inpt-btn{ + float:left; + height:32px; + width:32px; + padding:0; + margin:0; + overflow:hidden; + border:none; + background:transparent url(/i/bg-button-enter.png) no-repeat scroll 0 -66px; + } + .main-search .inpt-btn:active{ + background-position:0 -99px; + } + + .main-search { + position:relative; + } + + +#fbPanel { + position: absolute; + background-color: #F0F0E7; + width: 400px; + border: 1px silver solid; + padding: 10px 10px 10px 10px; + z-index: 30; +} +#fbPanel textarea { + width: 100%; + margin-bottom: 20px; +} + +.info-text { + font-size: 16px; + padding-top: 20px; + float: left; +} + +#html_tags_help { + margin-top: 20px; + width:96%; + background-color:#F0F0F0; + color: black; + font-size:0.9em; + padding:15px 20px 20px 10px; + z-index:9999; + position: relative; + float: left; +} +#html_tags_help h4 { + cursor:default; + color: black; + font-size: 18px; + margin-bottom: 10px; + font-weight: bold; +} +#html_tags_help h5 { + cursor:default; + color: black; + font-size: 16px; + font-weight: bold; +} +#html_tags_help dt { + color:#000; + font-weight: bold; +} +#html_tags_help dd { + color:#000; + margin-bottom: 10px; +} +#html_tags_help #html_tags_help_content { + width:290px; + height:465px; + overflow:auto; + background-color:#fff4cd; + padding:10px; +} +#html_tags_help_close { + top:1em; + right:10px; + position: absolute; +} +a#html_tags_help_close, a#html_tags_help_close:hover, a#html_tags_help_close:visited { + color: gray; + font-size: 0.8em; + border-bottom: 1px dashed gray; +} +div#godmode { + left: 0px; + top: 0px; + width: 100%; + height: 100%; + position: fixed; + text-align: center; + vertical-align: middle; + background-image: url(/i/halfvisible.gif); + z-index: 10000; +} +div#godmode span { + color: white; + font-size: 72px; + font-weight: bold; + display: block; + margin-top: 30%; +} + +/* */ + + +/* Advert */ + +.advert-page .fright_holder{ + width:188px; + float:left; + margin: 0px 15px 15px 0px; +} +.advert-page .fright_holder .fright_bg_top{ + background:url(/i/adv/fright_bg_top.gif) no-repeat top; + width:188px; + height:22px; +} +.advert-page .fright_holder .fright_bg_bottom{ + background:url(/i/adv/fright_bg_bottom.gif) no-repeat top; + width:188px; + height:22px; +} +.advert-page .fright_holder .fright_bg_center{ + background:#e5e5e5; +} +.advert-page .fright_holder .fright_bg_center p{ + padding: 0px 20px; + margin: 0px; + color: #9e9e9e; + font-size: 11px!important; +} + +.advert-page .rightcolumn2, .rightcolumn3{ + float: right; + width: 478px; + padding-left: 30px; + padding-bottom: 20px; +} +.advert-page .rightcolumn2 img#screen { + margin-top: 1em; + border: solid #CCC 1px; + margin-left: 2px; +} + + + /* Оформление текста в рекламном разделе */ + +.advert-page h1 { + font: 2.5em/100% Verdana,sans-serif; /*30px/12px*/ + } +.advert-page h2 { + clear:left; + color:#FF6000; + font-family:Arial,sans-serif; + font-size:23px; + font-weight:normal; + padding-top:0.5em; +} + +.advert-page p { + line-height: 1.54em; +} + +#buy_package_form { + opacity: 0.97; + display:none; + left: 50%; + margin-left: -212px; + position:absolute; + z-index: 50; + } + #buy_package_form #form-arrow-down{ + display: none; + border-top:7px solid #EFEFEF; + border-left:7px solid transparent; + border-right:7px solid transparent; + width:1px; + margin:0 0 0 20px; + + } + #buy_package_form.package-form-too-much-right .ex_middle{ + margin-left: -355px; + } + #buy_package_form.package-form-too-much-right #form-arrow-down{ + margin-left: 379px; + } +#buy_package_form .habrablock{ + + margin-bottom: 0; + } +#buy_package_form .ex_middle{ + width: 425px; + } +#buy_package_form .js-close-buy-package{ + position: absolute; + cursor: pointer; + top: 10px; + right: 14px; + font-size: 1.5em; + } + + +.advert-page .habrablock { + background:#EFEFEF none repeat scroll 0 50%; + font-size:13px; + margin-bottom:20px; + vertical-align: middle; +} +.advert-page ul.nice { + list-style-image:none; + list-style-position:outside; + list-style-type:none; + margin:0 0 0 4ex; + padding:0; +} +.advert-page ul.nice li { + margin-bottom:1ex; + padding-left:3ex; + background:transparent url(/i/adv/list-style.gif) no-repeat scroll 0 5px; + font-size:12px; + line-height: 1.54em; +} +.price-table input{ + background:#8BBF76; + color:#FFFFFF; + font-size:1.15em; +} +.advert-logos{ + text-align:center; + overflow:hidden; + margin:0 auto; + width:610px; +} +.advert-logos +.adv-logo{ + float:left; + overflow: hidden; + margin-right: 16px; +} +.advert-text{ + font-size:1.2em; + margin:2em 0; + } + .advert-corps{ + text-align:center; + } +.features-trial{ + text-align:center; + padding:7px 18px; + font-size:25px; + } + .features-trial span{ + color:#5A5A5A; + background:#E7FAEC; + padding:7px 18px; + } +.advert-page p.intro { + font-size:17px; +} +.advert-page .info_line { + padding:10px 20px; +} +.advert-page .info_line .captcha-holder{overflow:hidden;} +.advert-page .info_line .captcha-holder img{float:left;margin-right:10px;} +.advert-page .info_line .captcha-holder a{float:left;margin-top:25px;} +.advert-page .info_line .captcha-input{padding-left:120px;padding-top:5px;} + +.advert-page .first_line { + padding-top:28px; +} +.advert-page .label { + float:left; + width:120px; +} +.advert-page .type_ch { + height:50px; +} +.advert-page .button_holder { + padding:10px 22px; +} +.advert-page img.stat { + float: left; + margin-right: 20px; +} +.ponchiki #main-content { + width: 95%; +} +.ponchiki .checkbox, .ponchiki .radio { + border:0 none !important; + bottom:-2px; + padding-right:12px; + position:relative; + width:15px !important; +} +.advert-page .input input, .advert-page .input textarea { + border:1px solid #DDDDDD; + padding:2px 4px; + width:250px; +} +.advert-page .tm-form dl { + margin-bottom: 0px !important; +} +#advert-form { + vertical-align: middle; +} + #advert-form fieldset {margin:0;padding:0;} + + +.advert-page .result { + display: block; + font-size: 17px; + margin-left: 30px; + margin-right: 30px; + /* margin-top: 40%; */ + text-align: center; +} + + +.price-table { + width:100%; +} + .price-table tr.even {background: #eaf1f5;} + .price-table th { + padding-bottom: .5em; + font: normal 150%/110% Arial,sans-serif; + text-align:left; + border-bottom: 1px solid #000; + } + .price-table td { + font: 120%/150% Arial,sans-serif; + vertical-align: middle; + padding: .6em 4px; + } + + .price-table td em { + margin-left: -.05em; + font-size:300%; + color:#69c; + } + .price-table td span { + color:#999; + } + + + +/* Stat */ + +#flashcontent1, #flashcontent2, #flashcontent3, #flashcontent4, #flashcontent5, #flashcontent6 { + float: left; +} + +#help-shortcuts { + margin-left: 20px; +} +#help-shortcuts dt { + font-weight: bold; +} +#help-shortcuts dd { + margin-left: 20px; + margin-bottom: 10px; +} + + +/* Help */ + + /* Оформление текста в разделе "Помощь" */ + +.help h1, .company h1, .live-block-page h1 { + font: 2.5em/100% Verdana,sans-serif; /*30px/12px*/ + } +.help h2 { + clear:left; + color:#FF6000; + font-family:Arial,sans-serif; + font-size:23px; + font-weight:normal; + padding-top:0.5em; +} + +.help p { + line-height: 1.54em; +} +.help ol{margin-top:1em;} +.help li { + line-height: 1.54em; + margin-bottom:0.5em; +} + +.help #main-content ul { + line-height: 1.54em; +} + + + + + + + + + + + + + + + + + + + + + + + +/* Habralenta */ + +.habralenta-settings .my-blogs { + margin: auto 20px 1em 20px; +} +.habralenta-settings .btn-holder { + padding: 20px; +} +.habralenta-settings .btn {margin: auto 20px 10px 20px;} + +#invite-page { + margin: 40px; +} +#invite-count-label { + margin-bottom: 20px; + display: block; +} +#add-invite { + float: left; + width: 300px; +} +#add-invite .field { + width: 270px; +} +#add-invite dl.required dt { + font-weight: bold; +} +#add-invite .btn-bar { + text-align: right; + padding-right: 30px; +} +#invite-list { + float: left; + width: 320px; +} +#invite-list li { + margin-bottom: 10px; +} +input.money { + background:#E3A2A0 none repeat scroll 0 0; + color:#FFFFFF; + font-size:32px; + letter-spacing:-2px; + width: 130px; +} +span.money { + color:#E3A2A0; + font-size:32px; + letter-spacing:-2px; +} +.event-subscribe-form .unsubscribe { + text-decoration: none; + border-bottom: dashed 1px #79B1D4; +} +.event-subscribe-form .unsubscribe.disabled { + text-decoration: none; + border-bottom: dashed 1px silver; + color: silver; +} +.event-subscribe-form fieldset { + height: 30px; +} + + +.event { + margin-left: 35px; +} + .event .nonfriends { + margin-top: 20px; + } + .event h3.participants { + margin: 0; + font: 1.67em Verdana, sans-serif; /*20/12*/ + letter-spacing: -1px; + color: #afa56a; + } + +.salary-type label { + display: inline; +} +.privacy-persnal-info{ + display:none; + color:red; +} +.privacy-persnal +.privacy-persnal-info{ + display:block; + } +.privacy-persnal +span{ + display:none; +} + +.privacy-offtop { + color: gray; +} +.field-privacy .info { + display: none; +} +.privacy-offtop .info { + display: block !important; + color: red; +} +.privacy-offtop #js-field_privacy_text, .privacy-offtop input { + display: none; +} + +@media print { + + body { + background: white; + color:#000; + font-size: 12pt; + } + ul.hentry .entry-content{ + padding-bottom:30px; + } + .blog-title,.yandex-direct,.yandex{ + display:none; + } + a:link, a:visited { + color: #000; + background: transparent; + font-weight: bold; + text-decoration: underline; + } + .hentry .content a:link:after, .hentry .content a:visited:after { + content: " (" attr(href) ") "; + font-size: 90%; + } + + + #header-wrapper,.header, #sidebar, #footer, + .page-navigation, .sub-nav, .page-nav, + .buttons, p.reply, .add-comment, + li.bookmark, li.to-favs, li.down-to-child,.up-to-parent + {display:none;} + + + #wrapper, #main-content { + width: auto; + border: 0; + margin: 0 2%; + padding: 0; + float: none !important; + } + + + div.hentry { + clear:both; + float:none; + margin:0 0 40px; + width:auto; + } +} +.habrauserava{ + height:48px; + width:48px; + position:relative; + } + .habrauserava img{ + width:48px; + height:48px; + } + .habrauserava + b{ + position:absolute; + top:0; + left:0; + height:48px; + width:48px; + background:url(/i/bg_avatar_mask.gif) no-repeat 0 0; + } +.yandex-direct{ + margin:10px 0;clear:left;margin-left:35px +} +.oauth{ + padding-left:35px; + margin:0 0 100px; +} +.oauth-app-block{ + margin:30px 0; +} + +.oauth-app-block dl{ + overflow:hidden; + margin:0 0 3px; +} +.oauth-app-block dl dt{ + font-weight:700; + float:left; + width:164px; +} +.oauth-simple-auth{ + padding-top:50px; + float:left; + width:600px; + } + .oauth-simple-auth h1{ + font-size:2.17em; + } + .oauth-simple-auth form, + .oauth-simple-auth .result{ + padding-top:10px; + } + .oauth-simple-auth form .error{ + color:red; + } + .oauth-simple-auth form p {overflow:hidden;padding:2px 0;} + .oauth-simple-auth form p label{ + float:left; + width:160px; + font-weight:700; + } + .oauth-simple-auth .oauth-finish{ + margin-top:1.5em; + font-size:1.5em; + } +#comments > ul > li > .msg-meta .single-tree {display:none;} +ul li:nth-child(1) > .msg-meta .single-tree{display:none;} +.single-threading .comment_holder{display:none;} + +li.single-tree-node-last > .msg-meta{background:#eef3f3;} + +.comment_holder li.single-tree-node, +.comment_holder li.single-tree-node-last{display:block;} + li.single-tree-node-last li {display:block;} +.single-threading > .msg-meta .js-single-tree, +.single-threading li.single-tree-node > .msg-meta .js-single-tree, +.single-threading li.single-tree-node-last > .msg-meta .js-single-tree {display:none;} + +li > .msg-meta .js-multiplay-tree {display:none;} + +.single-threading li.single-tree-node-last > .msg-meta .js-multiplay-tree{display:block;} + +@media only screen and (max-device-width: 480px) and (-webkit-min-device-pixel-ratio:0) { + #comments .hentry li .msg-meta .folding-dot-holder{ + display:none !important; + } +} +img.help-tip{ + position:relative; + top:3px; +} +#help-tip-text.help-tips-too-much-left{ + margin-left:-15px; + } + #help-tip-text.help-tips-too-much-left + #help-tip-text-arrow{ + margin-left:15px; + } +#help-tip-text{ + position:absolute; + width:375px; + margin-left:-187px; + margin-top:-8px; + display:none; + color:#fff; + z-index:500; + opacity:0.95; + } + #help-tip-text-content{ + position:absolute; + bottom:7px; + padding:15px; + background:#46688b; + -moz-border-radius-topleft:4px; + -webkit-border-top-left-radius:4px; + -moz-border-radius-topright:4px; + -webkit-border-top-right-radius:4px; + -moz-border-radius-bottomleft:4px; + -webkit-border-bottom-left-radius:4px; + -moz-border-radius-bottomright:4px; + -webkit-border-bottom-right-radius:4px; + border-radius:4px; + } + #help-tip-text-arrow{ + border-top:7px solid #46688b; + border-left:7px solid transparent; + border-right:7px solid transparent; + width:1px; + margin:0 auto; + } +.search-ads{ + margin-top:50px +} +.search-ads #yandex_direct{padding:10px;} +.company_admin #sidebar form .wide-wide-inputs{ + border-bottom:1px solid #aaa; + padding-bottom:9px; + margin:8px 0 12px; +} +.company_admin #sidebar form p{ + margin-top:1em; + margin-bottom:1em; +} +.company #sidebar{ + margin-top:46px; +} +.side-side { + padding: 0 20px 20px; + } +.side-side h3{ + margin:0 -20px 0.71em 0; + } + .side-side li{ + + margin:9px 0; + } + .side-side li small{ + color:#999; + font-size:0.9em; + } +.wide-wide-inputs dl,.company_admin #sidebar form .wide-wide-inputs dl{ + margin:0; +} + + .wide-wide-inputs dt,.company_admin #sidebar form .wide-wide-inputs dt{ + font-size:0.9em; + margin:0; + } + .wide-wide-inputs dd{ + padding-right:5px; + } + .wide-wide-inputs dd input{ + width:100%; + } +.js-do-more-inputs{ + font-size:0.9em; +} +#js-field-holder-with-help{ + overflow:hidden; +} +.ponchiki #wrapper{ + overflow: hidden; + } +#john_black{ + display: none; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: #000; + opacity: 0.5; + z-index: 40; + } + /* Сайдбар с кармаграфом и т.п. */ + + +.karma-n-statistic p { + margin: 15px 0; + font-size:100%; + color:#666; + } +.karma-n-statistic h3 { + margin: 15px 0; + font: normal 1.5em/120% Verdana, sans-serif;/*18/12*/ + letter-spacing: -1px; + color: #999; + } +.karma-n-statistic h2{ + color: #999; + font-size:233% ; + margin:0 0 20px; + } +.karma-n-statistic .stats { + margin: 10px 0 35px; + color:#666; + overflow:hidden; + font-size:116%; + + } +.karma-n-statistic +.karma-stat{ + margin-bottom:50px; + } +.karma-n-statistic .stats dt{ + float:left; + clear:left; + margin-right:4px; + } +.karma-n-statistic .stats dd{ + float:left; + } +.karma-n-statistic .stats dd.global{ + margin-bottom:30px; +} +.karma-n-statistic { + font-family: Verdana, sans-serif; + + overflow: hidden; +} +.karma-n-statistic +.tag-cloud{ + text-align:left; + margin-left:0; + float:none; + } +.search-results-title{ + padding-left: 35px; + margin-bottom:16px; + + } + + +#people-tags{ + float: left; + margin-top: 38px; + width: 140px; + } + #people-tags li{ + padding-bottom: 17px; + transition: opacity 200ms linear; + -webkit-transition: opacity 200ms linear; + } + #people-tags a{ + display: block; + height: 46px; + width: 116px; + font: 13px/13px Helvetica, Arial, sans-serif; + text-decoration: none; + position: relative; + overflow: hidden; + background: no-repeat 0 50%; + } + #people-tags a span{ + visibility: hidden; + } +#people-tags:hover li{ + opacity: 0.6; +} +#people-tags:hover li.active, #people-tags:hover li:hover{ + opacity: 1; +} +#table-people-rating #people-tags li { + width: 140px; + } + #table-people-rating #people-tags li a{ + height: 46px; + width: 140px; + background-position: 50% 50%; + background-color: #ebf0f5; + border-top-left-radius: 23px; + border-bottom-left-radius: 23px; + -webkit-border-top-left-radius: 23px; + -webkit-border-bottom-left-radius: 23px; + -moz-border-radius-topleft: 23px; + -moz-border-radius-bottomleft: 23px; + } + #table-people-rating #people-tags li.active a{ + background-color: #92b3d2; + } + #table-people-rating #people-tags a.podcaster { + background-position: 34px 50%; + } + #table-people-rating #people-tags li a.se_gamer { + margin-top: 20px; + } +#people-tags a.author { background-image: url(/i/tags/author.png); } +#people-tags a.star { background-image: url(/i/tags/star.png); } +#people-tags a.legend { background-image: url(/i/tags/legend.png); } +#people-tags a.oldresident{ background-image: url(/i/tags/oldresident.png); } +#people-tags a.commentator{ background-image: url(/i/tags/commentator.png); } +#people-tags a.podcaster { background-image: url(/i/tags/podcaster.png); } +#people-tags a.translator { background-image: url(/i/tags/translator.png); } +#people-tags a.statistic { background-image: url(/i/tags/statistic.png); } +#people-tags a.humorist { background-image: url(/i/tags/humorist.png); } +#people-tags a.habred { background-image: url(/i/tags/habred.png); } +#people-tags a.unhabred { background-image: url(/i/tags/unhabred.png); } +#people-tags a.troll { background-image: url(/i/tags/troll.png); } +#people-tags a.evangelist { background-image: url(/i/tags/evangelist.png); } +#people-tags a.reader { background-image: url(/i/tags/reader.png); } + +#people-tags a.se_gamer, #people-tags a.se_supergamer, #people-tags a.se_turbogamer { + background-position: 52% 5px !important; + position: relative; +} +#people-tags a.se_gamer { + background-position: 56% 5px !important; + position: relative; +} +#people-tags a.se_gamer span, #people-tags a.se_supergamer span, #people-tags a.se_turbogamer span { + visibility: visible; + position: absolute; + display: block; + text-align: center; + width: 100%; + bottom: 5px; + color: #284fa2; +} +#people-tags a.se_gamer { background-image: url(/i/special/se/tags/gamer.png); } +#people-tags a.se_supergamer { background-image: url(/i/special/se/tags/supergamer.png); } +#people-tags a.se_turbogamer { background-image: url(/i/special/se/tags/turbogamer.png); } + +.userinfo #people-tags{ + overflow: hidden; + float: none; + width: auto; + margin-top: 0; + padding-top: 6px; + } + .userinfo #people-tags li{ + float: left; + margin-bottom: 10px; + } + .userinfo #people-tags li a{ + background-position: 50% 100%; + } +.habr-button{ + font: 19px Arial, sans-serif; + color: #fff; + text-decoration:none; + border:2px outset #F0F0F0; + background: #cc9; + padding:0 6px; + display:inline-block; +} +.habr-button:active{ + padding-left:8px; + padding-right:4px; + border-style:inset; +} +a.habr-button:hover{ + background-color:#6DA3BD; + color:#fff; +} +.side-button{ + margin-bottom: 20px; +} +.big-nice-text{ + + color:#E3A2A0; + font-size:32px; + letter-spacing:-2px; + } + .nice-time{ + text-transform: lowercase; + } + .big-nice-text + input{ + position: relative; + top: -6px; + } + +#karma-reset-games{ + padding-left: 35px; + +} +.karma-reseting .karma-reset-form-reseting { + display: block; +} +.karma-noreseting .karma-reset-form-noreseting{ + display: block; +} +.karma-reset-game{ + display: none; +} +.karma-reset-form{ + + } +.karma-reset-button{ + margin-top: 28px; + text-align: center; + font-size:32px; +} +.karma-reset-button input{ + + font-size: 32px; +} + +input.disabled{ + background-color: #ddd; + color: #eee; + border-style: solid ; +} +.tab-sun{ + margin-top:-3px; +} +.sandbox .page-nav{ + + padding-left: 35px; +} +#js-topic-version-prototype{ + display: none; +} +.topic-preview-content{ + margin-left: -35px; +} +.topic-preview-content .hentry{ + margin-bottom: 0; +} +.topic-preview{ +margin-top: 5px; + padding: 15px; + border: 5px solid #D6D6D6; +} +.post-title{ + font: 2.17em/100% Verdana, sans-serif; + letter-spacing: -1px; + padding:11px 0 22px; + margin: -11px 0 0; + width: 100%; + position: relative; + z-index: 15; + height: 26px; + + } + .post-title .post-title-header{ + color: #7fb084; + float: left; + font-size: 100%; + + margin: 0 ; + } + .post-title .post-title-list{ + position: relative; + float: left; + } + + .post-title .post-title-list ul{ + border: 1px solid #fff; + position: absolute; + top: -11px; + left: 0; + background: #fff; + list-style: none; + margin-left:4px; + padding: 10px 10px 10px 8px; + } + .post-title .post-title-list li{ + display: none; + margin-bottom: 12px; + } + .post-title .post-title-list ul li.current{ + display: block; + /*float: left;*/ + } + .post-title .post-title-list ul a{ + text-decoration: none; + font-size: 100%; + } + .post-title .can-select ul{ + border-color: #ddd; + + + } + .post-title .can-select ul li{ + display: block; + } +#js-topic-form-holder{ + overflow: hidden; +} + + + + +/*Плашка с кнопками визуального редактирования текста*/ +.editor {} + .editor .panel { + background: #eaecea; + float: left; + width: 100%; + padding: 2px 0; + } + .editor .panel a { + display: block; + width: 20px; + height: 20px; + overflow:hidden; + float: left; + margin-left:2px; + text-decoration:none; + } + .editor .panel a:hover { + background: #fff; + } + .editor .panel a.txt { + width:auto; + padding:0 2px; + } + .editor .panel a span { + color:#4d4d4d; + position:relative; + top:3px; + font-size:12px; + font-weight:bold; + letter-spacing:-1px; + } + .editor .panel select { + float: left; + margin-left:2px; + } + + .editor .text-holder { + clear:both; + border-color:#d4d0c8; + border-style:inset; + border-width:2px 1px 1px 2px; + padding:2px 2px 2px 3px; + } + .editor .text-holder textarea { + overflow:auto; + border:none; + } + +.emply_lenta{margin-left:35px;} + + + + + +/* Nokia special */ +#special_nokia{margin-left:35px;margin-bottom:20px;clear:both;background: #f0f0e7;padding:20px;position:relative;-webkit-border-radius: 10px;-moz-border-radius: 10px;border-radius: 10px;} +#special_nokia .logo{display:block;width:105px;height:66px;position:absolute;left:20px;top:20px;background: url(/i/special/nokia/after_post_html_block/logo.png) no-repeat; } +#special_nokia .ovi{display:block;width:68px;height:67px;position:absolute;right:20px;top:20px;background: url(/i/special/nokia/after_post_html_block/ovi.png) no-repeat; } +#special_nokia .text{margin-left:150px;margin-right:100px;font-size:10px;font-fimily:Arial;color:#555555;} +#special_nokia .text span{font-size:18px;} +#special_nokia .text .links{overflow:hidden;margin-top:15px;font-size:10px;} + + + + + +/* common */ +.hidden { display:none !important; } +del.robots-noindex{display:none;} + +.has-two-inputs{ + width:103%; +} +dd.has-two-inputs{ + width:102%; +} +#comment_form input.loading { + background: url(/i/form/loader_button.gif) repeat; +} +#comment_form.loading input.post { + background: url(/i/form/loader_button.gif) repeat; +} + +span.two-inputs{ + float:left; + margin-right:3%; +} +/* Forms */ +input.wide, select.wide, textarea.wide { + width:99%; +} +.input-row{ + overflow:hidden; +} +.two-inputs{width:47%;margin-right:1%;} +.wide-me{ + overflow:hidden; + } + .wide-me input.two-inputs{ + width:98%; + } +.right-stick{ + float:right; + margin-left:10px; + } +input.wide-half, select.wide-half, textarea.wide-half { + width:50%; +} + +input.checkbox {vertical-align:middle;} +input.textfield {} + +input.large { + font-size:3em; +} + + + +textarea.large { + height:40em; +} +textarea.medium { + height:7em; +} +textarea.small { + height:3em; +} + +select.with-title option { + background:#eaecea; +} +select.with-title option.title { + background:#fff; +} + +input.btn-big { + font-size:2em; +} + +.achtung-minen { + color: #f00; + display:none; +} +.js-marked-error .achtung-minen { + display:block; +} + + + +form input.btn { + background:#d4d0c8 url(/i/form/loader_field.gif) no-repeat -1000px 0; + outline:none; +} +form.save-loading input.btn-save, +form.blogSave-loading input.btn-save { + background:#d4d0c8 url(/i/form/loader_field.gif) repeat 0 0; +} +form.preview-loading input.btn-preview { + background:#d4d0c8 url(/i/form/loader_field.gif) repeat 0 0; +} +form.draft-loading input.btn-draft { + background:#d4d0c8 url(/i/form/loader_field.gif) repeat 0 0; +} + +form .loading input.textfield { + background:url(/i/form/loader_field.gif) repeat 0 0; +} + + +.topic-autosave { + padding:5px; +} +form.autosave-loading .topic-autosave { + background:url(/i/form/loader_field.gif) repeat 0 0; +} + +.clear { + clear:both; +} + +.sublabel { + margin: 2px 0 3px; + font-size: 11px; + color: #999; + overflow:hidden; +} + +.block { + margin-bottom:2em; +} +.block-semi { + margin-bottom:1em; +} +.block-super { + margin-bottom:4em; +} + + +.block-tr td { + padding-bottom:2em; +} +.block-semi-tr td { + padding-bottom:1em; +} +.block-super-tr td { + padding-bottom:4em; +} + + + + +.system { + text-decoration:none; +} +.system em { + font-style:normal; + line-height:140%; + border-bottom:1px dashed #79B1D4; +} +h2.forms .system { + font-size:0.6em; +} + +fieldset legend { + padding:5px 5px 1.5em 5px; + margin-left:-5px; +} + + +.topic-preview { + display:none; +} + +.topic-preview .habracut { + padding-bottom:0.8em; + margin-bottom:0.8em; + border-bottom:1px dotted #999; + position:relative; +} +.topic-preview .habracut .scissors { + position:absolute; + left:30px; + bottom:-0.8em; + padding:0 3px; + color:#999; + background:#fff; + font-weight:bold; + letter-spacing:-1px; +} + + + + +/* Rounded corners blocks */ + +.round-corner-box { + margin-bottom: 20px; + font-size:1em; /*12px*/ + font-family:tahoma,arial; + background: #f0f0e7 url(/i/bg-corner-top-left.gif) no-repeat 0 0; +} + .round-corner-box .bg-bott-r { + width: 100%; + background: url(/i/bg-corner-bottom-left.gif) no-repeat bottom left; + } + .round-corner-box .bg-bott-l { + background: url(/i/bg-corner-bottom-right.gif) no-repeat bottom right; + width: 100%; + } + .round-corner-box .bg-top-r { + background: url(/i/bg-corner-top-right.gif) no-repeat top right; + padding: 10px 20px; + } + + /* Header inside */ + + .round-corner-box .bg-top-r h3 { + display: block; + margin:0 0 20px 0; + font-size: 2.33em; /*28px*/ + font-weight: normal; + line-height: 1.1em; + letter-spacing: -1px; + text-decoration: none; + color: #999; + } + + .round-corner-box .all { + text-align: right; + color:#999; + } + + + /* Blocks inside rounded corners */ + + + /* Live comments */ + + .live-wrapper {margin-bottom: 10px;} + + .live-comment {margin: 0 0 5px 0;} + .live-comment dt, + .live-comment dd, + .live-comment dd dl, + .live-comment dl dd dl dt { + margin: 0; + display: inline; + color:#999; + } + + .live-comment span.who a, .live-comment .where, .live-comment .topic { + margin-bottom: 1ex; + line-height: 1.35em; + } + .live-comment .who { + padding-left: 16px; + background: url(/i/bg-user.gif) 0 50% no-repeat; + display: inline; + } + .live-comment .who a {color:#999;} + + + + + .live-comment .where{color:#666 ;} + + .live-comment .topic {color:#666;} + + /* Live' links behaviour */ + + .live-comment .who a:hover, .live-comment a.where:hover { + text-decoration: none; + background: #f66; + color:white; + } + .live-comment a.topic:hover { + text-decoration: none; + background: #6c6; + color:#fff; + } + + .live-comment .total {color: #C00;} + + + /* Live popular companies */ + + .rating .title .new-feedback { + padding: 0 0 0 2px; + font: 11px/100% normal Arial,sans-serif; + color: #fff; + background: #6cf; + text-decoration: none; + } + + + + + + + + + + + + + /* Recommendations (habraprofile) */ + + .round-corner-box .recommendation { + margin: auto 0; + padding: 10px 20px; + font: 1em/150% Arial, sans-serif; /*12/12*/ + } + .round-corner-box .recommendationl dt a { + padding-left: 16px; + color: #666; + background: url(/i/bg-blogs.gif) 0 80% no-repeat; + } + .round-corner-box .recommendation dd { + color: #000; + } + + /* // Recommendations (habraprofile) */ + + + + + /* Blocks inside rounded corners */ + + + + + + + + + + + + +/* // Rounded corners */ + + +/* Company card */ + form#company-card { + margin-left: 20px; + } + + form#company-card h1 { + margin-bottom:1em; + width:100%; + clear:both; + font-size:2.167em; + color: #767676; + font-weight: normal; + margin-left: -20px; + } + form#company-card dl { + margin-bottom:1em; + width:100%; + clear:both; + } + form#company-card dl input, + form#company-card dl select, + form#company-card dl label { + width:100%; + display:block; + } + form#company-card dl label { margin-bottom:0.3em; } + + form#company-card dl#tariff-holder { + margin:0 5% 2em 0; + width:50%; + float:left; + clear:none; + } + form#company-card dl#actuality-holder { + width:15.7em; + float:right; + clear:none; + line-height:1.5em; + } + form#company-card dl#actuality-holder dt { float:left; } + + form#company-card dl#actuality-holder dd { float:right; } + + form#company-card dl#actuality-holder * { vertical-align:middle; } + + form#company-card dl#actuality-holder label { display:inline; } + + form#company-card dl#actuality-holder input { + width:6.5em; + display:inline; + } + + form#company-card dl#rss-holder { margin-top:3em; } + + form#company-card dl dd.error { color:#cc0000; } + + form#company-card input.submit { float:right; margin-right: -6px; } + +.zebra {text-decoration:none; border-bottom: 1px dashed #79B1D4;} /* Подчёркивание JavaScript-ссылок */ + +#getInviteYounger_text { color: #519500; } + + +.sort-order a { + margin-left:3px; + text-decoration:none;border-bottom:#77a3bb 1px dashed; + } + a.sort-order_lnk_Sel { + text-decoration:none; padding:0px 4px 2px 4px; + background:#e8e9eb; border-color:#e8e9eb; color:#000; + } +.sort-order_Srch { + margin:0 35px; + } +.answer-sort { + margin-top:50px; + } + .answer-sort .comments-header { + display:inline; + } + .answer-sort .sort-order { + padding-left:5px; + } + + + +/* futu_alert */ + +/* +.futu_alerts_holder { + position:fixed; + _position:absolute; + + top:0; + _top: expression( + eval(document.documentElement.scrollTop) + "px" + ); + left:50%; + width:450px; + z-index:9999; + margin-left:-225px; +} +*/ +.futu_alert_outer { + position: fixed; + top: 0; left: 0; + width: 100%; + + z-index:9999; +} +.futu_alert_outer .frame { + position:relative; + z-index:9999; +} +.futu_alerts_holder { + position:absolute; + left:69%; top:0; + width:30%; + z-index:9999; +} + +.futu_alerts_holder .futu_alert { + position:absolute; + top:-1000px; + background-color:#FFEBA0; + font:1em Tahoma, sans-serif; + border:1px solid #FFFFFF; + margin-left:60px; +} +.futu_alerts_holder .futu_alert .futu_alert_header { + font-size:1em; + margin:10px 20px 0; +} +.futu_alerts_holder .futu_alert .futu_alert_text { + font-size:0.8em; + margin:10px 20px; +} +.futu_alerts_holder .futu_alert .futu_alert_close_button { + position:absolute; + padding:10px; + top:0; + right:0; + outline:none; +} +.futu_alerts_holder .message { + color:#FFF; + background-color:#6690C9; +} +.futu_alerts_holder .error { + color:#FFF; + background-color:#ed6060; +} +.futu_alerts_holder .save { + color:#FFF; + background-color:#73a168; +} + + + + + + +/* form */ +form.tm-form dl { + margin-bottom: 20px; +} + +form.tm-form dl dd.desc { + color: gray; +} + +form.tm-form dl.required dt label { + font-weight: bold; +} + +form.tm-form dl dd.error { + color: red; + display: none; +} + +form.tm-form dl.invalid dd.error { + display: block; +} + +form.tm-form .unknown-error { + margin-top: 20px; + margin-bottom: 20px; + color: red; +} + +form.tm-form .error-list { + display: none; +} + +form.tm-form input.loading, +input.loading, +button.loading { + background: url(/i/form/loader_button.gif) repeat; +} + +form.tm-form label { + display: inline; +} +form.tm-form dl dd.categories{ + overflow:hidden; + margin:7px 0; +} +form.tm-form dl dd.categories label{ + float:left; + width:49%; +} + + + +/* xl */ +.xl-little div.hentry { margin-bottom: 10px; } + +.xl-panel { padding: 3px 7px; background: #f7f7f2; margin-bottom: 2em; clear: both; overflow: hidden; margin-left:35px;} + .xl-panel ul { list-style: none; float: left; width: 72px; height: 20px; padding: 0; margin: 0; background: transparent url(/i/xl.gif) -112px 0 no-repeat; cursor: pointer; } + .xl-panel ul li { margin: 0; padding: 0; width: 24px; height: 20px; float: left; } + .xl-panel li.little:hover { background: transparent url(/i/xl.gif) -184px 0 no-repeat; } + .xl-panel li.xl_view_radio_little_active { background: transparent url(/i/xl.gif) -256px 0 no-repeat !important; } + .xl-panel li.medium:hover { background: transparent url(/i/xl.gif) -208px 0 no-repeat; } + .xl-panel li.xl_view_radio_medium_active { background: transparent url(/i/xl.gif) -280px 0 no-repeat !important; } + .xl-panel li.full:hover { background: transparent url(/i/xl.gif) -232px 0 no-repeat; } + .xl-panel li.xl_view_radio_full_active { background: transparent url(/i/xl.gif) -304px 0 no-repeat !important; } + .xl-panel .help { float: left; color: #999; padding-left: 10px; } + .xl-panel .rss { float: right; display: block; width: 16px; height: 1.7em; overflow: hidden; text-indent: -1000px; background: transparent url(/i/feed_icon_16x16.gif) 0 50% no-repeat; } + +.xl_updown, .xl_hide { cursor: pointer; display: -moz-inline-stack; display: inline-block; width: 21px; height: 20px; background: transparent url(/i/xl.gif) 0 50% no-repeat; } +.xl_updown:hover { background-position: -21px 50%; } +.xl_downarrow { background-position: -42px 50%; } +.xl_downarrow:hover { background-position: -63px 50%; } +.xl_hide { width: 14px; background-position: -84px 50%; } +.xl_hide:hover { background-position: -98px 50%; } + + + +/* footer */ +#footer a { color: #6da3bd; } +#footer a:hover{color:#4D7285;} +#about { float: left; } +a.footer_logo { + margin: 0 1.1em 0 2%; + float:left; + display:block; + width:31px; + height:29px; + background:url(/i/tm_logo_sharp.gif) no-repeat 0 0; + outline:none; + text-indent:-9999px; +} +a.footer_logo:hover { + background-position:0 -31px; +} + + #copyright-and-footer-nav { + float: right; + margin-right: 20px; + } + #copyright-and-footer-nav li { + display: inline; + } + +#footer { + width: 95%; + min-width: 725px; + max-width: 1200px; + clear: both; + margin: 10px auto 0; + + + font:.917em/120% Tahoma, Arial; /*11px/12px*/ + color:#949494; + position: relative; + top: 20px; + overflow: hidden; +} + +#footer .footer-conttent{ + + border-top: 1px solid #ccc; + padding: 30px 0; + overflow: hidden; + margin-left:35px; +} +.bottom_menu { width: 80%; position: relative; overflow: hidden; float: left; } +.bottom_menu dl { float: left; width: 16.5%; font-size: 1em;} + .bottom_menu dl.user { width: 18%; } + .bottom_menu dl.sections { width: 15%; } + .bottom_menu dl dt { margin-bottom: .6em; font-size: 1.2em; } + .bottom_menu dl dt a { font-weight: bold; } + .bottom_menu dl.user dt a { border: 0; font-weight: bold; } + .bottom_menu dl dd { margin-bottom: .4em; line-height: 1.6em; } + + + +/* favourites_add */ +#favourites_add_hidden { display: none; } + #favourites_add { position: relative; height: 0; clear: left; z-index: 10; margin-left: 35px; } + #favourites_add .favourites_add_inner { background: #f0f0e7; padding: 1em; position: absolute; top: 1em; left: 0; width: 95%; z-index: 10; } + #favourites_add label { font-size: 1.1em; padding-bottom: .1em; } + #favourites_add #favourites_add_tags { width: 99%; } + #favourites_add dd.desc { font-size: .9em; color: #666; } + #favourites_add .favourites_add_footer { margin-top: 1em; color: #666; } + #favourites_add #favourites_add_cancel { color: #000; text-decoration: none; border-bottom: 1px dashed; } + + + +/* misc */ +.top-tags { list-style: none; margin-bottom: 15px; } + .top-tags strong { font-weight: normal; } + .top-tags em { font-style: normal; float: right; text-align: right; color: #999; text-decoration: none; } + .top-tags a { display: block; padding: 4px 20px; overflow: hidden; text-decoration: none; } + .top-tags a strong { text-decoration: underline; } + .top-tags a:hover, .top-tags a.current { background: #d2d2c9; color: #fff; } + .top-tags a:hover strong, .top-tags a.current strong { text-decoration: none; } + .top-tags a:hover em, .top-tags a.current em { color: #fff; } + +ul.tags li.fav a { color:#339900;} + ul.tags li.fav a:hover{ + color:#85C266; + } +.tags li.favourites_edit_tags { margin-left: 10px; } + .tags li.favourites_edit_tags a, .tags li.favourites_edit_tags a:link, .tags li.favourites_edit_tags a:visited { color: #ccc; background: none; } + .tags li.favourites_edit_tags a:hover { color: #666; } + +.sub-nav { clear: both; margin-bottom: 20px; } + .sub-nav li { display: inline; margin-right: 3px; } + .sub-nav li a { color: #093; font-size: 1.083em; padding: 0 2px; text-decoration: none; } + .sub-nav li.current a { color: #fff; background: #ff9525; } + +/* re:store banner margins fix for opera */ +@media all and (min-width: 0px) { + #iStoreMenuBanner { margin-top: -2px; margin-bottom: 0; } +} + + + +/* header */ +/** There is new habraheader bellow; Gleb Arestov, july 09**/ +.header{ + padding:10px 0 0; + overflow:hidden; + width: 95%; + margin:0 auto; + min-width: 725px; + max-width: 1200px; + } + .header + .panel-personal{ + float:left; + } + .header + .panel-tools{ + float:right; + } + .header + .logo{ + text-align: center; + width:110px; + height:110px; + display:block; + margin:10px auto; + background:url(/i/bg-multilogo.png) no-repeat 50% -144px; + } + .header + .logo:hover{ + background-position:50% -274px; + } + .header + a.root{ + margin:0 auto; + width:240px; + height:130px; + background-position:0 0 !important; + } +.panel-personal, .panel-tools { + font-family: Arial, Helvetica, sans-serif; + } +.panel-personal{ + padding-left:35px; + width:250px; + color:#999; + line-height:1.33em; + } + .panel-personal dt a{ + margin-right:10px; + } + .panel-personal + .habrauser-charge{ + margin-top:0.4em; + font-size: 91%; + line-height:1.2em; + } + .panel-personal + a{ + color:#999; + } + .panel-personal + a:hover{ + color:#333; + } + .panel-personal + dd + a{ + margin-right:10px; + } + .panel-personal + a.habrauser{ + color:#343434; + font-weight: 700; + } + .panel-personal + a.habrauser:hover{ + color:#858585; + } + .panel-personal + .habrauser-newmail{ + background:url(/i/icos/new-message.gif) no-repeat 0 2px; + padding-left:21px; + margin-left:-21px; + } +.panel-tools{ + padding-right:1%; + width:271px; + + } + .panel-tools + .panel-settings{ + padding-right:28px; + margin-bottom:0.66em; + } + .panel-settings{ + text-align: right; + } + .panel-settings + a{ + color:#999; + } + .panel-settings + a:hover{ + color:#333; + } + .panel-settings + small{ + color:#ccc; + font-size:1em; + } + .panel-tools + .panel-search{ + float:right; + width:auto; + } + .panel-search{ + text-align: right; + margin-top:-2px; + padding:2px 0 2px 2px; + } + .panel-search + .panel-search-label{ + position:relative; + float:left; + } + .panel-search + .panel-search-label + span{ + position:absolute; + left:5px; + top:3px; + color:#ccc; + display:none; + cursor:pointer; + } + .panel-search + label.input-placeholding + span{ + display:block; + } + .panel-search + .in-text{ + border:1px solid #D1D1D1; + padding:2px; + float:left; + width:230px; + margin-right:5px; + height:15px; + padding:2px; + } + .panel-search + .in-text:focus{ + outline:1px solid #6DA3BD; + } + .panel-search + .in-submit{ + float:left; + padding:0; + margin:0; + border:none; + height:21px; + width:21px; + overflow:hidden; + background:transparent url(/i/bg-button-enter.png) no-repeat scroll 0 0; + } + .panel-search.enter-button-hightlight + input.in-submit, + .panel-search + input.in-submit:active{ + outline:none; + background-position: 0px -22px; + } + .panel-search + p{ + margin: 0; + } + .panel-search + .input-placeholding{ + color:#ccc; + } +.panel-nav-top{ + padding:30px 0 25px 35px; + overflow:hidden; + margin-top:-15px; + min-width:1000px; + text-transform: lowercase; + } + .panel-nav-top + li{ + height:36px; + line-height:1.2em; + float:left; + font-size:250%; + margin-right:26px; + color:#343434; + } + .panel-nav-top + li + a{ + color:#6da3bd; + } + .panel-nav-top + li + a:hover{ + color:#4D7285; + } + .panel-nav-top + li.current + a{ + color:#343434; + } + + .panel-nav-top + li.current-full + a{ + color:#000; + text-decoration: none; + cursor: default; + } + .panel-nav-top + li.current + a.disabled{ + text-decoration:none; + } + .panel-nav-top + li.current + a:hover{ + color:#000000; + } + .panel-nav-top + li span a{ + float:left; + font-size:0.5em; + line-height:1.2em; + max-width:140px; + } + +.panel-personal { width: 350px; } +.panel-personal iframe { display: -moz-inline-stack; display: inline-block; *display: inline; *zoom: 1; margin-left: 10px; position: relative; top: 3px; } + + + + +/* user_profile */ +.profile-header{ + float:left; + width:149%; + padding-left:35px; + margin:-8px 0 6px; + height:48px; + } + .profile-header h1{ + float:left; + margin-right:5px; + } + .profile-header h1 .favicon{ + margin-top:14px; + } + + .profile-header .profile-actions{ + float:left; + margin-right:10px; + position:relative; + } + .profile-header .profile-actions dt{ + float:left; + overflow: hidden; + color:#333333; + padding:0; + line-height:1em; + height:42px; + font-size:300%; + + } + .profile-header .profile-actions dt .habrauser{ + line-height:1em; + padding:2px 6px 9px ; + float:left; + } + + .profile-header + .profile-actions + dd.menu-arr{ + position:relative; + z-index:2; + float:left; + display:none; + cursor:pointer; + font-size:175%; + font-weight:400; + line-height:46px; + width:15px; + padding:0 11px 0 7px; + margin-left:-6px; + text-align:center; + vertical-align:middle; + height:40px; + color:#ccc; + } + + .profile-header + .profile-actions + dd.menu-arr + .press-done{ + display:none; + } + + .profile-header + .profile-actions + dd.menu-arr:hover{ + color:#333; + } + .profile-header + .profile-actions + .profile-actions-menu-container{ + display:none; + + position:absolute; + + width:200px; + right:0; + top:5px; + } + .company-header + .profile-actions-menu-too-left + .profile-actions-menu-container{ + right:0; + left:-21px; + } + .profile-header + .profile-actions + .profile-actions-menu{ + float:right; + padding:0; + background:#fff; + border:1px solid #333; + background:#fff; + margin-top:3px; + + } + .profile-header + .profile-actions + .profile-actions-menu + .cor-1px{ + padding:1px 0; + border:2px solid #333; + border-width:0 2px; + background:#fff; + margin:0 -2px; + } + .profile-header + .profile-actions + .profile-actions-menu + ul{ + background:#fff; + margin:0 -1px; + padding:7px 40px 7px 14px; + } + .profile-header + .profile-actions + .profile-actions-menu + li{ + padding:5px 0; + line-height:1.2em; + overflow:hidden; + font-size:108%; + } + .profile-header + .profile-actions + .profile-actions-menu + li + a{ + + } + .profile-actions-menu + li + a.js-cancel{ + float:right; + font-size:0.8em; + line-height:1.2em; + padding-top:2px; + } + .js-you-love-this-corp .js-prof-company-addfan, + .js-you-work-here .js-prof-company-worker, + .js-prof-company-notworker, + .js-prof-company-removefan{ + display:none; + } + .js-you-love-this-corp .js-prof-company-removefan, + .js-you-work-here .js-prof-company-notworker{ + display:block; + } + .company-header + .profile-actions + .profile-actions-menu + ul{ + padding:22px 14px 7px 14px; + } + + .company-header + .profile-actions + .profile-actions-menu-container{ + width:258px; + } + .company-header + .profile-actions + .profile-actions-menu{ + float:none; + } + + .profile-header + .profile-actions.profile-actions-usable + dd.menu-arr{ + display:block; + } + .profile-header + .profile-actions.profile-actions-usable + dt:hover{ + border-color:#B7D0E5; + } + .profile-header + .profile-actions.active + dt{ + border-color:transparent !important; + } + .profile-header + .profile-actions.active + dd.menu-arr{ + color:#333; + } + .profile-header + .profile-actions.active + dd.menu-arr + .press-can{ + display:none; + } + .profile-header + .profile-actions.active + dd.menu-arr + .press-done{ + display:inline; + } + .profile-actions.active + .profile-actions-menu-container{ + display:block; + } + + .profile-header + .profile-karma-holder{ + float:left; + margin-top:-9px; + margin-left: 10px; + } + .profile-header + .profile-karma-holder + dl{ + text-align:center; + } + .profile-header + .karma{ + padding:0; + margin-right:15px; + } + .profile-header + .habraforce{ + margin:0; + padding:0; + } + .profile-header + .profile-adm{ + padding: 0 0 0; + float:left; + margin-left:20px; + } + .profile-header + .profile-adm + a{ + display:block; + float:left; + margin:0 5px; + width:24px; + height:24px; + line-height:24px; + vertical-align:bottom; + text-align:center; + padding:6px; + } + .profile-header + .profile-adm + a.invitogiver{ + background: url(/i/img-icon-invite.png) no-repeat 50% 50%; + } + .profile-header + .profile-adm + a.profedit{ + background: url(/i/topic_edit.gif) no-repeat 50% 50%; + } + + .profile-header + .profile-adm + a:hover{ + background-color:#eee; + } +.profile-header +.karma, +.profile-header +.habraforce{ + font-family: Verdana, sans-serif; + } +.profile-header .karma a{ + margin-top:9px; + width:15px; + height:26px; + } +.profile-header .karma .vote_plus { + background:url(/i/icos/icons_vote_karma_big.gif) no-repeat 0 0 !important; + } +.profile-header .karma .vote_minus { + background:url(/i/icos/icons_vote_karma_big.gif) no-repeat -16px 0 !important; + } + +.profile-header .karma.voted_plus .vote_plus { + background:url(/i/icos/icons_vote_karma_big.gif) no-repeat 0 -27px !important; + } + +.profile-header .karma.voted_minus .vote_minus { + background:url(/i/icos/icons_vote_karma_big.gif) no-repeat -16px -27px !important; + } + + + +.profile-header .karma dd.vote{ + display:block; + } +.profile-header +.karma .mark, +.profile-header +.habraforce .number, +.profile-header +.habraindex .number{ + background:transparent; + font-size:300%; + } + .profile-header + .karma .mark{ + color:#6c6; + padding:0; + } + .profile-header + .habraforce .number{ + color:#CC66CC; + } +.profile-header .karma dt, +.profile-header .karma .total, +.profile-header .habraforce dt, +.profile-header .habraindex dt{ + color:#ccc; + } +.profile-header dt{ + margin-bottom:-6px; + } +.profile-header .karma .total{ + margin-top:-4px; + } + +.company .page-navigation{ + float:none; + width:auto; + padding-left:35px; + } +.profile-header .habraindex .number{ + color:#CC66CC; + } +.profile .profile-header{} + +.profile #sidebar{ + margin-top:46px; +} + + + + +/* autosuggest */ +/* autosuggest */ +.js-autosuggest-holder { + width:100%; + position:relative; + z-index:10; +} +.js-autosuggest-holder .js-autosuggest-output { + width:100%; + overflow:hidden; + position:absolute; + z-index:10; + cursor:pointer; + padding-bottom:1px; + +} +.js-autosuggest-holder .js-autosuggest-output iframe { + display:none; + display/**/:block; + position:absolute; + top:0; + left:0; + z-index:-1; + width:3000px; + height:3000px; +} +.js-autosuggest-output-container { + position: relative; height: 0; + } + .js-autosuggest-output div { + text-align:left; + position:relative; + padding: 3px 0 3px 3px; + font-size:0.9em; + border:1px solid #dadada; + line-height:1.4em; + margin-bottom:-1px; + background-color: #fff; + cursor: pointer; + } + .js-autosuggest-output div em { + font-style:normal; + font-weight:bold; + } + .js-autosuggest-output div.active { + background-color:#fdf5e6; + z-index:5; + border-color:#eee; + } +.js-autosuggest-holder .js-autosuggest-output .js-autosuggest-item { + padding:3px; + + border-bottom:1px solid #7992b2; +} +.js-autosuggest-holder .js-autosuggest-output .current { + background-color:#7992b2; +} +.js-autosuggest-holder .js-autosuggest-output .js-autosuggest-item em { + font-weight:bold; + font-style:normal; +} + + + + + + + + .panel-search + .js-autosuggest-holder{ + width:100%; + } + .panel-search .js-autosuggest-output-container{ + clear:both; + width:236px; + z-index:1; + } + .panel-search p{ position:relative;z-index:3;} + /* Autosuggest в форме поиска */ + #info-search .js-autosuggest-holder { + position:relative; + } + #info-search .js-autosuggest-output { + width:100.3%; + left:0; + top: 22px; + margin-left: -3px; + text-align:left; + } + + + + /* Autosuggest в форме поиска по тегам*/ + .tag-search { + position:relative; + } + .tag-search .js-autosuggest-output { + width:51%; + left:97px; + top: 37px; + z-index:30; + } + .tag-search .js-autosuggest-output div { + padding:0 6px; + } + + .main-search .js-autosuggest-output { + width: 78%; + padding-right:8px; + } + .main-search .js-autosuggest-output div{ + margin-right:-8px; + } + + + + /* Autosuggest в форме поиска по тегам*/ + #favourites_add .js-autosuggest-holder div{ + z-index:3; + position:relative; + } + #favourites_add .js-autosuggest-holder .js-autosuggest-output-container{ + z-index:1; + } + #favourites_add .js-autosuggest-output { + left:0; + top: 000; + z-index:30; + } + + + + + /* autosuggest */ + #js-topic-form-holder .js-autosuggest-holder { + position:relative; + } + #js-topic-form-holder .js-autosuggest-output { + width:100.3%; + left:0; + } + + + + /* //autosuggest */ + + + + + + #write-post .js-autosuggest-holder { + position:relative; + } + #write-post .js-autosuggest-output { + padding:0; + width:101%; + margin-top: -10px; + } + + +/* //autosuggest */ + + + +/* top_companies */ +.corps-list-top{ + +} + .corps-list-top + .page-nav, + .corps-list-top + .corps-list-top-menu{ + padding-left:35px; + } +.corps-list{ + padding-top:17px; + color:#7d7c7c; + font-family:Tahoma, sans-serif; + } + .corps-list + .corps-listhead{ + margin:0 0 7px; + line-height:1.2em; + } + .corps-list + .corps-listhead + dt.corp-name{ + height:1px; + } + .corps-list + .corps-listhead + dd.copr-habraindex{ + font-family:Arial,sans-serif; + font-size:100%; + color:inherit; + + padding-left:4px; + margin-right:-4px; + } + .corps-list li{ + overflow:hidden; + padding-left:35px; + margin:0 0 20px; + line-height:31px; + } + .corps-list li dt, + .corps-list li dd{ + float:left; + } + + + .corps-list li dt.corp-name{ + font-size:208%; + width:63%; + } + .corps-list li dt.corp-name + img{ + line-height:1em; + height:16px; + width:16px; + float:left; + margin:9px 12px 0 -28px; + font-size:33%; + } + .corps-list li dd.corp-descripton{ + padding-top:1px; + float:none; + clear:left; + width:47%; + line-height:1.2em; + font-size:108%; + } + .corps-list li dd.corp-descripton + p{ + margin:0; + } + .corps-list li dd.corp-descripton + p + a{ + color:#666; + font-size:107%; + } + .corps-list li dd.corp-descripton + p + a:hover{ + color:#A3A3A3; + } + .corps-list li dd.copr-habraindex{ + width:21%; + color:#CC66CC; + float:right; + } + .corps-list li dd.copr-habraindex, + .corps-list li dd.copr-habraindex-change{ + font-family:Verdana, sans-serif; + font-size:158%; + } + .corps-list li dd.habraindex-up{ + color:#74c262; + } + .corps-list li dd.habraindex-down{ + color:#ff0033; + } +.corps-list-page-description{ + color:#999; + } + .corps-list-page-description + p{ + font-size:133%; + margin:0 0 1em; + } + +.corps-list-side +.side-rubrikator{ + margin-top:35px ; + } +.corps-list-side +a.add{ + color:#999; + font-size:133%; + } + .corps-list-side + a.add:hover{ + color:#333; + } +.corps-list-side +.alfikator { + margin:30px 0; + } + .alfikator + ul{ + font-size:166%; + overflow:hidden; + color:#ccc; + padding:1px 1px; + padding-left:4px; + margin-left:4px; + margin:0 0 30px; + } + .alfikator + ul + li{ + float:left; + width:10%; + margin-right:8px; + } + .alfikator + ul + li + a{ + color:#666; + text-decoration:none; + } + .alfikator + ul + li + a:hover{ + color:#A3A3A3; + } + .alfikator + ul + li.active + a{ + padding:2px 4px; + margin-left:-4px; + color:#333; + background:#C5DAE5; + } + + + +/* users-lists */ +h1.users-list-geo{ + color:#999 ; + margin:-10px 0 3px !important; +} +h1.users-list-geo a{color:#999;} +h1.users-list-geo a:hover{color:#333;} + +.lion-king{ + background:url(/i/bg_lion_king.png) no-repeat 0px 0px; + width:23px; + height:20px; + position:absolute; + top:-21px;left:12px; +} +#people-list{ + margin-left:-18px; +} +#people-wrapper .corplist-suggest-form{margin-bottom:10px;padding-top:0;padding-left:0;} +table.users-list{ + width:100%; + } + + table.users-list th { + font: normal 1em/180% Arial,sans-serif; + color:#999; + overflow:hidden; + padding:0 !important; + margin:0; + text-align:left; + } + + table.users-list td { + vertical-align: top; + padding:0 0 26px; + } + table.users-list .rating-dyn { + vertical-align: top; + font-size: 1em; + width:18px; + text-align:left; + } + table.users-list .rating-dyn .rating-dyn-con{ + position:relative; + width:18px; + margin-top:30px; + z-index:5; + } + table.users-list .rating-dyn .rating-dyn-con .rating-dyn-text{ + position:absolute; + z-index:12; + top:-7px; + background:#fff; + padding-right:2px; + padding-top:1px; + right:5px; + text-align:right; + white-space:nowrap; + } + table.users-list .userava{ + width:48px; + vertical-align: top; + } + table.users-list .userava .habrauserava{margin-top:5px;position:relative;} + table.users-list .user { + text-align: left; + padding-left: 14px; + line-height:1.2em; + color:#999; + } + table.users-list .user dl{ + padding-right:3px; + } + table.users-list .user .lifetime{ + font-size: 100% ; + color:#999; + } + table.users-list .user .last_post{ + font-size: 100% ; + color:#999; + padding-right:20px; + } + table.users-list .user .last_post a{ + color: #666666; + font-size: 100% ; + } + table.users-list .user .last_post a:hover{ + color: #333; + } + + table.users-list .user a { + + } + table.users-list .user dt{ + margin-bottom:5px; + font-size:200%; + line-height: 1em; + } + table.users-list .userkarma{ + color:#74c262; + width:15%; + font-size:150%; + } + table.users-list .userrating{ + color:#CC66CC; + font-size:150%; + width:10%; + } + + + +/* yandex_direct */ +#yandex_direct{padding:1.67em;} +.y5_vertical { padding: 1em 1.4em; margin-bottom: 0; } + .y5_vertical .y5_all a, + .y5_vertical .y5_how a, + #y5_direct2 .y5_all a, + #y5_direct2 .y5_how a { color: #F0F0E7 !important; } + + + + + +/* highlight */ +pre code { + font-size: 12px; + padding: 0.5em; + background: #f8f8f8; + display: block; + } + pre .subst, + pre .title { + font-weight: normal; + color: #000; + } + + pre .comment, + pre .template_comment, + pre .javadoc, + pre .diff .header { + color: #808080; + } + + pre .annotation, + pre .decorator, + pre .preprocessor, + pre .doctype, + pre .pi, + pre .chunk, + pre .shebang, + pre .apache .cbracket { + color: #808000; + } + + pre .tag, + pre .tag .title, + pre .pi + pre .id, + pre .attr_selector, + pre .pseudo, + pre .literal, + pre .keyword, + pre .hexcolor, + pre .css .function, + pre .ini .title, + pre .css .class, + pre .list .title, + pre .tex .command { + color: #4d7386; + } + + pre .attribute, + pre .rules .keyword, + pre .number, + pre .date, + pre .regexp, + pre .tex .special { + color: #2f98ff; + } + + pre .number, + pre .regexp { + font-weight: normal; + } + + pre .string, + pre .value, + pre .filter .argument, + pre .css .function .params, + pre .apache .tag { + color: #339900; + } + + pre .symbol, + pre .ruby .symbol .string, + pre .ruby .symbol .keyword, + pre .ruby .symbol .keymethods, + pre .char, + pre .tex .formula { + color: #968e5b; + } + + pre .phpdoc, + pre .yardoctag, + pre .javadoctag { + text-decoration: underline; + } + + pre .variable, + pre .envvar, + pre .apache .sqbracket, + pre .nginx .built_in { + color: #968e5b; + } + + pre .addition { + background: #baeeba; + } + + pre .deletion { + background: #ffc8bd; + } + + pre .diff .change { + background: #bccff9; + } + + + + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline; filename=favicon.ico +Content-Type: image/x-icon; name=favicon.ico +Content-Location: http://habrahabr.ru/i/favicon.ico +Content-Transfer-Encoding: Base64 + +AAABAAIAICAAAAEAIACoEAAAJgAAABAQAAABACAAaAQAAM4QAAAoAAAAIAAAAEAA +AAABACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAsKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/r556/7Cgfv+woH7/sqKA/7OkgP+zpIH/sqSB/7KjgP+woHz/sKB+/7Cg +fv+woH7/sqOA/7Kkgf+zpIH/s6SA/7Cgfv+woH7/sKB+/7Cgfv+woH7/rp53/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+unXj/sKB+/7Cg +fv///////////////////////////7Cgfv+woH7/sKB+/7Cgfv////////////// +/////////////7Cgfv+woH7/sKB+/7Cgfv+vn3v/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+//////////////////// +////////sKB+/7Cgfv+woH7/sKB+//n69///////////////////////sKB+/7Cg +fv+woH7/sKB+/6+fe/+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7///////////////////////////+woH7/sKB+/7Cg +fv+woH7/+vr3//////////////////////+woH7/sKB+/7Cgfv+woH7/r597/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv///////////////////////////7Cgfv+woH7/sKB+/7Cgfv/29O////////// +/////////////7Cgfv+woH7/sKB+/7Cgfv+vn3v/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+//////////////////// +////////sKB+/7Cgfv+woH7/sKB+//b18P//////////////////////sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7///////////////////////////+woH7/sKB+/7Cg +fv+woH7/9fTv//////////////////////+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv///////////////////////////7Cgfv+woH7/sKB+/7Cgfv////////////// +/////////////7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+//////////////////// +////////////////////////////////////////////////////////sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/////////////////////////////////+vn2//// +///8+/r//v7+//////////////////////+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv////////////////////////////////////////////////////////////// +/////////////7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+//////////////////// +////////////////////////////////////////////////////////sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7///////////////////////////////////////// +//////////////////////////////////+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv///////////////////////////7Cgfv+woH7/sKB+/7Cgfv////////////// +/////////////7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+//////////////////// +////////sKB+/7Cgfv+woH7/sKB+////////////////////////////sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7///////////////////////////+woH7/sKB+/7Cg +fv+woH7///////////////////////////+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv///////////////////////////7Cgfv+woH7/sKB+/7Cgfv////////////// +/////////////7Cgfv+woH7/sKB+/7Cgfv+vn3r/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+//////////////////// +////////sKB+/7Cgfv+woH7/sKB+////////////////////////////sKB+/7Cg +fv+woH7/sKB+/6+fev+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7///////////////////////////+woH7/sKB+/7Cg +fv+woH7///////////////////////////+woH7/sKB+/7Cgfv+woH7/r596/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv///////////////////////////7Cgfv+woH7/sKB+/7Cgfv////////////// +/////////////7Cgfv+woH7/sKB+/7Cgfv+woHv/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cg +fv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/7Cgfv+woH7/sKB+/wAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAABAAAAAgAAAAAQAgAAAA +AABABAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwoH//sKB//7Cgf/+woH//sKB//7Cg +f/+woH//sKB//7Cgf/+woH//sKB//7Cgf/+woH//sKB//wAAAAAAAAAAsKB//7Cg +f/+woH//sKB//7Cgf/+woH//sKB//7Cgf/+woH//sKB//7Cgf/+woH//sKB//7Cg +f/8AAAAAAAAAALCgf/+woH//sKB//////////////////7Cgf/+woH////////// +////////sKB//7Cgf/+woH//AAAAAAAAAACwoH//sKB//7Cgf/////////////// +//+woH//sKB//////////////////7Cgf/+woH//sKB//wAAAAAAAAAAsKB//7Cg +f/+woH//////////////////sKB//7Cgf/////////////////+woH//sKB//7Cg +f/8AAAAAAAAAALCgf/+woH//sKB//////////////////7Cgf/+woH////////// +////////sKB//7Cgf/+woH//AAAAAAAAAACwoH//sKB//7Cgf/////////////// +/////////////////////////////7Cgf/+woH//sKB//wAAAAAAAAAAsKB//7Cg +f/+woH////////////////////////////////////////////+woH//sKB//7Cg +f/8AAAAAAAAAALCgf/+woH//sKB///////////////////////////////////// +////////sKB//7Cgf/+woH//AAAAAAAAAACwoH//sKB//7Cgf/////////////// +//+woH//sKB//////////////////7Cgf/+woH//sKB//wAAAAAAAAAAsKB//7Cg +f/+woH//////////////////sKB//7Cgf/////////////////+woH//sKB//7Cg +f/8AAAAAAAAAALCgf/+woH//sKB//////////////////7Cgf/+woH////////// +////////sKB//7Cgf/+woH//AAAAAAAAAACwoH//sKB//7Cgf/+woH//sKB//7Cg +f/+woH//sKB//7Cgf/+woH//sKB//7Cgf/+woH//sKB//wAAAAAAAAAAsKB//7Cg +f/+woH//sKB//7Cgf/+woH//sKB//7Cgf/+woH//sKB//7Cgf/+woH//sKB//7Cg +f/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAAgAEAAIAB +AACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAP// +AAD//wAA + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline; filename=karma.css +Content-Type: text/css; charset=utf-8; name=karma.css +Content-Location: http://habrahabr.ru/css/1307631427/karma.css +Content-Transfer-Encoding: 8bit + +.karma-holder { + position: relative; + clear: both; + width: 100%; + height: 4em; + float: left; + border-bottom: 20px solid #fff; /*trick for IE 6*/ + white-space: nowrap; + background: url(/i/bg-profile-center-line.gif) left center repeat-x; +} + + .blogs h1 a { + position: relative; + font: 2.83em/2.17em Verdana, sans-serif; /*34/12*/ + text-decoration: none; + } + + body.blogs #main-content h1 a img { + float: left; + margin: 15px 10px 0 0; + border: 1px solid #ddd; + } + + +.karma, +.habraforce, +.blog-rating, +.habramoney { + font-family: Arial, Helvetica, sans-serif; + text-align: center; + float: left; + /*border: 1px solid red;*/ + background: #fff; +} + +.karma { + padding: 0 .83em 0 55px; +} + +.karma-holder .infinity .vote { + display: none; +} + +.karma-holder .infinity-sign { + display: none; + font-size: 1.83em; + font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; + margin-top: -5px; + color: gray; +} + +.karma-holder .infinity .infinity-sign { + display: block; +} + +.habraforce, +.blog-rating, +.habramoney { + padding: 0 1em; +} + +.habraforce, +.blog-rating { + margin: 0 20px 0 20px; + padding-bottom: 1.1em; +} + +.karma dl {float:left;} + .karma dd.vote { + margin:0 auto; + width:auto; + overflow:hidden; + display:inline; + } + .karma dt, .karma .total { + font-size: .83em; + } + .karma .total { + clear:left; + } + .karma a { + margin:3px 3px 0; + float:left; + width:9px; + height:20px; + } + .karma .mark { + float:left; + } + .karma strong { + font-weight:normal; + } + .karma .vote_plus { + background:url(/i/icos/icons_vote_karma.gif) no-repeat left top; + } + .karma .vote_minus { + background:url(/i/icos/icons_vote_karma.gif) no-repeat right top; + } + .karma.no_voting .vote_plus, + .karma.no_auth .vote_plus, + .karma.mine .vote_plus, + .karma.voted_minus .vote_plus { + background:url(/i/icos/icons_vote_karma.gif) no-repeat left bottom; + } + .karma.no_voting .vote_minus, + .karma.no_auth .vote_minus, + .karma.mine .vote_minus, + .karma.voted_plus .vote_minus { + background:url(/i/icos/icons_vote_karma.gif) no-repeat right bottom; + } + .habraforce dt, + .blog-rating dt, + .habramoney dt, .habramoney .pay { + font-size: .83em; + float: none; + } + .karma .total em { + font-style:normal; + } + .karma .mark, + .habraforce .number, + .blog-rating .number, + .habramoney .number { + font-size: 1.83em; /*22/12*/ + padding: 0 .15em; + color: #fff; + } + .karma .mark { + background-color:#74c262; + } + .habraforce .number { + background: #25a8ff; + } + .blog-rating .number { + background: #d479b3; + } + .habramoney .number { + background: #ef7f35; + } + + .buttons { + padding: .83em 0 0 .83em; + white-space: nowrap; + float: right; + background: #fff; + } + .blogs .buttons { + padding-left: 0; + } + .karma-holder .buttons a {margin-right:8px;} + + .blogs .buttons img { + border: 1px solid #ddd; + } + .blogs .karma-holder .buttons a {margin-right:0px;margin-top:4px !important;} + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/png +Content-Location: http://habrahabr.ru/i/icos/blog-small-open.png +Content-Transfer-Encoding: Base64 + +iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAMAAAAolt3jAAAABGdBTUEAAK/INwWK +6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFQUExURfT9 +/8/o/N3w+LTP4J+/17PO4PP2+LjR47nZ8/j6+3OXrpu1yXGWrrDQ63KXrn2Zq16E +nnybr6DD2Iyswb/d84qsw+v2/bbQ4Mba6vb///X+/3aXr2uPqN/v9t7r8q66wYam +vZ290Z680KPA1oGkvdzw/KPA0uX1/KvG2XyetI6xyJmvvsHQ2H6gtNjt/GKDmcnf +7MLLz+Dz+qXA0TdDTZ67zzE3PLHO3tDf6ODz/Oz7/vz//7bR44uwyd/w+K3O39To +86fE2K3P453A1qWoq3uEjmWKo93k6dfn78PJzszW3c3m88HV5J23yqPB2Ze70ez6 +/lZqeo6rwY2xy5+90NLn8q7K3Ji1yuXm59Do9HKWrZKxxtLr/LXQ4Oz6/abI36XB +1m+Uq5m80oKhuPT+/7PO33mRpavG18bj87rQ283c5NHq8+j4/f7//////////0ah +peUAAABwdFJOU/////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////// +/////////////////////////////////wC3YWLSAAAAsUlEQVR42mKQYGe3EY9l +ZmZN9cnPz2dgzYMBDRA3LC8XChJAXEdrhiwQYGAI4eTMZ1BLyYECblElLwZTK6ZM +EGAylFeOF2QIV88GA0VfuYg0fYZoS+90INDyNzDScfVkEFbNAIIkIYeA0CCXfAYF +PREWFlsnO0nZYH62fIbkGA4OXmOpXDFnATagvZqMjIx+FnGR9jyJIGfocvFFBXqY +q7jJSIO4QJxvZqLtng8GAAEGAFBLNxR9F8JmAAAAAElFTkSuQmCC + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline +Content-Type: image/jpeg +Content-Location: http://habrahabr.ru/i/join_button_bg.png +Content-Transfer-Encoding: Base64 + +/9j/2wBDABELDA8MChEPDg8TEhEUGSobGRcXGTMkJh4qPDU/Pjs1OjlDS2BRQ0da +SDk6U3FUWmNma2xrQFB2fnRofWBpa2f/2wBDARITExkWGTEbGzFnRTpFZ2dnZ2dn +Z2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2f/wAAR +CAAaAAEDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAIBBv/EABUQAQEA +AAAAAAAAAAAAAAAAAAAR/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/EABQRAQAAAAAA +AAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/AOzomgJowB//2Q== + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline; filename=profile.css +Content-Type: text/css; name=profile.css +Content-Location: http://habrahabr.ru/css/1307631427/profile.css +Content-Transfer-Encoding: 8bit + +/* Profile header */ + +.profile-header { + float: left; + font-size: 12px; +} + .nick-holder { + float: left; + width: 100%; + clear: both; + } + .profile-header h1 { + color: #666; + padding: 0; + font-size: 1em; + } + .profile-header h1 a { + font: 2.83em/135% Verdana, sans-serif; /*34px/12px*/ + text-decoration: none; + color: #666; + } + + .nick-holder .avatar-link { + float: left; + padding-right: 15px; + } + .nick-holder .avatar-link img, .nick-holder .edit img, .hresume .edit img { + border: 1px solid #DCDCDC; + } + + .hresume .edit img {margin-left:10px;} + + .nick-holder div { + float: left; + } + .nick-holder .twitter { + font: .9em/100% Arial, sans-serif; + font-weight: 400; + color: #999; + margin-bottom: 10px; + margin-top: -10px; + display: block; + float: left; + } + + +/* Userinfo+microformats */ + +.userinfo { + width: 100%; +} + +.company .userinfo { + float: left; + clear:both; + margin-top: 20px; +} + +.userinfo dl { + margin: 0 0 10px 0; + padding:0; + clear:left; + font-size: 1.33em; /*16/12*/ + } +.userinfo dl.fn { + float: left; + clear: both; +} + .userinfo dl dt { + margin: 0; + padding: 0 .5em 0 0; + float: left; + width: 11em; + color:#666; + font-size: 83%; + font-weight:bold; + text-align: right; + } + + .userinfo dl dd { + margin: 0 0 0 11em; + padding: 0 0 7px 12px; + text-align: left; + font-size: 83%; + } + + /* Так выводится в профайле заголовок имя юзера */ + + .userinfo dl.user-name { + float: none; + clear: both; + margin: 0 0 1em 9.85em; + padding-top: 1em; + } + .userinfo + .leader-position{ + font-size:0.8em; + color:#999; + } + .userinfo dl.user-name dt, .userinfo dl.user-name dd { + display: block; + float: none; + width: auto; + margin: 0; + padding: 0; + text-align: left; + color: rgb(119, 119, 119); + } + .userinfo dl.user-name dt { + font-size: 156%; + font-weight: normal; + } + .userinfo dl.fn dd a { + color: rgb(119, 119, 119); + } + .userinfo dl.user-name dd.twitter{ + font-family: Arial, sans-serif; + font-size:68%; + margin:1.5em 0 1.5em -22px; + padding-left:22px; + color:#999; + + background:url(/i/bg-icon-twitter.gif) no-repeat; + } + .userinfo dl.user-name dd.twitter #js-twitter-status-live{ + padding-top:3px; + } + + /* // Так выводится в профайле заголовок имя юзера */ + + /** + * Секретные заметки о пользователе + */ + .userinfo .note{} + .userinfo .note .add_note{cursor:pointer;color: green;border-bottom:1px dashed green;} + .userinfo .note .add_note.hide{display:none;} + .userinfo .note .current_note.hide{display:none;} + .userinfo .note .edit_note{display:none;} + .userinfo .note .edit_note.show{display:block;} + .userinfo .note .edit_note .description{color: #999999;font-size: 11px;margin: 2px 0 3px;overflow: hidden;} + .userinfo .note .edit_note input.text{width: 32em;} + .userinfo .note .edit_note input.btn{margin-right:0.2em;margin-top:0.5em;} + .userinfo .note .edit_note .cancel_note{cursor:pointer;color:#6DA3BD;border-bottom:1px dashed #6DA3BD;margin-left:0.2em;} + + +.dl_logic_wrap { + margin: 0 0 20px 0; + float: left; + width: 100%; +} + +.friends_list, .blogs_list, +#favorite_companies_list, #working_in, #staff, .interests { + width: 100%; + } + + + .friends_list ul li, .blogs_list ul li, + #favorite_companies_list ul li, #working_in ul li, #staff ul li { + + display: inline-block; + padding-left: 18px; + } + .interests ul li { + display: inline; + } + .friends_list ul li a, .blogs_list ul li a, + #favorite_companies_list ul li a, #working_in ul li a, #staff ul li a, + .interests ul li a { + margin-right: 11px; + color:#666; + font: normal 92.4%/1.5em arial; + } + .friends_list ul li a:hover, .blogs_list ul li a:hover, + #favorite_companies_list ul li a:hover, #working_in ul li a:hover, #staff ul li a:hover, + .interests ul li a:hover{ + color:#A3A3A3 + + } + .interests ul li a { + margin: 0; + } + .friends_list ul li, #staff ul li { + background: url(/i/bg-user2.gif) 0 50% no-repeat; + } + .blogs_list ul li { + background: url(/i/icos/blog-small-open.png) 0 60% no-repeat; + line-height: 150%; + } + #favorite_companies_list ul li, #working_in ul li { + padding-left: 20px; + background: url(/i/icos/company-small.png) 0 60% no-repeat; + line-height: 150%; + } + .ICQ a, .Skype a { + text-decoration: none; + } + .ICQ a img { + margin: -.1em 3px 0 0; + } + .ICQ a > img { + margin-top: -.5em; + } + .Skype a img { + margin-right: 3px; + } + .Skype a > img { + margin-top: -.5em; + } + + /* Marking links to user's mutual friends and groups */ + + .friends_list ul li a.cross, .blogs_list ul li a.cross, + #favorite_companies_list ul li a.cross, #working_in ul li a.cross, + #staff ul li a.cross, + .interests ul li a.cross { + font-weight: bold; + } + + +.profile .banner { + margin-top: 2em; +} +.profile . +.company .userinfo { + margin: 20px 0 20px 0; +} + + + +/* Recommendations (user to user) */ + + +.user-recommend-user {clear:both;} + + +/* // Recommendations (user to user) */ + + + + + + + + + + +/* Companies section */ + +.profile .live, .company .tag-cloud { + background: #f0f0e7 url(/i/bg-corner-top-left.gif) no-repeat 0 0; + padding: 0; +} + .company .tag-cloud ul { + float: left; + margin: 0 20px 20px; + } + + +.company .live ol { + margin: 0 1.67em; +} + .company .live ol li { + line-height: 130%; + margin-bottom: .42em; /*5px*/ + color: #999; + } + .company .live ol li a:hover { + text-decoration: none; + color: #fff; + background: #6c6; + } + .company .new-feedbacks div div { + padding-bottom: .84em; /*10px*/ + } + +#stats h2 { + font: normal 2.17em/110% Verdana, sans-serif; /*26/12*/ + color: #999; + padding-bottom: .38em; +} + +#stats dl { + margin: .83em 0; +} + #stats dl dt, #stats dd, #stats dl ul, #stats dl ul li { + display: inline; + } + #stats dl dt { + font: normal 1.5em/110% Verdana, sans-serif; + margin-right: .3em; + letter-spacing: -1px; + color: #ccc; + } + #stats dd { + line-height: 190%; + color: #666; + } + #stats dd li { + margin-right: .3em; + } + #stats dd a { + color: #999; + } +.friends_list ul .empty_spaces, #staff ul .empty_spaces { + margin-left:-0.7em; + background:none; + padding-left:0; + font-size:92.4%; + line-height:1.5em; +} + + /* Шапка профайла компании */ + .profile-title {margin: 0 0 20px 0;} + .profile-title .favicon {float: left; clear:both; margin: .75em 23px 0 23px;} + .profile-title h1 { + font: 2.5em/100% Verdana,sans-serif; /*30px/12px*/ + } + .profile-title h1 a {color: #666; text-decoration: none;} + .profile-title h1 a.admin-link {color: #ccc; font-size: 70%;text-decoration: none;} + .profile-title h1 a.admin-link:hover {color: green;} + +/* Отзывы пользователей о компании */ +.company-comments {float:left; clear:both; width:100%;} + + +/* Resume */ + + .hresume h2 { + font: 1.67em Arial, sans-serif; /*20/12*/ + margin-top: 30px; + margin-left: 7.75em; + margin-bottom: 20px; + letter-spacing: -1px; + color: #333; + float: none; + clear: both; + } + .hresume dl dd { + line-height: 100%; + } + +#habrastat { + margin-top: 40px; +} + .hresume .price_block { + padding-top:1em; + } + .hresume .price_block span { + color:#666633; + font-size:2.8em; + letter-spacing:-1px; + line-height: 120%; + } + .hresume .price_block span.price { + color:#fff; + background-color:#9CC; + font-size:1.1em; + } + + .hresume .user-name { + padding-top:0; + } + + .hresume .hire_block span { + color:#E3A2A0; + font-family:arial,sans-serif; + font-size:2.6em; + letter-spacing:-1px; + line-height:40px; + } + .hresume .hire_block input.hire_button { + background-color:#E3A2A0; + color:#FFF; + font-size:1.1em; + } + + +.resume .vevent {margin-bottom:30px;} + + +/* Форма выборки постов в разделе "Моё" профайла */ + +.filter-form ul { + margin: 0 0 0 15px; + padding-bottom: 10px; +} + .filter-form li {float: left; clear: both; margin-bottom: 5px;} + .filter-form input, .filter-form label {float: left;} +input.show { + float: right; + clear: both; + margin: -10px 10px 10px 0; +} + +/*Вакансии пользователя*/ + +.user-vacancies ol { + list-style: decimal; + margin: 0 10px 20px 40px; + color: #999; +} + .user-vacancies {line-height: 170%;} + +/* Блок с выводом Избранного, постов и комментов юзера. Отступы для топиков и комментов */ + + +.comments .items { + float: left; + clear: both; + width: 100%; + margin-top: 30px; +} + + +/* Юзернеймы и компании внутри хабратопиков и комментариев */ + +a.user_link { + padding-left:14px; + color:#666; + font: normal 92.4%/1.5em arial; + background: url(/i/bg-user2.gif) 0 60% no-repeat; +} + +.company_link { + padding-left:14px; + color:#666; + font: normal 92.4%/1.5em arial; + background: url(/i/bg-company.gif) 0 60% no-repeat; +} + +.company-header .js-addFan, +.company-header .js-removeFan, +#js-addWorker, +#js-removeWorker, +span#js-companyWorkerInactive, +span#js-companyFanInactive { + margin-top: 15px; + display: block; + width: 30px; + float: left; + background-repeat: no-repeat; +} + +.company-header .js-addFan.hidden, +.company-header .js-removeFan.hidden, +#js-addWorker.hidden, +#js-removeWorker.hidden { + display: none; +} +.company-header a.js-addFan { + background-image: url('/i/company-fav.gif'); + height: 19px; + margin-left: 27px; +} +.company-header a.js-removeFan { + background-image: url('/i/company-fav.gif'); + background-position: left -19px; + height: 19px; + margin-left: 27px; +} +span#js-companyFanInactive { + background-image: url('/i/company-fav.gif'); + background-position: left -57px; + height: 19px; + width: 24px; +} + +a#js-addWorker { + background-image: url('/i/company-work.gif'); + height: 20px; +} +a#js-removeWorker { + background-image: url('/i/company-work.gif'); + background-position: left -20px; + height: 20px; +} +span#js-companyWorkerInactive { + background-image: url('/i/company-work.gif'); + background-position: left -60px; + height: 20px; + width: 28px; +} + +a#js-blogInfoSwitcher, +a.js-addBlogMember, +a.js-removeBlogMember { + height: 20px; + display: block; + float: left; + background-repeat: no-repeat; + background-color: white; +} +a.js-addBlogMember, +a.js-removeBlogMember { + padding: 5px; + height:16px; + display: block; + background: #dbdbdb url(/i/join_button_bg.png) repeat-x left top; + text-shadow: 0 1px #ededed; + color: #6b6b6b; + text-decoration:none; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + border-style: solid; + border-width: 1px; + font-weight:bold; + border-color: #afafaf #a9a9a9 #a3a3a3; +} +a:hover.js-addBlogMember, +a:hover.js-removeBlogMember{color:#5b5b5b} + + +a.js-addBlogMember.hidden, +a.js-removeBlogMember.hidden { + display: none; +} +a#js-blogInfoSwitcher { + width: 22px; + background-image: url(/i/icos/blog-info.gif); +} +a#js-blogInfoSwitcher.regular { + background-position: left top; +} +a#js-blogInfoSwitcher.regular:hover { + background-position: left bottom; +} +a#js-blogInfoSwitcher.active { + background-position: left bottom; +} +#js-invitationList { + height: 300px; + margin-left: 10px; + margin-right: 10px; + overflow: auto; + overflow-x: hidden; +} + + +.bloginfo{} +.bloginfo .blog-about-text-content{margin:0 1.67em 1.67em !important;overflow:hidden;} +.bloginfo .blog-about-text-content .join{float:left;overflow:hidden;margin-top:6px;} +.bloginfo .blog-about-text-content .stats{float:left;overflow:hidden;color:#999999;font-size:133%;margin-right:20px;} +.bloginfo .blog-about-text-content .is_banned{float:left;overflow:hidden;width: 180px;color:#999999;font-size:133%;} +.bloginfo .blog-about-text-content .is_banned img{float:left;margin-right:10px;} +.bloginfo .blog-about-text-content .is_banned span{float:left;margin-top:2px;} + + + +#user-contacts .label { + display: block; + width: 270px; + float: left; +} +#user-contacts .end { + display: block; +} +#user-contacts .achtung-minen { + clear: both; +} +#user-contacts .js-field-holder input { + display: block; + float: left; +} +#user-contacts .label .name { + display: block; + width: 100px; + font-weight: bold; + float: left; +} +#user-contacts .label .begin { + display: block; + width: 170px; + float: right; + text-align: right; +} +#user-contacts .end, #user-contacts .begin { + font-size: 10px; + vertical-align: middle; + padding-top: 3px; + color: gray; +} + +#invite-list {margin-top: 15px;} + #invite-list ul li {clear: both; padding-bottom: 10px;} + #invite-list ul li img {float:left; width: 24px; margin-right: 5px;} + #invite-list ul li a {line-height: 24px;} + #invite-list ul li a.idontlikeyouanymore { color: #c00; text-decoration: none;} + #invite-list .delete {color: #ddd; text-decoration: none;} + #invite-list .delete:hover {color: red;} + +.friends_list ul li.banned a {text-decoration: line-through;} + +.profile-buttons { + margin: 8px 0 0 20px; + } + .profile-buttons a { + margin-left: 10px; + } + + +.notes{margin-left:35px;} +.notes table{} +.notes table tr{} +.notes table tr th{text-align:left;padding:5px;border-bottom:2px solid #aaa;} +.notes table tr td{text-align:left;padding:5px;border-bottom:1px solid #eee;} +.notes table tr td.date{color:#666666;font-size:11px;} +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline; filename=category_blogs.css +Content-Type: text/css; name=category_blogs.css +Content-Location: http://habrahabr.ru/css/1307631427/sidebar/category_blogs.css +Content-Transfer-Encoding: 8bit + +/** + * Блок - Другие блоги из выбранной категории. + */ +.category_blogs{} +.category_blogs h3{} +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline; filename=best_company.css +Content-Type: text/css; name=best_company.css +Content-Location: http://habrahabr.ru/css/1307631427/sidebar/best_company.css +Content-Transfer-Encoding: 8bit + +/** + * Блок - компания недели + */ +.best_company{} +.best_company h3{} +.best_company h3 .help-tip{margin-bottom:2px;cursor:pointer;} +.best_company .company_info{margin-bottom:20px;} +.best_company .company_info .name{overflow:hidden;margin-left: 20px;margin-right: 20px;} +.best_company .company_info .name img{float:left;font-size:33%;height:16px;margin:8px 10px 0px 0px;line-height: 1em;width: 16px;} +.best_company .company_info .name a{float:left;font-size: 208%;} +.best_company .company_info p{} +.best_company .company_info p a{color:#666666} +.best_company .company_info p a:hover{color:#a3a3a3} +.best_company .company_info .like{overflow:hidden;margin-left:20px;} + +.best_company .company_info #fans_count{float:left;margin-right:10px;color: #999999;font-size: 133%;margin-top:3px;} + + + + +a.js-addFan-Company, +a.js-removeFan-Company { + height: 20px; + display: block; + float: left; + background-repeat: no-repeat; + background-color: white; + padding: 5px; + height:16px; + display: block; + background: #dbdbdb url(/i/join_button_bg.png) repeat-x left top; + text-shadow: 0 1px #ededed; + color: #6b6b6b; + text-decoration:none; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + border-style: solid; + border-width: 1px; + font-weight:bold; + border-color: #afafaf #a9a9a9 #a3a3a3; +} +a:hover.js-addFan-Company, +a:hover.js-removeFan-Company{color:#5b5b5b} +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline; filename=mootools-1.2-core-yc.js +Content-Type: application/x-javascript; charset=utf-8; name=mootools-1.2-core-yc.js +Content-Location: http://habrahabr.ru/js/1307631427/mootools-1.2-core-yc.js +Content-Transfer-Encoding: Base64 + +Ly9Nb29Ub29scywgPGh0dHA6Ly9tb290b29scy5uZXQ+LCBNeSBPYmplY3QgT3Jp +ZW50ZWQgKEphdmFTY3JpcHQpIFRvb2xzLiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAw +OCBWYWxlcmlvIFByb2lldHRpLCA8aHR0cDovL21hZDRtaWxrLm5ldD4sIE1JVCBT +dHlsZSBMaWNlbnNlLgoKdmFyIE1vb1Rvb2xzPXt2ZXJzaW9uOiIxLjIuMCIsYnVp +bGQ6IiJ9O3ZhciBOYXRpdmU9ZnVuY3Rpb24oSil7Sj1KfHx7fTt2YXIgRj1KLmFm +dGVySW1wbGVtZW50fHxmdW5jdGlvbigpe307dmFyIEc9Si5nZW5lcmljcztHPShH +IT09ZmFsc2UpO3ZhciBIPUoubGVnYWN5Owp2YXIgRT1KLmluaXRpYWxpemU7dmFy +IEI9Si5wcm90ZWN0O3ZhciBBPUoubmFtZTt2YXIgQz1FfHxIO0MuY29uc3RydWN0 +b3I9TmF0aXZlO0MuJGZhbWlseT17bmFtZToibmF0aXZlIn07aWYoSCYmRSl7Qy5w +cm90b3R5cGU9SC5wcm90b3R5cGU7fUMucHJvdG90eXBlLmNvbnN0cnVjdG9yPUM7 +CmlmKEEpe3ZhciBEPUEudG9Mb3dlckNhc2UoKTtDLnByb3RvdHlwZS4kZmFtaWx5 +PXtuYW1lOkR9O05hdGl2ZS50eXBpemUoQyxEKTt9dmFyIEk9ZnVuY3Rpb24oTSxL +LE4sTCl7aWYoIUJ8fEx8fCFNLnByb3RvdHlwZVtLXSl7TS5wcm90b3R5cGVbS109 +Tjt9aWYoRyl7TmF0aXZlLmdlbmVyaWNpemUoTSxLLEIpOwp9Ri5jYWxsKE0sSyxO +KTtyZXR1cm4gTTt9O0MuaW1wbGVtZW50PWZ1bmN0aW9uKEwsSyxOKXtpZih0eXBl +b2YgTD09InN0cmluZyIpe3JldHVybiBJKHRoaXMsTCxLLE4pO31mb3IodmFyIE0g +aW4gTCl7SSh0aGlzLE0sTFtNXSxLKTt9cmV0dXJuIHRoaXM7fTtDLmFsaWFzPWZ1 +bmN0aW9uKE0sSyxOKXtpZih0eXBlb2YgTT09InN0cmluZyIpe009dGhpcy5wcm90 +b3R5cGVbTV07CmlmKE0pe0kodGhpcyxLLE0sTik7fX1lbHNle2Zvcih2YXIgTCBp +biBNKXt0aGlzLmFsaWFzKEwsTVtMXSxLKTt9fXJldHVybiB0aGlzO307cmV0dXJu +IEM7fTtOYXRpdmUuaW1wbGVtZW50PWZ1bmN0aW9uKEQsQyl7Zm9yKHZhciBCPTAs +QT1ELmxlbmd0aDtCPEE7QisrKXtEW0JdLmltcGxlbWVudChDKTsKfX07TmF0aXZl +LmdlbmVyaWNpemU9ZnVuY3Rpb24oQixDLEEpe2lmKCghQXx8IUJbQ10pJiZ0eXBl +b2YgQi5wcm90b3R5cGVbQ109PSJmdW5jdGlvbiIpe0JbQ109ZnVuY3Rpb24oKXt2 +YXIgRD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVy +biBCLnByb3RvdHlwZVtDXS5hcHBseShELnNoaWZ0KCksRCk7Cn07fX07TmF0aXZl +LnR5cGl6ZT1mdW5jdGlvbihBLEIpe2lmKCFBLnR5cGUpe0EudHlwZT1mdW5jdGlv +bihDKXtyZXR1cm4oJHR5cGUoQyk9PT1CKTt9O319O05hdGl2ZS5hbGlhcz1mdW5j +dGlvbihFLEIsQSxGKXtmb3IodmFyIEQ9MCxDPUUubGVuZ3RoO0Q8QztEKyspe0Vb +RF0uYWxpYXMoQixBLEYpOwp9fTsoZnVuY3Rpb24oQil7Zm9yKHZhciBBIGluIEIp +e05hdGl2ZS50eXBpemUoQltBXSxBKTt9fSkoeyJib29sZWFuIjpCb29sZWFuLCJu +YXRpdmUiOk5hdGl2ZSxvYmplY3Q6T2JqZWN0fSk7KGZ1bmN0aW9uKEIpe2Zvcih2 +YXIgQSBpbiBCKXtuZXcgTmF0aXZlKHtuYW1lOkEsaW5pdGlhbGl6ZTpCW0FdLHBy +b3RlY3Q6dHJ1ZX0pOwp9fSkoe1N0cmluZzpTdHJpbmcsRnVuY3Rpb246RnVuY3Rp +b24sTnVtYmVyOk51bWJlcixBcnJheTpBcnJheSxSZWdFeHA6UmVnRXhwLERhdGU6 +RGF0ZX0pOyhmdW5jdGlvbihCLEEpe2Zvcih2YXIgQz1BLmxlbmd0aDtDLS07Qyl7 +TmF0aXZlLmdlbmVyaWNpemUoQixBW0NdLHRydWUpOwp9cmV0dXJuIGFyZ3VtZW50 +cy5jYWxsZWU7fSkoQXJyYXksWyJwb3AiLCJwdXNoIiwicmV2ZXJzZSIsInNoaWZ0 +Iiwic29ydCIsInNwbGljZSIsInVuc2hpZnQiLCJjb25jYXQiLCJqb2luIiwic2xp +Y2UiLCJ0b1N0cmluZyIsInZhbHVlT2YiLCJpbmRleE9mIiwibGFzdEluZGV4T2Yi +XSkoU3RyaW5nLFsiY2hhckF0IiwiY2hhckNvZGVBdCIsImNvbmNhdCIsImluZGV4 +T2YiLCJsYXN0SW5kZXhPZiIsIm1hdGNoIiwicmVwbGFjZSIsInNlYXJjaCIsInNs +aWNlIiwic3BsaXQiLCJzdWJzdHIiLCJzdWJzdHJpbmciLCJ0b0xvd2VyQ2FzZSIs +InRvVXBwZXJDYXNlIiwidmFsdWVPZiJdKTsKZnVuY3Rpb24gJGNoayhBKXtyZXR1 +cm4gISEoQXx8QT09PTApO31mdW5jdGlvbiAkY2xlYXIoQSl7Y2xlYXJUaW1lb3V0 +KEEpO2NsZWFySW50ZXJ2YWwoQSk7cmV0dXJuIG51bGw7fWZ1bmN0aW9uICRkZWZp +bmVkKEEpe3JldHVybihBIT11bmRlZmluZWQpO31mdW5jdGlvbiAkZW1wdHkoKXt9 +ZnVuY3Rpb24gJGFyZ3VtZW50cyhBKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4g +YXJndW1lbnRzW0FdOwp9O31mdW5jdGlvbiAkbGFtYmRhKEEpe3JldHVybih0eXBl +b2YgQT09ImZ1bmN0aW9uIik/QTpmdW5jdGlvbigpe3JldHVybiBBO307fWZ1bmN0 +aW9uICRleHRlbmQoQyxBKXtmb3IodmFyIEIgaW4gKEF8fHt9KSl7Q1tCXT1BW0Jd +O31yZXR1cm4gQzt9ZnVuY3Rpb24gJHVubGluayhDKXt2YXIgQjsKc3dpdGNoKCR0 +eXBlKEMpKXtjYXNlIm9iamVjdCI6Qj17fTtmb3IodmFyIEUgaW4gQyl7QltFXT0k +dW5saW5rKENbRV0pO31icmVhaztjYXNlImhhc2giOkI9JHVubGluayhDLmdldENs +ZWFuKCkpO2JyZWFrO2Nhc2UiYXJyYXkiOkI9W107Zm9yKHZhciBEPTAsQT1DLmxl +bmd0aDsKRDxBO0QrKyl7QltEXT0kdW5saW5rKENbRF0pO31icmVhaztkZWZhdWx0 +OnJldHVybiBDO31yZXR1cm4gQjt9ZnVuY3Rpb24gJG1lcmdlKCl7dmFyIEU9e307 +Zm9yKHZhciBEPTAsQT1hcmd1bWVudHMubGVuZ3RoO0Q8QTtEKyspe3ZhciBCPWFy +Z3VtZW50c1tEXTtpZigkdHlwZShCKSE9Im9iamVjdCIpe2NvbnRpbnVlOwp9Zm9y +KHZhciBDIGluIEIpe3ZhciBHPUJbQ10sRj1FW0NdO0VbQ109KEYmJiR0eXBlKEcp +PT0ib2JqZWN0IiYmJHR5cGUoRik9PSJvYmplY3QiKT8kbWVyZ2UoRixHKTokdW5s +aW5rKEcpO319cmV0dXJuIEU7fWZ1bmN0aW9uICRwaWNrKCl7Zm9yKHZhciBCPTAs +QT1hcmd1bWVudHMubGVuZ3RoOwpCPEE7QisrKXtpZihhcmd1bWVudHNbQl0hPXVu +ZGVmaW5lZCl7cmV0dXJuIGFyZ3VtZW50c1tCXTt9fXJldHVybiBudWxsO31mdW5j +dGlvbiAkcmFuZG9tKEIsQSl7cmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20o +KSooQS1CKzEpK0IpO31mdW5jdGlvbiAkc3BsYXQoQil7dmFyIEE9JHR5cGUoQik7 +CnJldHVybihBKT8oKEEhPSJhcnJheSImJkEhPSJhcmd1bWVudHMiKT9bQl06Qik6 +W107fXZhciAkdGltZT1EYXRlLm5vd3x8ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERh +dGUoKS5nZXRUaW1lKCk7fTtmdW5jdGlvbiAkdHJ5KCl7Zm9yKHZhciBCPTAsQT1h +cmd1bWVudHMubGVuZ3RoOwpCPEE7QisrKXt0cnl7cmV0dXJuIGFyZ3VtZW50c1tC +XSgpO31jYXRjaChDKXt9fXJldHVybiBudWxsO31mdW5jdGlvbiAkdHlwZShBKXtp +ZihBPT11bmRlZmluZWQpe3JldHVybiBmYWxzZTt9aWYoQS4kZmFtaWx5KXtyZXR1 +cm4oQS4kZmFtaWx5Lm5hbWU9PSJudW1iZXIiJiYhaXNGaW5pdGUoQSkpP2ZhbHNl +OkEuJGZhbWlseS5uYW1lOwp9aWYoQS5ub2RlTmFtZSl7c3dpdGNoKEEubm9kZVR5 +cGUpe2Nhc2UgMTpyZXR1cm4iZWxlbWVudCI7Y2FzZSAzOnJldHVybigvXFMvKS50 +ZXN0KEEubm9kZVZhbHVlKT8idGV4dG5vZGUiOiJ3aGl0ZXNwYWNlIjt9fWVsc2V7 +aWYodHlwZW9mIEEubGVuZ3RoPT0ibnVtYmVyIil7aWYoQS5jYWxsZWUpe3JldHVy +biJhcmd1bWVudHMiOwp9ZWxzZXtpZihBLml0ZW0pe3JldHVybiJjb2xsZWN0aW9u +Ijt9fX19cmV0dXJuIHR5cGVvZiBBO312YXIgSGFzaD1uZXcgTmF0aXZlKHtuYW1l +OiJIYXNoIixpbml0aWFsaXplOmZ1bmN0aW9uKEEpe2lmKCR0eXBlKEEpPT0iaGFz +aCIpe0E9JHVubGluayhBLmdldENsZWFuKCkpOwp9Zm9yKHZhciBCIGluIEEpe3Ro +aXNbQl09QVtCXTt9cmV0dXJuIHRoaXM7fX0pO0hhc2guaW1wbGVtZW50KHtnZXRM +ZW5ndGg6ZnVuY3Rpb24oKXt2YXIgQj0wO2Zvcih2YXIgQSBpbiB0aGlzKXtpZih0 +aGlzLmhhc093blByb3BlcnR5KEEpKXtCKys7fX1yZXR1cm4gQjsKfSxmb3JFYWNo +OmZ1bmN0aW9uKEIsQyl7Zm9yKHZhciBBIGluIHRoaXMpe2lmKHRoaXMuaGFzT3du +UHJvcGVydHkoQSkpe0IuY2FsbChDLHRoaXNbQV0sQSx0aGlzKTt9fX0sZ2V0Q2xl +YW46ZnVuY3Rpb24oKXt2YXIgQj17fTtmb3IodmFyIEEgaW4gdGhpcyl7aWYodGhp +cy5oYXNPd25Qcm9wZXJ0eShBKSl7QltBXT10aGlzW0FdOwp9fXJldHVybiBCO319 +KTtIYXNoLmFsaWFzKCJmb3JFYWNoIiwiZWFjaCIpO2Z1bmN0aW9uICRIKEEpe3Jl +dHVybiBuZXcgSGFzaChBKTt9QXJyYXkuaW1wbGVtZW50KHtmb3JFYWNoOmZ1bmN0 +aW9uKEMsRCl7Zm9yKHZhciBCPTAsQT10aGlzLmxlbmd0aDtCPEE7QisrKXtDLmNh +bGwoRCx0aGlzW0JdLEIsdGhpcyk7Cn19fSk7QXJyYXkuYWxpYXMoImZvckVhY2gi +LCJlYWNoIik7ZnVuY3Rpb24gJEEoQyl7aWYoQy5pdGVtKXt2YXIgRD1bXTtmb3Io +dmFyIEI9MCxBPUMubGVuZ3RoO0I8QTtCKyspe0RbQl09Q1tCXTt9cmV0dXJuIEQ7 +fXJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChDKTsKfWZ1bmN0aW9u +ICRlYWNoKEMsQixEKXt2YXIgQT0kdHlwZShDKTsoKEE9PSJhcmd1bWVudHMifHxB +PT0iY29sbGVjdGlvbiJ8fEE9PSJhcnJheSIpP0FycmF5Okhhc2gpLmVhY2goQyxC +LEQpO312YXIgQnJvd3Nlcj1uZXcgSGFzaCh7RW5naW5lOntuYW1lOiJ1bmtub3du +Iix2ZXJzaW9uOiIifSxQbGF0Zm9ybTp7bmFtZToobmF2aWdhdG9yLnBsYXRmb3Jt +Lm1hdGNoKC9tYWN8d2lufGxpbnV4L2kpfHxbIm90aGVyIl0pWzBdLnRvTG93ZXJD +YXNlKCl9LEZlYXR1cmVzOnt4cGF0aDohIShkb2N1bWVudC5ldmFsdWF0ZSksYWly +OiEhKHdpbmRvdy5ydW50aW1lKX0sUGx1Z2luczp7fX0pOwppZih3aW5kb3cub3Bl +cmEpe0Jyb3dzZXIuRW5naW5lPXtuYW1lOiJwcmVzdG8iLHZlcnNpb246KGRvY3Vt +ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUpPzk1MDo5MjV9O31lbHNle2lmKHdp +bmRvdy5BY3RpdmVYT2JqZWN0KXtCcm93c2VyLkVuZ2luZT17bmFtZToidHJpZGVu +dCIsdmVyc2lvbjood2luZG93LlhNTEh0dHBSZXF1ZXN0KT81OjR9Owp9ZWxzZXtp +ZighbmF2aWdhdG9yLnRhaW50RW5hYmxlZCl7QnJvd3Nlci5FbmdpbmU9e25hbWU6 +IndlYmtpdCIsdmVyc2lvbjooQnJvd3Nlci5GZWF0dXJlcy54cGF0aCk/NDIwOjQx +OX07fWVsc2V7aWYoZG9jdW1lbnQuZ2V0Qm94T2JqZWN0Rm9yIT1udWxsKXtCcm93 +c2VyLkVuZ2luZT17bmFtZToiZ2Vja28iLHZlcnNpb246KGRvY3VtZW50LmdldEVs +ZW1lbnRzQnlDbGFzc05hbWUpPzE5OjE4fTsKfX19fUJyb3dzZXIuRW5naW5lW0Jy +b3dzZXIuRW5naW5lLm5hbWVdPUJyb3dzZXIuRW5naW5lW0Jyb3dzZXIuRW5naW5l +Lm5hbWUrQnJvd3Nlci5FbmdpbmUudmVyc2lvbl09dHJ1ZTtpZih3aW5kb3cub3Jp +ZW50YXRpb24hPXVuZGVmaW5lZCl7QnJvd3Nlci5QbGF0Zm9ybS5uYW1lPSJpcG9k +IjsKfUJyb3dzZXIuUGxhdGZvcm1bQnJvd3Nlci5QbGF0Zm9ybS5uYW1lXT10cnVl +O0Jyb3dzZXIuUmVxdWVzdD1mdW5jdGlvbigpe3JldHVybiAkdHJ5KGZ1bmN0aW9u +KCl7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdCgpO30sZnVuY3Rpb24oKXtyZXR1 +cm4gbmV3IEFjdGl2ZVhPYmplY3QoIk1TWE1MMi5YTUxIVFRQIik7Cn0pO307QnJv +d3Nlci5GZWF0dXJlcy54aHI9ISEoQnJvd3Nlci5SZXF1ZXN0KCkpO0Jyb3dzZXIu +UGx1Z2lucy5GbGFzaD0oZnVuY3Rpb24oKXt2YXIgQT0oJHRyeShmdW5jdGlvbigp +e3JldHVybiBuYXZpZ2F0b3IucGx1Z2luc1siU2hvY2t3YXZlIEZsYXNoIl0uZGVz +Y3JpcHRpb247Cn0sZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3Qo +IlNob2Nrd2F2ZUZsYXNoLlNob2Nrd2F2ZUZsYXNoIikuR2V0VmFyaWFibGUoIiR2 +ZXJzaW9uIik7fSl8fCIwIHIwIikubWF0Y2goL1xkKy9nKTtyZXR1cm57dmVyc2lv +bjpwYXJzZUludChBWzBdfHwwKyIuIitBWzFdfHwwKSxidWlsZDpwYXJzZUludChB +WzJdfHwwKX07Cn0pKCk7ZnVuY3Rpb24gJGV4ZWMoQil7aWYoIUIpe3JldHVybiBC +O31pZih3aW5kb3cuZXhlY1NjcmlwdCl7d2luZG93LmV4ZWNTY3JpcHQoQik7fWVs +c2V7dmFyIEE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7QS5zZXRB +dHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2phdmFzY3JpcHQiKTsKQS50ZXh0PUI7ZG9j +dW1lbnQuaGVhZC5hcHBlbmRDaGlsZChBKTtkb2N1bWVudC5oZWFkLnJlbW92ZUNo +aWxkKEEpO31yZXR1cm4gQjt9TmF0aXZlLlVJRD0xO3ZhciAkdWlkPShCcm93c2Vy +LkVuZ2luZS50cmlkZW50KT9mdW5jdGlvbihBKXtyZXR1cm4oQS51aWR8fChBLnVp +ZD1bTmF0aXZlLlVJRCsrXSkpWzBdOwp9OmZ1bmN0aW9uKEEpe3JldHVybiBBLnVp +ZHx8KEEudWlkPU5hdGl2ZS5VSUQrKyk7fTt2YXIgV2luZG93PW5ldyBOYXRpdmUo +e25hbWU6IldpbmRvdyIsbGVnYWN5OihCcm93c2VyLkVuZ2luZS50cmlkZW50KT9u +dWxsOndpbmRvdy5XaW5kb3csaW5pdGlhbGl6ZTpmdW5jdGlvbihBKXskdWlkKEEp +OwppZighQS5FbGVtZW50KXtBLkVsZW1lbnQ9JGVtcHR5O2lmKEJyb3dzZXIuRW5n +aW5lLndlYmtpdCl7QS5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTt9 +QS5FbGVtZW50LnByb3RvdHlwZT0oQnJvd3Nlci5FbmdpbmUud2Via2l0KT93aW5k +b3dbIltbRE9NRWxlbWVudC5wcm90b3R5cGVdXSJdOnt9Owp9cmV0dXJuICRleHRl +bmQoQSxXaW5kb3cuUHJvdG90eXBlKTt9LGFmdGVySW1wbGVtZW50OmZ1bmN0aW9u +KEIsQSl7d2luZG93W0JdPVdpbmRvdy5Qcm90b3R5cGVbQl09QTt9fSk7V2luZG93 +LlByb3RvdHlwZT17JGZhbWlseTp7bmFtZToid2luZG93In19O25ldyBXaW5kb3co +d2luZG93KTsKdmFyIERvY3VtZW50PW5ldyBOYXRpdmUoe25hbWU6IkRvY3VtZW50 +IixsZWdhY3k6KEJyb3dzZXIuRW5naW5lLnRyaWRlbnQpP251bGw6d2luZG93LkRv +Y3VtZW50LGluaXRpYWxpemU6ZnVuY3Rpb24oQSl7JHVpZChBKTtBLmhlYWQ9QS5n +ZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdOwpBLmh0bWw9QS5nZXRFbGVt +ZW50c0J5VGFnTmFtZSgiaHRtbCIpWzBdO0Eud2luZG93PUEuZGVmYXVsdFZpZXd8 +fEEucGFyZW50V2luZG93O2lmKEJyb3dzZXIuRW5naW5lLnRyaWRlbnQ0KXskdHJ5 +KGZ1bmN0aW9uKCl7QS5leGVjQ29tbWFuZCgiQmFja2dyb3VuZEltYWdlQ2FjaGUi +LGZhbHNlLHRydWUpOwp9KTt9cmV0dXJuICRleHRlbmQoQSxEb2N1bWVudC5Qcm90 +b3R5cGUpO30sYWZ0ZXJJbXBsZW1lbnQ6ZnVuY3Rpb24oQixBKXtkb2N1bWVudFtC +XT1Eb2N1bWVudC5Qcm90b3R5cGVbQl09QTt9fSk7RG9jdW1lbnQuUHJvdG90eXBl +PXskZmFtaWx5OntuYW1lOiJkb2N1bWVudCJ9fTsKbmV3IERvY3VtZW50KGRvY3Vt +ZW50KTtBcnJheS5pbXBsZW1lbnQoe2V2ZXJ5OmZ1bmN0aW9uKEMsRCl7Zm9yKHZh +ciBCPTAsQT10aGlzLmxlbmd0aDtCPEE7QisrKXtpZighQy5jYWxsKEQsdGhpc1tC +XSxCLHRoaXMpKXtyZXR1cm4gZmFsc2U7fX1yZXR1cm4gdHJ1ZTsKfSxmaWx0ZXI6 +ZnVuY3Rpb24oRCxFKXt2YXIgQz1bXTtmb3IodmFyIEI9MCxBPXRoaXMubGVuZ3Ro +O0I8QTtCKyspe2lmKEQuY2FsbChFLHRoaXNbQl0sQix0aGlzKSl7Qy5wdXNoKHRo +aXNbQl0pO319cmV0dXJuIEM7fSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiB0aGlz +LmZpbHRlcigkZGVmaW5lZCk7Cn0saW5kZXhPZjpmdW5jdGlvbihDLEQpe3ZhciBB +PXRoaXMubGVuZ3RoO2Zvcih2YXIgQj0oRDwwKT9NYXRoLm1heCgwLEErRCk6RHx8 +MDtCPEE7QisrKXtpZih0aGlzW0JdPT09Qyl7cmV0dXJuIEI7fX1yZXR1cm4gLTE7 +fSxtYXA6ZnVuY3Rpb24oRCxFKXt2YXIgQz1bXTsKZm9yKHZhciBCPTAsQT10aGlz +Lmxlbmd0aDtCPEE7QisrKXtDW0JdPUQuY2FsbChFLHRoaXNbQl0sQix0aGlzKTt9 +cmV0dXJuIEM7fSxzb21lOmZ1bmN0aW9uKEMsRCl7Zm9yKHZhciBCPTAsQT10aGlz +Lmxlbmd0aDtCPEE7QisrKXtpZihDLmNhbGwoRCx0aGlzW0JdLEIsdGhpcykpe3Jl +dHVybiB0cnVlOwp9fXJldHVybiBmYWxzZTt9LGFzc29jaWF0ZTpmdW5jdGlvbihD +KXt2YXIgRD17fSxCPU1hdGgubWluKHRoaXMubGVuZ3RoLEMubGVuZ3RoKTtmb3Io +dmFyIEE9MDtBPEI7QSsrKXtEW0NbQV1dPXRoaXNbQV07fXJldHVybiBEO30sbGlu +azpmdW5jdGlvbihDKXt2YXIgQT17fTsKZm9yKHZhciBFPTAsQj10aGlzLmxlbmd0 +aDtFPEI7RSsrKXtmb3IodmFyIEQgaW4gQyl7aWYoQ1tEXSh0aGlzW0VdKSl7QVtE +XT10aGlzW0VdO2RlbGV0ZSBDW0RdO2JyZWFrO319fXJldHVybiBBO30sY29udGFp +bnM6ZnVuY3Rpb24oQSxCKXtyZXR1cm4gdGhpcy5pbmRleE9mKEEsQikhPS0xOwp9 +LGV4dGVuZDpmdW5jdGlvbihDKXtmb3IodmFyIEI9MCxBPUMubGVuZ3RoO0I8QTtC +Kyspe3RoaXMucHVzaChDW0JdKTt9cmV0dXJuIHRoaXM7fSxnZXRMYXN0OmZ1bmN0 +aW9uKCl7cmV0dXJuKHRoaXMubGVuZ3RoKT90aGlzW3RoaXMubGVuZ3RoLTFdOm51 +bGw7fSxnZXRSYW5kb206ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5sZW5ndGgpP3Ro +aXNbJHJhbmRvbSgwLHRoaXMubGVuZ3RoLTEpXTpudWxsOwp9LGluY2x1ZGU6ZnVu +Y3Rpb24oQSl7aWYoIXRoaXMuY29udGFpbnMoQSkpe3RoaXMucHVzaChBKTt9cmV0 +dXJuIHRoaXM7fSxjb21iaW5lOmZ1bmN0aW9uKEMpe2Zvcih2YXIgQj0wLEE9Qy5s +ZW5ndGg7QjxBO0IrKyl7dGhpcy5pbmNsdWRlKENbQl0pO31yZXR1cm4gdGhpczsK +fSxlcmFzZTpmdW5jdGlvbihCKXtmb3IodmFyIEE9dGhpcy5sZW5ndGg7QS0tO0Ep +e2lmKHRoaXNbQV09PT1CKXt0aGlzLnNwbGljZShBLDEpO319cmV0dXJuIHRoaXM7 +fSxlbXB0eTpmdW5jdGlvbigpe3RoaXMubGVuZ3RoPTA7cmV0dXJuIHRoaXM7fSxm +bGF0dGVuOmZ1bmN0aW9uKCl7dmFyIEQ9W107CmZvcih2YXIgQj0wLEE9dGhpcy5s +ZW5ndGg7QjxBO0IrKyl7dmFyIEM9JHR5cGUodGhpc1tCXSk7aWYoIUMpe2NvbnRp +bnVlO31EPUQuY29uY2F0KChDPT0iYXJyYXkifHxDPT0iY29sbGVjdGlvbiJ8fEM9 +PSJhcmd1bWVudHMiKT9BcnJheS5mbGF0dGVuKHRoaXNbQl0pOnRoaXNbQl0pOwp9 +cmV0dXJuIEQ7fSxoZXhUb1JnYjpmdW5jdGlvbihCKXtpZih0aGlzLmxlbmd0aCE9 +Myl7cmV0dXJuIG51bGw7fXZhciBBPXRoaXMubWFwKGZ1bmN0aW9uKEMpe2lmKEMu +bGVuZ3RoPT0xKXtDKz1DO31yZXR1cm4gQy50b0ludCgxNik7fSk7cmV0dXJuKEIp +P0E6InJnYigiK0ErIikiOwp9LHJnYlRvSGV4OmZ1bmN0aW9uKEQpe2lmKHRoaXMu +bGVuZ3RoPDMpe3JldHVybiBudWxsO31pZih0aGlzLmxlbmd0aD09NCYmdGhpc1sz +XT09MCYmIUQpe3JldHVybiJ0cmFuc3BhcmVudCI7fXZhciBCPVtdO2Zvcih2YXIg +QT0wO0E8MztBKyspe3ZhciBDPSh0aGlzW0FdLTApLnRvU3RyaW5nKDE2KTsKQi5w +dXNoKChDLmxlbmd0aD09MSk/IjAiK0M6Qyk7fXJldHVybihEKT9COiIjIitCLmpv +aW4oIiIpO319KTtGdW5jdGlvbi5pbXBsZW1lbnQoe2V4dGVuZDpmdW5jdGlvbihB +KXtmb3IodmFyIEIgaW4gQSl7dGhpc1tCXT1BW0JdO31yZXR1cm4gdGhpczt9LGNy +ZWF0ZTpmdW5jdGlvbihCKXt2YXIgQT10aGlzOwpCPUJ8fHt9O3JldHVybiBmdW5j +dGlvbihEKXt2YXIgQz1CLmFyZ3VtZW50cztDPShDIT11bmRlZmluZWQpPyRzcGxh +dChDKTpBcnJheS5zbGljZShhcmd1bWVudHMsKEIuZXZlbnQpPzE6MCk7aWYoQi5l +dmVudCl7Qz1bRHx8d2luZG93LmV2ZW50XS5leHRlbmQoQyk7Cn12YXIgRT1mdW5j +dGlvbigpe3JldHVybiBBLmFwcGx5KEIuYmluZHx8bnVsbCxDKTt9O2lmKEIuZGVs +YXkpe3JldHVybiBzZXRUaW1lb3V0KEUsQi5kZWxheSk7fWlmKEIucGVyaW9kaWNh +bCl7cmV0dXJuIHNldEludGVydmFsKEUsQi5wZXJpb2RpY2FsKTt9aWYoQi5hdHRl +bXB0KXtyZXR1cm4gJHRyeShFKTsKfXJldHVybiBFKCk7fTt9LHBhc3M6ZnVuY3Rp +b24oQSxCKXtyZXR1cm4gdGhpcy5jcmVhdGUoe2FyZ3VtZW50czpBLGJpbmQ6Qn0p +O30sYXR0ZW1wdDpmdW5jdGlvbihBLEIpe3JldHVybiB0aGlzLmNyZWF0ZSh7YXJn +dW1lbnRzOkEsYmluZDpCLGF0dGVtcHQ6dHJ1ZX0pKCk7Cn0sYmluZDpmdW5jdGlv +bihCLEEpe3JldHVybiB0aGlzLmNyZWF0ZSh7YmluZDpCLGFyZ3VtZW50czpBfSk7 +fSxiaW5kV2l0aEV2ZW50OmZ1bmN0aW9uKEIsQSl7cmV0dXJuIHRoaXMuY3JlYXRl +KHtiaW5kOkIsZXZlbnQ6dHJ1ZSxhcmd1bWVudHM6QX0pO30sZGVsYXk6ZnVuY3Rp +b24oQixDLEEpe3JldHVybiB0aGlzLmNyZWF0ZSh7ZGVsYXk6QixiaW5kOkMsYXJn +dW1lbnRzOkF9KSgpOwp9LHBlcmlvZGljYWw6ZnVuY3Rpb24oQSxDLEIpe3JldHVy +biB0aGlzLmNyZWF0ZSh7cGVyaW9kaWNhbDpBLGJpbmQ6Qyxhcmd1bWVudHM6Qn0p +KCk7fSxydW46ZnVuY3Rpb24oQSxCKXtyZXR1cm4gdGhpcy5hcHBseShCLCRzcGxh +dChBKSk7fX0pO051bWJlci5pbXBsZW1lbnQoe2xpbWl0OmZ1bmN0aW9uKEIsQSl7 +cmV0dXJuIE1hdGgubWluKEEsTWF0aC5tYXgoQix0aGlzKSk7Cn0scm91bmQ6ZnVu +Y3Rpb24oQSl7QT1NYXRoLnBvdygxMCxBfHwwKTtyZXR1cm4gTWF0aC5yb3VuZCh0 +aGlzKkEpL0E7fSx0aW1lczpmdW5jdGlvbihCLEMpe2Zvcih2YXIgQT0wO0E8dGhp +cztBKyspe0IuY2FsbChDLEEsdGhpcyk7fX0sdG9GbG9hdDpmdW5jdGlvbigpe3Jl +dHVybiBwYXJzZUZsb2F0KHRoaXMpOwp9LHRvSW50OmZ1bmN0aW9uKEEpe3JldHVy +biBwYXJzZUludCh0aGlzLEF8fDEwKTt9fSk7TnVtYmVyLmFsaWFzKCJ0aW1lcyIs +ImVhY2giKTsoZnVuY3Rpb24oQil7dmFyIEE9e307Qi5lYWNoKGZ1bmN0aW9uKEMp +e2lmKCFOdW1iZXJbQ10pe0FbQ109ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aFtDXS5h +cHBseShudWxsLFt0aGlzXS5jb25jYXQoJEEoYXJndW1lbnRzKSkpOwp9O319KTtO +dW1iZXIuaW1wbGVtZW50KEEpO30pKFsiYWJzIiwiYWNvcyIsImFzaW4iLCJhdGFu +IiwiYXRhbjIiLCJjZWlsIiwiY29zIiwiZXhwIiwiZmxvb3IiLCJsb2ciLCJtYXgi +LCJtaW4iLCJwb3ciLCJzaW4iLCJzcXJ0IiwidGFuIl0pO1N0cmluZy5pbXBsZW1l +bnQoe3Rlc3Q6ZnVuY3Rpb24oQSxCKXtyZXR1cm4oKHR5cGVvZiBBPT0ic3RyaW5n +Iik/bmV3IFJlZ0V4cChBLEIpOkEpLnRlc3QodGhpcyk7Cn0sY29udGFpbnM6ZnVu +Y3Rpb24oQSxCKXtyZXR1cm4oQik/KEIrdGhpcytCKS5pbmRleE9mKEIrQStCKT4t +MTp0aGlzLmluZGV4T2YoQSk+LTE7fSx0cmltOmZ1bmN0aW9uKCl7cmV0dXJuIHRo +aXMucmVwbGFjZSgvXlxzK3xccyskL2csIiIpO30sY2xlYW46ZnVuY3Rpb24oKXty +ZXR1cm4gdGhpcy5yZXBsYWNlKC9ccysvZywiICIpLnRyaW0oKTsKfSxjYW1lbENh +c2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXBsYWNlKC8tXEQvZyxmdW5jdGlv +bihBKXtyZXR1cm4gQS5jaGFyQXQoMSkudG9VcHBlckNhc2UoKTt9KTt9LGh5cGhl +bmF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlcGxhY2UoL1tBLVpdL2csZnVu +Y3Rpb24oQSl7cmV0dXJuKCItIitBLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpKTsK +fSk7fSxjYXBpdGFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVwbGFjZSgv +XGJbYS16XS9nLGZ1bmN0aW9uKEEpe3JldHVybiBBLnRvVXBwZXJDYXNlKCk7fSk7 +fSxlc2NhcGVSZWdFeHA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXBsYWNlKC8o +Wy0uKis/XiR7fSgpfFtcXVwvXFxdKS9nLCJcXCQxIik7Cn0sdG9JbnQ6ZnVuY3Rp +b24oQSl7cmV0dXJuIHBhcnNlSW50KHRoaXMsQXx8MTApO30sdG9GbG9hdDpmdW5j +dGlvbigpe3JldHVybiBwYXJzZUZsb2F0KHRoaXMpO30saGV4VG9SZ2I6ZnVuY3Rp +b24oQil7dmFyIEE9dGhpcy5tYXRjaCgvXiM/KFx3ezEsMn0pKFx3ezEsMn0pKFx3 +ezEsMn0pJC8pOwpyZXR1cm4oQSk/QS5zbGljZSgxKS5oZXhUb1JnYihCKTpudWxs +O30scmdiVG9IZXg6ZnVuY3Rpb24oQil7dmFyIEE9dGhpcy5tYXRjaCgvXGR7MSwz +fS9nKTtyZXR1cm4oQSk/QS5yZ2JUb0hleChCKTpudWxsO30sc3RyaXBTY3JpcHRz +OmZ1bmN0aW9uKEIpe3ZhciBBPSIiOwp2YXIgQz10aGlzLnJlcGxhY2UoLzxzY3Jp +cHRbXj5dKj4oW1xzXFNdKj8pPFwvc2NyaXB0Pi9naSxmdW5jdGlvbigpe0ErPWFy +Z3VtZW50c1sxXSsiXG4iO3JldHVybiIiO30pO2lmKEI9PT10cnVlKXskZXhlYyhB +KTt9ZWxzZXtpZigkdHlwZShCKT09ImZ1bmN0aW9uIil7QihBLEMpOwp9fXJldHVy +biBDO30sc3Vic3RpdHV0ZTpmdW5jdGlvbihBLEIpe3JldHVybiB0aGlzLnJlcGxh +Y2UoQnx8KC9cXD9ceyhbXn1dKylcfS9nKSxmdW5jdGlvbihELEMpe2lmKEQuY2hh +ckF0KDApPT0iXFwiKXtyZXR1cm4gRC5zbGljZSgxKTt9cmV0dXJuKEFbQ10hPXVu +ZGVmaW5lZCk/QVtDXToiIjsKfSk7fX0pO0hhc2guaW1wbGVtZW50KHtoYXM6T2Jq +ZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxrZXlPZjpmdW5jdGlvbihCKXtm +b3IodmFyIEEgaW4gdGhpcyl7aWYodGhpcy5oYXNPd25Qcm9wZXJ0eShBKSYmdGhp +c1tBXT09PUIpe3JldHVybiBBO319cmV0dXJuIG51bGw7Cn0saGFzVmFsdWU6ZnVu +Y3Rpb24oQSl7cmV0dXJuKEhhc2gua2V5T2YodGhpcyxBKSE9PW51bGwpO30sZXh0 +ZW5kOmZ1bmN0aW9uKEEpe0hhc2guZWFjaChBLGZ1bmN0aW9uKEMsQil7SGFzaC5z +ZXQodGhpcyxCLEMpO30sdGhpcyk7cmV0dXJuIHRoaXM7fSxjb21iaW5lOmZ1bmN0 +aW9uKEEpe0hhc2guZWFjaChBLGZ1bmN0aW9uKEMsQil7SGFzaC5pbmNsdWRlKHRo +aXMsQixDKTsKfSx0aGlzKTtyZXR1cm4gdGhpczt9LGVyYXNlOmZ1bmN0aW9uKEEp +e2lmKHRoaXMuaGFzT3duUHJvcGVydHkoQSkpe2RlbGV0ZSB0aGlzW0FdO31yZXR1 +cm4gdGhpczt9LGdldDpmdW5jdGlvbihBKXtyZXR1cm4odGhpcy5oYXNPd25Qcm9w +ZXJ0eShBKSk/dGhpc1tBXTpudWxsOwp9LHNldDpmdW5jdGlvbihBLEIpe2lmKCF0 +aGlzW0FdfHx0aGlzLmhhc093blByb3BlcnR5KEEpKXt0aGlzW0FdPUI7fXJldHVy +biB0aGlzO30sZW1wdHk6ZnVuY3Rpb24oKXtIYXNoLmVhY2godGhpcyxmdW5jdGlv +bihCLEEpe2RlbGV0ZSB0aGlzW0FdO30sdGhpcyk7CnJldHVybiB0aGlzO30saW5j +bHVkZTpmdW5jdGlvbihCLEMpe3ZhciBBPXRoaXNbQl07aWYoQT09dW5kZWZpbmVk +KXt0aGlzW0JdPUM7fXJldHVybiB0aGlzO30sbWFwOmZ1bmN0aW9uKEIsQyl7dmFy +IEE9bmV3IEhhc2g7SGFzaC5lYWNoKHRoaXMsZnVuY3Rpb24oRSxEKXtBLnNldChE +LEIuY2FsbChDLEUsRCx0aGlzKSk7Cn0sdGhpcyk7cmV0dXJuIEE7fSxmaWx0ZXI6 +ZnVuY3Rpb24oQixDKXt2YXIgQT1uZXcgSGFzaDtIYXNoLmVhY2godGhpcyxmdW5j +dGlvbihFLEQpe2lmKEIuY2FsbChDLEUsRCx0aGlzKSl7QS5zZXQoRCxFKTt9fSx0 +aGlzKTtyZXR1cm4gQTt9LGV2ZXJ5OmZ1bmN0aW9uKEIsQyl7Zm9yKHZhciBBIGlu +IHRoaXMpe2lmKHRoaXMuaGFzT3duUHJvcGVydHkoQSkmJiFCLmNhbGwoQyx0aGlz +W0FdLEEpKXtyZXR1cm4gZmFsc2U7Cn19cmV0dXJuIHRydWU7fSxzb21lOmZ1bmN0 +aW9uKEIsQyl7Zm9yKHZhciBBIGluIHRoaXMpe2lmKHRoaXMuaGFzT3duUHJvcGVy +dHkoQSkmJkIuY2FsbChDLHRoaXNbQV0sQSkpe3JldHVybiB0cnVlO319cmV0dXJu +IGZhbHNlO30sZ2V0S2V5czpmdW5jdGlvbigpe3ZhciBBPVtdOwpIYXNoLmVhY2go +dGhpcyxmdW5jdGlvbihDLEIpe0EucHVzaChCKTt9KTtyZXR1cm4gQTt9LGdldFZh +bHVlczpmdW5jdGlvbigpe3ZhciBBPVtdO0hhc2guZWFjaCh0aGlzLGZ1bmN0aW9u +KEIpe0EucHVzaChCKTt9KTtyZXR1cm4gQTt9LHRvUXVlcnlTdHJpbmc6ZnVuY3Rp +b24oQSl7dmFyIEI9W107Ckhhc2guZWFjaCh0aGlzLGZ1bmN0aW9uKEYsRSl7aWYo +QSl7RT1BKyJbIitFKyJdIjt9dmFyIEQ7c3dpdGNoKCR0eXBlKEYpKXtjYXNlIm9i +amVjdCI6RD1IYXNoLnRvUXVlcnlTdHJpbmcoRixFKTticmVhaztjYXNlImFycmF5 +Ijp2YXIgQz17fTtGLmVhY2goZnVuY3Rpb24oSCxHKXtDW0ddPUg7Cn0pO0Q9SGFz +aC50b1F1ZXJ5U3RyaW5nKEMsRSk7YnJlYWs7ZGVmYXVsdDpEPUUrIj0iK2VuY29k +ZVVSSUNvbXBvbmVudChGKTt9aWYoRiE9dW5kZWZpbmVkKXtCLnB1c2goRCk7fX0p +O3JldHVybiBCLmpvaW4oIiYiKTt9fSk7SGFzaC5hbGlhcyh7a2V5T2Y6ImluZGV4 +T2YiLGhhc1ZhbHVlOiJjb250YWlucyJ9KTsKdmFyIEV2ZW50PW5ldyBOYXRpdmUo +e25hbWU6IkV2ZW50Iixpbml0aWFsaXplOmZ1bmN0aW9uKEEsRil7Rj1GfHx3aW5k +b3c7dmFyIEs9Ri5kb2N1bWVudDtBPUF8fEYuZXZlbnQ7aWYoQS4kZXh0ZW5kZWQp +e3JldHVybiBBO310aGlzLiRleHRlbmRlZD10cnVlO3ZhciBKPUEudHlwZTsKdmFy +IEc9QS50YXJnZXR8fEEuc3JjRWxlbWVudDt3aGlsZShHJiZHLm5vZGVUeXBlPT0z +KXtHPUcucGFyZW50Tm9kZTt9aWYoSi50ZXN0KC9rZXkvKSl7dmFyIEI9QS53aGlj +aHx8QS5rZXlDb2RlO3ZhciBNPUV2ZW50LktleXMua2V5T2YoQik7aWYoSj09Imtl +eWRvd24iKXt2YXIgRD1CLTExMTsKaWYoRD4wJiZEPDEzKXtNPSJmIitEO319TT1N +fHxTdHJpbmcuZnJvbUNoYXJDb2RlKEIpLnRvTG93ZXJDYXNlKCk7fWVsc2V7aWYo +Si5tYXRjaCgvKGNsaWNrfG1vdXNlfG1lbnUpL2kpKXtLPSghSy5jb21wYXRNb2Rl +fHxLLmNvbXBhdE1vZGU9PSJDU1MxQ29tcGF0Iik/Sy5odG1sOksuYm9keTsKdmFy +IEk9e3g6QS5wYWdlWHx8QS5jbGllbnRYK0suc2Nyb2xsTGVmdCx5OkEucGFnZVl8 +fEEuY2xpZW50WStLLnNjcm9sbFRvcH07dmFyIEM9e3g6KEEucGFnZVgpP0EucGFn +ZVgtRi5wYWdlWE9mZnNldDpBLmNsaWVudFgseTooQS5wYWdlWSk/QS5wYWdlWS1G +LnBhZ2VZT2Zmc2V0OkEuY2xpZW50WX07CmlmKEoubWF0Y2goL0RPTU1vdXNlU2Ny +b2xsfG1vdXNld2hlZWwvKSl7dmFyIEg9KEEud2hlZWxEZWx0YSk/QS53aGVlbERl +bHRhLzEyMDotKEEuZGV0YWlsfHwwKS8zO312YXIgRT0oQS53aGljaD09Myl8fChB +LmJ1dHRvbj09Mik7dmFyIEw9bnVsbDtpZihKLm1hdGNoKC9vdmVyfG91dC8pKXtz +d2l0Y2goSil7Y2FzZSJtb3VzZW92ZXIiOkw9QS5yZWxhdGVkVGFyZ2V0fHxBLmZy +b21FbGVtZW50OwpicmVhaztjYXNlIm1vdXNlb3V0IjpMPUEucmVsYXRlZFRhcmdl +dHx8QS50b0VsZW1lbnQ7fWlmKCEoZnVuY3Rpb24oKXt3aGlsZShMJiZMLm5vZGVU +eXBlPT0zKXtMPUwucGFyZW50Tm9kZTt9cmV0dXJuIHRydWU7fSkuY3JlYXRlKHth +dHRlbXB0OkJyb3dzZXIuRW5naW5lLmdlY2tvfSkoKSl7TD1mYWxzZTsKfX19fXJl +dHVybiAkZXh0ZW5kKHRoaXMse2V2ZW50OkEsdHlwZTpKLHBhZ2U6SSxjbGllbnQ6 +QyxyaWdodENsaWNrOkUsd2hlZWw6SCxyZWxhdGVkVGFyZ2V0OkwsdGFyZ2V0Okcs +Y29kZTpCLGtleTpNLHNoaWZ0OkEuc2hpZnRLZXksY29udHJvbDpBLmN0cmxLZXks +YWx0OkEuYWx0S2V5LG1ldGE6QS5tZXRhS2V5fSk7Cn19KTtFdmVudC5LZXlzPW5l +dyBIYXNoKHtlbnRlcjoxMyx1cDozOCxkb3duOjQwLGxlZnQ6MzcscmlnaHQ6Mzks +ZXNjOjI3LHNwYWNlOjMyLGJhY2tzcGFjZTo4LHRhYjo5LCJkZWxldGUiOjQ2fSk7 +RXZlbnQuaW1wbGVtZW50KHtzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3Rv +cFByb3BhZ2F0aW9uKCkucHJldmVudERlZmF1bHQoKTsKfSxzdG9wUHJvcGFnYXRp +b246ZnVuY3Rpb24oKXtpZih0aGlzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbil7dGhp +cy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKTt9ZWxzZXt0aGlzLmV2ZW50LmNhbmNl +bEJ1YmJsZT10cnVlO31yZXR1cm4gdGhpczt9LHByZXZlbnREZWZhdWx0OmZ1bmN0 +aW9uKCl7aWYodGhpcy5ldmVudC5wcmV2ZW50RGVmYXVsdCl7dGhpcy5ldmVudC5w +cmV2ZW50RGVmYXVsdCgpOwp9ZWxzZXt0aGlzLmV2ZW50LnJldHVyblZhbHVlPWZh +bHNlO31yZXR1cm4gdGhpczt9fSk7dmFyIENsYXNzPW5ldyBOYXRpdmUoe25hbWU6 +IkNsYXNzIixpbml0aWFsaXplOmZ1bmN0aW9uKEIpe0I9Qnx8e307dmFyIEE9ZnVu +Y3Rpb24oRSl7Zm9yKHZhciBEIGluIHRoaXMpe3RoaXNbRF09JHVubGluayh0aGlz +W0RdKTsKfWZvcih2YXIgRiBpbiBDbGFzcy5NdXRhdG9ycyl7aWYoIXRoaXNbRl0p +e2NvbnRpbnVlO31DbGFzcy5NdXRhdG9yc1tGXSh0aGlzLHRoaXNbRl0pO2RlbGV0 +ZSB0aGlzW0ZdO310aGlzLmNvbnN0cnVjdG9yPUE7aWYoRT09PSRlbXB0eSl7cmV0 +dXJuIHRoaXM7fXZhciBDPSh0aGlzLmluaXRpYWxpemUpP3RoaXMuaW5pdGlhbGl6 +ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dGhpczsKaWYodGhpcy5vcHRpb25zJiZ0 +aGlzLm9wdGlvbnMuaW5pdGlhbGl6ZSl7dGhpcy5vcHRpb25zLmluaXRpYWxpemUu +Y2FsbCh0aGlzKTt9cmV0dXJuIEM7fTskZXh0ZW5kKEEsdGhpcyk7QS5jb25zdHJ1 +Y3Rvcj1DbGFzcztBLnByb3RvdHlwZT1CO3JldHVybiBBO319KTsKQ2xhc3MuaW1w +bGVtZW50KHtpbXBsZW1lbnQ6ZnVuY3Rpb24oKXtDbGFzcy5NdXRhdG9ycy5JbXBs +ZW1lbnRzKHRoaXMucHJvdG90eXBlLEFycmF5LnNsaWNlKGFyZ3VtZW50cykpO3Jl +dHVybiB0aGlzO319KTtDbGFzcy5NdXRhdG9ycz17SW1wbGVtZW50czpmdW5jdGlv +bihBLEIpeyRzcGxhdChCKS5lYWNoKGZ1bmN0aW9uKEMpeyRleHRlbmQoQSwoJHR5 +cGUoQyk9PSJjbGFzcyIpP25ldyBDKCRlbXB0eSk6Qyk7Cn0pO30sRXh0ZW5kczpm +dW5jdGlvbihzZWxmLGtsYXNzKXt2YXIgaW5zdGFuY2U9bmV3IGtsYXNzKCRlbXB0 +eSk7ZGVsZXRlIGluc3RhbmNlLnBhcmVudDtkZWxldGUgaW5zdGFuY2UucGFyZW50 +T2Y7Zm9yKHZhciBrZXkgaW4gaW5zdGFuY2Upe3ZhciBjdXJyZW50PXNlbGZba2V5 +XSxwcmV2aW91cz1pbnN0YW5jZVtrZXldOwppZihjdXJyZW50PT11bmRlZmluZWQp +e3NlbGZba2V5XT1wcmV2aW91cztjb250aW51ZTt9dmFyIGN0eXBlPSR0eXBlKGN1 +cnJlbnQpLHB0eXBlPSR0eXBlKHByZXZpb3VzKTtpZihjdHlwZSE9cHR5cGUpe2Nv +bnRpbnVlO31zd2l0Y2goY3R5cGUpe2Nhc2UiZnVuY3Rpb24iOmlmKCFhcmd1bWVu +dHMuY2FsbGVlLmNhbGxlcil7c2VsZltrZXldPWV2YWwoIigiK1N0cmluZyhjdXJy +ZW50KS5yZXBsYWNlKC9cYnRoaXNcLnBhcmVudFwoXHMqKFwpKT8vZyxmdW5jdGlv +bihmdWxsLGNsb3NlKXtyZXR1cm4iYXJndW1lbnRzLmNhbGxlZS5fcGFyZW50Xy5j +YWxsKHRoaXMiKyhjbG9zZXx8IiwgIik7Cn0pKyIpIik7fXNlbGZba2V5XS5fcGFy +ZW50Xz1wcmV2aW91czticmVhaztjYXNlIm9iamVjdCI6c2VsZltrZXldPSRtZXJn +ZShwcmV2aW91cyxjdXJyZW50KTt9fXNlbGYucGFyZW50PWZ1bmN0aW9uKCl7cmV0 +dXJuIGFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyLl9wYXJlbnRfLmFwcGx5KHRoaXMs +YXJndW1lbnRzKTsKfTtzZWxmLnBhcmVudE9mPWZ1bmN0aW9uKGRlc2NlbmRhbnQp +e3JldHVybiBkZXNjZW5kYW50Ll9wYXJlbnRfLmFwcGx5KHRoaXMsQXJyYXkuc2xp +Y2UoYXJndW1lbnRzLDEpKTt9O319O3ZhciBDaGFpbj1uZXcgQ2xhc3Moe2NoYWlu +OmZ1bmN0aW9uKCl7dGhpcy4kY2hhaW49KHRoaXMuJGNoYWlufHxbXSkuZXh0ZW5k +KGFyZ3VtZW50cyk7CnJldHVybiB0aGlzO30sY2FsbENoYWluOmZ1bmN0aW9uKCl7 +cmV0dXJuKHRoaXMuJGNoYWluJiZ0aGlzLiRjaGFpbi5sZW5ndGgpP3RoaXMuJGNo +YWluLnNoaWZ0KCkuYXBwbHkodGhpcyxhcmd1bWVudHMpOmZhbHNlO30sY2xlYXJD +aGFpbjpmdW5jdGlvbigpe2lmKHRoaXMuJGNoYWluKXt0aGlzLiRjaGFpbi5lbXB0 +eSgpOwp9cmV0dXJuIHRoaXM7fX0pO3ZhciBFdmVudHM9bmV3IENsYXNzKHthZGRF +dmVudDpmdW5jdGlvbihDLEIsQSl7Qz1FdmVudHMucmVtb3ZlT24oQyk7aWYoQiE9 +JGVtcHR5KXt0aGlzLiRldmVudHM9dGhpcy4kZXZlbnRzfHx7fTt0aGlzLiRldmVu +dHNbQ109dGhpcy4kZXZlbnRzW0NdfHxbXTsKdGhpcy4kZXZlbnRzW0NdLmluY2x1 +ZGUoQik7aWYoQSl7Qi5pbnRlcm5hbD10cnVlO319cmV0dXJuIHRoaXM7fSxhZGRF +dmVudHM6ZnVuY3Rpb24oQSl7Zm9yKHZhciBCIGluIEEpe3RoaXMuYWRkRXZlbnQo +QixBW0JdKTt9cmV0dXJuIHRoaXM7fSxmaXJlRXZlbnQ6ZnVuY3Rpb24oQyxCLEEp +e0M9RXZlbnRzLnJlbW92ZU9uKEMpOwppZighdGhpcy4kZXZlbnRzfHwhdGhpcy4k +ZXZlbnRzW0NdKXtyZXR1cm4gdGhpczt9dGhpcy4kZXZlbnRzW0NdLmVhY2goZnVu +Y3Rpb24oRCl7RC5jcmVhdGUoe2JpbmQ6dGhpcyxkZWxheTpBLCJhcmd1bWVudHMi +OkJ9KSgpO30sdGhpcyk7cmV0dXJuIHRoaXM7fSxyZW1vdmVFdmVudDpmdW5jdGlv +bihCLEEpe0I9RXZlbnRzLnJlbW92ZU9uKEIpOwppZighdGhpcy4kZXZlbnRzfHwh +dGhpcy4kZXZlbnRzW0JdKXtyZXR1cm4gdGhpczt9aWYoIUEuaW50ZXJuYWwpe3Ro +aXMuJGV2ZW50c1tCXS5lcmFzZShBKTt9cmV0dXJuIHRoaXM7fSxyZW1vdmVFdmVu +dHM6ZnVuY3Rpb24oQyl7Zm9yKHZhciBEIGluIHRoaXMuJGV2ZW50cyl7aWYoQyYm +QyE9RCl7Y29udGludWU7Cn12YXIgQj10aGlzLiRldmVudHNbRF07Zm9yKHZhciBB +PUIubGVuZ3RoO0EtLTtBKXt0aGlzLnJlbW92ZUV2ZW50KEQsQltBXSk7fX1yZXR1 +cm4gdGhpczt9fSk7RXZlbnRzLnJlbW92ZU9uPWZ1bmN0aW9uKEEpe3JldHVybiBB +LnJlcGxhY2UoL15vbihbQS1aXSkvLGZ1bmN0aW9uKEIsQyl7cmV0dXJuIEMudG9M +b3dlckNhc2UoKTsKfSk7fTt2YXIgT3B0aW9ucz1uZXcgQ2xhc3Moe3NldE9wdGlv +bnM6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnM9JG1lcmdlLnJ1bihbdGhpcy5vcHRp +b25zXS5leHRlbmQoYXJndW1lbnRzKSk7aWYoIXRoaXMuYWRkRXZlbnQpe3JldHVy +biB0aGlzO31mb3IodmFyIEEgaW4gdGhpcy5vcHRpb25zKXtpZigkdHlwZSh0aGlz +Lm9wdGlvbnNbQV0pIT0iZnVuY3Rpb24ifHwhKC9eb25bQS1aXS8pLnRlc3QoQSkp +e2NvbnRpbnVlOwp9dGhpcy5hZGRFdmVudChBLHRoaXMub3B0aW9uc1tBXSk7ZGVs +ZXRlIHRoaXMub3B0aW9uc1tBXTt9cmV0dXJuIHRoaXM7fX0pO0RvY3VtZW50Lmlt +cGxlbWVudCh7bmV3RWxlbWVudDpmdW5jdGlvbihBLEIpe2lmKEJyb3dzZXIuRW5n +aW5lLnRyaWRlbnQmJkIpe1sibmFtZSIsInR5cGUiLCJjaGVja2VkIl0uZWFjaChm +dW5jdGlvbihDKXtpZighQltDXSl7cmV0dXJuIDsKfUErPSIgIitDKyc9IicrQltD +XSsnIic7aWYoQyE9ImNoZWNrZWQiKXtkZWxldGUgQltDXTt9fSk7QT0iPCIrQSsi +PiI7fXJldHVybiAkLmVsZW1lbnQodGhpcy5jcmVhdGVFbGVtZW50KEEpKS5zZXQo +Qik7fSxuZXdUZXh0Tm9kZTpmdW5jdGlvbihBKXtyZXR1cm4gdGhpcy5jcmVhdGVU +ZXh0Tm9kZShBKTsKfSxnZXREb2N1bWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlz +O30sZ2V0V2luZG93OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdFZpZXd8 +fHRoaXMucGFyZW50V2luZG93O30scHVyZ2U6ZnVuY3Rpb24oKXt2YXIgQz10aGlz +LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7CmZvcih2YXIgQj0wLEE9Qy5sZW5n +dGg7QjxBO0IrKyl7QnJvd3Nlci5mcmVlTWVtKENbQl0pO319fSk7dmFyIEVsZW1l +bnQ9bmV3IE5hdGl2ZSh7bmFtZToiRWxlbWVudCIsbGVnYWN5OndpbmRvdy5FbGVt +ZW50LGluaXRpYWxpemU6ZnVuY3Rpb24oQSxCKXt2YXIgQz1FbGVtZW50LkNvbnN0 +cnVjdG9ycy5nZXQoQSk7CmlmKEMpe3JldHVybiBDKEIpO31pZih0eXBlb2YgQT09 +InN0cmluZyIpe3JldHVybiBkb2N1bWVudC5uZXdFbGVtZW50KEEsQik7fXJldHVy +biAkKEEpLnNldChCKTt9LGFmdGVySW1wbGVtZW50OmZ1bmN0aW9uKEEsQil7aWYo +IUFycmF5W0FdKXtFbGVtZW50cy5pbXBsZW1lbnQoQSxFbGVtZW50cy5tdWx0aShB +KSk7Cn1FbGVtZW50LlByb3RvdHlwZVtBXT1CO319KTtFbGVtZW50LlByb3RvdHlw +ZT17JGZhbWlseTp7bmFtZToiZWxlbWVudCJ9fTtFbGVtZW50LkNvbnN0cnVjdG9y +cz1uZXcgSGFzaDt2YXIgSUZyYW1lPW5ldyBOYXRpdmUoe25hbWU6IklGcmFtZSIs +Z2VuZXJpY3M6ZmFsc2UsaW5pdGlhbGl6ZTpmdW5jdGlvbigpe3ZhciBFPUFycmF5 +LmxpbmsoYXJndW1lbnRzLHtwcm9wZXJ0aWVzOk9iamVjdC50eXBlLGlmcmFtZTok +ZGVmaW5lZH0pOwp2YXIgQz1FLnByb3BlcnRpZXN8fHt9O3ZhciBCPSQoRS5pZnJh +bWUpfHxmYWxzZTt2YXIgRD1DLm9ubG9hZHx8JGVtcHR5O2RlbGV0ZSBDLm9ubG9h +ZDtDLmlkPUMubmFtZT0kcGljayhDLmlkLEMubmFtZSxCLmlkLEIubmFtZSwiSUZy +YW1lXyIrJHRpbWUoKSk7Qj1uZXcgRWxlbWVudChCfHwiaWZyYW1lIixDKTsKdmFy +IEE9ZnVuY3Rpb24oKXt2YXIgRj0kdHJ5KGZ1bmN0aW9uKCl7cmV0dXJuIEIuY29u +dGVudFdpbmRvdy5sb2NhdGlvbi5ob3N0O30pO2lmKEYmJkY9PXdpbmRvdy5sb2Nh +dGlvbi5ob3N0KXt2YXIgSD1uZXcgV2luZG93KEIuY29udGVudFdpbmRvdyk7dmFy +IEc9bmV3IERvY3VtZW50KEIuY29udGVudFdpbmRvdy5kb2N1bWVudCk7CiRleHRl +bmQoSC5FbGVtZW50LnByb3RvdHlwZSxFbGVtZW50LlByb3RvdHlwZSk7fUQuY2Fs +bChCLmNvbnRlbnRXaW5kb3csQi5jb250ZW50V2luZG93LmRvY3VtZW50KTt9Oygh +d2luZG93LmZyYW1lc1tDLmlkXSk/Qi5hZGRMaXN0ZW5lcigibG9hZCIsQSk6QSgp +O3JldHVybiBCOwp9fSk7dmFyIEVsZW1lbnRzPW5ldyBOYXRpdmUoe2luaXRpYWxp +emU6ZnVuY3Rpb24oRixCKXtCPSRleHRlbmQoe2RkdXA6dHJ1ZSxjYXNoOnRydWV9 +LEIpO0Y9Rnx8W107aWYoQi5kZHVwfHxCLmNhc2gpe3ZhciBHPXt9LEU9W107Zm9y +KHZhciBDPTAsQT1GLmxlbmd0aDsKQzxBO0MrKyl7dmFyIEQ9JC5lbGVtZW50KEZb +Q10sIUIuY2FzaCk7aWYoQi5kZHVwKXtpZihHW0QudWlkXSl7Y29udGludWU7fUdb +RC51aWRdPXRydWU7fUUucHVzaChEKTt9Rj1FO31yZXR1cm4oQi5jYXNoKT8kZXh0 +ZW5kKEYsdGhpcyk6Rjt9fSk7RWxlbWVudHMuaW1wbGVtZW50KHtmaWx0ZXI6ZnVu +Y3Rpb24oQSxCKXtpZighQSl7cmV0dXJuIHRoaXM7Cn1yZXR1cm4gbmV3IEVsZW1l +bnRzKEFycmF5LmZpbHRlcih0aGlzLCh0eXBlb2YgQT09InN0cmluZyIpP2Z1bmN0 +aW9uKEMpe3JldHVybiBDLm1hdGNoKEEpO306QSxCKSk7fX0pO0VsZW1lbnRzLm11 +bHRpPWZ1bmN0aW9uKEEpe3JldHVybiBmdW5jdGlvbigpe3ZhciBCPVtdOwp2YXIg +Rj10cnVlO2Zvcih2YXIgRD0wLEM9dGhpcy5sZW5ndGg7RDxDO0QrKyl7dmFyIEU9 +dGhpc1tEXVtBXS5hcHBseSh0aGlzW0RdLGFyZ3VtZW50cyk7Qi5wdXNoKEUpO2lm +KEYpe0Y9KCR0eXBlKEUpPT0iZWxlbWVudCIpO319cmV0dXJuKEYpP25ldyBFbGVt +ZW50cyhCKTpCOwp9O307V2luZG93LmltcGxlbWVudCh7JDpmdW5jdGlvbihCLEMp +e2lmKEImJkIuJGZhbWlseSYmQi51aWQpe3JldHVybiBCO312YXIgQT0kdHlwZShC +KTtyZXR1cm4oJFtBXSk/JFtBXShCLEMsdGhpcy5kb2N1bWVudCk6bnVsbDt9LCQk +OmZ1bmN0aW9uKEEpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PTEmJnR5cGVvZiBBPT0i +c3RyaW5nIil7cmV0dXJuIHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudHMoQSk7Cn12 +YXIgRj1bXTt2YXIgQz1BcnJheS5mbGF0dGVuKGFyZ3VtZW50cyk7Zm9yKHZhciBE +PTAsQj1DLmxlbmd0aDtEPEI7RCsrKXt2YXIgRT1DW0RdO3N3aXRjaCgkdHlwZShF +KSl7Y2FzZSJlbGVtZW50IjpFPVtFXTticmVhaztjYXNlInN0cmluZyI6RT10aGlz +LmRvY3VtZW50LmdldEVsZW1lbnRzKEUsdHJ1ZSk7CmJyZWFrO2RlZmF1bHQ6RT1m +YWxzZTt9aWYoRSl7Ri5leHRlbmQoRSk7fX1yZXR1cm4gbmV3IEVsZW1lbnRzKEYp +O30sZ2V0RG9jdW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb2N1bWVudDt9 +LGdldFdpbmRvdzpmdW5jdGlvbigpe3JldHVybiB0aGlzO319KTsKJC5zdHJpbmc9 +ZnVuY3Rpb24oQyxCLEEpe0M9QS5nZXRFbGVtZW50QnlJZChDKTtyZXR1cm4oQyk/ +JC5lbGVtZW50KEMsQik6bnVsbDt9OyQuZWxlbWVudD1mdW5jdGlvbihBLEQpeyR1 +aWQoQSk7aWYoIUQmJiFBLiRmYW1pbHkmJiEoL15vYmplY3R8ZW1iZWQkL2kpLnRl +c3QoQS50YWdOYW1lKSl7dmFyIEI9RWxlbWVudC5Qcm90b3R5cGU7CmZvcih2YXIg +QyBpbiBCKXtBW0NdPUJbQ107fX1yZXR1cm4gQTt9OyQub2JqZWN0PWZ1bmN0aW9u +KEIsQyxBKXtpZihCLnRvRWxlbWVudCl7cmV0dXJuICQuZWxlbWVudChCLnRvRWxl +bWVudChBKSxDKTt9cmV0dXJuIG51bGw7fTskLnRleHRub2RlPSQud2hpdGVzcGFj +ZT0kLndpbmRvdz0kLmRvY3VtZW50PSRhcmd1bWVudHMoMCk7Ck5hdGl2ZS5pbXBs +ZW1lbnQoW0VsZW1lbnQsRG9jdW1lbnRdLHtnZXRFbGVtZW50OmZ1bmN0aW9uKEEs +Qil7cmV0dXJuICQodGhpcy5nZXRFbGVtZW50cyhBLHRydWUpWzBdfHxudWxsLEIp +O30sZ2V0RWxlbWVudHM6ZnVuY3Rpb24oQSxEKXtBPUEuc3BsaXQoIiwiKTsKdmFy +IEM9W107dmFyIEI9KEEubGVuZ3RoPjEpO0EuZWFjaChmdW5jdGlvbihFKXt2YXIg +Rj10aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKEUudHJpbSgpKTsoQik/Qy5leHRl +bmQoRik6Qz1GO30sdGhpcyk7cmV0dXJuIG5ldyBFbGVtZW50cyhDLHtkZHVwOkIs +Y2FzaDohRH0pOwp9fSk7RWxlbWVudC5TdG9yYWdlPXtnZXQ6ZnVuY3Rpb24oQSl7 +cmV0dXJuKHRoaXNbQV18fCh0aGlzW0FdPXt9KSk7fX07RWxlbWVudC5JbnNlcnRl +cnM9bmV3IEhhc2goe2JlZm9yZTpmdW5jdGlvbihCLEEpe2lmKEEucGFyZW50Tm9k +ZSl7QS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShCLEEpOwp9fSxhZnRlcjpmdW5j +dGlvbihCLEEpe2lmKCFBLnBhcmVudE5vZGUpe3JldHVybiA7fXZhciBDPUEubmV4 +dFNpYmxpbmc7KEMpP0EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoQixDKTpBLnBh +cmVudE5vZGUuYXBwZW5kQ2hpbGQoQik7fSxib3R0b206ZnVuY3Rpb24oQixBKXtB +LmFwcGVuZENoaWxkKEIpOwp9LHRvcDpmdW5jdGlvbihCLEEpe3ZhciBDPUEuZmly +c3RDaGlsZDsoQyk/QS5pbnNlcnRCZWZvcmUoQixDKTpBLmFwcGVuZENoaWxkKEIp +O319KTtFbGVtZW50Lkluc2VydGVycy5pbnNpZGU9RWxlbWVudC5JbnNlcnRlcnMu +Ym90dG9tO0VsZW1lbnQuSW5zZXJ0ZXJzLmVhY2goZnVuY3Rpb24oQyxCKXt2YXIg +QT1CLmNhcGl0YWxpemUoKTsKRWxlbWVudC5pbXBsZW1lbnQoImluamVjdCIrQSxm +dW5jdGlvbihEKXtDKHRoaXMsJChELHRydWUpKTtyZXR1cm4gdGhpczt9KTtFbGVt +ZW50LmltcGxlbWVudCgiZ3JhYiIrQSxmdW5jdGlvbihEKXtDKCQoRCx0cnVlKSx0 +aGlzKTtyZXR1cm4gdGhpczt9KTt9KTtFbGVtZW50LmltcGxlbWVudCh7Z2V0RG9j +dW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50Owp9LGdl +dFdpbmRvdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuZ2V0 +V2luZG93KCk7fSxnZXRFbGVtZW50QnlJZDpmdW5jdGlvbihELEMpe3ZhciBCPXRo +aXMub3duZXJEb2N1bWVudC5nZXRFbGVtZW50QnlJZChEKTtpZighQil7cmV0dXJu +IG51bGw7Cn1mb3IodmFyIEE9Qi5wYXJlbnROb2RlO0EhPXRoaXM7QT1BLnBhcmVu +dE5vZGUpe2lmKCFBKXtyZXR1cm4gbnVsbDt9fXJldHVybiAkLmVsZW1lbnQoQixD +KTt9LHNldDpmdW5jdGlvbihELEIpe3N3aXRjaCgkdHlwZShEKSl7Y2FzZSJvYmpl +Y3QiOmZvcih2YXIgQyBpbiBEKXt0aGlzLnNldChDLERbQ10pOwp9YnJlYWs7Y2Fz +ZSJzdHJpbmciOnZhciBBPUVsZW1lbnQuUHJvcGVydGllcy5nZXQoRCk7KEEmJkEu +c2V0KT9BLnNldC5hcHBseSh0aGlzLEFycmF5LnNsaWNlKGFyZ3VtZW50cywxKSk6 +dGhpcy5zZXRQcm9wZXJ0eShELEIpO31yZXR1cm4gdGhpczt9LGdldDpmdW5jdGlv +bihCKXt2YXIgQT1FbGVtZW50LlByb3BlcnRpZXMuZ2V0KEIpOwpyZXR1cm4oQSYm +QS5nZXQpP0EuZ2V0LmFwcGx5KHRoaXMsQXJyYXkuc2xpY2UoYXJndW1lbnRzLDEp +KTp0aGlzLmdldFByb3BlcnR5KEIpO30sZXJhc2U6ZnVuY3Rpb24oQil7dmFyIEE9 +RWxlbWVudC5Qcm9wZXJ0aWVzLmdldChCKTsoQSYmQS5lcmFzZSk/QS5lcmFzZS5h +cHBseSh0aGlzLEFycmF5LnNsaWNlKGFyZ3VtZW50cywxKSk6dGhpcy5yZW1vdmVQ +cm9wZXJ0eShCKTsKcmV0dXJuIHRoaXM7fSxtYXRjaDpmdW5jdGlvbihBKXtyZXR1 +cm4oIUF8fEVsZW1lbnQuZ2V0KHRoaXMsInRhZyIpPT1BKTt9LGluamVjdDpmdW5j +dGlvbihCLEEpe0VsZW1lbnQuSW5zZXJ0ZXJzLmdldChBfHwiYm90dG9tIikodGhp +cywkKEIsdHJ1ZSkpO3JldHVybiB0aGlzOwp9LHdyYXBzOmZ1bmN0aW9uKEIsQSl7 +Qj0kKEIsdHJ1ZSk7cmV0dXJuIHRoaXMucmVwbGFjZXMoQikuZ3JhYihCLEEpO30s +Z3JhYjpmdW5jdGlvbihCLEEpe0VsZW1lbnQuSW5zZXJ0ZXJzLmdldChBfHwiYm90 +dG9tIikoJChCLHRydWUpLHRoaXMpO3JldHVybiB0aGlzOwp9LGFwcGVuZFRleHQ6 +ZnVuY3Rpb24oQixBKXtyZXR1cm4gdGhpcy5ncmFiKHRoaXMuZ2V0RG9jdW1lbnQo +KS5uZXdUZXh0Tm9kZShCKSxBKTt9LGFkb3B0OmZ1bmN0aW9uKCl7QXJyYXkuZmxh +dHRlbihhcmd1bWVudHMpLmVhY2goZnVuY3Rpb24oQSl7QT0kKEEsdHJ1ZSk7Cmlm +KEEpe3RoaXMuYXBwZW5kQ2hpbGQoQSk7fX0sdGhpcyk7cmV0dXJuIHRoaXM7fSxk +aXNwb3NlOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucGFyZW50Tm9kZSk/dGhpcy5w +YXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMpOnRoaXM7fSxjbG9uZTpmdW5jdGlv +bihELEMpe3N3aXRjaCgkdHlwZSh0aGlzKSl7Y2FzZSJlbGVtZW50Ijp2YXIgSD17 +fTsKZm9yKHZhciBHPTAsRT10aGlzLmF0dHJpYnV0ZXMubGVuZ3RoO0c8RTtHKysp +e3ZhciBCPXRoaXMuYXR0cmlidXRlc1tHXSxMPUIubm9kZU5hbWUudG9Mb3dlckNh +c2UoKTtpZihCcm93c2VyLkVuZ2luZS50cmlkZW50JiYoL2lucHV0L2kpLnRlc3Qo +dGhpcy50YWdOYW1lKSYmKC93aWR0aHxoZWlnaHQvKS50ZXN0KEwpKXtjb250aW51 +ZTsKfXZhciBLPShMPT0ic3R5bGUiJiZ0aGlzLnN0eWxlKT90aGlzLnN0eWxlLmNz +c1RleHQ6Qi5ub2RlVmFsdWU7aWYoISRjaGsoSyl8fEw9PSJ1aWQifHwoTD09Imlk +IiYmIUMpKXtjb250aW51ZTt9aWYoSyE9ImluaGVyaXQiJiZbInN0cmluZyIsIm51 +bWJlciJdLmNvbnRhaW5zKCR0eXBlKEspKSl7SFtMXT1LOwp9fXZhciBKPW5ldyBF +bGVtZW50KHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxIKTtpZihEIT09ZmFs +c2Upe2Zvcih2YXIgST0wLEY9dGhpcy5jaGlsZE5vZGVzLmxlbmd0aDtJPEY7SSsr +KXt2YXIgQT1FbGVtZW50LmNsb25lKHRoaXMuY2hpbGROb2Rlc1tJXSx0cnVlLEMp +OwppZihBKXtKLmdyYWIoQSk7fX19cmV0dXJuIEo7Y2FzZSJ0ZXh0bm9kZSI6cmV0 +dXJuIGRvY3VtZW50Lm5ld1RleHROb2RlKHRoaXMubm9kZVZhbHVlKTt9cmV0dXJu +IG51bGw7fSxyZXBsYWNlczpmdW5jdGlvbihBKXtBPSQoQSx0cnVlKTtBLnBhcmVu +dE5vZGUucmVwbGFjZUNoaWxkKHRoaXMsQSk7CnJldHVybiB0aGlzO30saGFzQ2xh +c3M6ZnVuY3Rpb24oQSl7cmV0dXJuIHRoaXMuY2xhc3NOYW1lLmNvbnRhaW5zKEEs +IiAiKTt9LGFkZENsYXNzOmZ1bmN0aW9uKEEpe2lmKCF0aGlzLmhhc0NsYXNzKEEp +KXt0aGlzLmNsYXNzTmFtZT0odGhpcy5jbGFzc05hbWUrIiAiK0EpLmNsZWFuKCk7 +Cn1yZXR1cm4gdGhpczt9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKEEpe3RoaXMuY2xh +c3NOYW1lPXRoaXMuY2xhc3NOYW1lLnJlcGxhY2UobmV3IFJlZ0V4cCgiKF58XFxz +KSIrQSsiKD86XFxzfCQpIiksIiQxIikuY2xlYW4oKTtyZXR1cm4gdGhpczt9LHRv +Z2dsZUNsYXNzOmZ1bmN0aW9uKEEpe3JldHVybiB0aGlzLmhhc0NsYXNzKEEpP3Ro +aXMucmVtb3ZlQ2xhc3MoQSk6dGhpcy5hZGRDbGFzcyhBKTsKfSxnZXRDb21wdXRl +ZFN0eWxlOmZ1bmN0aW9uKEIpe2lmKHRoaXMuY3VycmVudFN0eWxlKXtyZXR1cm4g +dGhpcy5jdXJyZW50U3R5bGVbQi5jYW1lbENhc2UoKV07fXZhciBBPXRoaXMuZ2V0 +V2luZG93KCkuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpO3JldHVybihBKT9B +LmdldFByb3BlcnR5VmFsdWUoW0IuaHlwaGVuYXRlKCldKTpudWxsOwp9LGVtcHR5 +OmZ1bmN0aW9uKCl7JEEodGhpcy5jaGlsZE5vZGVzKS5lYWNoKGZ1bmN0aW9uKEEp +e0Jyb3dzZXIuZnJlZU1lbShBKTtFbGVtZW50LmVtcHR5KEEpO0VsZW1lbnQuZGlz +cG9zZShBKTt9LHRoaXMpO3JldHVybiB0aGlzO30sZGVzdHJveTpmdW5jdGlvbigp +e0Jyb3dzZXIuZnJlZU1lbSh0aGlzLmVtcHR5KCkuZGlzcG9zZSgpKTsKcmV0dXJu +IG51bGw7fSxnZXRTZWxlY3RlZDpmdW5jdGlvbigpe3JldHVybiBuZXcgRWxlbWVu +dHMoJEEodGhpcy5vcHRpb25zKS5maWx0ZXIoZnVuY3Rpb24oQSl7cmV0dXJuIEEu +c2VsZWN0ZWQ7fSkpO30sdG9RdWVyeVN0cmluZzpmdW5jdGlvbigpe3ZhciBBPVtd +Owp0aGlzLmdldEVsZW1lbnRzKCJpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSIpLmVh +Y2goZnVuY3Rpb24oQil7aWYoIUIubmFtZXx8Qi5kaXNhYmxlZCl7cmV0dXJuIDt9 +dmFyIEM9KEIudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0ic2VsZWN0Iik/RWxlbWVu +dC5nZXRTZWxlY3RlZChCKS5tYXAoZnVuY3Rpb24oRCl7cmV0dXJuIEQudmFsdWU7 +Cn0pOigoQi50eXBlPT0icmFkaW8ifHxCLnR5cGU9PSJjaGVja2JveCIpJiYhQi5j +aGVja2VkKT9udWxsOkIudmFsdWU7JHNwbGF0KEMpLmVhY2goZnVuY3Rpb24oRCl7 +aWYoRCl7QS5wdXNoKEIubmFtZSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KEQpKTt9 +fSk7fSk7cmV0dXJuIEEuam9pbigiJiIpOwp9LGdldFByb3BlcnR5OmZ1bmN0aW9u +KEMpe3ZhciBCPUVsZW1lbnQuQXR0cmlidXRlcyxBPUIuUHJvcHNbQ107dmFyIEQ9 +KEEpP3RoaXNbQV06dGhpcy5nZXRBdHRyaWJ1dGUoQywyKTtyZXR1cm4oQi5Cb29s +c1tDXSk/ISFEOihBKT9EOkR8fG51bGw7fSxnZXRQcm9wZXJ0aWVzOmZ1bmN0aW9u +KCl7dmFyIEE9JEEoYXJndW1lbnRzKTsKcmV0dXJuIEEubWFwKGZ1bmN0aW9uKEIp +e3JldHVybiB0aGlzLmdldFByb3BlcnR5KEIpO30sdGhpcykuYXNzb2NpYXRlKEEp +O30sc2V0UHJvcGVydHk6ZnVuY3Rpb24oRCxFKXt2YXIgQz1FbGVtZW50LkF0dHJp +YnV0ZXMsQj1DLlByb3BzW0RdLEE9JGRlZmluZWQoRSk7CmlmKEImJkMuQm9vbHNb +RF0pe0U9KEV8fCFBKT90cnVlOmZhbHNlO31lbHNle2lmKCFBKXtyZXR1cm4gdGhp +cy5yZW1vdmVQcm9wZXJ0eShEKTt9fShCKT90aGlzW0JdPUU6dGhpcy5zZXRBdHRy +aWJ1dGUoRCxFKTtyZXR1cm4gdGhpczt9LHNldFByb3BlcnRpZXM6ZnVuY3Rpb24o +QSl7Zm9yKHZhciBCIGluIEEpe3RoaXMuc2V0UHJvcGVydHkoQixBW0JdKTsKfXJl +dHVybiB0aGlzO30scmVtb3ZlUHJvcGVydHk6ZnVuY3Rpb24oRCl7dmFyIEM9RWxl +bWVudC5BdHRyaWJ1dGVzLEI9Qy5Qcm9wc1tEXSxBPShCJiZDLkJvb2xzW0RdKTso +Qik/dGhpc1tCXT0oQSk/ZmFsc2U6IiI6dGhpcy5yZW1vdmVBdHRyaWJ1dGUoRCk7 +cmV0dXJuIHRoaXM7Cn0scmVtb3ZlUHJvcGVydGllczpmdW5jdGlvbigpe0FycmF5 +LmVhY2goYXJndW1lbnRzLHRoaXMucmVtb3ZlUHJvcGVydHksdGhpcyk7cmV0dXJu +IHRoaXM7fX0pOyhmdW5jdGlvbigpe3ZhciBBPWZ1bmN0aW9uKEQsQixJLEMsRixI +KXt2YXIgRT1EW0l8fEJdO3ZhciBHPVtdOwp3aGlsZShFKXtpZihFLm5vZGVUeXBl +PT0xJiYoIUN8fEVsZW1lbnQubWF0Y2goRSxDKSkpe0cucHVzaChFKTtpZighRil7 +YnJlYWs7fX1FPUVbQl07fXJldHVybihGKT9uZXcgRWxlbWVudHMoRyx7ZGR1cDpm +YWxzZSxjYXNoOiFIfSk6JChHWzBdLEgpO307RWxlbWVudC5pbXBsZW1lbnQoe2dl +dFByZXZpb3VzOmZ1bmN0aW9uKEIsQyl7cmV0dXJuIEEodGhpcywicHJldmlvdXNT +aWJsaW5nIixudWxsLEIsZmFsc2UsQyk7Cn0sZ2V0QWxsUHJldmlvdXM6ZnVuY3Rp +b24oQixDKXtyZXR1cm4gQSh0aGlzLCJwcmV2aW91c1NpYmxpbmciLG51bGwsQix0 +cnVlLEMpO30sZ2V0TmV4dDpmdW5jdGlvbihCLEMpe3JldHVybiBBKHRoaXMsIm5l +eHRTaWJsaW5nIixudWxsLEIsZmFsc2UsQyk7fSxnZXRBbGxOZXh0OmZ1bmN0aW9u +KEIsQyl7cmV0dXJuIEEodGhpcywibmV4dFNpYmxpbmciLG51bGwsQix0cnVlLEMp +Owp9LGdldEZpcnN0OmZ1bmN0aW9uKEIsQyl7cmV0dXJuIEEodGhpcywibmV4dFNp +YmxpbmciLCJmaXJzdENoaWxkIixCLGZhbHNlLEMpO30sZ2V0TGFzdDpmdW5jdGlv +bihCLEMpe3JldHVybiBBKHRoaXMsInByZXZpb3VzU2libGluZyIsImxhc3RDaGls +ZCIsQixmYWxzZSxDKTsKfSxnZXRQYXJlbnQ6ZnVuY3Rpb24oQixDKXtyZXR1cm4g +QSh0aGlzLCJwYXJlbnROb2RlIixudWxsLEIsZmFsc2UsQyk7fSxnZXRQYXJlbnRz +OmZ1bmN0aW9uKEIsQyl7cmV0dXJuIEEodGhpcywicGFyZW50Tm9kZSIsbnVsbCxC +LHRydWUsQyk7fSxnZXRDaGlsZHJlbjpmdW5jdGlvbihCLEMpe3JldHVybiBBKHRo +aXMsIm5leHRTaWJsaW5nIiwiZmlyc3RDaGlsZCIsQix0cnVlLEMpOwp9LGhhc0No +aWxkOmZ1bmN0aW9uKEIpe0I9JChCLHRydWUpO3JldHVybighIUImJiRBKHRoaXMu +Z2V0RWxlbWVudHNCeVRhZ05hbWUoQi50YWdOYW1lKSkuY29udGFpbnMoQikpO319 +KTt9KSgpO0VsZW1lbnQuUHJvcGVydGllcz1uZXcgSGFzaDtFbGVtZW50LlByb3Bl +cnRpZXMuc3R5bGU9e3NldDpmdW5jdGlvbihBKXt0aGlzLnN0eWxlLmNzc1RleHQ9 +QTsKfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHlsZS5jc3NUZXh0O30s +ZXJhc2U6ZnVuY3Rpb24oKXt0aGlzLnN0eWxlLmNzc1RleHQ9IiI7fX07RWxlbWVu +dC5Qcm9wZXJ0aWVzLnRhZz17Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFn +TmFtZS50b0xvd2VyQ2FzZSgpOwp9fTtFbGVtZW50LlByb3BlcnRpZXMuaHJlZj17 +Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuKCF0aGlzLmhyZWYpP251bGw6dGhpcy5ocmVm +LnJlcGxhY2UobmV3IFJlZ0V4cCgiXiIrZG9jdW1lbnQubG9jYXRpb24ucHJvdG9j +b2wrIi8vIitkb2N1bWVudC5sb2NhdGlvbi5ob3N0KSwiIik7Cn19O0VsZW1lbnQu +UHJvcGVydGllcy5odG1sPXtzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbm5l +ckhUTUw9QXJyYXkuZmxhdHRlbihhcmd1bWVudHMpLmpvaW4oIiIpO319O05hdGl2 +ZS5pbXBsZW1lbnQoW0VsZW1lbnQsV2luZG93LERvY3VtZW50XSx7YWRkTGlzdGVu +ZXI6ZnVuY3Rpb24oQixBKXtpZih0aGlzLmFkZEV2ZW50TGlzdGVuZXIpe3RoaXMu +YWRkRXZlbnRMaXN0ZW5lcihCLEEsZmFsc2UpOwp9ZWxzZXt0aGlzLmF0dGFjaEV2 +ZW50KCJvbiIrQixBKTt9cmV0dXJuIHRoaXM7fSxyZW1vdmVMaXN0ZW5lcjpmdW5j +dGlvbihCLEEpe2lmKHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcil7dGhpcy5yZW1v +dmVFdmVudExpc3RlbmVyKEIsQSxmYWxzZSk7fWVsc2V7dGhpcy5kZXRhY2hFdmVu +dCgib24iK0IsQSk7Cn1yZXR1cm4gdGhpczt9LHJldHJpZXZlOmZ1bmN0aW9uKEIs +QSl7dmFyIEQ9RWxlbWVudC5TdG9yYWdlLmdldCh0aGlzLnVpZCk7dmFyIEM9RFtC +XTtpZigkZGVmaW5lZChBKSYmISRkZWZpbmVkKEMpKXtDPURbQl09QTt9cmV0dXJu +ICRwaWNrKEMpO30sc3RvcmU6ZnVuY3Rpb24oQixBKXt2YXIgQz1FbGVtZW50LlN0 +b3JhZ2UuZ2V0KHRoaXMudWlkKTsKQ1tCXT1BO3JldHVybiB0aGlzO30sZWxpbWlu +YXRlOmZ1bmN0aW9uKEEpe3ZhciBCPUVsZW1lbnQuU3RvcmFnZS5nZXQodGhpcy51 +aWQpO2RlbGV0ZSBCW0FdO3JldHVybiB0aGlzO319KTtFbGVtZW50LkF0dHJpYnV0 +ZXM9bmV3IEhhc2goe1Byb3BzOntodG1sOiJpbm5lckhUTUwiLCJjbGFzcyI6ImNs +YXNzTmFtZSIsImZvciI6Imh0bWxGb3IiLHRleHQ6KEJyb3dzZXIuRW5naW5lLnRy +aWRlbnQpPyJpbm5lclRleHQiOiJ0ZXh0Q29udGVudCJ9LEJvb2xzOlsiY29tcGFj +dCIsIm5vd3JhcCIsImlzbWFwIiwiZGVjbGFyZSIsIm5vc2hhZGUiLCJjaGVja2Vk +IiwiZGlzYWJsZWQiLCJyZWFkb25seSIsIm11bHRpcGxlIiwic2VsZWN0ZWQiLCJu +b3Jlc2l6ZSIsImRlZmVyIl0sQ2FtZWxzOlsidmFsdWUiLCJhY2Nlc3NLZXkiLCJj +ZWxsUGFkZGluZyIsImNlbGxTcGFjaW5nIiwiY29sU3BhbiIsImZyYW1lQm9yZGVy +IiwibWF4TGVuZ3RoIiwicmVhZE9ubHkiLCJyb3dTcGFuIiwidGFiSW5kZXgiLCJ1 +c2VNYXAiXX0pOwpCcm93c2VyLmZyZWVNZW09ZnVuY3Rpb24oQSl7aWYoIUEpe3Jl +dHVybiA7fWlmKEJyb3dzZXIuRW5naW5lLnRyaWRlbnQmJigvb2JqZWN0L2kpLnRl +c3QoQS50YWdOYW1lKSl7Zm9yKHZhciBCIGluIEEpe2lmKHR5cGVvZiBBW0JdPT0i +ZnVuY3Rpb24iKXtBW0JdPSRlbXB0eTsKfX1FbGVtZW50LmRpc3Bvc2UoQSk7fWlm +KEEudWlkJiZBLnJlbW92ZUV2ZW50cyl7QS5yZW1vdmVFdmVudHMoKTt9fTsoZnVu +Y3Rpb24oQil7dmFyIEM9Qi5Cb29scyxBPUIuQ2FtZWxzO0IuQm9vbHM9Qz1DLmFz +c29jaWF0ZShDKTtIYXNoLmV4dGVuZChIYXNoLmNvbWJpbmUoQi5Qcm9wcyxDKSxB +LmFzc29jaWF0ZShBLm1hcChmdW5jdGlvbihEKXtyZXR1cm4gRC50b0xvd2VyQ2Fz +ZSgpOwp9KSkpO0IuZXJhc2UoIkNhbWVscyIpO30pKEVsZW1lbnQuQXR0cmlidXRl +cyk7d2luZG93LmFkZExpc3RlbmVyKCJ1bmxvYWQiLGZ1bmN0aW9uKCl7d2luZG93 +LnJlbW92ZUxpc3RlbmVyKCJ1bmxvYWQiLGFyZ3VtZW50cy5jYWxsZWUpO2RvY3Vt +ZW50LnB1cmdlKCk7CmlmKEJyb3dzZXIuRW5naW5lLnRyaWRlbnQpe0NvbGxlY3RH +YXJiYWdlKCk7fX0pO0VsZW1lbnQuUHJvcGVydGllcy5ldmVudHM9e3NldDpmdW5j +dGlvbihBKXt0aGlzLmFkZEV2ZW50cyhBKTt9fTtOYXRpdmUuaW1wbGVtZW50KFtF +bGVtZW50LFdpbmRvdyxEb2N1bWVudF0se2FkZEV2ZW50OmZ1bmN0aW9uKEUsRyl7 +dmFyIEg9dGhpcy5yZXRyaWV2ZSgiZXZlbnRzIix7fSk7CkhbRV09SFtFXXx8e2tl +eXM6W10sdmFsdWVzOltdfTtpZihIW0VdLmtleXMuY29udGFpbnMoRykpe3JldHVy +biB0aGlzO31IW0VdLmtleXMucHVzaChHKTt2YXIgRj1FLEE9RWxlbWVudC5FdmVu +dHMuZ2V0KEUpLEM9RyxJPXRoaXM7aWYoQSl7aWYoQS5vbkFkZCl7QS5vbkFkZC5j +YWxsKHRoaXMsRyk7Cn1pZihBLmNvbmRpdGlvbil7Qz1mdW5jdGlvbihKKXtpZihB +LmNvbmRpdGlvbi5jYWxsKHRoaXMsSikpe3JldHVybiBHLmNhbGwodGhpcyxKKTt9 +cmV0dXJuIGZhbHNlO307fUY9QS5iYXNlfHxGO312YXIgRD1mdW5jdGlvbigpe3Jl +dHVybiBHLmNhbGwoSSk7fTt2YXIgQj1FbGVtZW50Lk5hdGl2ZUV2ZW50c1tGXXx8 +MDsKaWYoQil7aWYoQj09Mil7RD1mdW5jdGlvbihKKXtKPW5ldyBFdmVudChKLEku +Z2V0V2luZG93KCkpO2lmKEMuY2FsbChJLEopPT09ZmFsc2Upe0ouc3RvcCgpO319 +O310aGlzLmFkZExpc3RlbmVyKEYsRCk7fUhbRV0udmFsdWVzLnB1c2goRCk7cmV0 +dXJuIHRoaXM7fSxyZW1vdmVFdmVudDpmdW5jdGlvbihELEMpe3ZhciBCPXRoaXMu +cmV0cmlldmUoImV2ZW50cyIpOwppZighQnx8IUJbRF0pe3JldHVybiB0aGlzO312 +YXIgRz1CW0RdLmtleXMuaW5kZXhPZihDKTtpZihHPT0tMSl7cmV0dXJuIHRoaXM7 +fXZhciBBPUJbRF0ua2V5cy5zcGxpY2UoRywxKVswXTt2YXIgRj1CW0RdLnZhbHVl +cy5zcGxpY2UoRywxKVswXTt2YXIgRT1FbGVtZW50LkV2ZW50cy5nZXQoRCk7Cmlm +KEUpe2lmKEUub25SZW1vdmUpe0Uub25SZW1vdmUuY2FsbCh0aGlzLEMpO31EPUUu +YmFzZXx8RDt9cmV0dXJuKEVsZW1lbnQuTmF0aXZlRXZlbnRzW0RdKT90aGlzLnJl +bW92ZUxpc3RlbmVyKEQsRik6dGhpczt9LGFkZEV2ZW50czpmdW5jdGlvbihBKXtm +b3IodmFyIEIgaW4gQSl7dGhpcy5hZGRFdmVudChCLEFbQl0pOwp9cmV0dXJuIHRo +aXM7fSxyZW1vdmVFdmVudHM6ZnVuY3Rpb24oQil7dmFyIEE9dGhpcy5yZXRyaWV2 +ZSgiZXZlbnRzIik7aWYoIUEpe3JldHVybiB0aGlzO31pZighQil7Zm9yKHZhciBD +IGluIEEpe3RoaXMucmVtb3ZlRXZlbnRzKEMpO31BPW51bGw7fWVsc2V7aWYoQVtC +XSl7d2hpbGUoQVtCXS5rZXlzWzBdKXt0aGlzLnJlbW92ZUV2ZW50KEIsQVtCXS5r +ZXlzWzBdKTsKfUFbQl09bnVsbDt9fXJldHVybiB0aGlzO30sZmlyZUV2ZW50OmZ1 +bmN0aW9uKEQsQixBKXt2YXIgQz10aGlzLnJldHJpZXZlKCJldmVudHMiKTtpZigh +Q3x8IUNbRF0pe3JldHVybiB0aGlzO31DW0RdLmtleXMuZWFjaChmdW5jdGlvbihF +KXtFLmNyZWF0ZSh7YmluZDp0aGlzLGRlbGF5OkEsImFyZ3VtZW50cyI6Qn0pKCk7 +Cn0sdGhpcyk7cmV0dXJuIHRoaXM7fSxjbG9uZUV2ZW50czpmdW5jdGlvbihELEEp +e0Q9JChEKTt2YXIgQz1ELnJldHJpZXZlKCJldmVudHMiKTtpZighQyl7cmV0dXJu +IHRoaXM7fWlmKCFBKXtmb3IodmFyIEIgaW4gQyl7dGhpcy5jbG9uZUV2ZW50cyhE +LEIpO319ZWxzZXtpZihDW0FdKXtDW0FdLmtleXMuZWFjaChmdW5jdGlvbihFKXt0 +aGlzLmFkZEV2ZW50KEEsRSk7Cn0sdGhpcyk7fX1yZXR1cm4gdGhpczt9fSk7RWxl +bWVudC5OYXRpdmVFdmVudHM9e2NsaWNrOjIsZGJsY2xpY2s6Mixtb3VzZXVwOjIs +bW91c2Vkb3duOjIsY29udGV4dG1lbnU6Mixtb3VzZXdoZWVsOjIsRE9NTW91c2VT +Y3JvbGw6Mixtb3VzZW92ZXI6Mixtb3VzZW91dDoyLG1vdXNlbW92ZToyLHNlbGVj +dHN0YXJ0OjIsc2VsZWN0ZW5kOjIsa2V5ZG93bjoyLGtleXByZXNzOjIsa2V5dXA6 +Mixmb2N1czoyLGJsdXI6MixjaGFuZ2U6MixyZXNldDoyLHNlbGVjdDoyLHN1Ym1p +dDoyLGxvYWQ6MSx1bmxvYWQ6MSxiZWZvcmV1bmxvYWQ6MixyZXNpemU6MSxtb3Zl +OjEsRE9NQ29udGVudExvYWRlZDoxLHJlYWR5c3RhdGVjaGFuZ2U6MSxlcnJvcjox +LGFib3J0OjEsc2Nyb2xsOjF9OwooZnVuY3Rpb24oKXt2YXIgQT1mdW5jdGlvbihC +KXt2YXIgQz1CLnJlbGF0ZWRUYXJnZXQ7aWYoQz09dW5kZWZpbmVkKXtyZXR1cm4g +dHJ1ZTt9aWYoQz09PWZhbHNlKXtyZXR1cm4gZmFsc2U7fXJldHVybigkdHlwZSh0 +aGlzKSE9ImRvY3VtZW50IiYmQyE9dGhpcyYmQy5wcmVmaXghPSJ4dWwiJiYhdGhp +cy5oYXNDaGlsZChDKSk7Cn07RWxlbWVudC5FdmVudHM9bmV3IEhhc2goe21vdXNl +ZW50ZXI6e2Jhc2U6Im1vdXNlb3ZlciIsY29uZGl0aW9uOkF9LG1vdXNlbGVhdmU6 +e2Jhc2U6Im1vdXNlb3V0Iixjb25kaXRpb246QX0sbW91c2V3aGVlbDp7YmFzZToo +QnJvd3Nlci5FbmdpbmUuZ2Vja28pPyJET01Nb3VzZVNjcm9sbCI6Im1vdXNld2hl +ZWwifX0pOwp9KSgpO0VsZW1lbnQuUHJvcGVydGllcy5zdHlsZXM9e3NldDpmdW5j +dGlvbihBKXt0aGlzLnNldFN0eWxlcyhBKTt9fTtFbGVtZW50LlByb3BlcnRpZXMu +b3BhY2l0eT17c2V0OmZ1bmN0aW9uKEEsQil7aWYoIUIpe2lmKEE9PTApe2lmKHRo +aXMuc3R5bGUudmlzaWJpbGl0eSE9ImhpZGRlbiIpe3RoaXMuc3R5bGUudmlzaWJp +bGl0eT0iaGlkZGVuIjsKfX1lbHNle2lmKHRoaXMuc3R5bGUudmlzaWJpbGl0eSE9 +InZpc2libGUiKXt0aGlzLnN0eWxlLnZpc2liaWxpdHk9InZpc2libGUiO319fWlm +KCF0aGlzLmN1cnJlbnRTdHlsZXx8IXRoaXMuY3VycmVudFN0eWxlLmhhc0xheW91 +dCl7dGhpcy5zdHlsZS56b29tPTE7fWlmKEJyb3dzZXIuRW5naW5lLnRyaWRlbnQp +e3RoaXMuc3R5bGUuZmlsdGVyPShBPT0xKT8iIjoiYWxwaGEob3BhY2l0eT0iK0Eq +MTAwKyIpIjsKfXRoaXMuc3R5bGUub3BhY2l0eT1BO3RoaXMuc3RvcmUoIm9wYWNp +dHkiLEEpO30sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmV0cmlldmUoIm9w +YWNpdHkiLDEpO319O0VsZW1lbnQuaW1wbGVtZW50KHtzZXRPcGFjaXR5OmZ1bmN0 +aW9uKEEpe3JldHVybiB0aGlzLnNldCgib3BhY2l0eSIsQSx0cnVlKTsKfSxnZXRP +cGFjaXR5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0KCJvcGFjaXR5Iik7fSxz +ZXRTdHlsZTpmdW5jdGlvbihCLEEpe3N3aXRjaChCKXtjYXNlIm9wYWNpdHkiOnJl +dHVybiB0aGlzLnNldCgib3BhY2l0eSIscGFyc2VGbG9hdChBKSk7Y2FzZSJmbG9h +dCI6Qj0oQnJvd3Nlci5FbmdpbmUudHJpZGVudCk/InN0eWxlRmxvYXQiOiJjc3NG +bG9hdCI7Cn1CPUIuY2FtZWxDYXNlKCk7aWYoJHR5cGUoQSkhPSJzdHJpbmciKXt2 +YXIgQz0oRWxlbWVudC5TdHlsZXMuZ2V0KEIpfHwiQCIpLnNwbGl0KCIgIik7QT0k +c3BsYXQoQSkubWFwKGZ1bmN0aW9uKEUsRCl7aWYoIUNbRF0pe3JldHVybiIiO31y +ZXR1cm4oJHR5cGUoRSk9PSJudW1iZXIiKT9DW0RdLnJlcGxhY2UoIkAiLE1hdGgu +cm91bmQoRSkpOkU7Cn0pLmpvaW4oIiAiKTt9ZWxzZXtpZihBPT1TdHJpbmcoTnVt +YmVyKEEpKSl7QT1NYXRoLnJvdW5kKEEpO319dGhpcy5zdHlsZVtCXT1BO3JldHVy +biB0aGlzO30sZ2V0U3R5bGU6ZnVuY3Rpb24oRyl7c3dpdGNoKEcpe2Nhc2Uib3Bh +Y2l0eSI6cmV0dXJuIHRoaXMuZ2V0KCJvcGFjaXR5Iik7CmNhc2UiZmxvYXQiOkc9 +KEJyb3dzZXIuRW5naW5lLnRyaWRlbnQpPyJzdHlsZUZsb2F0IjoiY3NzRmxvYXQi +O31HPUcuY2FtZWxDYXNlKCk7dmFyIEE9dGhpcy5zdHlsZVtHXTtpZighJGNoayhB +KSl7QT1bXTtmb3IodmFyIEYgaW4gRWxlbWVudC5TaG9ydFN0eWxlcyl7aWYoRyE9 +Ril7Y29udGludWU7Cn1mb3IodmFyIEUgaW4gRWxlbWVudC5TaG9ydFN0eWxlc1tG +XSl7QS5wdXNoKHRoaXMuZ2V0U3R5bGUoRSkpO31yZXR1cm4gQS5qb2luKCIgIik7 +fUE9dGhpcy5nZXRDb21wdXRlZFN0eWxlKEcpO31pZihBKXtBPVN0cmluZyhBKTt2 +YXIgQz1BLm1hdGNoKC9yZ2JhP1woW1xkXHMsXStcKS8pOwppZihDKXtBPUEucmVw +bGFjZShDWzBdLENbMF0ucmdiVG9IZXgoKSk7fX1pZihCcm93c2VyLkVuZ2luZS5w +cmVzdG98fChCcm93c2VyLkVuZ2luZS50cmlkZW50JiYhJGNoayhwYXJzZUludChB +KSkpKXtpZihHLnRlc3QoL14oaGVpZ2h0fHdpZHRoKSQvKSl7dmFyIEI9KEc9PSJ3 +aWR0aCIpP1sibGVmdCIsInJpZ2h0Il06WyJ0b3AiLCJib3R0b20iXSxEPTA7CkIu +ZWFjaChmdW5jdGlvbihIKXtEKz10aGlzLmdldFN0eWxlKCJib3JkZXItIitIKyIt +d2lkdGgiKS50b0ludCgpK3RoaXMuZ2V0U3R5bGUoInBhZGRpbmctIitIKS50b0lu +dCgpO30sdGhpcyk7cmV0dXJuIHRoaXNbIm9mZnNldCIrRy5jYXBpdGFsaXplKCld +LUQrInB4IjsKfWlmKEJyb3dzZXIuRW5naW5lLnByZXN0byYmU3RyaW5nKEEpLnRl +c3QoInB4Iikpe3JldHVybiBBO31pZihHLnRlc3QoLyhib3JkZXIoLispV2lkdGh8 +bWFyZ2lufHBhZGRpbmcpLykpe3JldHVybiIwcHgiO319cmV0dXJuIEE7fSxzZXRT +dHlsZXM6ZnVuY3Rpb24oQil7Zm9yKHZhciBBIGluIEIpe3RoaXMuc2V0U3R5bGUo +QSxCW0FdKTsKfXJldHVybiB0aGlzO30sZ2V0U3R5bGVzOmZ1bmN0aW9uKCl7dmFy +IEE9e307QXJyYXkuZWFjaChhcmd1bWVudHMsZnVuY3Rpb24oQil7QVtCXT10aGlz +LmdldFN0eWxlKEIpO30sdGhpcyk7cmV0dXJuIEE7fX0pO0VsZW1lbnQuU3R5bGVz +PW5ldyBIYXNoKHtsZWZ0OiJAcHgiLHRvcDoiQHB4Iixib3R0b206IkBweCIscmln +aHQ6IkBweCIsd2lkdGg6IkBweCIsaGVpZ2h0OiJAcHgiLG1heFdpZHRoOiJAcHgi +LG1heEhlaWdodDoiQHB4IixtaW5XaWR0aDoiQHB4IixtaW5IZWlnaHQ6IkBweCIs +YmFja2dyb3VuZENvbG9yOiJyZ2IoQCwgQCwgQCkiLGJhY2tncm91bmRQb3NpdGlv +bjoiQHB4IEBweCIsY29sb3I6InJnYihALCBALCBAKSIsZm9udFNpemU6IkBweCIs +bGV0dGVyU3BhY2luZzoiQHB4IixsaW5lSGVpZ2h0OiJAcHgiLGNsaXA6InJlY3Qo +QHB4IEBweCBAcHggQHB4KSIsbWFyZ2luOiJAcHggQHB4IEBweCBAcHgiLHBhZGRp +bmc6IkBweCBAcHggQHB4IEBweCIsYm9yZGVyOiJAcHggQCByZ2IoQCwgQCwgQCkg +QHB4IEAgcmdiKEAsIEAsIEApIEBweCBAIHJnYihALCBALCBAKSIsYm9yZGVyV2lk +dGg6IkBweCBAcHggQHB4IEBweCIsYm9yZGVyU3R5bGU6IkAgQCBAIEAiLGJvcmRl +ckNvbG9yOiJyZ2IoQCwgQCwgQCkgcmdiKEAsIEAsIEApIHJnYihALCBALCBAKSBy +Z2IoQCwgQCwgQCkiLHpJbmRleDoiQCIsem9vbToiQCIsZm9udFdlaWdodDoiQCIs +dGV4dEluZGVudDoiQHB4IixvcGFjaXR5OiJAIn0pOwpFbGVtZW50LlNob3J0U3R5 +bGVzPXttYXJnaW46e30scGFkZGluZzp7fSxib3JkZXI6e30sYm9yZGVyV2lkdGg6 +e30sYm9yZGVyU3R5bGU6e30sYm9yZGVyQ29sb3I6e319O1siVG9wIiwiUmlnaHQi +LCJCb3R0b20iLCJMZWZ0Il0uZWFjaChmdW5jdGlvbihHKXt2YXIgRj1FbGVtZW50 +LlNob3J0U3R5bGVzOwp2YXIgQj1FbGVtZW50LlN0eWxlcztbIm1hcmdpbiIsInBh +ZGRpbmciXS5lYWNoKGZ1bmN0aW9uKEgpe3ZhciBJPUgrRztGW0hdW0ldPUJbSV09 +IkBweCI7fSk7dmFyIEU9ImJvcmRlciIrRztGLmJvcmRlcltFXT1CW0VdPSJAcHgg +QCByZ2IoQCwgQCwgQCkiO3ZhciBEPUUrIldpZHRoIixBPUUrIlN0eWxlIixDPUUr +IkNvbG9yIjsKRltFXT17fTtGLmJvcmRlcldpZHRoW0RdPUZbRV1bRF09QltEXT0i +QHB4IjtGLmJvcmRlclN0eWxlW0FdPUZbRV1bQV09QltBXT0iQCI7Ri5ib3JkZXJD +b2xvcltDXT1GW0VdW0NdPUJbQ109InJnYihALCBALCBAKSI7fSk7KGZ1bmN0aW9u +KCl7RWxlbWVudC5pbXBsZW1lbnQoe3Njcm9sbFRvOmZ1bmN0aW9uKEgsSSl7aWYo +Qih0aGlzKSl7dGhpcy5nZXRXaW5kb3coKS5zY3JvbGxUbyhILEkpOwp9ZWxzZXt0 +aGlzLnNjcm9sbExlZnQ9SDt0aGlzLnNjcm9sbFRvcD1JO31yZXR1cm4gdGhpczt9 +LGdldFNpemU6ZnVuY3Rpb24oKXtpZihCKHRoaXMpKXtyZXR1cm4gdGhpcy5nZXRX +aW5kb3coKS5nZXRTaXplKCk7fXJldHVybnt4OnRoaXMub2Zmc2V0V2lkdGgseTp0 +aGlzLm9mZnNldEhlaWdodH07Cn0sZ2V0U2Nyb2xsU2l6ZTpmdW5jdGlvbigpe2lm +KEIodGhpcykpe3JldHVybiB0aGlzLmdldFdpbmRvdygpLmdldFNjcm9sbFNpemUo +KTt9cmV0dXJue3g6dGhpcy5zY3JvbGxXaWR0aCx5OnRoaXMuc2Nyb2xsSGVpZ2h0 +fTt9LGdldFNjcm9sbDpmdW5jdGlvbigpe2lmKEIodGhpcykpe3JldHVybiB0aGlz +LmdldFdpbmRvdygpLmdldFNjcm9sbCgpOwp9cmV0dXJue3g6dGhpcy5zY3JvbGxM +ZWZ0LHk6dGhpcy5zY3JvbGxUb3B9O30sZ2V0U2Nyb2xsczpmdW5jdGlvbigpe3Zh +ciBJPXRoaXMsSD17eDowLHk6MH07d2hpbGUoSSYmIUIoSSkpe0gueCs9SS5zY3Jv +bGxMZWZ0O0gueSs9SS5zY3JvbGxUb3A7ST1JLnBhcmVudE5vZGU7Cn1yZXR1cm4g +SDt9LGdldE9mZnNldFBhcmVudDpmdW5jdGlvbigpe3ZhciBIPXRoaXM7aWYoQihI +KSl7cmV0dXJuIG51bGw7fWlmKCFCcm93c2VyLkVuZ2luZS50cmlkZW50KXtyZXR1 +cm4gSC5vZmZzZXRQYXJlbnQ7fXdoaWxlKChIPUgucGFyZW50Tm9kZSkmJiFCKEgp +KXtpZihEKEgsInBvc2l0aW9uIikhPSJzdGF0aWMiKXtyZXR1cm4gSDsKfX1yZXR1 +cm4gbnVsbDt9LGdldE9mZnNldHM6ZnVuY3Rpb24oKXt2YXIgST10aGlzLEg9e3g6 +MCx5OjB9O2lmKEIodGhpcykpe3JldHVybiBIO313aGlsZShJJiYhQihJKSl7SC54 +Kz1JLm9mZnNldExlZnQ7SC55Kz1JLm9mZnNldFRvcDtpZihCcm93c2VyLkVuZ2lu +ZS5nZWNrbyl7aWYoIUYoSSkpe0gueCs9QyhJKTsKSC55Kz1HKEkpO312YXIgSj1J +LnBhcmVudE5vZGU7aWYoSiYmRChKLCJvdmVyZmxvdyIpIT0idmlzaWJsZSIpe0gu +eCs9QyhKKTtILnkrPUcoSik7fX1lbHNle2lmKEkhPXRoaXMmJihCcm93c2VyLkVu +Z2luZS50cmlkZW50fHxCcm93c2VyLkVuZ2luZS53ZWJraXQpKXtILngrPUMoSSk7 +CkgueSs9RyhJKTt9fUk9SS5vZmZzZXRQYXJlbnQ7aWYoQnJvd3Nlci5FbmdpbmUu +dHJpZGVudCl7d2hpbGUoSSYmIUkuY3VycmVudFN0eWxlLmhhc0xheW91dCl7ST1J +Lm9mZnNldFBhcmVudDt9fX1pZihCcm93c2VyLkVuZ2luZS5nZWNrbyYmIUYodGhp +cykpe0gueC09Qyh0aGlzKTsKSC55LT1HKHRoaXMpO31yZXR1cm4gSDt9LGdldFBv +c2l0aW9uOmZ1bmN0aW9uKEspe2lmKEIodGhpcykpe3JldHVybnt4OjAseTowfTt9 +dmFyIEw9dGhpcy5nZXRPZmZzZXRzKCksST10aGlzLmdldFNjcm9sbHMoKTt2YXIg +SD17eDpMLngtSS54LHk6TC55LUkueX07dmFyIEo9KEsmJihLPSQoSykpKT9LLmdl +dFBvc2l0aW9uKCk6e3g6MCx5OjB9OwpyZXR1cm57eDpILngtSi54LHk6SC55LUou +eX07fSxnZXRDb29yZGluYXRlczpmdW5jdGlvbihKKXtpZihCKHRoaXMpKXtyZXR1 +cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRDb29yZGluYXRlcygpO312YXIgSD10aGlz +LmdldFBvc2l0aW9uKEopLEk9dGhpcy5nZXRTaXplKCk7CnZhciBLPXtsZWZ0Okgu +eCx0b3A6SC55LHdpZHRoOkkueCxoZWlnaHQ6SS55fTtLLnJpZ2h0PUsubGVmdCtL +LndpZHRoO0suYm90dG9tPUsudG9wK0suaGVpZ2h0O3JldHVybiBLO30sY29tcHV0 +ZVBvc2l0aW9uOmZ1bmN0aW9uKEgpe3JldHVybntsZWZ0OkgueC1FKHRoaXMsIm1h +cmdpbi1sZWZ0IiksdG9wOkgueS1FKHRoaXMsIm1hcmdpbi10b3AiKX07Cn0scG9z +aXRpb246ZnVuY3Rpb24oSCl7cmV0dXJuIHRoaXMuc2V0U3R5bGVzKHRoaXMuY29t +cHV0ZVBvc2l0aW9uKEgpKTt9fSk7TmF0aXZlLmltcGxlbWVudChbRG9jdW1lbnQs +V2luZG93XSx7Z2V0U2l6ZTpmdW5jdGlvbigpe3ZhciBJPXRoaXMuZ2V0V2luZG93 +KCk7CmlmKEJyb3dzZXIuRW5naW5lLnByZXN0b3x8QnJvd3Nlci5FbmdpbmUud2Vi +a2l0KXtyZXR1cm57eDpJLmlubmVyV2lkdGgseTpJLmlubmVySGVpZ2h0fTt9dmFy +IEg9QSh0aGlzKTtyZXR1cm57eDpILmNsaWVudFdpZHRoLHk6SC5jbGllbnRIZWln +aHR9O30sZ2V0U2Nyb2xsOmZ1bmN0aW9uKCl7dmFyIEk9dGhpcy5nZXRXaW5kb3co +KTsKdmFyIEg9QSh0aGlzKTtyZXR1cm57eDpJLnBhZ2VYT2Zmc2V0fHxILnNjcm9s +bExlZnQseTpJLnBhZ2VZT2Zmc2V0fHxILnNjcm9sbFRvcH07fSxnZXRTY3JvbGxT +aXplOmZ1bmN0aW9uKCl7dmFyIEk9QSh0aGlzKTt2YXIgSD10aGlzLmdldFNpemUo +KTtyZXR1cm57eDpNYXRoLm1heChJLnNjcm9sbFdpZHRoLEgueCkseTpNYXRoLm1h +eChJLnNjcm9sbEhlaWdodCxILnkpfTsKfSxnZXRQb3NpdGlvbjpmdW5jdGlvbigp +e3JldHVybnt4OjAseTowfTt9LGdldENvb3JkaW5hdGVzOmZ1bmN0aW9uKCl7dmFy +IEg9dGhpcy5nZXRTaXplKCk7cmV0dXJue3RvcDowLGxlZnQ6MCxib3R0b206SC55 +LHJpZ2h0OkgueCxoZWlnaHQ6SC55LHdpZHRoOkgueH07Cn19KTt2YXIgRD1FbGVt +ZW50LmdldENvbXB1dGVkU3R5bGU7ZnVuY3Rpb24gRShILEkpe3JldHVybiBEKEgs +SSkudG9JbnQoKXx8MDt9ZnVuY3Rpb24gRihIKXtyZXR1cm4gRChILCItbW96LWJv +eC1zaXppbmciKT09ImJvcmRlci1ib3giO31mdW5jdGlvbiBHKEgpe3JldHVybiBF +KEgsImJvcmRlci10b3Atd2lkdGgiKTsKfWZ1bmN0aW9uIEMoSCl7cmV0dXJuIEUo +SCwiYm9yZGVyLWxlZnQtd2lkdGgiKTt9ZnVuY3Rpb24gQihIKXtyZXR1cm4oL14o +Pzpib2R5fGh0bWwpJC9pKS50ZXN0KEgudGFnTmFtZSk7fWZ1bmN0aW9uIEEoSCl7 +dmFyIEk9SC5nZXREb2N1bWVudCgpO3JldHVybighSS5jb21wYXRNb2RlfHxJLmNv +bXBhdE1vZGU9PSJDU1MxQ29tcGF0Iik/SS5odG1sOkkuYm9keTsKfX0pKCk7TmF0 +aXZlLmltcGxlbWVudChbV2luZG93LERvY3VtZW50LEVsZW1lbnRdLHtnZXRIZWln +aHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRTaXplKCkueTt9LGdldFdpZHRo +OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0U2l6ZSgpLng7fSxnZXRTY3JvbGxU +b3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRTY3JvbGwoKS55Owp9LGdldFNj +cm9sbExlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRTY3JvbGwoKS54O30s +Z2V0U2Nyb2xsSGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0U2Nyb2xs +U2l6ZSgpLnk7fSxnZXRTY3JvbGxXaWR0aDpmdW5jdGlvbigpe3JldHVybiB0aGlz +LmdldFNjcm9sbFNpemUoKS54Owp9LGdldFRvcDpmdW5jdGlvbigpe3JldHVybiB0 +aGlzLmdldFBvc2l0aW9uKCkueTt9LGdldExlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4g +dGhpcy5nZXRQb3NpdGlvbigpLng7fX0pO05hdGl2ZS5pbXBsZW1lbnQoW0RvY3Vt +ZW50LEVsZW1lbnRdLHtnZXRFbGVtZW50czpmdW5jdGlvbihILEcpe0g9SC5zcGxp +dCgiLCIpOwp2YXIgQyxFPXt9O2Zvcih2YXIgRD0wLEI9SC5sZW5ndGg7RDxCO0Qr +Kyl7dmFyIEE9SFtEXSxGPVNlbGVjdG9ycy5VdGlscy5zZWFyY2godGhpcyxBLEUp +O2lmKEQhPTAmJkYuaXRlbSl7Rj0kQShGKTt9Qz0oRD09MCk/RjooQy5pdGVtKT8k +QShDKS5jb25jYXQoRik6Qy5jb25jYXQoRik7Cn1yZXR1cm4gbmV3IEVsZW1lbnRz +KEMse2RkdXA6KEgubGVuZ3RoPjEpLGNhc2g6IUd9KTt9fSk7RWxlbWVudC5pbXBs +ZW1lbnQoe21hdGNoOmZ1bmN0aW9uKEIpe2lmKCFCKXtyZXR1cm4gdHJ1ZTt9dmFy +IEQ9U2VsZWN0b3JzLlV0aWxzLnBhcnNlVGFnQW5kSUQoQik7CnZhciBBPURbMF0s +RT1EWzFdO2lmKCFTZWxlY3RvcnMuRmlsdGVycy5ieUlEKHRoaXMsRSl8fCFTZWxl +Y3RvcnMuRmlsdGVycy5ieVRhZyh0aGlzLEEpKXtyZXR1cm4gZmFsc2U7fXZhciBD +PVNlbGVjdG9ycy5VdGlscy5wYXJzZVNlbGVjdG9yKEIpO3JldHVybihDKT9TZWxl +Y3RvcnMuVXRpbHMuZmlsdGVyKHRoaXMsQyx7fSk6dHJ1ZTsKfX0pO3ZhciBTZWxl +Y3RvcnM9e0NhY2hlOntudGg6e30scGFyc2VkOnt9fX07U2VsZWN0b3JzLlJlZ0V4 +cHM9e2lkOigvIyhbXHctXSspLyksdGFnOigvXihcdyt8XCopLykscXVpY2s6KC9e +KFx3K3xcKikkLyksc3BsaXR0ZXI6KC9ccyooWys+flxzXSlccyooW2EtekEtWiMu +KjpcW10pL2cpLGNvbWJpbmVkOigvXC4oW1x3LV0rKXxcWyhcdyspKD86KFshKl4k +fnxdPz0pWyInXT8oLio/KVsiJ10/KT9cXXw6KFtcdy1dKykoPzpcKFsiJ10/KC4q +Pyk/WyInXT9cKXwkKS9nKX07ClNlbGVjdG9ycy5VdGlscz17Y2hrOmZ1bmN0aW9u +KEIsQyl7aWYoIUMpe3JldHVybiB0cnVlO312YXIgQT0kdWlkKEIpO2lmKCFDW0Fd +KXtyZXR1cm4gQ1tBXT10cnVlO31yZXR1cm4gZmFsc2U7fSxwYXJzZU50aEFyZ3Vt +ZW50OmZ1bmN0aW9uKEYpe2lmKFNlbGVjdG9ycy5DYWNoZS5udGhbRl0pe3JldHVy +biBTZWxlY3RvcnMuQ2FjaGUubnRoW0ZdOwp9dmFyIEM9Ri5tYXRjaCgvXihbKy1d +P1xkKik/KFthLXpdKyk/KFsrLV0/XGQqKT8kLyk7aWYoIUMpe3JldHVybiBmYWxz +ZTt9dmFyIEU9cGFyc2VJbnQoQ1sxXSk7dmFyIEI9KEV8fEU9PT0wKT9FOjE7dmFy +IEQ9Q1syXXx8ZmFsc2U7dmFyIEE9cGFyc2VJbnQoQ1szXSl8fDA7CmlmKEIhPTAp +e0EtLTt3aGlsZShBPDEpe0ErPUI7fXdoaWxlKEE+PUIpe0EtPUI7fX1lbHNle0I9 +QTtEPSJpbmRleCI7fXN3aXRjaChEKXtjYXNlIm4iOkM9e2E6QixiOkEsc3BlY2lh +bDoibiJ9O2JyZWFrO2Nhc2Uib2RkIjpDPXthOjIsYjowLHNwZWNpYWw6Im4ifTsK +YnJlYWs7Y2FzZSJldmVuIjpDPXthOjIsYjoxLHNwZWNpYWw6Im4ifTticmVhaztj +YXNlImZpcnN0IjpDPXthOjAsc3BlY2lhbDoiaW5kZXgifTticmVhaztjYXNlImxh +c3QiOkM9e3NwZWNpYWw6Imxhc3QtY2hpbGQifTticmVhaztjYXNlIm9ubHkiOkM9 +e3NwZWNpYWw6Im9ubHktY2hpbGQifTsKYnJlYWs7ZGVmYXVsdDpDPXthOihCLTEp +LHNwZWNpYWw6ImluZGV4In07fXJldHVybiBTZWxlY3RvcnMuQ2FjaGUubnRoW0Zd +PUM7fSxwYXJzZVNlbGVjdG9yOmZ1bmN0aW9uKEUpe2lmKFNlbGVjdG9ycy5DYWNo +ZS5wYXJzZWRbRV0pe3JldHVybiBTZWxlY3RvcnMuQ2FjaGUucGFyc2VkW0VdOwp9 +dmFyIEQsSD17Y2xhc3NlczpbXSxwc2V1ZG9zOltdLGF0dHJpYnV0ZXM6W119O3do +aWxlKChEPVNlbGVjdG9ycy5SZWdFeHBzLmNvbWJpbmVkLmV4ZWMoRSkpKXt2YXIg +ST1EWzFdLEc9RFsyXSxGPURbM10sQj1EWzRdLEM9RFs1XSxKPURbNl07aWYoSSl7 +SC5jbGFzc2VzLnB1c2goSSk7Cn1lbHNle2lmKEMpe3ZhciBBPVNlbGVjdG9ycy5Q +c2V1ZG8uZ2V0KEMpO2lmKEEpe0gucHNldWRvcy5wdXNoKHtwYXJzZXI6QSxhcmd1 +bWVudDpKfSk7fWVsc2V7SC5hdHRyaWJ1dGVzLnB1c2goe25hbWU6QyxvcGVyYXRv +cjoiPSIsdmFsdWU6Sn0pO319ZWxzZXtpZihHKXtILmF0dHJpYnV0ZXMucHVzaCh7 +bmFtZTpHLG9wZXJhdG9yOkYsdmFsdWU6Qn0pOwp9fX19aWYoIUguY2xhc3Nlcy5s +ZW5ndGgpe2RlbGV0ZSBILmNsYXNzZXM7fWlmKCFILmF0dHJpYnV0ZXMubGVuZ3Ro +KXtkZWxldGUgSC5hdHRyaWJ1dGVzO31pZighSC5wc2V1ZG9zLmxlbmd0aCl7ZGVs +ZXRlIEgucHNldWRvczt9aWYoIUguY2xhc3NlcyYmIUguYXR0cmlidXRlcyYmIUgu +cHNldWRvcyl7SD1udWxsOwp9cmV0dXJuIFNlbGVjdG9ycy5DYWNoZS5wYXJzZWRb +RV09SDt9LHBhcnNlVGFnQW5kSUQ6ZnVuY3Rpb24oQil7dmFyIEE9Qi5tYXRjaChT +ZWxlY3RvcnMuUmVnRXhwcy50YWcpO3ZhciBDPUIubWF0Y2goU2VsZWN0b3JzLlJl +Z0V4cHMuaWQpO3JldHVyblsoQSk/QVsxXToiKiIsKEMpP0NbMV06ZmFsc2VdOwp9 +LGZpbHRlcjpmdW5jdGlvbihGLEMsRSl7dmFyIEQ7aWYoQy5jbGFzc2VzKXtmb3Io +RD1DLmNsYXNzZXMubGVuZ3RoO0QtLTtEKXt2YXIgRz1DLmNsYXNzZXNbRF07aWYo +IVNlbGVjdG9ycy5GaWx0ZXJzLmJ5Q2xhc3MoRixHKSl7cmV0dXJuIGZhbHNlO319 +fWlmKEMuYXR0cmlidXRlcyl7Zm9yKEQ9Qy5hdHRyaWJ1dGVzLmxlbmd0aDsKRC0t +O0Qpe3ZhciBCPUMuYXR0cmlidXRlc1tEXTtpZighU2VsZWN0b3JzLkZpbHRlcnMu +YnlBdHRyaWJ1dGUoRixCLm5hbWUsQi5vcGVyYXRvcixCLnZhbHVlKSl7cmV0dXJu +IGZhbHNlO319fWlmKEMucHNldWRvcyl7Zm9yKEQ9Qy5wc2V1ZG9zLmxlbmd0aDtE +LS07RCl7dmFyIEE9Qy5wc2V1ZG9zW0RdOwppZighU2VsZWN0b3JzLkZpbHRlcnMu +YnlQc2V1ZG8oRixBLnBhcnNlcixBLmFyZ3VtZW50LEUpKXtyZXR1cm4gZmFsc2U7 +fX19cmV0dXJuIHRydWU7fSxnZXRCeVRhZ0FuZElEOmZ1bmN0aW9uKEIsQSxEKXtp +ZihEKXt2YXIgQz0oQi5nZXRFbGVtZW50QnlJZCk/Qi5nZXRFbGVtZW50QnlJZChE +LHRydWUpOkVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoQixELHRydWUpOwpyZXR1cm4o +QyYmU2VsZWN0b3JzLkZpbHRlcnMuYnlUYWcoQyxBKSk/W0NdOltdO31lbHNle3Jl +dHVybiBCLmdldEVsZW1lbnRzQnlUYWdOYW1lKEEpO319LHNlYXJjaDpmdW5jdGlv +bihKLEksTyl7dmFyIEI9W107dmFyIEM9SS50cmltKCkucmVwbGFjZShTZWxlY3Rv +cnMuUmVnRXhwcy5zcGxpdHRlcixmdW5jdGlvbihaLFksWCl7Qi5wdXNoKFkpOwpy +ZXR1cm4iOikiK1g7fSkuc3BsaXQoIjopIik7dmFyIEssRixFLFY7Zm9yKHZhciBV +PTAsUT1DLmxlbmd0aDtVPFE7VSsrKXt2YXIgVD1DW1VdO2lmKFU9PTAmJlNlbGVj +dG9ycy5SZWdFeHBzLnF1aWNrLnRlc3QoVCkpe0s9Si5nZXRFbGVtZW50c0J5VGFn +TmFtZShUKTsKY29udGludWU7fXZhciBBPUJbVS0xXTt2YXIgTD1TZWxlY3RvcnMu +VXRpbHMucGFyc2VUYWdBbmRJRChUKTt2YXIgVz1MWzBdLE09TFsxXTtpZihVPT0w +KXtLPVNlbGVjdG9ycy5VdGlscy5nZXRCeVRhZ0FuZElEKEosVyxNKTt9ZWxzZXt2 +YXIgRD17fSxIPVtdO2Zvcih2YXIgUz0wLFI9Sy5sZW5ndGg7ClM8UjtTKyspe0g9 +U2VsZWN0b3JzLkdldHRlcnNbQV0oSCxLW1NdLFcsTSxEKTt9Sz1IO312YXIgRz1T +ZWxlY3RvcnMuVXRpbHMucGFyc2VTZWxlY3RvcihUKTtpZihHKXtFPVtdO2Zvcih2 +YXIgUD0wLE49Sy5sZW5ndGg7UDxOO1ArKyl7Vj1LW1BdO2lmKFNlbGVjdG9ycy5V +dGlscy5maWx0ZXIoVixHLE8pKXtFLnB1c2goVik7Cn19Sz1FO319cmV0dXJuIEs7 +fX07U2VsZWN0b3JzLkdldHRlcnM9eyIgIjpmdW5jdGlvbihILEcsSSxBLEUpe3Zh +ciBEPVNlbGVjdG9ycy5VdGlscy5nZXRCeVRhZ0FuZElEKEcsSSxBKTtmb3IodmFy +IEM9MCxCPUQubGVuZ3RoO0M8QjtDKyspe3ZhciBGPURbQ107aWYoU2VsZWN0b3Jz +LlV0aWxzLmNoayhGLEUpKXtILnB1c2goRik7Cn19cmV0dXJuIEg7fSwiPiI6ZnVu +Y3Rpb24oSCxHLEksQSxGKXt2YXIgQz1TZWxlY3RvcnMuVXRpbHMuZ2V0QnlUYWdB +bmRJRChHLEksQSk7Zm9yKHZhciBFPTAsRD1DLmxlbmd0aDtFPEQ7RSsrKXt2YXIg +Qj1DW0VdO2lmKEIucGFyZW50Tm9kZT09RyYmU2VsZWN0b3JzLlV0aWxzLmNoayhC +LEYpKXtILnB1c2goQik7Cn19cmV0dXJuIEg7fSwiKyI6ZnVuY3Rpb24oQyxCLEEs +RSxEKXt3aGlsZSgoQj1CLm5leHRTaWJsaW5nKSl7aWYoQi5ub2RlVHlwZT09MSl7 +aWYoU2VsZWN0b3JzLlV0aWxzLmNoayhCLEQpJiZTZWxlY3RvcnMuRmlsdGVycy5i +eVRhZyhCLEEpJiZTZWxlY3RvcnMuRmlsdGVycy5ieUlEKEIsRSkpe0MucHVzaChC +KTsKfWJyZWFrO319cmV0dXJuIEM7fSwifiI6ZnVuY3Rpb24oQyxCLEEsRSxEKXt3 +aGlsZSgoQj1CLm5leHRTaWJsaW5nKSl7aWYoQi5ub2RlVHlwZT09MSl7aWYoIVNl +bGVjdG9ycy5VdGlscy5jaGsoQixEKSl7YnJlYWs7fWlmKFNlbGVjdG9ycy5GaWx0 +ZXJzLmJ5VGFnKEIsQSkmJlNlbGVjdG9ycy5GaWx0ZXJzLmJ5SUQoQixFKSl7Qy5w +dXNoKEIpOwp9fX1yZXR1cm4gQzt9fTtTZWxlY3RvcnMuRmlsdGVycz17YnlUYWc6 +ZnVuY3Rpb24oQixBKXtyZXR1cm4oQT09IioifHwoQi50YWdOYW1lJiZCLnRhZ05h +bWUudG9Mb3dlckNhc2UoKT09QSkpO30sYnlJRDpmdW5jdGlvbihBLEIpe3JldHVy +bighQnx8KEEuaWQmJkEuaWQ9PUIpKTsKfSxieUNsYXNzOmZ1bmN0aW9uKEIsQSl7 +cmV0dXJuKEIuY2xhc3NOYW1lJiZCLmNsYXNzTmFtZS5jb250YWlucyhBLCIgIikp +O30sYnlQc2V1ZG86ZnVuY3Rpb24oQSxELEMsQil7cmV0dXJuIEQuY2FsbChBLEMs +Qik7fSxieUF0dHJpYnV0ZTpmdW5jdGlvbihDLEQsQixFKXt2YXIgQT1FbGVtZW50 +LnByb3RvdHlwZS5nZXRQcm9wZXJ0eS5jYWxsKEMsRCk7CmlmKCFBKXtyZXR1cm4g +ZmFsc2U7fWlmKCFCfHxFPT11bmRlZmluZWQpe3JldHVybiB0cnVlO31zd2l0Y2go +Qil7Y2FzZSI9IjpyZXR1cm4oQT09RSk7Y2FzZSIqPSI6cmV0dXJuKEEuY29udGFp +bnMoRSkpO2Nhc2UiXj0iOnJldHVybihBLnN1YnN0cigwLEUubGVuZ3RoKT09RSk7 +CmNhc2UiJD0iOnJldHVybihBLnN1YnN0cihBLmxlbmd0aC1FLmxlbmd0aCk9PUUp +O2Nhc2UiIT0iOnJldHVybihBIT1FKTtjYXNlIn49IjpyZXR1cm4gQS5jb250YWlu +cyhFLCIgIik7Y2FzZSJ8PSI6cmV0dXJuIEEuY29udGFpbnMoRSwiLSIpO31yZXR1 +cm4gZmFsc2U7Cn19O1NlbGVjdG9ycy5Qc2V1ZG89bmV3IEhhc2goe2VtcHR5OmZ1 +bmN0aW9uKCl7cmV0dXJuICEodGhpcy5pbm5lclRleHR8fHRoaXMudGV4dENvbnRl +bnR8fCIiKS5sZW5ndGg7fSxub3Q6ZnVuY3Rpb24oQSl7cmV0dXJuICFFbGVtZW50 +Lm1hdGNoKHRoaXMsQSk7fSxjb250YWluczpmdW5jdGlvbihBKXtyZXR1cm4odGhp +cy5pbm5lclRleHR8fHRoaXMudGV4dENvbnRlbnR8fCIiKS5jb250YWlucyhBKTsK +fSwiZmlyc3QtY2hpbGQiOmZ1bmN0aW9uKCl7cmV0dXJuIFNlbGVjdG9ycy5Qc2V1 +ZG8uaW5kZXguY2FsbCh0aGlzLDApO30sImxhc3QtY2hpbGQiOmZ1bmN0aW9uKCl7 +dmFyIEE9dGhpczt3aGlsZSgoQT1BLm5leHRTaWJsaW5nKSl7aWYoQS5ub2RlVHlw +ZT09MSl7cmV0dXJuIGZhbHNlOwp9fXJldHVybiB0cnVlO30sIm9ubHktY2hpbGQi +OmZ1bmN0aW9uKCl7dmFyIEI9dGhpczt3aGlsZSgoQj1CLnByZXZpb3VzU2libGlu +Zykpe2lmKEIubm9kZVR5cGU9PTEpe3JldHVybiBmYWxzZTt9fXZhciBBPXRoaXM7 +d2hpbGUoKEE9QS5uZXh0U2libGluZykpe2lmKEEubm9kZVR5cGU9PTEpe3JldHVy +biBmYWxzZTsKfX1yZXR1cm4gdHJ1ZTt9LCJudGgtY2hpbGQiOmZ1bmN0aW9uKEcs +RSl7Rz0oRz09dW5kZWZpbmVkKT8ibiI6Rzt2YXIgQz1TZWxlY3RvcnMuVXRpbHMu +cGFyc2VOdGhBcmd1bWVudChHKTtpZihDLnNwZWNpYWwhPSJuIil7cmV0dXJuIFNl +bGVjdG9ycy5Qc2V1ZG9bQy5zcGVjaWFsXS5jYWxsKHRoaXMsQy5hLEUpOwp9dmFy +IEY9MDtFLnBvc2l0aW9ucz1FLnBvc2l0aW9uc3x8e307dmFyIEQ9JHVpZCh0aGlz +KTtpZighRS5wb3NpdGlvbnNbRF0pe3ZhciBCPXRoaXM7d2hpbGUoKEI9Qi5wcmV2 +aW91c1NpYmxpbmcpKXtpZihCLm5vZGVUeXBlIT0xKXtjb250aW51ZTt9RisrO3Zh +ciBBPUUucG9zaXRpb25zWyR1aWQoQildOwppZihBIT11bmRlZmluZWQpe0Y9QStG +O2JyZWFrO319RS5wb3NpdGlvbnNbRF09Rjt9cmV0dXJuKEUucG9zaXRpb25zW0Rd +JUMuYT09Qy5iKTt9LGluZGV4OmZ1bmN0aW9uKEEpe3ZhciBCPXRoaXMsQz0wO3do +aWxlKChCPUIucHJldmlvdXNTaWJsaW5nKSl7aWYoQi5ub2RlVHlwZT09MSYmKytD +PkEpe3JldHVybiBmYWxzZTsKfX1yZXR1cm4oQz09QSk7fSxldmVuOmZ1bmN0aW9u +KEIsQSl7cmV0dXJuIFNlbGVjdG9ycy5Qc2V1ZG9bIm50aC1jaGlsZCJdLmNhbGwo +dGhpcywiMm4rMSIsQSk7fSxvZGQ6ZnVuY3Rpb24oQixBKXtyZXR1cm4gU2VsZWN0 +b3JzLlBzZXVkb1sibnRoLWNoaWxkIl0uY2FsbCh0aGlzLCIybiIsQSk7Cn19KTtF +bGVtZW50LkV2ZW50cy5kb21yZWFkeT17b25BZGQ6ZnVuY3Rpb24oQSl7aWYoQnJv +d3Nlci5sb2FkZWQpe0EuY2FsbCh0aGlzKTt9fX07KGZ1bmN0aW9uKCl7dmFyIEI9 +ZnVuY3Rpb24oKXtpZihCcm93c2VyLmxvYWRlZCl7cmV0dXJuIDt9QnJvd3Nlci5s +b2FkZWQ9dHJ1ZTsKd2luZG93LmZpcmVFdmVudCgiZG9tcmVhZHkiKTtkb2N1bWVu +dC5maXJlRXZlbnQoImRvbXJlYWR5Iik7fTtzd2l0Y2goQnJvd3Nlci5FbmdpbmUu +bmFtZSl7Y2FzZSJ3ZWJraXQiOihmdW5jdGlvbigpeyhbImxvYWRlZCIsImNvbXBs +ZXRlIl0uY29udGFpbnMoZG9jdW1lbnQucmVhZHlTdGF0ZSkpP0IoKTphcmd1bWVu +dHMuY2FsbGVlLmRlbGF5KDUwKTsKfSkoKTticmVhaztjYXNlInRyaWRlbnQiOnZh +ciBBPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOyhmdW5jdGlvbigpeygk +dHJ5KGZ1bmN0aW9uKCl7QS5kb1Njcm9sbCgibGVmdCIpO3JldHVybiAkKEEpLmlu +amVjdChkb2N1bWVudC5ib2R5KS5zZXQoImh0bWwiLCJ0ZW1wIikuZGlzcG9zZSgp +Owp9KSk/QigpOmFyZ3VtZW50cy5jYWxsZWUuZGVsYXkoNTApO30pKCk7YnJlYWs7 +ZGVmYXVsdDp3aW5kb3cuYWRkRXZlbnQoImxvYWQiLEIpO2RvY3VtZW50LmFkZEV2 +ZW50KCJET01Db250ZW50TG9hZGVkIixCKTt9fSkoKTt2YXIgSlNPTj1uZXcgSGFz +aCh7ZW5jb2RlOmZ1bmN0aW9uKEIpe3N3aXRjaCgkdHlwZShCKSl7Y2FzZSJzdHJp +bmciOnJldHVybiciJytCLnJlcGxhY2UoL1tceDAwLVx4MWZcXCJdL2csSlNPTi4k +cmVwbGFjZUNoYXJzKSsnIic7CmNhc2UiYXJyYXkiOnJldHVybiJbIitTdHJpbmco +Qi5tYXAoSlNPTi5lbmNvZGUpLmZpbHRlcigkZGVmaW5lZCkpKyJdIjtjYXNlIm9i +amVjdCI6Y2FzZSJoYXNoIjp2YXIgQT1bXTtIYXNoLmVhY2goQixmdW5jdGlvbihF +LEQpe3ZhciBDPUpTT04uZW5jb2RlKEUpO2lmKEMpe0EucHVzaChKU09OLmVuY29k +ZShEKSsiOiIrQyk7Cn19KTtyZXR1cm4ieyIrQSsifSI7Y2FzZSJudW1iZXIiOmNh +c2UiYm9vbGVhbiI6cmV0dXJuIFN0cmluZyhCKTtjYXNlIGZhbHNlOnJldHVybiJu +dWxsIjt9cmV0dXJuIG51bGw7fSwkc3BlY2lhbENoYXJzOnsiXGIiOiJcXGIiLCJc +dCI6IlxcdCIsIlxuIjoiXFxuIiwiXGYiOiJcXGYiLCJcciI6IlxcciIsJyInOidc +XCInLCJcXCI6IlxcXFwifSwkcmVwbGFjZUNoYXJzOmZ1bmN0aW9uKEEpe3JldHVy +biBKU09OLiRzcGVjaWFsQ2hhcnNbQV18fCJcXHUwMCIrTWF0aC5mbG9vcihBLmNo +YXJDb2RlQXQoKS8xNikudG9TdHJpbmcoMTYpKyhBLmNoYXJDb2RlQXQoKSUxNiku +dG9TdHJpbmcoMTYpOwp9LGRlY29kZTpmdW5jdGlvbihzdHJpbmcsc2VjdXJlKXtp +ZigkdHlwZShzdHJpbmcpIT0ic3RyaW5nInx8IXN0cmluZy5sZW5ndGgpe3JldHVy +biBudWxsO31pZihzZWN1cmUmJiEoL15bLDp7fVxbXF0wLTkuXC0rRWFlZmxuci11 +IFxuXHJcdF0qJC8pLnRlc3Qoc3RyaW5nLnJlcGxhY2UoL1xcLi9nLCJAIikucmVw +bGFjZSgvIlteIlxcXG5ccl0qIi9nLCIiKSkpe3JldHVybiBudWxsOwp9cmV0dXJu +IGV2YWwoIigiK3N0cmluZysiKSIpO319KTtOYXRpdmUuaW1wbGVtZW50KFtIYXNo +LEFycmF5LFN0cmluZyxOdW1iZXJdLHt0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm4g +SlNPTi5lbmNvZGUodGhpcyk7fX0pO3ZhciBDb29raWU9bmV3IENsYXNzKHtJbXBs +ZW1lbnRzOk9wdGlvbnMsb3B0aW9uczp7cGF0aDpmYWxzZSxkb21haW46ZmFsc2Us +ZHVyYXRpb246ZmFsc2Usc2VjdXJlOmZhbHNlLGRvY3VtZW50OmRvY3VtZW50fSxp +bml0aWFsaXplOmZ1bmN0aW9uKEIsQSl7dGhpcy5rZXk9QjsKdGhpcy5zZXRPcHRp +b25zKEEpO30sd3JpdGU6ZnVuY3Rpb24oQil7Qj1lbmNvZGVVUklDb21wb25lbnQo +Qik7aWYodGhpcy5vcHRpb25zLmRvbWFpbil7Qis9IjsgZG9tYWluPSIrdGhpcy5v +cHRpb25zLmRvbWFpbjt9aWYodGhpcy5vcHRpb25zLnBhdGgpe0IrPSI7IHBhdGg9 +Iit0aGlzLm9wdGlvbnMucGF0aDsKfWlmKHRoaXMub3B0aW9ucy5kdXJhdGlvbil7 +dmFyIEE9bmV3IERhdGUoKTtBLnNldFRpbWUoQS5nZXRUaW1lKCkrdGhpcy5vcHRp +b25zLmR1cmF0aW9uKjI0KjYwKjYwKjEwMDApO0IrPSI7IGV4cGlyZXM9IitBLnRv +R01UU3RyaW5nKCk7fWlmKHRoaXMub3B0aW9ucy5zZWN1cmUpe0IrPSI7IHNlY3Vy +ZSI7Cn10aGlzLm9wdGlvbnMuZG9jdW1lbnQuY29va2llPXRoaXMua2V5KyI9IitC +O3JldHVybiB0aGlzO30scmVhZDpmdW5jdGlvbigpe3ZhciBBPXRoaXMub3B0aW9u +cy5kb2N1bWVudC5jb29raWUubWF0Y2goIig/Ol58OylcXHMqIit0aGlzLmtleS5l +c2NhcGVSZWdFeHAoKSsiPShbXjtdKikiKTsKcmV0dXJuKEEpP2RlY29kZVVSSUNv +bXBvbmVudChBWzFdKTpudWxsO30sZGlzcG9zZTpmdW5jdGlvbigpe25ldyBDb29r +aWUodGhpcy5rZXksJG1lcmdlKHRoaXMub3B0aW9ucyx7ZHVyYXRpb246LTF9KSku +d3JpdGUoIiIpO3JldHVybiB0aGlzO319KTtDb29raWUud3JpdGU9ZnVuY3Rpb24o +QixDLEEpe3JldHVybiBuZXcgQ29va2llKEIsQSkud3JpdGUoQyk7Cn07Q29va2ll +LnJlYWQ9ZnVuY3Rpb24oQSl7cmV0dXJuIG5ldyBDb29raWUoQSkucmVhZCgpO307 +Q29va2llLmRpc3Bvc2U9ZnVuY3Rpb24oQixBKXtyZXR1cm4gbmV3IENvb2tpZShC +LEEpLmRpc3Bvc2UoKTt9O3ZhciBTd2lmZj1uZXcgQ2xhc3Moe0ltcGxlbWVudHM6 +W09wdGlvbnNdLG9wdGlvbnM6e2lkOm51bGwsaGVpZ2h0OjEsd2lkdGg6MSxjb250 +YWluZXI6bnVsbCxwcm9wZXJ0aWVzOnt9LHBhcmFtczp7cXVhbGl0eToiaGlnaCIs +YWxsb3dTY3JpcHRBY2Nlc3M6ImFsd2F5cyIsd01vZGU6InRyYW5zcGFyZW50Iixz +d0xpdmVDb25uZWN0OnRydWV9LGNhbGxCYWNrczp7fSx2YXJzOnt9fSx0b0VsZW1l +bnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vYmplY3Q7Cn0saW5pdGlhbGl6ZTpm +dW5jdGlvbihMLE0pe3RoaXMuaW5zdGFuY2U9IlN3aWZmXyIrJHRpbWUoKTt0aGlz +LnNldE9wdGlvbnMoTSk7TT10aGlzLm9wdGlvbnM7dmFyIEI9dGhpcy5pZD1NLmlk +fHx0aGlzLmluc3RhbmNlO3ZhciBBPSQoTS5jb250YWluZXIpO1N3aWZmLkNhbGxC +YWNrc1t0aGlzLmluc3RhbmNlXT17fTsKdmFyIEU9TS5wYXJhbXMsRz1NLnZhcnMs +Rj1NLmNhbGxCYWNrczt2YXIgSD0kZXh0ZW5kKHtoZWlnaHQ6TS5oZWlnaHQsd2lk +dGg6TS53aWR0aH0sTS5wcm9wZXJ0aWVzKTt2YXIgSz10aGlzO2Zvcih2YXIgRCBp +biBGKXtTd2lmZi5DYWxsQmFja3NbdGhpcy5pbnN0YW5jZV1bRF09KGZ1bmN0aW9u +KE4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBOLmFwcGx5KEsub2JqZWN0LGFy +Z3VtZW50cyk7Cn07fSkoRltEXSk7R1tEXT0iU3dpZmYuQ2FsbEJhY2tzLiIrdGhp +cy5pbnN0YW5jZSsiLiIrRDt9RS5mbGFzaFZhcnM9SGFzaC50b1F1ZXJ5U3RyaW5n +KEcpO2lmKEJyb3dzZXIuRW5naW5lLnRyaWRlbnQpe0guY2xhc3NpZD0iY2xzaWQ6 +RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIjsKRS5tb3ZpZT1M +O31lbHNle0gudHlwZT0iYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giO0gu +ZGF0YT1MO312YXIgSj0nPG9iamVjdCBpZD0iJytCKyciJztmb3IodmFyIEkgaW4g +SCl7Sis9IiAiK0krJz0iJytIW0ldKyciJzt9Sis9Ij4iO2Zvcih2YXIgQyBpbiBF +KXtpZihFW0NdKXtKKz0nPHBhcmFtIG5hbWU9IicrQysnIiB2YWx1ZT0iJytFW0Nd +KyciIC8+JzsKfX1KKz0iPC9vYmplY3Q+Ijt0aGlzLm9iamVjdD0oKEEpP0EuZW1w +dHkoKTpuZXcgRWxlbWVudCgiZGl2IikpLnNldCgiaHRtbCIsSikuZmlyc3RDaGls +ZDt9LHJlcGxhY2VzOmZ1bmN0aW9uKEEpe0E9JChBLHRydWUpO0EucGFyZW50Tm9k +ZS5yZXBsYWNlQ2hpbGQodGhpcy50b0VsZW1lbnQoKSxBKTsKcmV0dXJuIHRoaXM7 +fSxpbmplY3Q6ZnVuY3Rpb24oQSl7JChBLHRydWUpLmFwcGVuZENoaWxkKHRoaXMu +dG9FbGVtZW50KCkpO3JldHVybiB0aGlzO30scmVtb3RlOmZ1bmN0aW9uKCl7cmV0 +dXJuIFN3aWZmLnJlbW90ZS5hcHBseShTd2lmZixbdGhpcy50b0VsZW1lbnQoKV0u +ZXh0ZW5kKGFyZ3VtZW50cykpOwp9fSk7U3dpZmYuQ2FsbEJhY2tzPXt9O1N3aWZm +LnJlbW90ZT1mdW5jdGlvbihvYmosZm4pe3ZhciBycz1vYmouQ2FsbEZ1bmN0aW9u +KCc8aW52b2tlIG5hbWU9IicrZm4rJyIgcmV0dXJudHlwZT0iamF2YXNjcmlwdCI+ +JytfX2ZsYXNoX19hcmd1bWVudHNUb1hNTChhcmd1bWVudHMsMikrIjwvaW52b2tl +PiIpOwpyZXR1cm4gZXZhbChycyk7fTt2YXIgRng9bmV3IENsYXNzKHtJbXBsZW1l +bnRzOltDaGFpbixFdmVudHMsT3B0aW9uc10sb3B0aW9uczp7ZnBzOjUwLHVuaXQ6 +ZmFsc2UsZHVyYXRpb246NTAwLGxpbms6Imlnbm9yZSIsdHJhbnNpdGlvbjpmdW5j +dGlvbihBKXtyZXR1cm4gLShNYXRoLmNvcyhNYXRoLlBJKkEpLTEpLzI7Cn19LGlu +aXRpYWxpemU6ZnVuY3Rpb24oQSl7dGhpcy5zdWJqZWN0PXRoaXMuc3ViamVjdHx8 +dGhpczt0aGlzLnNldE9wdGlvbnMoQSk7dGhpcy5vcHRpb25zLmR1cmF0aW9uPUZ4 +LkR1cmF0aW9uc1t0aGlzLm9wdGlvbnMuZHVyYXRpb25dfHx0aGlzLm9wdGlvbnMu +ZHVyYXRpb24udG9JbnQoKTsKdmFyIEI9dGhpcy5vcHRpb25zLndhaXQ7aWYoQj09 +PWZhbHNlKXt0aGlzLm9wdGlvbnMubGluaz0iY2FuY2VsIjt9fSxzdGVwOmZ1bmN0 +aW9uKCl7dmFyIEE9JHRpbWUoKTtpZihBPHRoaXMudGltZSt0aGlzLm9wdGlvbnMu +ZHVyYXRpb24pe3ZhciBCPXRoaXMub3B0aW9ucy50cmFuc2l0aW9uKChBLXRoaXMu +dGltZSkvdGhpcy5vcHRpb25zLmR1cmF0aW9uKTsKdGhpcy5zZXQodGhpcy5jb21w +dXRlKHRoaXMuZnJvbSx0aGlzLnRvLEIpKTt9ZWxzZXt0aGlzLnNldCh0aGlzLmNv +bXB1dGUodGhpcy5mcm9tLHRoaXMudG8sMSkpO3RoaXMuY29tcGxldGUoKTt9fSxz +ZXQ6ZnVuY3Rpb24oQSl7cmV0dXJuIEE7fSxjb21wdXRlOmZ1bmN0aW9uKEMsQixB +KXtyZXR1cm4gRnguY29tcHV0ZShDLEIsQSk7Cn0sY2hlY2s6ZnVuY3Rpb24oQSl7 +aWYoIXRoaXMudGltZXIpe3JldHVybiB0cnVlO31zd2l0Y2godGhpcy5vcHRpb25z +Lmxpbmspe2Nhc2UiY2FuY2VsIjp0aGlzLmNhbmNlbCgpO3JldHVybiB0cnVlO2Nh +c2UiY2hhaW4iOnRoaXMuY2hhaW4oQS5iaW5kKHRoaXMsQXJyYXkuc2xpY2UoYXJn +dW1lbnRzLDEpKSk7CnJldHVybiBmYWxzZTt9cmV0dXJuIGZhbHNlO30sc3RhcnQ6 +ZnVuY3Rpb24oQixBKXtpZighdGhpcy5jaGVjayhhcmd1bWVudHMuY2FsbGVlLEIs +QSkpe3JldHVybiB0aGlzO310aGlzLmZyb209Qjt0aGlzLnRvPUE7dGhpcy50aW1l +PTA7dGhpcy5zdGFydFRpbWVyKCk7CnRoaXMub25TdGFydCgpO3JldHVybiB0aGlz +O30sY29tcGxldGU6ZnVuY3Rpb24oKXtpZih0aGlzLnN0b3BUaW1lcigpKXt0aGlz +Lm9uQ29tcGxldGUoKTt9cmV0dXJuIHRoaXM7fSxjYW5jZWw6ZnVuY3Rpb24oKXtp +Zih0aGlzLnN0b3BUaW1lcigpKXt0aGlzLm9uQ2FuY2VsKCk7Cn1yZXR1cm4gdGhp +czt9LG9uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLmZpcmVFdmVudCgic3RhcnQiLHRo +aXMuc3ViamVjdCk7fSxvbkNvbXBsZXRlOmZ1bmN0aW9uKCl7dGhpcy5maXJlRXZl +bnQoImNvbXBsZXRlIix0aGlzLnN1YmplY3QpO2lmKCF0aGlzLmNhbGxDaGFpbigp +KXt0aGlzLmZpcmVFdmVudCgiY2hhaW5Db21wbGV0ZSIsdGhpcy5zdWJqZWN0KTsK +fX0sb25DYW5jZWw6ZnVuY3Rpb24oKXt0aGlzLmZpcmVFdmVudCgiY2FuY2VsIix0 +aGlzLnN1YmplY3QpLmNsZWFyQ2hhaW4oKTt9LHBhdXNlOmZ1bmN0aW9uKCl7dGhp +cy5zdG9wVGltZXIoKTtyZXR1cm4gdGhpczt9LHJlc3VtZTpmdW5jdGlvbigpe3Ro +aXMuc3RhcnRUaW1lcigpOwpyZXR1cm4gdGhpczt9LHN0b3BUaW1lcjpmdW5jdGlv +bigpe2lmKCF0aGlzLnRpbWVyKXtyZXR1cm4gZmFsc2U7fXRoaXMudGltZT0kdGlt +ZSgpLXRoaXMudGltZTt0aGlzLnRpbWVyPSRjbGVhcih0aGlzLnRpbWVyKTtyZXR1 +cm4gdHJ1ZTt9LHN0YXJ0VGltZXI6ZnVuY3Rpb24oKXtpZih0aGlzLnRpbWVyKXty +ZXR1cm4gZmFsc2U7Cn10aGlzLnRpbWU9JHRpbWUoKS10aGlzLnRpbWU7dGhpcy50 +aW1lcj10aGlzLnN0ZXAucGVyaW9kaWNhbChNYXRoLnJvdW5kKDEwMDAvdGhpcy5v +cHRpb25zLmZwcyksdGhpcyk7cmV0dXJuIHRydWU7fX0pO0Z4LmNvbXB1dGU9ZnVu +Y3Rpb24oQyxCLEEpe3JldHVybihCLUMpKkErQzsKfTtGeC5EdXJhdGlvbnM9eyJz +aG9ydCI6MjUwLG5vcm1hbDo1MDAsImxvbmciOjEwMDB9O0Z4LkNTUz1uZXcgQ2xh +c3Moe0V4dGVuZHM6RngscHJlcGFyZTpmdW5jdGlvbihELEUsQil7Qj0kc3BsYXQo +Qik7dmFyIEM9QlsxXTtpZighJGNoayhDKSl7QlsxXT1CWzBdOwpCWzBdPUQuZ2V0 +U3R5bGUoRSk7fXZhciBBPUIubWFwKHRoaXMucGFyc2UpO3JldHVybntmcm9tOkFb +MF0sdG86QVsxXX07fSxwYXJzZTpmdW5jdGlvbihBKXtBPSRsYW1iZGEoQSkoKTtB +PSh0eXBlb2YgQT09InN0cmluZyIpP0Euc3BsaXQoIiAiKTokc3BsYXQoQSk7CnJl +dHVybiBBLm1hcChmdW5jdGlvbihDKXtDPVN0cmluZyhDKTt2YXIgQj1mYWxzZTtG +eC5DU1MuUGFyc2Vycy5lYWNoKGZ1bmN0aW9uKEYsRSl7aWYoQil7cmV0dXJuIDt9 +dmFyIEQ9Ri5wYXJzZShDKTtpZigkY2hrKEQpKXtCPXt2YWx1ZTpELHBhcnNlcjpG +fTt9fSk7CkI9Qnx8e3ZhbHVlOkMscGFyc2VyOkZ4LkNTUy5QYXJzZXJzLlN0cmlu +Z307cmV0dXJuIEI7fSk7fSxjb21wdXRlOmZ1bmN0aW9uKEQsQyxCKXt2YXIgQT1b +XTsoTWF0aC5taW4oRC5sZW5ndGgsQy5sZW5ndGgpKS50aW1lcyhmdW5jdGlvbihF +KXtBLnB1c2goe3ZhbHVlOkRbRV0ucGFyc2VyLmNvbXB1dGUoRFtFXS52YWx1ZSxD +W0VdLnZhbHVlLEIpLHBhcnNlcjpEW0VdLnBhcnNlcn0pOwp9KTtBLiRmYW1pbHk9 +e25hbWU6ImZ4OmNzczp2YWx1ZSJ9O3JldHVybiBBO30sc2VydmU6ZnVuY3Rpb24o +QyxCKXtpZigkdHlwZShDKSE9ImZ4OmNzczp2YWx1ZSIpe0M9dGhpcy5wYXJzZShD +KTt9dmFyIEE9W107Qy5lYWNoKGZ1bmN0aW9uKEQpe0E9QS5jb25jYXQoRC5wYXJz +ZXIuc2VydmUoRC52YWx1ZSxCKSk7Cn0pO3JldHVybiBBO30scmVuZGVyOmZ1bmN0 +aW9uKEEsRCxDLEIpe0Euc2V0U3R5bGUoRCx0aGlzLnNlcnZlKEMsQikpO30sc2Vh +cmNoOmZ1bmN0aW9uKEEpe2lmKEZ4LkNTUy5DYWNoZVtBXSl7cmV0dXJuIEZ4LkNT +Uy5DYWNoZVtBXTt9dmFyIEI9e307QXJyYXkuZWFjaChkb2N1bWVudC5zdHlsZVNo +ZWV0cyxmdW5jdGlvbihFLEQpe3ZhciBDPUUuaHJlZjsKaWYoQyYmQy5jb250YWlu +cygiOi8vIikmJiFDLmNvbnRhaW5zKGRvY3VtZW50LmRvbWFpbikpe3JldHVybiA7 +fXZhciBGPUUucnVsZXN8fEUuY3NzUnVsZXM7QXJyYXkuZWFjaChGLGZ1bmN0aW9u +KEksRyl7aWYoIUkuc3R5bGUpe3JldHVybiA7fXZhciBIPShJLnNlbGVjdG9yVGV4 +dCk/SS5zZWxlY3RvclRleHQucmVwbGFjZSgvXlx3Ky8sZnVuY3Rpb24oSil7cmV0 +dXJuIEoudG9Mb3dlckNhc2UoKTsKfSk6bnVsbDtpZighSHx8IUgudGVzdCgiXiIr +QSsiJCIpKXtyZXR1cm4gO31FbGVtZW50LlN0eWxlcy5lYWNoKGZ1bmN0aW9uKEss +Sil7aWYoIUkuc3R5bGVbSl18fEVsZW1lbnQuU2hvcnRTdHlsZXNbSl0pe3JldHVy +biA7fUs9U3RyaW5nKEkuc3R5bGVbSl0pO0JbSl09KEsudGVzdCgvXnJnYi8pKT9L +LnJnYlRvSGV4KCk6SzsKfSk7fSk7fSk7cmV0dXJuIEZ4LkNTUy5DYWNoZVtBXT1C +O319KTtGeC5DU1MuQ2FjaGU9e307RnguQ1NTLlBhcnNlcnM9bmV3IEhhc2goe0Nv +bG9yOntwYXJzZTpmdW5jdGlvbihBKXtpZihBLm1hdGNoKC9eI1swLTlhLWZdezMs +Nn0kL2kpKXtyZXR1cm4gQS5oZXhUb1JnYih0cnVlKTsKfXJldHVybigoQT1BLm1h +dGNoKC8oXGQrKSxccyooXGQrKSxccyooXGQrKS8pKSk/W0FbMV0sQVsyXSxBWzNd +XTpmYWxzZTt9LGNvbXB1dGU6ZnVuY3Rpb24oQyxCLEEpe3JldHVybiBDLm1hcChm +dW5jdGlvbihFLEQpe3JldHVybiBNYXRoLnJvdW5kKEZ4LmNvbXB1dGUoQ1tEXSxC +W0RdLEEpKTsKfSk7fSxzZXJ2ZTpmdW5jdGlvbihBKXtyZXR1cm4gQS5tYXAoTnVt +YmVyKTt9fSxOdW1iZXI6e3BhcnNlOnBhcnNlRmxvYXQsY29tcHV0ZTpGeC5jb21w +dXRlLHNlcnZlOmZ1bmN0aW9uKEIsQSl7cmV0dXJuKEEpP0IrQTpCO319LFN0cmlu +Zzp7cGFyc2U6JGxhbWJkYShmYWxzZSksY29tcHV0ZTokYXJndW1lbnRzKDEpLHNl +cnZlOiRhcmd1bWVudHMoMCl9fSk7CkZ4LlR3ZWVuPW5ldyBDbGFzcyh7RXh0ZW5k +czpGeC5DU1MsaW5pdGlhbGl6ZTpmdW5jdGlvbihCLEEpe3RoaXMuZWxlbWVudD10 +aGlzLnN1YmplY3Q9JChCKTt0aGlzLnBhcmVudChBKTt9LHNldDpmdW5jdGlvbihC +LEEpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PTEpe0E9QjsKQj10aGlzLnByb3BlcnR5 +fHx0aGlzLm9wdGlvbnMucHJvcGVydHk7fXRoaXMucmVuZGVyKHRoaXMuZWxlbWVu +dCxCLEEsdGhpcy5vcHRpb25zLnVuaXQpO3JldHVybiB0aGlzO30sc3RhcnQ6ZnVu +Y3Rpb24oQyxFLEQpe2lmKCF0aGlzLmNoZWNrKGFyZ3VtZW50cy5jYWxsZWUsQyxF +LEQpKXtyZXR1cm4gdGhpczsKfXZhciBCPUFycmF5LmZsYXR0ZW4oYXJndW1lbnRz +KTt0aGlzLnByb3BlcnR5PXRoaXMub3B0aW9ucy5wcm9wZXJ0eXx8Qi5zaGlmdCgp +O3ZhciBBPXRoaXMucHJlcGFyZSh0aGlzLmVsZW1lbnQsdGhpcy5wcm9wZXJ0eSxC +KTtyZXR1cm4gdGhpcy5wYXJlbnQoQS5mcm9tLEEudG8pOwp9fSk7RWxlbWVudC5Q +cm9wZXJ0aWVzLnR3ZWVuPXtzZXQ6ZnVuY3Rpb24oQSl7dmFyIEI9dGhpcy5yZXRy +aWV2ZSgidHdlZW4iKTtpZihCKXtCLmNhbmNlbCgpO31yZXR1cm4gdGhpcy5lbGlt +aW5hdGUoInR3ZWVuIikuc3RvcmUoInR3ZWVuOm9wdGlvbnMiLCRleHRlbmQoe2xp +bms6ImNhbmNlbCJ9LEEpKTsKfSxnZXQ6ZnVuY3Rpb24oQSl7aWYoQXx8IXRoaXMu +cmV0cmlldmUoInR3ZWVuIikpe2lmKEF8fCF0aGlzLnJldHJpZXZlKCJ0d2Vlbjpv +cHRpb25zIikpe3RoaXMuc2V0KCJ0d2VlbiIsQSk7fXRoaXMuc3RvcmUoInR3ZWVu +IixuZXcgRnguVHdlZW4odGhpcyx0aGlzLnJldHJpZXZlKCJ0d2VlbjpvcHRpb25z +IikpKTsKfXJldHVybiB0aGlzLnJldHJpZXZlKCJ0d2VlbiIpO319O0VsZW1lbnQu +aW1wbGVtZW50KHt0d2VlbjpmdW5jdGlvbihBLEMsQil7dGhpcy5nZXQoInR3ZWVu +Iikuc3RhcnQoYXJndW1lbnRzKTtyZXR1cm4gdGhpczt9LGZhZGU6ZnVuY3Rpb24o +Qyl7dmFyIEU9dGhpcy5nZXQoInR3ZWVuIiksRD0ib3BhY2l0eSIsQTsKQz0kcGlj +ayhDLCJ0b2dnbGUiKTtzd2l0Y2goQyl7Y2FzZSJpbiI6RS5zdGFydChELDEpO2Jy +ZWFrO2Nhc2Uib3V0IjpFLnN0YXJ0KEQsMCk7YnJlYWs7Y2FzZSJzaG93IjpFLnNl +dChELDEpO2JyZWFrO2Nhc2UiaGlkZSI6RS5zZXQoRCwwKTticmVhaztjYXNlInRv +Z2dsZSI6dmFyIEI9dGhpcy5yZXRyaWV2ZSgiZmFkZTpmbGFnIix0aGlzLmdldCgi +b3BhY2l0eSIpPT0xKTsKRS5zdGFydChELChCKT8wOjEpO3RoaXMuc3RvcmUoImZh +ZGU6ZmxhZyIsIUIpO0E9dHJ1ZTticmVhaztkZWZhdWx0OkUuc3RhcnQoRCxhcmd1 +bWVudHMpO31pZighQSl7dGhpcy5lbGltaW5hdGUoImZhZGU6ZmxhZyIpO31yZXR1 +cm4gdGhpczt9LGhpZ2hsaWdodDpmdW5jdGlvbihDLEEpe2lmKCFBKXtBPXRoaXMu +cmV0cmlldmUoImhpZ2hsaWdodDpvcmlnaW5hbCIsdGhpcy5nZXRTdHlsZSgiYmFj +a2dyb3VuZC1jb2xvciIpKTsKQT0oQT09InRyYW5zcGFyZW50Iik/IiNmZmYiOkE7 +fXZhciBCPXRoaXMuZ2V0KCJ0d2VlbiIpO0Iuc3RhcnQoImJhY2tncm91bmQtY29s +b3IiLEN8fCIjZmZmZjg4IixBKS5jaGFpbihmdW5jdGlvbigpe3RoaXMuc2V0U3R5 +bGUoImJhY2tncm91bmQtY29sb3IiLHRoaXMucmV0cmlldmUoImhpZ2hsaWdodDpv +cmlnaW5hbCIpKTsKQi5jYWxsQ2hhaW4oKTt9LmJpbmQodGhpcykpO3JldHVybiB0 +aGlzO319KTtGeC5Nb3JwaD1uZXcgQ2xhc3Moe0V4dGVuZHM6RnguQ1NTLGluaXRp +YWxpemU6ZnVuY3Rpb24oQixBKXt0aGlzLmVsZW1lbnQ9dGhpcy5zdWJqZWN0PSQo +Qik7dGhpcy5wYXJlbnQoQSk7fSxzZXQ6ZnVuY3Rpb24oQSl7aWYodHlwZW9mIEE9 +PSJzdHJpbmciKXtBPXRoaXMuc2VhcmNoKEEpOwp9Zm9yKHZhciBCIGluIEEpe3Ro +aXMucmVuZGVyKHRoaXMuZWxlbWVudCxCLEFbQl0sdGhpcy5vcHRpb25zLnVuaXQp +O31yZXR1cm4gdGhpczt9LGNvbXB1dGU6ZnVuY3Rpb24oRSxELEMpe3ZhciBBPXt9 +O2Zvcih2YXIgQiBpbiBFKXtBW0JdPXRoaXMucGFyZW50KEVbQl0sRFtCXSxDKTsK +fXJldHVybiBBO30sc3RhcnQ6ZnVuY3Rpb24oQil7aWYoIXRoaXMuY2hlY2soYXJn +dW1lbnRzLmNhbGxlZSxCKSl7cmV0dXJuIHRoaXM7fWlmKHR5cGVvZiBCPT0ic3Ry +aW5nIil7Qj10aGlzLnNlYXJjaChCKTt9dmFyIEU9e30sRD17fTtmb3IodmFyIEMg +aW4gQil7dmFyIEE9dGhpcy5wcmVwYXJlKHRoaXMuZWxlbWVudCxDLEJbQ10pOwpF +W0NdPUEuZnJvbTtEW0NdPUEudG87fXJldHVybiB0aGlzLnBhcmVudChFLEQpO319 +KTtFbGVtZW50LlByb3BlcnRpZXMubW9ycGg9e3NldDpmdW5jdGlvbihBKXt2YXIg +Qj10aGlzLnJldHJpZXZlKCJtb3JwaCIpO2lmKEIpe0IuY2FuY2VsKCk7fXJldHVy +biB0aGlzLmVsaW1pbmF0ZSgibW9ycGgiKS5zdG9yZSgibW9ycGg6b3B0aW9ucyIs +JGV4dGVuZCh7bGluazoiY2FuY2VsIn0sQSkpOwp9LGdldDpmdW5jdGlvbihBKXtp +ZihBfHwhdGhpcy5yZXRyaWV2ZSgibW9ycGgiKSl7aWYoQXx8IXRoaXMucmV0cmll +dmUoIm1vcnBoOm9wdGlvbnMiKSl7dGhpcy5zZXQoIm1vcnBoIixBKTt9dGhpcy5z +dG9yZSgibW9ycGgiLG5ldyBGeC5Nb3JwaCh0aGlzLHRoaXMucmV0cmlldmUoIm1v +cnBoOm9wdGlvbnMiKSkpOwp9cmV0dXJuIHRoaXMucmV0cmlldmUoIm1vcnBoIik7 +fX07RWxlbWVudC5pbXBsZW1lbnQoe21vcnBoOmZ1bmN0aW9uKEEpe3RoaXMuZ2V0 +KCJtb3JwaCIpLnN0YXJ0KEEpO3JldHVybiB0aGlzO319KTsoZnVuY3Rpb24oKXt2 +YXIgQT1GeC5wcm90b3R5cGUuaW5pdGlhbGl6ZTsKRngucHJvdG90eXBlLmluaXRp +YWxpemU9ZnVuY3Rpb24oQil7QS5jYWxsKHRoaXMsQik7dmFyIEM9dGhpcy5vcHRp +b25zLnRyYW5zaXRpb247aWYodHlwZW9mIEM9PSJzdHJpbmciJiYoQz1DLnNwbGl0 +KCI6IikpKXt2YXIgRD1GeC5UcmFuc2l0aW9ucztEPURbQ1swXV18fERbQ1swXS5j +YXBpdGFsaXplKCldOwppZihDWzFdKXtEPURbImVhc2UiK0NbMV0uY2FwaXRhbGl6 +ZSgpKyhDWzJdP0NbMl0uY2FwaXRhbGl6ZSgpOiIiKV07fXRoaXMub3B0aW9ucy50 +cmFuc2l0aW9uPUQ7fX07fSkoKTtGeC5UcmFuc2l0aW9uPWZ1bmN0aW9uKEIsQSl7 +QT0kc3BsYXQoQSk7cmV0dXJuICRleHRlbmQoQix7ZWFzZUluOmZ1bmN0aW9uKEMp +e3JldHVybiBCKEMsQSk7Cn0sZWFzZU91dDpmdW5jdGlvbihDKXtyZXR1cm4gMS1C +KDEtQyxBKTt9LGVhc2VJbk91dDpmdW5jdGlvbihDKXtyZXR1cm4oQzw9MC41KT9C +KDIqQyxBKS8yOigyLUIoMiooMS1DKSxBKSkvMjt9fSk7fTtGeC5UcmFuc2l0aW9u +cz1uZXcgSGFzaCh7bGluZWFyOiRhcmd1bWVudHMoMCl9KTsKRnguVHJhbnNpdGlv +bnMuZXh0ZW5kPWZ1bmN0aW9uKEEpe2Zvcih2YXIgQiBpbiBBKXtGeC5UcmFuc2l0 +aW9uc1tCXT1uZXcgRnguVHJhbnNpdGlvbihBW0JdKTt9fTtGeC5UcmFuc2l0aW9u +cy5leHRlbmQoe1BvdzpmdW5jdGlvbihCLEEpe3JldHVybiBNYXRoLnBvdyhCLEFb +MF18fDYpOwp9LEV4cG86ZnVuY3Rpb24oQSl7cmV0dXJuIE1hdGgucG93KDIsOCoo +QS0xKSk7fSxDaXJjOmZ1bmN0aW9uKEEpe3JldHVybiAxLU1hdGguc2luKE1hdGgu +YWNvcyhBKSk7fSxTaW5lOmZ1bmN0aW9uKEEpe3JldHVybiAxLU1hdGguc2luKCgx +LUEpKk1hdGguUEkvMik7Cn0sQmFjazpmdW5jdGlvbihCLEEpe0E9QVswXXx8MS42 +MTg7cmV0dXJuIE1hdGgucG93KEIsMikqKChBKzEpKkItQSk7fSxCb3VuY2U6ZnVu +Y3Rpb24oRCl7dmFyIEM7Zm9yKHZhciBCPTAsQT0xOzE7Qis9QSxBLz0yKXtpZihE +Pj0oNy00KkIpLzExKXtDPS1NYXRoLnBvdygoMTEtNipCLTExKkQpLzQsMikrQSpB +OwpicmVhazt9fXJldHVybiBDO30sRWxhc3RpYzpmdW5jdGlvbihCLEEpe3JldHVy +biBNYXRoLnBvdygyLDEwKi0tQikqTWF0aC5jb3MoMjAqQipNYXRoLlBJKihBWzBd +fHwxKS8zKTt9fSk7WyJRdWFkIiwiQ3ViaWMiLCJRdWFydCIsIlF1aW50Il0uZWFj +aChmdW5jdGlvbihCLEEpe0Z4LlRyYW5zaXRpb25zW0JdPW5ldyBGeC5UcmFuc2l0 +aW9uKGZ1bmN0aW9uKEMpe3JldHVybiBNYXRoLnBvdyhDLFtBKzJdKTsKfSk7fSk7 +dmFyIFJlcXVlc3Q9bmV3IENsYXNzKHtJbXBsZW1lbnRzOltDaGFpbixFdmVudHMs +T3B0aW9uc10sb3B0aW9uczp7dXJsOiIiLGRhdGE6IiIsaGVhZGVyczp7IlgtUmVx +dWVzdGVkLVdpdGgiOiJYTUxIdHRwUmVxdWVzdCIsQWNjZXB0OiJ0ZXh0L2phdmFz +Y3JpcHQsIHRleHQvaHRtbCwgYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCwgKi8q +In0sYXN5bmM6dHJ1ZSxmb3JtYXQ6ZmFsc2UsbWV0aG9kOiJwb3N0IixsaW5rOiJp +Z25vcmUiLGlzU3VjY2VzczpudWxsLGVtdWxhdGlvbjp0cnVlLHVybEVuY29kZWQ6 +dHJ1ZSxlbmNvZGluZzoidXRmLTgiLGV2YWxTY3JpcHRzOmZhbHNlLGV2YWxSZXNw +b25zZTpmYWxzZX0saW5pdGlhbGl6ZTpmdW5jdGlvbihBKXt0aGlzLnhocj1uZXcg +QnJvd3Nlci5SZXF1ZXN0KCk7CnRoaXMuc2V0T3B0aW9ucyhBKTt0aGlzLm9wdGlv +bnMuaXNTdWNjZXNzPXRoaXMub3B0aW9ucy5pc1N1Y2Nlc3N8fHRoaXMuaXNTdWNj +ZXNzO3RoaXMuaGVhZGVycz1uZXcgSGFzaCh0aGlzLm9wdGlvbnMuaGVhZGVycyk7 +fSxvblN0YXRlQ2hhbmdlOmZ1bmN0aW9uKCl7aWYodGhpcy54aHIucmVhZHlTdGF0 +ZSE9NHx8IXRoaXMucnVubmluZyl7cmV0dXJuIDsKfXRoaXMucnVubmluZz1mYWxz +ZTt0aGlzLnN0YXR1cz0wOyR0cnkoZnVuY3Rpb24oKXt0aGlzLnN0YXR1cz10aGlz +Lnhoci5zdGF0dXM7fS5iaW5kKHRoaXMpKTtpZih0aGlzLm9wdGlvbnMuaXNTdWNj +ZXNzLmNhbGwodGhpcyx0aGlzLnN0YXR1cykpe3RoaXMucmVzcG9uc2U9e3RleHQ6 +dGhpcy54aHIucmVzcG9uc2VUZXh0LHhtbDp0aGlzLnhoci5yZXNwb25zZVhNTH07 +CnRoaXMuc3VjY2Vzcyh0aGlzLnJlc3BvbnNlLnRleHQsdGhpcy5yZXNwb25zZS54 +bWwpO31lbHNle3RoaXMucmVzcG9uc2U9e3RleHQ6bnVsbCx4bWw6bnVsbH07dGhp +cy5mYWlsdXJlKCk7fXRoaXMueGhyLm9ucmVhZHlzdGF0ZWNoYW5nZT0kZW1wdHk7 +fSxpc1N1Y2Nlc3M6ZnVuY3Rpb24oKXtyZXR1cm4oKHRoaXMuc3RhdHVzPj0yMDAp +JiYodGhpcy5zdGF0dXM8MzAwKSk7Cn0scHJvY2Vzc1NjcmlwdHM6ZnVuY3Rpb24o +QSl7aWYodGhpcy5vcHRpb25zLmV2YWxSZXNwb25zZXx8KC8oZWNtYXxqYXZhKXNj +cmlwdC8pLnRlc3QodGhpcy5nZXRIZWFkZXIoIkNvbnRlbnQtdHlwZSIpKSl7cmV0 +dXJuICRleGVjKEEpO31yZXR1cm4gQS5zdHJpcFNjcmlwdHModGhpcy5vcHRpb25z +LmV2YWxTY3JpcHRzKTsKfSxzdWNjZXNzOmZ1bmN0aW9uKEIsQSl7dGhpcy5vblN1 +Y2Nlc3ModGhpcy5wcm9jZXNzU2NyaXB0cyhCKSxBKTt9LG9uU3VjY2VzczpmdW5j +dGlvbigpe3RoaXMuZmlyZUV2ZW50KCJjb21wbGV0ZSIsYXJndW1lbnRzKS5maXJl +RXZlbnQoInN1Y2Nlc3MiLGFyZ3VtZW50cykuY2FsbENoYWluKCk7Cn0sZmFpbHVy +ZTpmdW5jdGlvbigpe3RoaXMub25GYWlsdXJlKCk7fSxvbkZhaWx1cmU6ZnVuY3Rp +b24oKXt0aGlzLmZpcmVFdmVudCgiY29tcGxldGUiKS5maXJlRXZlbnQoImZhaWx1 +cmUiLHRoaXMueGhyKTt9LHNldEhlYWRlcjpmdW5jdGlvbihBLEIpe3RoaXMuaGVh +ZGVycy5zZXQoQSxCKTsKcmV0dXJuIHRoaXM7fSxnZXRIZWFkZXI6ZnVuY3Rpb24o +QSl7cmV0dXJuICR0cnkoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54aHIuZ2V0UmVz +cG9uc2VIZWFkZXIoQSk7fS5iaW5kKHRoaXMpKTt9LGNoZWNrOmZ1bmN0aW9uKEEp +e2lmKCF0aGlzLnJ1bm5pbmcpe3JldHVybiB0cnVlOwp9c3dpdGNoKHRoaXMub3B0 +aW9ucy5saW5rKXtjYXNlImNhbmNlbCI6dGhpcy5jYW5jZWwoKTtyZXR1cm4gdHJ1 +ZTtjYXNlImNoYWluIjp0aGlzLmNoYWluKEEuYmluZCh0aGlzLEFycmF5LnNsaWNl +KGFyZ3VtZW50cywxKSkpO3JldHVybiBmYWxzZTt9cmV0dXJuIGZhbHNlOwp9LHNl +bmQ6ZnVuY3Rpb24oSSl7aWYoIXRoaXMuY2hlY2soYXJndW1lbnRzLmNhbGxlZSxJ +KSl7cmV0dXJuIHRoaXM7fXRoaXMucnVubmluZz10cnVlO3ZhciBHPSR0eXBlKEkp +O2lmKEc9PSJzdHJpbmcifHxHPT0iZWxlbWVudCIpe0k9e2RhdGE6SX07fXZhciBE +PXRoaXMub3B0aW9uczsKST0kZXh0ZW5kKHtkYXRhOkQuZGF0YSx1cmw6RC51cmws +bWV0aG9kOkQubWV0aG9kfSxJKTt2YXIgRT1JLmRhdGEsQj1JLnVybCxBPUkubWV0 +aG9kO3N3aXRjaCgkdHlwZShFKSl7Y2FzZSJlbGVtZW50IjpFPSQoRSkudG9RdWVy +eVN0cmluZygpO2JyZWFrO2Nhc2Uib2JqZWN0IjpjYXNlImhhc2giOkU9SGFzaC50 +b1F1ZXJ5U3RyaW5nKEUpOwp9aWYodGhpcy5vcHRpb25zLmZvcm1hdCl7dmFyIEg9 +ImZvcm1hdD0iK3RoaXMub3B0aW9ucy5mb3JtYXQ7RT0oRSk/SCsiJiIrRTpIO31p +Zih0aGlzLm9wdGlvbnMuZW11bGF0aW9uJiZbInB1dCIsImRlbGV0ZSJdLmNvbnRh +aW5zKEEpKXt2YXIgRj0iX21ldGhvZD0iK0E7CkU9KEUpP0YrIiYiK0U6RjtBPSJw +b3N0Ijt9aWYodGhpcy5vcHRpb25zLnVybEVuY29kZWQmJkE9PSJwb3N0Iil7dmFy +IEM9KHRoaXMub3B0aW9ucy5lbmNvZGluZyk/IjsgY2hhcnNldD0iK3RoaXMub3B0 +aW9ucy5lbmNvZGluZzoiIjt0aGlzLmhlYWRlcnMuc2V0KCJDb250ZW50LXR5cGUi +LCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiK0MpOwp9aWYoRSYm +QT09ImdldCIpe0I9QisoQi5jb250YWlucygiPyIpPyImIjoiPyIpK0U7RT1udWxs +O310aGlzLnhoci5vcGVuKEEudG9VcHBlckNhc2UoKSxCLHRoaXMub3B0aW9ucy5h +c3luYyk7dGhpcy54aHIub25yZWFkeXN0YXRlY2hhbmdlPXRoaXMub25TdGF0ZUNo +YW5nZS5iaW5kKHRoaXMpOwp0aGlzLmhlYWRlcnMuZWFjaChmdW5jdGlvbihLLEop +e2lmKCEkdHJ5KGZ1bmN0aW9uKCl7dGhpcy54aHIuc2V0UmVxdWVzdEhlYWRlcihK +LEspO3JldHVybiB0cnVlO30uYmluZCh0aGlzKSkpe3RoaXMuZmlyZUV2ZW50KCJl +eGNlcHRpb24iLFtKLEtdKTt9fSx0aGlzKTsKdGhpcy5maXJlRXZlbnQoInJlcXVl +c3QiKTt0aGlzLnhoci5zZW5kKEUpO2lmKCF0aGlzLm9wdGlvbnMuYXN5bmMpe3Ro +aXMub25TdGF0ZUNoYW5nZSgpO31yZXR1cm4gdGhpczt9LGNhbmNlbDpmdW5jdGlv +bigpe2lmKCF0aGlzLnJ1bm5pbmcpe3JldHVybiB0aGlzOwp9dGhpcy5ydW5uaW5n +PWZhbHNlO3RoaXMueGhyLmFib3J0KCk7dGhpcy54aHIub25yZWFkeXN0YXRlY2hh +bmdlPSRlbXB0eTt0aGlzLnhocj1uZXcgQnJvd3Nlci5SZXF1ZXN0KCk7dGhpcy5m +aXJlRXZlbnQoImNhbmNlbCIpO3JldHVybiB0aGlzO319KTsoZnVuY3Rpb24oKXt2 +YXIgQT17fTsKWyJnZXQiLCJwb3N0IiwicHV0IiwiZGVsZXRlIiwiR0VUIiwiUE9T +VCIsIlBVVCIsIkRFTEVURSJdLmVhY2goZnVuY3Rpb24oQil7QVtCXT1mdW5jdGlv +bigpe3ZhciBDPUFycmF5LmxpbmsoYXJndW1lbnRzLHt1cmw6U3RyaW5nLnR5cGUs +ZGF0YTokZGVmaW5lZH0pOwpyZXR1cm4gdGhpcy5zZW5kKCRleHRlbmQoQyx7bWV0 +aG9kOkIudG9Mb3dlckNhc2UoKX0pKTt9O30pO1JlcXVlc3QuaW1wbGVtZW50KEEp +O30pKCk7RWxlbWVudC5Qcm9wZXJ0aWVzLnNlbmQ9e3NldDpmdW5jdGlvbihBKXt2 +YXIgQj10aGlzLnJldHJpZXZlKCJzZW5kIik7CmlmKEIpe0IuY2FuY2VsKCk7fXJl +dHVybiB0aGlzLmVsaW1pbmF0ZSgic2VuZCIpLnN0b3JlKCJzZW5kOm9wdGlvbnMi +LCRleHRlbmQoe2RhdGE6dGhpcyxsaW5rOiJjYW5jZWwiLG1ldGhvZDp0aGlzLmdl +dCgibWV0aG9kIil8fCJwb3N0Iix1cmw6dGhpcy5nZXQoImFjdGlvbiIpfSxBKSk7 +Cn0sZ2V0OmZ1bmN0aW9uKEEpe2lmKEF8fCF0aGlzLnJldHJpZXZlKCJzZW5kIikp +e2lmKEF8fCF0aGlzLnJldHJpZXZlKCJzZW5kOm9wdGlvbnMiKSl7dGhpcy5zZXQo +InNlbmQiLEEpO310aGlzLnN0b3JlKCJzZW5kIixuZXcgUmVxdWVzdCh0aGlzLnJl +dHJpZXZlKCJzZW5kOm9wdGlvbnMiKSkpOwp9cmV0dXJuIHRoaXMucmV0cmlldmUo +InNlbmQiKTt9fTtFbGVtZW50LmltcGxlbWVudCh7c2VuZDpmdW5jdGlvbihBKXt2 +YXIgQj10aGlzLmdldCgic2VuZCIpO0Iuc2VuZCh7ZGF0YTp0aGlzLHVybDpBfHxC +Lm9wdGlvbnMudXJsfSk7cmV0dXJuIHRoaXM7fX0pO1JlcXVlc3QuSFRNTD1uZXcg +Q2xhc3Moe0V4dGVuZHM6UmVxdWVzdCxvcHRpb25zOnt1cGRhdGU6ZmFsc2UsZXZh +bFNjcmlwdHM6dHJ1ZSxmaWx0ZXI6ZmFsc2V9LHByb2Nlc3NIVE1MOmZ1bmN0aW9u +KEMpe3ZhciBCPUMubWF0Y2goLzxib2R5W14+XSo+KFtcc1xTXSo/KTxcL2JvZHk+ +L2kpOwpDPShCKT9CWzFdOkM7dmFyIEE9bmV3IEVsZW1lbnQoImRpdiIpO3JldHVy +biAkdHJ5KGZ1bmN0aW9uKCl7dmFyIEQ9Ijxyb290PiIrQysiPC9yb290PiIsRztp +ZihCcm93c2VyLkVuZ2luZS50cmlkZW50KXtHPW5ldyBBY3RpdmVYT2JqZWN0KCJN +aWNyb3NvZnQuWE1MRE9NIik7CkcuYXN5bmM9ZmFsc2U7Ry5sb2FkWE1MKEQpO31l +bHNle0c9bmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhELCJ0ZXh0L3ht +bCIpO31EPUcuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInJvb3QiKVswXTtmb3IodmFy +IEY9MCxFPUQuY2hpbGROb2Rlcy5sZW5ndGg7CkY8RTtGKyspe3ZhciBIPUVsZW1l +bnQuY2xvbmUoRC5jaGlsZE5vZGVzW0ZdLHRydWUsdHJ1ZSk7aWYoSCl7QS5ncmFi +KEgpO319cmV0dXJuIEE7fSl8fEEuc2V0KCJodG1sIixDKTt9LHN1Y2Nlc3M6ZnVu +Y3Rpb24oRCl7dmFyIEM9dGhpcy5vcHRpb25zLEI9dGhpcy5yZXNwb25zZTsKQi5o +dG1sPUQuc3RyaXBTY3JpcHRzKGZ1bmN0aW9uKEUpe0IuamF2YXNjcmlwdD1FO30p +O3ZhciBBPXRoaXMucHJvY2Vzc0hUTUwoQi5odG1sKTtCLnRyZWU9QS5jaGlsZE5v +ZGVzO0IuZWxlbWVudHM9QS5nZXRFbGVtZW50cygiKiIpO2lmKEMuZmlsdGVyKXtC +LnRyZWU9Qi5lbGVtZW50cy5maWx0ZXIoQy5maWx0ZXIpOwp9aWYoQy51cGRhdGUp +eyQoQy51cGRhdGUpLmVtcHR5KCkuYWRvcHQoQi50cmVlKTt9aWYoQy5ldmFsU2Ny +aXB0cyl7JGV4ZWMoQi5qYXZhc2NyaXB0KTt9dGhpcy5vblN1Y2Nlc3MoQi50cmVl +LEIuZWxlbWVudHMsQi5odG1sLEIuamF2YXNjcmlwdCk7fX0pO0VsZW1lbnQuUHJv +cGVydGllcy5sb2FkPXtzZXQ6ZnVuY3Rpb24oQSl7dmFyIEI9dGhpcy5yZXRyaWV2 +ZSgibG9hZCIpOwppZihCKXtzZW5kLmNhbmNlbCgpO31yZXR1cm4gdGhpcy5lbGlt +aW5hdGUoImxvYWQiKS5zdG9yZSgibG9hZDpvcHRpb25zIiwkZXh0ZW5kKHtkYXRh +OnRoaXMsbGluazoiY2FuY2VsIix1cGRhdGU6dGhpcyxtZXRob2Q6ImdldCJ9LEEp +KTt9LGdldDpmdW5jdGlvbihBKXtpZihBfHwhdGhpcy5yZXRyaWV2ZSgibG9hZCIp +KXtpZihBfHwhdGhpcy5yZXRyaWV2ZSgibG9hZDpvcHRpb25zIikpe3RoaXMuc2V0 +KCJsb2FkIixBKTsKfXRoaXMuc3RvcmUoImxvYWQiLG5ldyBSZXF1ZXN0LkhUTUwo +dGhpcy5yZXRyaWV2ZSgibG9hZDpvcHRpb25zIikpKTt9cmV0dXJuIHRoaXMucmV0 +cmlldmUoImxvYWQiKTt9fTtFbGVtZW50LmltcGxlbWVudCh7bG9hZDpmdW5jdGlv +bigpe3RoaXMuZ2V0KCJsb2FkIikuc2VuZChBcnJheS5saW5rKGFyZ3VtZW50cyx7 +ZGF0YTpPYmplY3QudHlwZSx1cmw6U3RyaW5nLnR5cGV9KSk7CnJldHVybiB0aGlz +O319KTtSZXF1ZXN0LkpTT049bmV3IENsYXNzKHtFeHRlbmRzOlJlcXVlc3Qsb3B0 +aW9uczp7c2VjdXJlOnRydWV9LGluaXRpYWxpemU6ZnVuY3Rpb24oQSl7dGhpcy5w +YXJlbnQoQSk7dGhpcy5oZWFkZXJzLmV4dGVuZCh7QWNjZXB0OiJhcHBsaWNhdGlv +bi9qc29uIiwiWC1SZXF1ZXN0IjoiSlNPTiJ9KTsKfSxzdWNjZXNzOmZ1bmN0aW9u +KEEpe3RoaXMucmVzcG9uc2UuanNvbj1KU09OLmRlY29kZShBLHRoaXMub3B0aW9u +cy5zZWN1cmUpO3RoaXMub25TdWNjZXNzKHRoaXMucmVzcG9uc2UuanNvbixBKTt9 +fSk7Ci8vTW9vVG9vbHMgTW9yZSwgPGh0dHA6Ly9tb290b29scy5uZXQvbW9yZT4u +IENvcHlyaWdodCAoYykgMjAwNi0yMDA4IFZhbGVyaW8gUHJvaWV0dGksIDxodHRw +Oi8vbWFkNG1pbGsubmV0PiwgTUlUIFN0eWxlIExpY2Vuc2UuCnZhciBBc3NldD1u +ZXcgSGFzaCh7amF2YXNjcmlwdDpmdW5jdGlvbihGLEQpe0Q9JGV4dGVuZCh7b25s +b2FkOiRlbXB0eSxkb2N1bWVudDpkb2N1bWVudCxjaGVjazokbGFtYmRhKHRydWUp +fSxEKTt2YXIgQj1uZXcgRWxlbWVudCgic2NyaXB0Iix7c3JjOkYsdHlwZToidGV4 +dC9qYXZhc2NyaXB0In0pOwp2YXIgRT1ELm9ubG9hZC5iaW5kKEIpLEE9RC5jaGVj +ayxHPUQuZG9jdW1lbnQ7ZGVsZXRlIEQub25sb2FkO2RlbGV0ZSBELmNoZWNrO2Rl +bGV0ZSBELmRvY3VtZW50O0IuYWRkRXZlbnRzKHtsb2FkOkUscmVhZHlzdGF0ZWNo +YW5nZTpmdW5jdGlvbigpe2lmKFsibG9hZGVkIiwiY29tcGxldGUiXS5jb250YWlu +cyh0aGlzLnJlYWR5U3RhdGUpKXtFKCk7Cn19fSkuc2V0UHJvcGVydGllcyhEKTtp +ZihCcm93c2VyLkVuZ2luZS53ZWJraXQ0MTkpe3ZhciBDPShmdW5jdGlvbigpe2lm +KCEkdHJ5KEEpKXtyZXR1cm4gO30kY2xlYXIoQyk7RSgpO30pLnBlcmlvZGljYWwo +NTApO31yZXR1cm4gQi5pbmplY3QoRy5oZWFkKTt9LGNzczpmdW5jdGlvbihCLEEp +e3JldHVybiBuZXcgRWxlbWVudCgibGluayIsJG1lcmdlKHtyZWw6InN0eWxlc2hl +ZXQiLG1lZGlhOiJzY3JlZW4iLHR5cGU6InRleHQvY3NzIixocmVmOkJ9LEEpKS5p +bmplY3QoZG9jdW1lbnQuaGVhZCk7Cn0saW1hZ2U6ZnVuY3Rpb24oQyxCKXtCPSRt +ZXJnZSh7b25sb2FkOiRlbXB0eSxvbmFib3J0OiRlbXB0eSxvbmVycm9yOiRlbXB0 +eX0sQik7dmFyIEQ9bmV3IEltYWdlKCk7dmFyIEE9JChEKXx8bmV3IEVsZW1lbnQo +ImltZyIpO1sibG9hZCIsImFib3J0IiwiZXJyb3IiXS5lYWNoKGZ1bmN0aW9uKEUp +e3ZhciBGPSJvbiIrRTsKdmFyIEc9QltGXTtkZWxldGUgQltGXTtEW0ZdPWZ1bmN0 +aW9uKCl7aWYoIUQpe3JldHVybiA7fWlmKCFBLnBhcmVudE5vZGUpe0Eud2lkdGg9 +RC53aWR0aDtBLmhlaWdodD1ELmhlaWdodDt9RD1ELm9ubG9hZD1ELm9uYWJvcnQ9 +RC5vbmVycm9yPW51bGw7Ry5kZWxheSgxLEEsQSk7CkEuZmlyZUV2ZW50KEUsQSwx +KTt9O30pO0Quc3JjPUEuc3JjPUM7aWYoRCYmRC5jb21wbGV0ZSl7RC5vbmxvYWQu +ZGVsYXkoMSk7fXJldHVybiBBLnNldFByb3BlcnRpZXMoQik7fSxpbWFnZXM6ZnVu +Y3Rpb24oRCxDKXtDPSRtZXJnZSh7b25Db21wbGV0ZTokZW1wdHksb25Qcm9ncmVz +czokZW1wdHl9LEMpOwppZighRC5wdXNoKXtEPVtEXTt9dmFyIEE9W107dmFyIEI9 +MDtELmVhY2goZnVuY3Rpb24oRil7dmFyIEU9bmV3IEFzc2V0LmltYWdlKEYse29u +bG9hZDpmdW5jdGlvbigpe0Mub25Qcm9ncmVzcy5jYWxsKHRoaXMsQixELmluZGV4 +T2YoRikpO0IrKztpZihCPT1ELmxlbmd0aCl7Qy5vbkNvbXBsZXRlKCk7Cn19fSk7 +QS5wdXNoKEUpO30pO3JldHVybiBuZXcgRWxlbWVudHMoQSk7fX0pOwovL01vb1Rv +b2xzIE1vcmUsIDxodHRwOi8vbW9vdG9vbHMubmV0L21vcmU+LiBDb3B5cmlnaHQg +KGMpIDIwMDYtMjAwOCBWYWxlcmlvIFByb2lldHRpLCA8aHR0cDovL21hZDRtaWxr +Lm5ldD4sIE1JVCBTdHlsZSBMaWNlbnNlLgpGeC5TY3JvbGw9bmV3IENsYXNzKHtF +eHRlbmRzOkZ4LG9wdGlvbnM6e29mZnNldDp7eDowLHk6MH0sd2hlZWxTdG9wczp0 +cnVlfSxpbml0aWFsaXplOmZ1bmN0aW9uKEIsQSl7dGhpcy5lbGVtZW50PXRoaXMu +c3ViamVjdD0kKEIpO3RoaXMucGFyZW50KEEpO3ZhciBEPXRoaXMuY2FuY2VsLmJp +bmQodGhpcyxmYWxzZSk7CmlmKCR0eXBlKHRoaXMuZWxlbWVudCkhPSJlbGVtZW50 +Iil7dGhpcy5lbGVtZW50PSQodGhpcy5lbGVtZW50LmdldERvY3VtZW50KCkuYm9k +eSk7fXZhciBDPXRoaXMuZWxlbWVudDtpZih0aGlzLm9wdGlvbnMud2hlZWxTdG9w +cyl7dGhpcy5hZGRFdmVudCgic3RhcnQiLGZ1bmN0aW9uKCl7Qy5hZGRFdmVudCgi +bW91c2V3aGVlbCIsRCk7Cn0sdHJ1ZSk7dGhpcy5hZGRFdmVudCgiY29tcGxldGUi +LGZ1bmN0aW9uKCl7Qy5yZW1vdmVFdmVudCgibW91c2V3aGVlbCIsRCk7fSx0cnVl +KTt9fSxzZXQ6ZnVuY3Rpb24oKXt2YXIgQT1BcnJheS5mbGF0dGVuKGFyZ3VtZW50 +cyk7dGhpcy5lbGVtZW50LnNjcm9sbFRvKEFbMF0sQVsxXSk7Cn0sY29tcHV0ZTpm +dW5jdGlvbihFLEQsQyl7dmFyIEI9W107dmFyIEE9MjtBLnRpbWVzKGZ1bmN0aW9u +KEYpe0IucHVzaChGeC5jb21wdXRlKEVbRl0sRFtGXSxDKSk7fSk7cmV0dXJuIEI7 +fSxzdGFydDpmdW5jdGlvbihDLEgpe2lmKCF0aGlzLmNoZWNrKGFyZ3VtZW50cy5j +YWxsZWUsQyxIKSl7cmV0dXJuIHRoaXM7Cn12YXIgRT10aGlzLmVsZW1lbnQuZ2V0 +U2l6ZSgpLEY9dGhpcy5lbGVtZW50LmdldFNjcm9sbFNpemUoKTt2YXIgQj10aGlz +LmVsZW1lbnQuZ2V0U2Nyb2xsKCksRD17eDpDLHk6SH07Zm9yKHZhciBHIGluIEQp +e3ZhciBBPUZbR10tRVtHXTtpZigkY2hrKERbR10pKXtEW0ddPSgkdHlwZShEW0dd +KT09Im51bWJlciIpP0RbR10ubGltaXQoMCxBKTpBOwp9ZWxzZXtEW0ddPUJbR107 +fURbR10rPXRoaXMub3B0aW9ucy5vZmZzZXRbR107fXJldHVybiB0aGlzLnBhcmVu +dChbQi54LEIueV0sW0QueCxELnldKTt9LHRvVG9wOmZ1bmN0aW9uKCl7cmV0dXJu +IHRoaXMuc3RhcnQoZmFsc2UsMCk7fSx0b0xlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4g +dGhpcy5zdGFydCgwLGZhbHNlKTsKfSx0b1JpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJu +IHRoaXMuc3RhcnQoInJpZ2h0IixmYWxzZSk7fSx0b0JvdHRvbTpmdW5jdGlvbigp +e3JldHVybiB0aGlzLnN0YXJ0KGZhbHNlLCJib3R0b20iKTt9LHRvRWxlbWVudDpm +dW5jdGlvbihCKXt2YXIgQT0kKEIpLmdldFBvc2l0aW9uKHRoaXMuZWxlbWVudCk7 +CnJldHVybiB0aGlzLnN0YXJ0KEEueCxBLnkpO319KTsKLy9Nb29Ub29scyBNb3Jl +LCA8aHR0cDovL21vb3Rvb2xzLm5ldC9tb3JlPi4gQ29weXJpZ2h0IChjKSAyMDA2 +LTIwMDggVmFsZXJpbyBQcm9pZXR0aSwgPGh0dHA6Ly9tYWQ0bWlsay5uZXQ+LCBN +SVQgU3R5bGUgTGljZW5zZS4KdmFyIERyYWc9bmV3IENsYXNzKHtJbXBsZW1lbnRz +OltFdmVudHMsT3B0aW9uc10sb3B0aW9uczp7c25hcDo2LHVuaXQ6InB4Iixncmlk +OmZhbHNlLHN0eWxlOnRydWUsbGltaXQ6ZmFsc2UsaGFuZGxlOmZhbHNlLGludmVy +dDpmYWxzZSxwcmV2ZW50RGVmYXVsdDpmYWxzZSxtb2RpZmllcnM6e3g6ImxlZnQi +LHk6InRvcCJ9fSxpbml0aWFsaXplOmZ1bmN0aW9uKCl7dmFyIEI9QXJyYXkubGlu +ayhhcmd1bWVudHMse29wdGlvbnM6T2JqZWN0LnR5cGUsZWxlbWVudDokZGVmaW5l +ZH0pOwp0aGlzLmVsZW1lbnQ9JChCLmVsZW1lbnQpO3RoaXMuZG9jdW1lbnQ9dGhp +cy5lbGVtZW50LmdldERvY3VtZW50KCk7dGhpcy5zZXRPcHRpb25zKEIub3B0aW9u +c3x8e30pO3ZhciBBPSR0eXBlKHRoaXMub3B0aW9ucy5oYW5kbGUpO3RoaXMuaGFu +ZGxlcz0oQT09ImFycmF5Inx8QT09ImNvbGxlY3Rpb24iKT8kJCh0aGlzLm9wdGlv +bnMuaGFuZGxlKTokKHRoaXMub3B0aW9ucy5oYW5kbGUpfHx0aGlzLmVsZW1lbnQ7 +CnRoaXMubW91c2U9e25vdzp7fSxwb3M6e319O3RoaXMudmFsdWU9e3N0YXJ0Ont9 +LG5vdzp7fX07dGhpcy5zZWxlY3Rpb249KEJyb3dzZXIuRW5naW5lLnRyaWRlbnQp +PyJzZWxlY3RzdGFydCI6Im1vdXNlZG93biI7dGhpcy5ib3VuZD17c3RhcnQ6dGhp +cy5zdGFydC5iaW5kKHRoaXMpLGNoZWNrOnRoaXMuY2hlY2suYmluZCh0aGlzKSxk +cmFnOnRoaXMuZHJhZy5iaW5kKHRoaXMpLHN0b3A6dGhpcy5zdG9wLmJpbmQodGhp +cyksY2FuY2VsOnRoaXMuY2FuY2VsLmJpbmQodGhpcyksZXZlbnRTdG9wOiRsYW1i +ZGEoZmFsc2UpfTsKdGhpcy5hdHRhY2goKTt9LGF0dGFjaDpmdW5jdGlvbigpe3Ro +aXMuaGFuZGxlcy5hZGRFdmVudCgibW91c2Vkb3duIix0aGlzLmJvdW5kLnN0YXJ0 +KTtyZXR1cm4gdGhpczt9LGRldGFjaDpmdW5jdGlvbigpe3RoaXMuaGFuZGxlcy5y +ZW1vdmVFdmVudCgibW91c2Vkb3duIix0aGlzLmJvdW5kLnN0YXJ0KTsKcmV0dXJu +IHRoaXM7fSxzdGFydDpmdW5jdGlvbihDKXtpZih0aGlzLm9wdGlvbnMucHJldmVu +dERlZmF1bHQpe0MucHJldmVudERlZmF1bHQoKTt9dGhpcy5maXJlRXZlbnQoImJl +Zm9yZVN0YXJ0Iix0aGlzLmVsZW1lbnQpO3RoaXMubW91c2Uuc3RhcnQ9Qy5wYWdl +Owp2YXIgQT10aGlzLm9wdGlvbnMubGltaXQ7dGhpcy5saW1pdD17eDpbXSx5Oltd +fTtmb3IodmFyIEQgaW4gdGhpcy5vcHRpb25zLm1vZGlmaWVycyl7aWYoIXRoaXMu +b3B0aW9ucy5tb2RpZmllcnNbRF0pe2NvbnRpbnVlO31pZih0aGlzLm9wdGlvbnMu +c3R5bGUpe3RoaXMudmFsdWUubm93W0RdPXRoaXMuZWxlbWVudC5nZXRTdHlsZSh0 +aGlzLm9wdGlvbnMubW9kaWZpZXJzW0RdKS50b0ludCgpOwp9ZWxzZXt0aGlzLnZh +bHVlLm5vd1tEXT10aGlzLmVsZW1lbnRbdGhpcy5vcHRpb25zLm1vZGlmaWVyc1tE +XV07fWlmKHRoaXMub3B0aW9ucy5pbnZlcnQpe3RoaXMudmFsdWUubm93W0RdKj0t +MTt9dGhpcy5tb3VzZS5wb3NbRF09Qy5wYWdlW0RdLXRoaXMudmFsdWUubm93W0Rd +OwppZihBJiZBW0RdKXtmb3IodmFyIEI9MjtCLS07Qil7aWYoJGNoayhBW0RdW0Jd +KSl7dGhpcy5saW1pdFtEXVtCXT0kbGFtYmRhKEFbRF1bQl0pKCk7fX19fWlmKCR0 +eXBlKHRoaXMub3B0aW9ucy5ncmlkKT09Im51bWJlciIpe3RoaXMub3B0aW9ucy5n +cmlkPXt4OnRoaXMub3B0aW9ucy5ncmlkLHk6dGhpcy5vcHRpb25zLmdyaWR9Owp9 +dGhpcy5kb2N1bWVudC5hZGRFdmVudHMoe21vdXNlbW92ZTp0aGlzLmJvdW5kLmNo +ZWNrLG1vdXNldXA6dGhpcy5ib3VuZC5jYW5jZWx9KTt0aGlzLmRvY3VtZW50LmFk +ZEV2ZW50KHRoaXMuc2VsZWN0aW9uLHRoaXMuYm91bmQuZXZlbnRTdG9wKTt9LGNo +ZWNrOmZ1bmN0aW9uKEEpe2lmKHRoaXMub3B0aW9ucy5wcmV2ZW50RGVmYXVsdCl7 +QS5wcmV2ZW50RGVmYXVsdCgpOwp9dmFyIEI9TWF0aC5yb3VuZChNYXRoLnNxcnQo +TWF0aC5wb3coQS5wYWdlLngtdGhpcy5tb3VzZS5zdGFydC54LDIpK01hdGgucG93 +KEEucGFnZS55LXRoaXMubW91c2Uuc3RhcnQueSwyKSkpO2lmKEI+dGhpcy5vcHRp +b25zLnNuYXApe3RoaXMuY2FuY2VsKCk7dGhpcy5kb2N1bWVudC5hZGRFdmVudHMo +e21vdXNlbW92ZTp0aGlzLmJvdW5kLmRyYWcsbW91c2V1cDp0aGlzLmJvdW5kLnN0 +b3B9KTsKdGhpcy5maXJlRXZlbnQoInN0YXJ0Iix0aGlzLmVsZW1lbnQpLmZpcmVF +dmVudCgic25hcCIsdGhpcy5lbGVtZW50KTt9fSxkcmFnOmZ1bmN0aW9uKEEpe2lm +KHRoaXMub3B0aW9ucy5wcmV2ZW50RGVmYXVsdCl7QS5wcmV2ZW50RGVmYXVsdCgp +O310aGlzLm1vdXNlLm5vdz1BLnBhZ2U7CmZvcih2YXIgQiBpbiB0aGlzLm9wdGlv +bnMubW9kaWZpZXJzKXtpZighdGhpcy5vcHRpb25zLm1vZGlmaWVyc1tCXSl7Y29u +dGludWU7fXRoaXMudmFsdWUubm93W0JdPXRoaXMubW91c2Uubm93W0JdLXRoaXMu +bW91c2UucG9zW0JdO2lmKHRoaXMub3B0aW9ucy5pbnZlcnQpe3RoaXMudmFsdWUu +bm93W0JdKj0tMTsKfWlmKHRoaXMub3B0aW9ucy5saW1pdCYmdGhpcy5saW1pdFtC +XSl7aWYoJGNoayh0aGlzLmxpbWl0W0JdWzFdKSYmKHRoaXMudmFsdWUubm93W0Jd +PnRoaXMubGltaXRbQl1bMV0pKXt0aGlzLnZhbHVlLm5vd1tCXT10aGlzLmxpbWl0 +W0JdWzFdO31lbHNle2lmKCRjaGsodGhpcy5saW1pdFtCXVswXSkmJih0aGlzLnZh +bHVlLm5vd1tCXTx0aGlzLmxpbWl0W0JdWzBdKSl7dGhpcy52YWx1ZS5ub3dbQl09 +dGhpcy5saW1pdFtCXVswXTsKfX19aWYodGhpcy5vcHRpb25zLmdyaWRbQl0pe3Ro +aXMudmFsdWUubm93W0JdLT0odGhpcy52YWx1ZS5ub3dbQl0ldGhpcy5vcHRpb25z +LmdyaWRbQl0pO31pZih0aGlzLm9wdGlvbnMuc3R5bGUpe3RoaXMuZWxlbWVudC5z +ZXRTdHlsZSh0aGlzLm9wdGlvbnMubW9kaWZpZXJzW0JdLHRoaXMudmFsdWUubm93 +W0JdK3RoaXMub3B0aW9ucy51bml0KTsKfWVsc2V7dGhpcy5lbGVtZW50W3RoaXMu +b3B0aW9ucy5tb2RpZmllcnNbQl1dPXRoaXMudmFsdWUubm93W0JdO319dGhpcy5m +aXJlRXZlbnQoImRyYWciLHRoaXMuZWxlbWVudCk7fSxjYW5jZWw6ZnVuY3Rpb24o +QSl7dGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudCgibW91c2Vtb3ZlIix0aGlzLmJv +dW5kLmNoZWNrKTsKdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudCgibW91c2V1cCIs +dGhpcy5ib3VuZC5jYW5jZWwpO2lmKEEpe3RoaXMuZG9jdW1lbnQucmVtb3ZlRXZl +bnQodGhpcy5zZWxlY3Rpb24sdGhpcy5ib3VuZC5ldmVudFN0b3ApO3RoaXMuZmly +ZUV2ZW50KCJjYW5jZWwiLHRoaXMuZWxlbWVudCk7Cn19LHN0b3A6ZnVuY3Rpb24o +QSl7dGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudCh0aGlzLnNlbGVjdGlvbix0aGlz +LmJvdW5kLmV2ZW50U3RvcCk7dGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudCgibW91 +c2Vtb3ZlIix0aGlzLmJvdW5kLmRyYWcpO3RoaXMuZG9jdW1lbnQucmVtb3ZlRXZl +bnQoIm1vdXNldXAiLHRoaXMuYm91bmQuc3RvcCk7CmlmKEEpe3RoaXMuZmlyZUV2 +ZW50KCJjb21wbGV0ZSIsdGhpcy5lbGVtZW50KTt9fX0pO0VsZW1lbnQuaW1wbGVt +ZW50KHttYWtlUmVzaXphYmxlOmZ1bmN0aW9uKEEpe3JldHVybiBuZXcgRHJhZyh0 +aGlzLCRtZXJnZSh7bW9kaWZpZXJzOnt4OiJ3aWR0aCIseToiaGVpZ2h0In19LEEp +KTsKfX0pO3ZhciBTbGlkZXI9bmV3IENsYXNzKHtJbXBsZW1lbnRzOltFdmVudHMs +T3B0aW9uc10sb3B0aW9uczp7b25UaWNrOmZ1bmN0aW9uKEEpe2lmKHRoaXMub3B0 +aW9ucy5zbmFwKXtBPXRoaXMudG9Qb3NpdGlvbih0aGlzLnN0ZXApO310aGlzLmtu +b2Iuc2V0U3R5bGUodGhpcy5wcm9wZXJ0eSxBKTsKfSxzbmFwOmZhbHNlLG9mZnNl +dDowLHJhbmdlOmZhbHNlLHdoZWVsOmZhbHNlLHN0ZXBzOjEwMCxtb2RlOiJob3Jp +em9udGFsIn0saW5pdGlhbGl6ZTpmdW5jdGlvbihFLEEsRCl7dGhpcy5zZXRPcHRp +b25zKEQpO3RoaXMuZWxlbWVudD0kKEUpO3RoaXMua25vYj0kKEEpOwp0aGlzLnBy +ZXZpb3VzQ2hhbmdlPXRoaXMucHJldmlvdXNFbmQ9dGhpcy5zdGVwPS0xO3RoaXMu +ZWxlbWVudC5hZGRFdmVudCgibW91c2Vkb3duIix0aGlzLmNsaWNrZWRFbGVtZW50 +LmJpbmQodGhpcykpO2lmKHRoaXMub3B0aW9ucy53aGVlbCl7dGhpcy5lbGVtZW50 +LmFkZEV2ZW50KCJtb3VzZXdoZWVsIix0aGlzLnNjcm9sbGVkRWxlbWVudC5iaW5k +V2l0aEV2ZW50KHRoaXMpKTsKfXZhciBGLEI9e30sQz17eDpmYWxzZSx5OmZhbHNl +fTtzd2l0Y2godGhpcy5vcHRpb25zLm1vZGUpe2Nhc2UidmVydGljYWwiOnRoaXMu +YXhpcz0ieSI7dGhpcy5wcm9wZXJ0eT0idG9wIjtGPSJvZmZzZXRIZWlnaHQiO2Jy +ZWFrO2Nhc2UiaG9yaXpvbnRhbCI6dGhpcy5heGlzPSJ4IjsKdGhpcy5wcm9wZXJ0 +eT0ibGVmdCI7Rj0ib2Zmc2V0V2lkdGgiO310aGlzLmhhbGY9dGhpcy5rbm9iW0Zd +LzI7dGhpcy5mdWxsPXRoaXMuZWxlbWVudFtGXS10aGlzLmtub2JbRl0rKHRoaXMu +b3B0aW9ucy5vZmZzZXQqMik7dGhpcy5taW49JGNoayh0aGlzLm9wdGlvbnMucmFu +Z2VbMF0pP3RoaXMub3B0aW9ucy5yYW5nZVswXTowOwp0aGlzLm1heD0kY2hrKHRo +aXMub3B0aW9ucy5yYW5nZVsxXSk/dGhpcy5vcHRpb25zLnJhbmdlWzFdOnRoaXMu +b3B0aW9ucy5zdGVwczt0aGlzLnJhbmdlPXRoaXMubWF4LXRoaXMubWluO3RoaXMu +c3RlcHM9dGhpcy5vcHRpb25zLnN0ZXBzfHx0aGlzLmZ1bGw7dGhpcy5zdGVwU2l6 +ZT1NYXRoLmFicyh0aGlzLnJhbmdlKS90aGlzLnN0ZXBzOwp0aGlzLnN0ZXBXaWR0 +aD10aGlzLnN0ZXBTaXplKnRoaXMuZnVsbC9NYXRoLmFicyh0aGlzLnJhbmdlKTt0 +aGlzLmtub2Iuc2V0U3R5bGUoInBvc2l0aW9uIiwicmVsYXRpdmUiKS5zZXRTdHls +ZSh0aGlzLnByb3BlcnR5LC10aGlzLm9wdGlvbnMub2Zmc2V0KTtDW3RoaXMuYXhp +c109dGhpcy5wcm9wZXJ0eTsKQlt0aGlzLmF4aXNdPVstdGhpcy5vcHRpb25zLm9m +ZnNldCx0aGlzLmZ1bGwtdGhpcy5vcHRpb25zLm9mZnNldF07dGhpcy5kcmFnPW5l +dyBEcmFnKHRoaXMua25vYix7c25hcDowLGxpbWl0OkIsbW9kaWZpZXJzOkMsb25E +cmFnOnRoaXMuZHJhZ2dlZEtub2IuYmluZCh0aGlzKSxvblN0YXJ0OnRoaXMuZHJh +Z2dlZEtub2IuYmluZCh0aGlzKSxvbkNvbXBsZXRlOmZ1bmN0aW9uKCl7dGhpcy5k +cmFnZ2VkS25vYigpOwp0aGlzLmVuZCgpO30uYmluZCh0aGlzKX0pO2lmKHRoaXMu +b3B0aW9ucy5zbmFwKXt0aGlzLmRyYWcub3B0aW9ucy5ncmlkPU1hdGguY2VpbCh0 +aGlzLnN0ZXBXaWR0aCk7dGhpcy5kcmFnLm9wdGlvbnMubGltaXRbdGhpcy5heGlz +XVsxXT10aGlzLmZ1bGw7fX0sc2V0OmZ1bmN0aW9uKEEpe2lmKCEoKHRoaXMucmFu +Z2U+MCleKEE8dGhpcy5taW4pKSl7QT10aGlzLm1pbjsKfWlmKCEoKHRoaXMucmFu +Z2U+MCleKEE+dGhpcy5tYXgpKSl7QT10aGlzLm1heDt9dGhpcy5zdGVwPU1hdGgu +cm91bmQoQSk7dGhpcy5jaGVja1N0ZXAoKTt0aGlzLmVuZCgpO3RoaXMuZmlyZUV2 +ZW50KCJ0aWNrIix0aGlzLnRvUG9zaXRpb24odGhpcy5zdGVwKSk7cmV0dXJuIHRo +aXM7Cn0sY2xpY2tlZEVsZW1lbnQ6ZnVuY3Rpb24oQyl7dmFyIEI9dGhpcy5yYW5n +ZTwwPy0xOjE7dmFyIEE9Qy5wYWdlW3RoaXMuYXhpc10tdGhpcy5lbGVtZW50Lmdl +dFBvc2l0aW9uKClbdGhpcy5heGlzXS10aGlzLmhhbGY7QT1BLmxpbWl0KC10aGlz +Lm9wdGlvbnMub2Zmc2V0LHRoaXMuZnVsbC10aGlzLm9wdGlvbnMub2Zmc2V0KTsK +dGhpcy5zdGVwPU1hdGgucm91bmQodGhpcy5taW4rQip0aGlzLnRvU3RlcChBKSk7 +dGhpcy5jaGVja1N0ZXAoKTt0aGlzLmVuZCgpO3RoaXMuZmlyZUV2ZW50KCJ0aWNr +IixBKTt9LHNjcm9sbGVkRWxlbWVudDpmdW5jdGlvbihBKXt2YXIgQj0odGhpcy5v +cHRpb25zLm1vZGU9PSJob3Jpem9udGFsIik/KEEud2hlZWw8MCk6KEEud2hlZWw+ +MCk7CnRoaXMuc2V0KEI/dGhpcy5zdGVwLXRoaXMuc3RlcFNpemU6dGhpcy5zdGVw +K3RoaXMuc3RlcFNpemUpO0Euc3RvcCgpO30sZHJhZ2dlZEtub2I6ZnVuY3Rpb24o +KXt2YXIgQj10aGlzLnJhbmdlPDA/LTE6MTt2YXIgQT10aGlzLmRyYWcudmFsdWUu +bm93W3RoaXMuYXhpc107CkE9QS5saW1pdCgtdGhpcy5vcHRpb25zLm9mZnNldCx0 +aGlzLmZ1bGwtdGhpcy5vcHRpb25zLm9mZnNldCk7dGhpcy5zdGVwPU1hdGgucm91 +bmQodGhpcy5taW4rQip0aGlzLnRvU3RlcChBKSk7dGhpcy5jaGVja1N0ZXAoKTt9 +LGNoZWNrU3RlcDpmdW5jdGlvbigpe2lmKHRoaXMucHJldmlvdXNDaGFuZ2UhPXRo +aXMuc3RlcCl7dGhpcy5wcmV2aW91c0NoYW5nZT10aGlzLnN0ZXA7CnRoaXMuZmly +ZUV2ZW50KCJjaGFuZ2UiLHRoaXMuc3RlcCk7fX0sZW5kOmZ1bmN0aW9uKCl7aWYo +dGhpcy5wcmV2aW91c0VuZCE9PXRoaXMuc3RlcCl7dGhpcy5wcmV2aW91c0VuZD10 +aGlzLnN0ZXA7dGhpcy5maXJlRXZlbnQoImNvbXBsZXRlIix0aGlzLnN0ZXArIiIp +Owp9fSx0b1N0ZXA6ZnVuY3Rpb24oQSl7dmFyIEI9KEErdGhpcy5vcHRpb25zLm9m +ZnNldCkqdGhpcy5zdGVwU2l6ZS90aGlzLmZ1bGwqdGhpcy5zdGVwcztyZXR1cm4g +dGhpcy5vcHRpb25zLnN0ZXBzP01hdGgucm91bmQoQi09QiV0aGlzLnN0ZXBTaXpl +KTpCO30sdG9Qb3NpdGlvbjpmdW5jdGlvbihBKXtyZXR1cm4odGhpcy5mdWxsKk1h +dGguYWJzKHRoaXMubWluLUEpKS8odGhpcy5zdGVwcyp0aGlzLnN0ZXBTaXplKS10 +aGlzLm9wdGlvbnMub2Zmc2V0Owp9fSk7 + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline; filename=system.js +Content-Type: application/x-javascript; charset=utf-8; name=system.js +Content-Location: http://habrahabr.ru/js/1307631427/system.js +Content-Transfer-Encoding: Base64 + +RWxlbWVudC5pbXBsZW1lbnQoewoJZmxhc2g6IGZ1bmN0aW9uKHRvLGZyb20scmVw +cyxwcm9wLGR1cikgewoJCWlmKCFyZXBzKSB7IHJlcHMgPSAxOyB9CgkJaWYoIXBy +b3ApIHsgcHJvcCA9ICdiYWNrZ3JvdW5kLWNvbG9yJzsgfQoJCWlmKCFkdXIpIHsg +ZHVyID0gMjUwOyB9CgkJdmFyIGVmZmVjdCA9IG5ldyBGeC5Ud2Vlbih0aGlzLCB7 +CgkJCQlkdXJhdGlvbjogZHVyLAoJCQkJbGluazogJ2NoYWluJwoJCQl9KQoJCWZv +cih4ID0gMTsgeCA8PSByZXBzOyB4KyspCgkJCWVmZmVjdC5zdGFydChwcm9wLGZy +b20sdG8pLnN0YXJ0KHByb3AsdG8sZnJvbSk7Cgl9LAoJcmVwbGFjZUNsYXNzOiBm +dW5jdGlvbihjbGFzczEsIGNsYXNzMikgewoJCXRoaXMucmVtb3ZlQ2xhc3MoY2xh +c3MxKTsKCQl0aGlzLmFkZENsYXNzKGNsYXNzMik7Cgl9LAoJc3dpdGNoQ2xhc3M6 +IGZ1bmN0aW9uKGNsYXNzMSwgY2xhc3MyKSB7CgkJaWYgKHRoaXMuaGFzQ2xhc3Mo +Y2xhc3MxKSkKCQkJdGhpcy5yZXBsYWNlQ2xhc3MoY2xhc3MxLCBjbGFzczIpOwoJ +CWVsc2UKCQkJdGhpcy5yZXBsYWNlQ2xhc3MoY2xhc3MyLCBjbGFzczEpOwoJfQp9 +KTsKCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq +KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLy8qKioqKioqKioq +KioqKiAg0JLQndCY0JzQkNCd0JjQlSEg0JTQkNCb0KzQqNCVINCY0JTQldCiINCh +0KLQoNCQ0KjQndCr0Jkg0KHQotCQ0KDQq9CZINCa0J7QlCEgICoqKioqKioqKioq +KioqKioqCi8vKioqKioqKioqKioqKioqKiAg0J7QlNCV0J3QrNCi0JUg0KHQmtCQ +0KTQkNCd0JTQoCDQn9Cg0Jgg0JLQpdCe0JTQlSDQkiDQrdCi0KMg0JfQntCd0KMh +ICAqKioqKioqKioqKioqKioqKioqCi8vKioqKioqKioqKioqKioqKioqKioqKioq +KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq +KioqKioKCgovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiDQndCw0YHQ +u9C10LTQvtCy0LDQvdC40LUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq +KioqCkZ1bmN0aW9uLnByb3RvdHlwZS5pbmhlcml0c0Zyb20gPSBmdW5jdGlvbihC +YXNlQ2xhc3MpIHsgLy8gdGhhbmtzIHRvIEtldmluIExpbmRzZXkgZm9yIHRoaXMg +aWRlYQoJdmFyIEluaGVyaXRhbmNlID0gZnVuY3Rpb24oKSB7fTsKCUluaGVyaXRh +bmNlLnByb3RvdHlwZSA9IEJhc2VDbGFzcy5wcm90b3R5cGU7Cgl0aGlzLnByb3Rv +dHlwZSA9IG5ldyBJbmhlcml0YW5jZSgpOwoJdGhpcy5wcm90b3R5cGUuY29uc3Ry +dWN0b3IgPSB0aGlzOwoJdGhpcy5zdXBlckNsYXNzID0gQmFzZUNsYXNzOwp9CgpP +YmplY3QuZXh0ZW5kT2JqZWN0ID0gZnVuY3Rpb24oZGVzdGluYXRpb24sIHNvdXJj +ZSkgewoJZm9yICh2YXIgcHJvcGVydHkgaW4gc291cmNlKQoJCWRlc3RpbmF0aW9u +W3Byb3BlcnR5XSA9IHNvdXJjZVtwcm9wZXJ0eV07CglyZXR1cm4gZGVzdGluYXRp +b247Cn07CgovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiDQoNCw0LHQvtGC +0LAg0YEg0YHQvtCx0YvRgtC40Y/QvNC4ICoqKioqKioqKioqKioqKioqKioqKioq +KioqKioqKgpmdW5jdGlvbiBnZXRDaGFyQ29kZShldikgewoJaWYgKGV2LmNoYXJD +b2RlKSB2YXIgY2hhckNvZGUgPSBldi5jaGFyQ29kZTsKCWVsc2UgaWYgKGV2Lmtl +eUNvZGUpIHZhciBjaGFyQ29kZSA9IGV2LmtleUNvZGU7CgllbHNlIGlmIChldi53 +aGljaCkgdmFyIGNoYXJDb2RlID0gZXYud2hpY2g7CgllbHNlIHZhciBjaGFyQ29k +ZSA9IDA7CglyZXR1cm4gY2hhckNvZGU7Cn0KCi8vKioqKioqKioqKioqKioqKioq +KioqKioqKiDQntC/0YDQtdC00LXQu9C10L3QuNC1INCx0YDQvtGD0LfQtdGA0L7Q +siAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgppZiAod2luZG93LkFjdGl2 +ZVhPYmplY3QpIHdpbmRvdy5pZSA9IHdpbmRvd1t3aW5kb3cuWE1MSHR0cFJlcXVl +c3QgPyAnaWU3JyA6ICdpZTYnXSA9IHRydWU7CmVsc2UgaWYgKGRvY3VtZW50LmNo +aWxkTm9kZXMgJiYgIWRvY3VtZW50LmFsbCAmJiAhbmF2aWdhdG9yLnRhaW50RW5h +YmxlZCkgd2luZG93LndlYmtpdCA9IHdpbmRvd1t3aW5kb3cueHBhdGggPyAnd2Vi +a2l0NDIwJyA6ICd3ZWJraXQ0MTknXSA9IHRydWU7CmVsc2UgaWYgKGRvY3VtZW50 +LmdldEJveE9iamVjdEZvciAhPSBudWxsKSB3aW5kb3cuZ2Vja28gPSB0cnVlOwp2 +YXIgaXNJRSAgPSAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5kZXhPZigiTVNJRSIp +ICE9IC0xKSA/IHRydWUgOiBmYWxzZTsKdmFyIGlzV2luID0gKG5hdmlnYXRvci5h +cHBWZXJzaW9uLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigid2luIikgIT0gLTEpID8g +dHJ1ZSA6IGZhbHNlOwp2YXIgaXNPcGVyYSA9IChuYXZpZ2F0b3IudXNlckFnZW50 +LmluZGV4T2YoIk9wZXJhIikgIT0gLTEpID8gdHJ1ZSA6IGZhbHNlOwoKCi8vKioq +KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBBSkFYICoqKioqKioqKioq +KioqKioqKioqKioqKioqKioqKioqKioqKioKLyoKCXVybCAtINC+0YLQutGD0LTQ +sCDQt9Cw0LPRgNGD0LbQsNC10LwKCWFqYXhDYWxsQmFja0Z1bmN0aW9uIC0g0YfR +gtC+INCy0YvQt9GL0LLQsNC10Lwg0L/QviDQt9Cw0LLQtdGA0YjQtdC90LjQuCDQ +t9Cw0LPRgNGD0LfQutC4CglwYXJhbXMgLSDQv9Cw0YDQsNC80LXRgtGA0Ysg0LIg +0LLQuNC00LUg0L7QsdGK0LXQutGC0LAg0LjQu9C4INC80LDRgdGB0LjQstCwCglj +YWxsT2JqZWN0IC0g0LzQtdGC0L7QtNC+0Lwg0LrQsNC60L7Qs9C+INC+0LHRitC1 +0LrRgtCwINGP0LLQu9GP0LXRgtGB0Y8gYWpheENhbGxCYWNrRnVuY3Rpb24gKNC1 +0YHQu9C4INGN0YLQviDQvNC10YLQvtC0LCDQsCDQvdC1INCz0LvQvtCx0LDQu9GM +0L3QsNGPINGE0YPQvdGG0LjRjykKKi8KZnVuY3Rpb24gYWpheFBvc3QodXJsLCBk +YXRhLCBhamF4Q2FsbEJhY2tGdW5jdGlvbiwgcGFyYW1zLCBjYWxsT2JqZWN0LCBh +amF4Q2FsbEJhY2tFcnJvckZ1bmN0aW9uKSB7Cgl2YXIgYWpheE9iamVjdCA9IG51 +bGw7CglpZiAod2luZG93LlhNTEh0dHBSZXF1ZXN0KSAvLyBicmFuY2ggZm9yIG5h +dGl2ZSBYTUxIdHRwUmVxdWVzdCBvYmplY3QKCQlhamF4T2JqZWN0ID0gbmV3IFhN +TEh0dHBSZXF1ZXN0KCk7CgllbHNlIGlmICh3aW5kb3cuQWN0aXZlWE9iamVjdCkg +Ly8gYnJhbmNoIGZvciBJRS9XaW5kb3dzIEFjdGl2ZVggdmVyc2lvbgoJCWFqYXhP +YmplY3QgPSBuZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKTsK +CWlmKGFqYXhPYmplY3QpewoJCWFqYXhPYmplY3Qub25yZWFkeXN0YXRlY2hhbmdl +ID0gZnVuY3Rpb24oKXsKCQkJYWpheEhhbmRsZXIoYWpheE9iamVjdCwgYWpheENh +bGxCYWNrRnVuY3Rpb24sIHBhcmFtcywgY2FsbE9iamVjdCwgYWpheENhbGxCYWNr +RXJyb3JGdW5jdGlvbik7CgkJfQoJCWFqYXhPYmplY3Qub3BlbigiUE9TVCIsIHVy +bCwgdHJ1ZSk7CgkJYWpheE9iamVjdC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50 +LXR5cGUiLCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7CgkJ +YWpheE9iamVjdC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LWxlbmd0aCIsIGRh +dGEubGVuZ3RoKTsKCQlhamF4T2JqZWN0LnNldFJlcXVlc3RIZWFkZXIoIkNvbm5l +Y3Rpb24iLCAiY2xvc2UiKTsKCQlhamF4T2JqZWN0LnNlbmQoZGF0YSk7CQoJfQp9 +CgoKZnVuY3Rpb24gYWpheEhhbmRsZXIoYWpheE9iamVjdCwgYWpheENhbGxCYWNr +RnVuY3Rpb24sIHBhcmFtcywgY2FsbE9iamVjdCwgYWpheENhbGxCYWNrRXJyb3JG +dW5jdGlvbil7IAoJaWYgKGFqYXhPYmplY3QucmVhZHlTdGF0ZSA9PSA0KQoJCWlm +IChhamF4T2JqZWN0LnN0YXR1cyA9PSAyMDApCgkJCWFqYXhDYWxsQmFja0Z1bmN0 +aW9uLmNhbGwoY2FsbE9iamVjdCwgYWpheE9iamVjdCwgcGFyYW1zKTsKCQllbHNl +CgkJCWlmKGFqYXhDYWxsQmFja0Vycm9yRnVuY3Rpb24pCgkJCQlhamF4Q2FsbEJh +Y2tFcnJvckZ1bmN0aW9uLmNhbGwoY2FsbE9iamVjdCwgYWpheE9iamVjdCk7CQoJ +CQllbHNlCgkJCQlmdXR1X2FsZXJ0KCIiLC8qKCLQktC+0LfQvdC40LrQu9CwINC+ +0YjQuNCx0LrQsCDQsiDQv9C+0LvRg9GH0LXQvdC40LggWE1MINC00LDQvdC90YvR +hTo8YnIgLz4iICsgYWpheE9iamVjdC5zdGF0dXNUZXh0KSovICfQo9C/0YEhINCn +0YLQvi3RgtC+INC/0L7RiNC70L4g0L3QtSDRgtCw0LouINCf0L7Qv9GA0L7QsdGD +0LnRgtC1INC10YnQtSDRgNCw0LcuJywgZmFsc2UsICdlcnJvcicpOwp9CgpmdW5j +dGlvbiBhamF4TG9hZFBvc3QodXJsLCBkYXRhLCBhamF4Q2FsbEJhY2tGdW5jdGlv +biwgY2FsbE9iamVjdCwgcGFyYW1zLCBhamF4Q2FsbEJhY2tFcnJvckZ1bmN0aW9u +KSB7Cgl2YXIgYWpheE9iamVjdCA9IG51bGw7CglpZiAod2luZG93LlhNTEh0dHBS +ZXF1ZXN0KSAvLyBicmFuY2ggZm9yIG5hdGl2ZSBYTUxIdHRwUmVxdWVzdCBvYmpl +Y3QKCQlhamF4T2JqZWN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CgllbHNlIGlm +ICh3aW5kb3cuQWN0aXZlWE9iamVjdCkgLy8gYnJhbmNoIGZvciBJRS9XaW5kb3dz +IEFjdGl2ZVggdmVyc2lvbgoJCWFqYXhPYmplY3QgPSBuZXcgQWN0aXZlWE9iamVj +dCgiTWljcm9zb2Z0LlhNTEhUVFAiKTsKCWlmKGFqYXhPYmplY3QpewoJCWFqYXhP +YmplY3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKXsKCQkJYWpheExv +YWRIYW5kbGVyKGFqYXhPYmplY3QsIGFqYXhDYWxsQmFja0Z1bmN0aW9uLCBjYWxs +T2JqZWN0LCBwYXJhbXMsIGFqYXhDYWxsQmFja0Vycm9yRnVuY3Rpb24pOwoJCX0K +CQlhamF4T2JqZWN0Lm9wZW4oIlBPU1QiLCB1cmwsIHRydWUpOwoJCWFqYXhPYmpl +Y3Quc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC10eXBlIiwgImFwcGxpY2F0aW9u +L3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpOwoJCWFqYXhPYmplY3Quc2V0UmVxdWVz +dEhlYWRlcigiQ29udGVudC1sZW5ndGgiLCBkYXRhLmxlbmd0aCk7CgkJYWpheE9i +amVjdC5zZXRSZXF1ZXN0SGVhZGVyKCJDb25uZWN0aW9uIiwgImNsb3NlIik7CgkJ +YWpheE9iamVjdC5zZW5kKGRhdGEpOwoJfQp9CmZ1bmN0aW9uIGFqYXhMb2FkSGFu +ZGxlcihhamF4T2JqZWN0LCBhamF4Q2FsbEJhY2tGdW5jdGlvbiwgY2FsbE9iamVj +dCwgcGFyYW1zLCBhamF4Q2FsbEJhY2tFcnJvckZ1bmN0aW9uKXsKCWlmIChhamF4 +T2JqZWN0LnJlYWR5U3RhdGUgPT0gNCkKCQlpZiAoYWpheE9iamVjdC5zdGF0dXMg +PT0gMjAwKQoJCQlhamF4Q2FsbEJhY2tGdW5jdGlvbi5jYWxsKGNhbGxPYmplY3Qs +IGFqYXhPYmplY3QsIHBhcmFtcyk7CgkJZWxzZQoJCQlpZihhamF4Q2FsbEJhY2tF +cnJvckZ1bmN0aW9uKQoJCQkJYWpheENhbGxCYWNrRXJyb3JGdW5jdGlvbi5jYWxs +KGNhbGxPYmplY3QsIGFqYXhPYmplY3QpOwkKCQkJZWxzZQoJCQkJZnV0dV9hbGVy +dCgiIiwvKigi0JLQvtC30L3QuNC60LvQsCDQvtGI0LjQsdC60LAg0LIg0L/QvtC7 +0YPRh9C10L3QuNC4IFhNTCDQtNCw0L3QvdGL0YU6PGJyIC8+IiArIGFqYXhPYmpl +Y3Quc3RhdHVzVGV4dCkqLyAn0KPQv9GBISDQp9GC0L4t0YLQviDQv9C+0YjQu9C+ +INC90LUg0YLQsNC6LiDQn9C+0L/RgNC+0LHRg9C50YLQtSDQtdGJ0LUg0YDQsNC3 +LicsIHRydWUsICdlcnJvcicpOwp9Cg== + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline; filename=init.js +Content-Type: application/x-javascript; charset=utf-8; name=init.js +Content-Location: http://habrahabr.ru/js/1307631427/tm/init.js +Content-Transfer-Encoding: Base64 + +dmFyIHRtID0gKHR5cGVvZih0bSkgIT0gJ3VuZGVmaW5lZCcpID8gdG0gOiB7fTsK +CmRvY3VtZW50LmlkID0gJDsgLy8g0Y3RgtC+INGH0YLQvtCx0YsgTW9vdG9vbHMg +TW9yZSAxLjIuMy4xINGA0LDQsdC+0YLQsNC7INGBIE1vb3Rvb2xzIENvcmUgMS4y +LjAKCi8qKgogKiDQmNC90YLQtdGA0YTQtdC50YEg0LjQvdC40YbQuNCw0LvQuNC3 +0LDRhtC40Lgg0LTQu9GPINCy0YHQtdCz0L4g0L3QsCDRgdCy0LXRgtC1CiAqIEBh +dXRob3IgYmVib3BraWQKKi8KCnRtLmluaXQgPSB7CglfaW5pdGlhbGl6YXRpb25z +OiBbXSwKCV93aW5kb3dMb2FkZWQ6IGZhbHNlLAoJZm9ybXM6IG51bGwsCgljb250 +cm9sczogbnVsbCwKCWFkZDogZnVuY3Rpb24gKGYpIHsKCQlpZiAodGhpcy5fd2lu +ZG93TG9hZGVkKSB7CgkJCWYuY2FsbCh3aW5kb3cpOwoJCX0KCQllbHNlIHsKCQkJ +dGhpcy5faW5pdGlhbGl6YXRpb25zLnB1c2goZik7CgkJfTsKCX0sCglfbG9hZGVk +OiBmdW5jdGlvbiAoKSB7CgkJdGhpcy5fd2luZG93TG9hZGVkID0gdHJ1ZTsKCQl0 +aGlzLl9pbml0aWFsaXphdGlvbnMuZWFjaCggZnVuY3Rpb24gKGYpIHsKCQkJZi5j +YWxsKHdpbmRvdyk7CgkJfSk7Cgl9Cn07Cgp3aW5kb3cuYWRkRXZlbnQoJ2RvbXJl +YWR5JywgdG0uaW5pdC5fbG9hZGVkLmJpbmQodG0uaW5pdCkpOwoKLyoqCiAqINCk +0YPQvdC60YbQuNGPINC00LvRjyDQu9C+0LPQuNGA0L7QstCw0L3QuNGPLCDQutC+ +0YLQvtGA0LDRjyDQvdC1INCy0YvQt9GL0LLQsNC10YIg0L7RiNC40LHQvtC6LCDQ +tdGB0LvQuCDQvdC10YIg0LrQvtC90YHQvtC70LgKICogQGF1dGhvciBiZWJvcGtp +ZAoqLwp0bS5sb2cgPSBmdW5jdGlvbiAoKSB7CglpZiAoKHR5cGVvZihjb25zb2xl +KSAhPSAndW5kZWZpbmVkJykgJiYgKHR5cGVvZihjb25zb2xlLmxvZykgPT0gJ2Z1 +bmN0aW9uJykpIHsKCSAgICAvL2ZvciAodmFyIGk9MCwgbD1hcmd1bWVudHMubGVu +Z3RoOyBpPGw7IGkrKykgewoJICAgICAgICBjb25zb2xlLmxvZyhhcmd1bWVudHMp +OwoJICAgLy8gfTsKCX0gZWxzZSBpZiAod2luZG93Lm9wZXJhICYmIG9wZXJhLnBv +c3RFcnJvcikgewoJCW9wZXJhLnBvc3RFcnJvcihhcmd1bWVudHMpOwoJfTsKfTsK +CnRtLmJhZFRhZ3MgPSBbCgknT0JKRUNUJywKCSdQQVJBTScsCgknRU1CRUQnLAoJ +J05PRU1CRUQnCl07Cgp0bS5oZWxwZXJzID0gewogICAgLyoqCiAgICAgKiDQktC+ +0LfQstGA0LDRidCw0LXRgiDRhtC10LvQvtC1INGH0LjRgdC70L4g0LIg0YPQtNC+ +0LHQvdC+0Lwg0LTQu9GPINGH0LXQu9C+0LLQtdC60LAg0LLQuNC00LUgLSDRgSDQ +v9GA0L7QsdC10LvQsNC80LgKICAgICAqIEBhdXRob3IgYmVib3BraWQKICAgICov +CiAgICBodW1hbml6ZU51bWJlcjogZnVuY3Rpb24gKG51bWJlcikgewogICAgICAg +IGlmICghbnVtYmVyKSB7IHJldHVybiAnJzsgfQogICAgICAgIHZhciBzID0gbnVt +YmVyLnRvU3RyaW5nKCk7CiAgICAgICAgdmFyIHIgPSAnJzsKICAgICAgICBmb3Ig +KCBpID0gMCwgbCA9IHMubGVuZ3RoOyBpPGw7IGkrKykgewogICAgICAgIAlyID0g +ciArICgoKCgobC1pKSAlIDMpID09IDApICYmIChpICE9IDApKSA/ICcgJyA6ICcn +KSArIHMuY2hhckF0KGkpOwogICAgICAgIH07CiAgICAgICAgcmV0dXJuIHI7CiAg +ICB9LAoJCgkvKioKCSAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINC00LDRgtGDINC4 +INCy0YDQtdC80Y8g0LIg0L3QvtGA0LzQsNC70YzQvdC+0Lwg0LLQuNC00LUKCSAq +IEBhdXRob3IgbWRldmlscwoJICovCglodW1hbml6ZURhdGU6IGZ1bmN0aW9uKHRp +bWVzdGFtcCwgZGF0ZU9ubHkpewoJCXZhciB0b2RheSA9IG5ldyBEYXRlKCk7CgkJ +dmFyIGRhdGUgPSBuZXcgRGF0ZSh0aW1lc3RhbXAgKiAxMDAwKTsKCQl2YXIgbW9u +dGhzID0gWyLRj9C90LLQsNGA0Y8iLCAi0YTQtdCy0YDQsNC70Y8iLCAi0LzQsNGA +0YLQsCIsICLQsNC/0YDQtdC70Y8iLCAi0LzQsNGPIiwgItC40Y7QvdGPIiwgItC4 +0Y7Qu9GPIiwgItCw0LLQs9GD0YHRgtCwIiwgItGB0LXQvdGC0Y/QsdGA0Y8iLCAi +0L7QutGC0Y/QsdGA0Y8iLCAi0L3QvtGP0LHRgNGPIiwgItC00LXQutCw0LHRgNGP +Il07OwoJCXZhciByZXN1bHQgPSAiIjsKCQlpZih0b2RheS5nZXREYXRlKCkgIT0g +ZGF0ZS5nZXREYXRlKCkgfHwgdG9kYXkuZ2V0TW9udGgoKSAhPSBkYXRlLmdldE1v +bnRoKCkgfHwgdG9kYXkuZ2V0RnVsbFllYXIoKSAhPSBkYXRlLmdldEZ1bGxZZWFy +KCkpCgkJCXJlc3VsdCA9IGRhdGUuZ2V0RGF0ZSgpICsgIiAiICsgbW9udGhzW2Rh +dGUuZ2V0TW9udGgoKV07CgkJaWYodG9kYXkuZ2V0RnVsbFllYXIoKSAhPSBkYXRl +LmdldEZ1bGxZZWFyKCkpCgkJCXJlc3VsdCArPSAiICIgKyBkYXRlLmdldEZ1bGxZ +ZWFyKCk7CgkJaWYoIWRhdGVPbmx5KSB7CgkJCWlmIChyZXN1bHQpIHJlc3VsdCAr +PSAiLCAiOwoJCQlyZXN1bHQgKz0gItCyICIgKyB0bS5oZWxwZXJzLmFkZFplcm8o +ZGF0ZS5nZXRIb3VycygpLCAyKSArICI6IiArIHRtLmhlbHBlcnMuYWRkWmVybyhk +YXRlLmdldE1pbnV0ZXMoKSwgMik7CgkJfQoJCXJldHVybiByZXN1bHQ7Cgl9LAoJ +CgkvKioKCSAqINCU0L7QsdCw0LLQu9GP0LXRgiDQvdGD0LvQuCDQv9C10YDQtdC0 +INGH0LjRgdC70L7QvCDQtNC+INGC0LXRhSDQv9C+0YAsINC/0L7QutCwINC+0L3Q +viDQvdC1INC00L7RgdGC0LjQs9C90LXRgiDQvdGD0LbQvdC+0Lkg0LTQu9C40L3R +iwoJICogQGF1dGhvciBtZGV2aWxzCgkgKi8KCWFkZFplcm86IGZ1bmN0aW9uKG51 +bWJlciwgbGVuKSB7CgkJdmFyIHMgPSBudW1iZXIudG9TdHJpbmcoKTsKCQl3aGls +ZSAocy5sZW5ndGggPCBsZW4pIHM9JzAnK3M7CgkJcmV0dXJuIHM7Cgl9Cn07CgpF +bGVtZW50LmltcGxlbWVudCh7CiAgICBzY3JvbGxUb01lOiBmdW5jdGlvbiAoX28p +IHsKICAgICAgICB2YXIgbyA9IF9vfHx7fTsKICAgICAgICAKICAgICAgICB2YXIg +eCA9IG8ueHx8MCwKICAgICAgICAgICAgeSA9IHRoaXMuZ2V0UG9zaXRpb24oKS55 +ICsgKG8ueXx8MCk7CiAgICAgICAgCiAgICAgICAgKHRlbXAud2luZG93U2Nyb2xs +IHx8ICh0ZW1wLndpbmRvd1Njcm9sbCA9IG5ldyBGeC5TY3JvbGwoICQoZG9jdW1l +bnQuYm9keSkgLCB7ICdkdXJhdGlvbic6IDUwMCwgJ2xpbmsnOiAnY2FuY2VsJyB9 +ICkgKSk7CiAgICAgICAgCiAgICAgICAgdGVtcC53aW5kb3dTY3JvbGxbIG8ubm93 +ID8gJ3NldCcgOiAnc3RhcnQnIF0oMCwgdGhpcy5nZXRQb3NpdGlvbigpLnkpOwoK +ICAgICAgICBpZiAobyAmJiBvLmNhbGxiYWNrKSB7CiAgICAgICAgICAgIAogICAg +ICAgICAgICBvLm5vdyA/IG8uY2FsbGJhY2soKSA6IHRlbXAud2luZG93U2Nyb2xs +LmFkZEV2ZW50KCdjb21wbGV0ZScsIChmdW5jdGlvbiAoY2FsbGJhY2spIHsKICAg +ICAgICAgICAgICAgIHRoaXMucmVtb3ZlRXZlbnQoJ2NvbXBsZXRlJywgY2FsbGJh +Y2spOwogICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKICAgICAgICAgICAgfSku +YmluZCh0ZW1wLndpbmRvd1Njcm9sbCwgby5jYWxsYmFjaykpOwogICAgICAgIH0K +ICAgICAgICByZXR1cm4gdGhpczsKICAgIH0KfSk7Cgp0bS5yZXMgPSB7fTsKCnRt +LnJlcy5fbG9hZGVkQ1NTID0gW107CnRtLnJlcy5sb2FkQ1NTID0gZnVuY3Rpb24o +dXJsKSB7CglpZiAoIXRtLnJlcy5fbG9hZGVkQ1NTW3VybF0pIHsKCQl2YXIgY3Nz +ID0gbmV3IEFzc2V0LmNzcyh1cmwpOwoJfQoJdG0ucmVzLl9sb2FkZWRDU1NbdXJs +XSA9IHRydWU7Cn07Cgp0bS5yZXMubG9hZElNRyA9IGZ1bmN0aW9uKHVybCkgewoJ +dmFyIGltZyA9IG5ldyBBc3NldC5pbWFnZSh1cmwpOwp9OwoKZnVuY3Rpb24gZCgp +IHsKCXZhciBkZWJ1Z1NjcmlwdCA9IG5ldyBBc3NldC5qYXZhc2NyaXB0KCcvanMv +dG0vZGVidWcuanMnLCB7aWQ6ICdkZWJ1Z1NjcmlwdCd9KTsKCXZhciBjb25zb2xl +U2NyaXB0ID0gbmV3IEFzc2V0LmphdmFzY3JpcHQoJy9qcy90bS9jb25zb2xlLmpz +Jywge2lkOiAnY29uc29sZVNjcmlwdCd9KTsKfQoKdG0uY3VzdG9tRXZlbnRNYW5h +Z2VyID0gewoJYWRkRXZlbnQ6IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2sp +IHsKCQl0aGlzLl9ldmVudHMgfHwgKHRoaXMuX2V2ZW50cyA9IFtdKTsKCQl0aGlz +Ll9ldmVudHNbZXZlbnROYW1lXSB8fCAodGhpcy5fZXZlbnRzW2V2ZW50TmFtZV0g +PSBbXSk7CgkJdGhpcy5fZXZlbnRzW2V2ZW50TmFtZV0ucHVzaChjYWxsYmFjayk7 +Cgl9LAoJcmVtb3ZlRXZlbnQ6IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2sp +IHsKCQl0aGlzLl9ldmVudHMgfHwgKHRoaXMuX2V2ZW50cyA9IFtdKTsKCQl0aGlz +Ll9ldmVudHNbZXZlbnROYW1lXSB8fCAodGhpcy5fZXZlbnRzW2V2ZW50TmFtZV0g +PSBbXSk7CgkJdGhpcy5fZXZlbnRzW2V2ZW50TmFtZV0uZXJhc2UoY2FsbGJhY2sp +OwoJfSwKCWZpcmVFdmVudDogZnVuY3Rpb24oZXZlbnROYW1lKSB7CgkJdmFyIGFy +Z3MgPSBbXTsKCQlmb3IgKHZhciBpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKykK +CQkJYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7CgkJdGhpcy5fZXZlbnRzIHx8ICh0 +aGlzLl9ldmVudHMgPSBbXSk7CgkJdGhpcy5fZXZlbnRzW2V2ZW50TmFtZV0gfHwg +KHRoaXMuX2V2ZW50c1tldmVudE5hbWVdID0gW10pOwoJCXRoaXMuX2V2ZW50c1tl +dmVudE5hbWVdLmZvckVhY2goZnVuY3Rpb24oaXRlbSl7aXRlbS5hcHBseSh0aGlz +LCBhcmdzKTt9KTsKCQl0bS5sb2coYXJncywgZXZlbnROYW1lICsgJyAoJyArIHRo +aXMuX2V2ZW50c1tldmVudE5hbWVdLmxlbmd0aCArICcpJyk7Cgl9Cn07 + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline; filename=common.js +Content-Type: application/x-javascript; charset=utf-8; name=common.js +Content-Location: http://habrahabr.ru/js/1307631427/common.js +Content-Transfer-Encoding: Base64 + +dG0uaW5pdC5hZGQoZnVuY3Rpb24oKXsKCXZhciBwYWdlTmF2ID0gbnVsbDsKCWlm +IChwYWdlTmF2ID0gJChkb2N1bWVudCkuZ2V0RWxlbWVudCgnLnBhZ2UtbmF2Jykp +IHsKCQl2YXIgcHJldiA9IHBhZ2VOYXYuZ2V0RWxlbWVudCgnLm5leHQtcHJldiAu +cHJldicpOwoJCXZhciBuZXh0ID0gcGFnZU5hdi5nZXRFbGVtZW50KCcubmV4dC1w +cmV2IC5uZXh0Jyk7CgkJJCh3aW5kb3cpLmFkZEV2ZW50KCdrZXlkb3duJywgZnVu +Y3Rpb24oZSl7CgkJCWlmICgoKGUuY29udHJvbCAmJiBlLmtleSA9PSAncmlnaHQn +KSB8fCAoZS5hbHQgJiYgZS5rZXkgPT0gJ3JpZ2h0JykpICYmIG5leHQpIHsKCQkJ +CXRvcC5sb2NhdGlvbi5ocmVmID0gbmV4dC5nZXQoImhyZWYiKTsKCQkJCWUuc3Rv +cCgpOwoJCQl9IGVsc2UgaWYgKCgoZS5jb250cm9sICYmIGUua2V5ID09ICdsZWZ0 +JykgfHwgKGUuYWx0ICYmIGUua2V5ID09ICdsZWZ0JykpICYmIHByZXYpIHsKCQkJ +CXRvcC5sb2NhdGlvbi5ocmVmID0gcHJldi5nZXQoImhyZWYiKTsKCQkJCWUuc3Rv +cCgpOwoJCQl9CgkJfSk7Cgl9Cgl2YXIgc2VhcmNoID0gJCgic2VhcmNoIik7Cglp +ZiAoc2VhcmNoKSB7CgkJdmFyIGlucHV0IAkJPSBzZWFyY2gsCgkJCWxhYmVsIAkJ +PSBpbnB1dC5nZXRQYXJlbnQoKSwKCQkJbGFiZWxzcGFuIAk9IGxhYmVsLmdldEVs +ZW1lbnQoJ3NwYW4nKTsKCQlpZiAoaW5wdXQgJiYgbGFiZWwpIHsKCQkJCgkJCWlm +ICghaW5wdXQudmFsdWUpIHsKCQkJCWxhYmVsLmFkZENsYXNzKCJpbnB1dC1wbGFj +ZWhvbGRpbmciKTsKCQkJfQoKCQkJaW5wdXQuYWRkRXZlbnRzKHsKCQkJCSdmb2N1 +cyc6IGZ1bmN0aW9uICgpIHsKCQkJCQlpZiAoIWxhYmVsLm5vcGxhY2Vob2xkaW5n +KSB7CgkJCQkJCWxhYmVsLnJlbW92ZUNsYXNzKCJpbnB1dC1wbGFjZWhvbGRpbmci +KTsKCQkJCQkJbGFiZWwubm9wbGFjZWhvbGRpbmcgPSB0cnVlOwoJCQkJCX0KCQkJ +CX0sCgkJCQknYmx1cic6IGZ1bmN0aW9uICgpIHsKCQkJCQlpZiAoaW5wdXQudmFs +dWUgPT0gJycpIHsKCQkJCQkJbGFiZWwuYWRkQ2xhc3MoImlucHV0LXBsYWNlaG9s +ZGluZyIpOwoJCQkJCQlsYWJlbC5ub3BsYWNlaG9sZGluZyA9IGZhbHNlOwoJCQkJ +CX0KCQkJCX0sCgkJCQknY2hhbmdlJyA6IGZ1bmN0aW9uKCkgewoJCQkJCWlmICgh +bGFiZWwubm9wbGFjZWhvbGRpbmcpIHsKCQkJCQkJbGFiZWwucmVtb3ZlQ2xhc3Mo +ImlucHV0LXBsYWNlaG9sZGluZyIpOwoJCQkJCQlsYWJlbC5ub3BsYWNlaG9sZGlu +ZyA9IHRydWU7CgkJCQkJfQoJCQkJfQoJCQl9KQoJCQlsYWJlbHNwYW4uYWRkRXZl +bnQoJ21vdXNlZG93bicsZnVuY3Rpb24oKXsKCQkJCWlucHV0LmZvY3VzKCk7CgkJ +CQlyZXR1cm4gZmFsc2UKCQkJfSkKCQl9Cgl9Cgl2YXIgaGVscF90aXBzID0gJCQo +Jy5oZWxwLXRpcCcpOwoJaWYgKGhlbHBfdGlwcyAmJiBoZWxwX3RpcHMubGVuZ3Ro +KSB7CgkJdmFyIGN1cnJlbnRfdGlwID0gbnVsbDsKCQl2YXIgdGlwX2hpZGRpbmdf +dGltZW91dDsKCQkKCQl2YXIgaHRfbmljZV9ub2RlID0gJCgnaGVscC10aXAtdGV4 +dCcpOwoJCQlodF9uaWNlX25vZGUudGV4dF9ub2RlID0gaHRfbmljZV9ub2RlLmdl +dEVsZW1lbnQoJyNoZWxwLXRpcC10ZXh0LWNvbnRlbnQnKTsKCgkJdmFyIHNob3df +aGVscF90aXAgPSBmdW5jdGlvbih0ZXh0LG5vZGUpewoJCQljbGVhclRpbWVvdXQo +dGlwX2hpZGRpbmdfdGltZW91dCk7CgkJCWlmIChjdXJyZW50X3RpcCA9PSBub2Rl +KSB7cmV0dXJuIHRydWU7fQoJCQkKCQkJdmFyIHAgPSBub2RlLmdldFBvc2l0aW9u +KCk7CgkJCQoJCQl2YXIgcHggPSBwLnggKyBub2RlLmdldFN0eWxlKCd3aWR0aCcp +LnRvSW50KCkvMjsKCQkJdmFyIHB5ID0gcC55OwoJCQlub2RlCgkJCQoJCQlodF9u +aWNlX25vZGUuc3R5bGUudG9wID0gcHkgKyAncHgnOwoJCQlodF9uaWNlX25vZGUu +c3R5bGUubGVmdCA9IHB4ICsgJ3B4JzsKCQkJaWYgKHB4IDwgMTc5ICkgewoJCQkJ +aHRfbmljZV9ub2RlLmFkZENsYXNzKCdoZWxwLXRpcHMtdG9vLW11Y2gtbGVmdCcp +OwoJCQl9CgkJCQoJCQlodF9uaWNlX25vZGUudGV4dF9ub2RlLmlubmVySFRNTCA9 +IHRleHQ7CgkJCWh0X25pY2Vfbm9kZS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsK +CQkJY3VycmVudF90aXAgPSBodF9uaWNlX25vZGU7CgkJfQoJCXZhciBoaWRlX2hl +bHBfdGlwID0gZnVuY3Rpb24oKXsKCQkJdGlwX2hpZGRpbmdfdGltZW91dCA9IHNl +dFRpbWVvdXQoZnVuY3Rpb24oKXsKCQkJCWh0X25pY2Vfbm9kZS5zdHlsZS5kaXNw +bGF5ID0gJyc7CgkJCQlodF9uaWNlX25vZGUudGV4dF9ub2RlLnRleHRDb250ZW50 +ID0gJyc7CgkJCQlodF9uaWNlX25vZGUucmVtb3ZlQ2xhc3MoJ2hlbHAtdGlwcy10 +b28tbXVjaC1sZWZ0Jyk7CgkJCX0sMzMzKQoJCQkKCQl9CgkJCgkJZm9yICh2YXIg +aT0wLCBsID0gaGVscF90aXBzLmxlbmd0aDsgaSA8IGw7IGkrKykgewoJCQl2YXIg +aGVscF90aXBfbm9kZSA9IGhlbHBfdGlwc1tpXTsKCQkJCgkJCXZhciBoZWxwX3Rp +cF9ub2RlX2NoaWxkcyA9IGhlbHBfdGlwX25vZGUuZ2V0RWxlbWVudHMoJyonKTsK +CQkJaWYgKGhlbHBfdGlwX25vZGVfY2hpbGRzICYmIGhlbHBfdGlwX25vZGVfY2hp +bGRzLmxlbmd0aCkgewoJCQkJCgkJCQlmb3IgKHZhciBrPTAsIGc9IGhlbHBfdGlw +X25vZGVfY2hpbGRzLmxlbmd0aDsgayA8IGc7IGsrKykgewoJCQkJCWhlbHBfdGlw +X25vZGVfY2hpbGRzW2tdLmh0biA9IGhlbHBfdGlwX25vZGU7CgoJCQkJfTsKCQkJ +fQoJCQl0bS5sb2coJ3p6d3d3Jyk7CgkJCQoJCQloZWxwX3RpcF9ub2RlLmh0biA9 +IGhlbHBfdGlwX25vZGU7CgkJCQoJCQl2YXIgdGl0bGUgPSBoZWxwX3RpcF9ub2Rl +LnRpdGxlOwoJCQlpZiAodGl0bGUubWF0Y2goJ2JyLycpKSB7CgkJCQloZWxwX3Rp +cF9ub2RlLmhlbHBfdGlwID0gaGVscF90aXBfbm9kZS5nZXRFbGVtZW50KCcuaGVs +cC10aXAtdGV4dCcpLmlubmVySFRNTAoJCQl9IGVsc2UgewoJCQkJaGVscF90aXBf +bm9kZS5oZWxwX3RpcCA9IHRpdGxlOwoJCQl9CgkJCQoJCQloZWxwX3RpcF9ub2Rl +LnRpdGxlID0gJyc7CgkJCQoJCQloZWxwX3RpcF9ub2RlLmFkZEV2ZW50cyh7CgkJ +CQknbW91c2VvdmVyJzogZnVuY3Rpb24oZSl7IAoJCQkJCXNob3dfaGVscF90aXAo +ZS50YXJnZXQuaHRuLmhlbHBfdGlwLGUudGFyZ2V0Lmh0bik7CgkJCQl9LAoJCQkJ +J21vdXNlb3V0JzogaGlkZV9oZWxwX3RpcAoJCQl9KQoJCQkKCQkJCgkJfTsKCQlo +dF9uaWNlX25vZGUuYWRkRXZlbnRzKHsKCQkJJ21vdXNlb3Zlcic6IGZ1bmN0aW9u +KCl7IAoJCQkJY2xlYXJUaW1lb3V0KHRpcF9oaWRkaW5nX3RpbWVvdXQpOwoJCQl9 +LAoJCQknbW91c2VvdXQnOiBoaWRlX2hlbHBfdGlwCgkJfSkKCX0KfSk7Cg== + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline; filename=all.js +Content-Type: application/x-javascript; charset=utf-8; name=all.js +Content-Location: http://habrahabr.ru/js/1307631427/all.js +Content-Transfer-Encoding: Base64 + +CgovKiAgIGZhdm91cml0ZXMgICAqLwpmYXZzSGFuZGxlciA9IHsNCglidXR0b246 +e30sDQoJdXJsOiAnL2FqYXgvZmF2b3JpdGVzLycsDQoJeG1sOiB7DQoJCXJlc3Bv +bnNlTm9kZXM6IHsNCgkJCWVycm9yOiAnZXJyb3InLA0KCQkJcmVzdWx0OiAnbWVz +c2FnZScNCgkJfSwNCg0KCQlwYXJzZTogZnVuY3Rpb24oeG1sT2JqKXsNCgkJCXZh +ciB4bWxOb2RlcyA9IHt9Ow0KCQkJZm9yIChwcm9wIGluIGZhdnNIYW5kbGVyLnht +bC5yZXNwb25zZU5vZGVzKXsNCgkJCQl4bWxOb2Rlc1twcm9wXSA9IHhtbE9iai5n +ZXRFbGVtZW50c0J5VGFnTmFtZShmYXZzSGFuZGxlci54bWwucmVzcG9uc2VOb2Rl +c1twcm9wXSk7DQoJCQl9DQoJCQlyZXR1cm4geG1sTm9kZXM7DQoJCX0NCgl9LA0K +CWZhdm9yaXRlc1NlbmQgOiBmdW5jdGlvbiAoYnV0dG9uLCB0YXJnZXRfdHlwZSwg +dGFyZ2V0X2lkKSB7DQoJCXZhciBob2xkZXIgPSAkKGJ1dHRvbikuZ2V0UGFyZW50 +KCcuanMtdG9fZmF2c19ob2xkZXInKTsNCgkJaWYoaG9sZGVyLmhhc0NsYXNzKCd0 +by1mYXZzJykpIHsNCiAgICAJCXZhciBkYXRhID0gJ2FjdGlvbj1hZGQmdGFyZ2V0 +X3R5cGU9JysgdGFyZ2V0X3R5cGUgKycmdGFyZ2V0X2lkPScrIHRhcmdldF9pZDsN +CgkJfQ0KCQllbHNlIGlmIChob2xkZXIuaGFzQ2xhc3MoJ2Zhdl9hZGRlZCcpKXsN +CgkJCXZhciBkYXRhID0gJ2FjdGlvbj1yZW1vdmUmdGFyZ2V0X3R5cGU9JysgdGFy +Z2V0X3R5cGUgKycmdGFyZ2V0X2lkPScrIHRhcmdldF9pZDsNCgkJfQ0KCQlhamF4 +TG9hZFBvc3QoZmF2c0hhbmRsZXIudXJsLCBkYXRhLCBmYXZzSGFuZGxlci5mYXZv +cml0ZXNTZW5kT25sb2FkLCB3aW5kb3csIHtidXR0b246IGJ1dHRvbiwgdGFyZ2V0 +X3R5cGU6dGFyZ2V0X3R5cGUsIHRhcmdldF9pZDp0YXJnZXRfaWR9KTsNCgl9LA0K +DQoJZmF2b3JpdGVzU2VuZE9ubG9hZCA6IGZ1bmN0aW9uKGFqYXhPYmosIHBhcmFt +cykgew0KCQlpZihhamF4T2JqICYmIGFqYXhPYmoucmVzcG9uc2VYTUwpew0KDQoJ +CQl2YXIgeG1sT2JqID0gYWpheE9iai5yZXNwb25zZVhNTDsNCgkJCXZhciB4bWxO +b2RlcyA9IGZhdnNIYW5kbGVyLnhtbC5wYXJzZSh4bWxPYmopOw0KDQoJCQlpZih4 +bWxOb2Rlcy5lcnJvciAmJiB4bWxOb2Rlcy5lcnJvci5sZW5ndGgpew0KCQkJCXZh +ciBlcnJvcnNfbGVuZ3RoID0geG1sTm9kZXMuZXJyb3IubGVuZ3RoOw0KCQkJCWZv +ciAodmFyIGkgPSAwOyBpIDwgZXJyb3JzX2xlbmd0aDsgaSsrKSB7DQoJCQkJCWZ1 +dHVfYWxlcnQoRkFULmZhdm91cml0ZXNfaGVhZGVyLCB4bWxOb2Rlcy5lcnJvcltp +XS5maXJzdENoaWxkLmRhdGEsIHRydWUsICdlcnJvcicpOw0KCQkJCX0NCgkJCX0N +Cg0KCQkJdmFyIHJlc3VsdHMgPSB4bWxPYmouZ2V0RWxlbWVudHNCeVRhZ05hbWUo +J3Jlc3VsdCcpOw0KCQkJaWYoeG1sTm9kZXMucmVzdWx0ICYmIHhtbE5vZGVzLnJl +c3VsdC5sZW5ndGgpIHsNCg0KDQoJCQkJdmFyIG5vZGUgPSBudWxsOw0KCQkJCWlm +IChyZXN1bHRzWzBdKSB7DQoJCQkJCW5vZGUgPSByZXN1bHRzWzBdOw0KCQkJCX0N +Cg0KDQoJCQkJdmFyIHByZXZpb3VzX29mZiA9ICQocGFyYW1zLmJ1dHRvbikuZ2V0 +UGFyZW50KCcuanMtdG9fZmF2c19ob2xkZXInKS5oYXNDbGFzcygndG8tZmF2cycp +Ow0KCQkJCWlmKHByZXZpb3VzX29mZikgew0KDQoJCQkJCWlmIChub2RlKQ0KCQkJ +CQkJc3dpdGNoIChub2RlLmdldEF0dHJpYnV0ZSgidHlwZSIpKSB7DQoJCQkJCQkJ +Y2FzZSAnY29tcGFueV9jb21tZW50cyc6DQoJCQkJCQkJY2FzZSAnY29tbWVudHMn +Og0KCQkJCQkJCQlmdXR1X2FsZXJ0KEZBVC5mYXZvdXJpdGVzX2hlYWRlciwgRkFU +LmZhdm91cml0ZXNfcmVxdWVzdF9jb21tZW50X2FkZF9zdWNjZXNzLCBmYWxzZSwg +J21lc3NhZ2UnKTsNCgkJCQkJCQkJYnJlYWs7DQoJCQkJCQkJY2FzZSAncG9zdHMn +Og0KCQkJCQkJCQlmdXR1X2FsZXJ0KEZBVC5mYXZvdXJpdGVzX2hlYWRlciwgRkFU +LmZhdm91cml0ZXNfcmVxdWVzdF9wb3N0X2FkZF9zdWNjZXNzLCBmYWxzZSwgJ21l +c3NhZ2UnKTsNCgkJCQkJCQkJYnJlYWs7DQoJCQkJCQl9DQoJCQkJfQ0KCQkJCWVs +c2Ugew0KDQoJCQkJCWlmIChub2RlKQ0KCQkJCQkJc3dpdGNoIChub2RlLmdldEF0 +dHJpYnV0ZSgidHlwZSIpKSB7DQoJCQkJCQkJY2FzZSAnY29tcGFueV9jb21tZW50 +cyc6DQoJCQkJCQkJY2FzZSAnY29tbWVudHMnOg0KCQkJCQkJCQlmdXR1X2FsZXJ0 +KEZBVC5mYXZvdXJpdGVzX2hlYWRlciwgRkFULmZhdm91cml0ZXNfcmVxdWVzdF9j +b21tZW50X3JlbW92ZV9zdWNjZXNzLCBmYWxzZSwgJ21lc3NhZ2UnKTsNCgkJCQkJ +CQkJYnJlYWs7DQoJCQkJCQkJY2FzZSAncG9zdHMnOg0KCQkJCQkJCQlmdXR1X2Fs +ZXJ0KEZBVC5mYXZvdXJpdGVzX2hlYWRlciwgRkFULmZhdm91cml0ZXNfcmVxdWVz +dF9wb3N0X3JlbW92ZV9zdWNjZXNzLCBmYWxzZSwgJ21lc3NhZ2UnKTsNCgkJCQkJ +CQkJYnJlYWs7DQoJCQkJCQl9DQoJCQkJCQlpZiAoIShwYXJhbXMudGFyZ2V0X3R5 +cGUgPT0gJ2NvbW1lbnRzJykpIHsNCgkJCQkJCQl0ZW1wLmZhdm91cml0ZXNfYWRk +ICYmIHRlbXAuZmF2b3VyaXRlc19hZGQuY2xlYXJPd25UYWdzKCQocGFyYW1zLmJ1 +dHRvbikpOw0KCQkJCQkJfQ0KDQoJCQkJfQ0KDQoJCQkJaWYgKHBhcmFtcy50YXJn +ZXRfdHlwZSA9PSAncG9zdHMnIHx8IHBhcmFtcy50YXJnZXRfdHlwZSA9PSAncXVl +c3Rpb25zJykgew0KCQkJCQkkKHBhcmFtcy5idXR0b24pLmdldFBhcmVudCgnLmpz +LXRvX2ZhdnNfaG9sZGVyJykuc3dpdGNoQ2xhc3MoJ2Zhdl9hZGRlZCcsICd0by1m +YXZzJyk7DQoNCgkJCQkJdmFyIGRpdiA9IHBhcmFtcy5idXR0b24uZ2V0UGFyZW50 +KCdkaXYuaGVudHJ5Jyk7DQogICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9 +IGRpdi5nZXRFbGVtZW50KCcuZmF2c19jb3VudCcpOw0KICAgICAgICAgICAgICAg +ICAgICB2YXIgcHJldiA9IHBhcnNlSW50KGNvdW50LmdldCgndGV4dCcpKSB8fCAw +Ow0KCQkJCQlpZiAocHJldmlvdXNfb2ZmKSB7DQogICAgICAgICAgICBjb3VudC5z +ZXQoJ3RleHQnLCBwcmV2ICsgMSk7DQoJCQkJCQlwYXJhbXMuYnV0dG9uLnRpdGxl +ID0n0KPQtNCw0LvQuNGC0Ywg0LjQtyDQuNC30LHRgNCw0L3QvdC+0LPQvic7DQog +ICAgCQkJCWlmIChwYXJhbXMudGFyZ2V0X3R5cGUgPT0gJ3F1ZXN0aW9ucycpIHsN +Cg0KICAgIAkJCQl9ZWxzZXsNCgkJCQkJCSAgdmFyIHRhZ3MgPSBkaXYuZ2V0RWxl +bWVudCgnLnRhZ3MnKTsNCiAgICAJCQkJICAobmV3IEVsZW1lbnQoJ2xpJywgeyAn +Y2xhc3MnOiAnZmF2b3VyaXRlc19lZGl0X3RhZ3MnLCAnaHRtbCc6ICc8YSBvbmNs +aWNrPSJ0ZW1wLmZhdm91cml0ZXNfYWRkLmNoYW5nZV90YWdzKHRoaXMpOyByZXR1 +cm4gZmFsc2UiIGhyZWY9IiMiPtCY0LfQvNC10L3QuNGC0Ywg0YHQstC+0Lgg0LzQ +tdGC0LrQuDwvYT4nfSkpLmluamVjdCh0YWdzKTsNCiAgICAJCQkJfQ0KCQkJCQl9 +IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDEgPT0gcHJldikg +ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50LnNldCgndGV4dCcs +ICcnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICBjb3VudC5zZXQoJ3RleHQnLCBwcmV2IC0gMSkN +CiAgICAgICAgICAgICAgICAgICAgICAgIH0NCgkJCQkJCXBhcmFtcy5idXR0b24u +dGl0bGUgPSfQlNC+0LHQsNCy0LjRgtGMINCyINC40LfQsdGA0LDQvdC90L7QtScN +CgkJCQkJfQ0KCQkJCX0gZWxzZSBpZiAocGFyYW1zLnRhcmdldF90eXBlID09ICdj +b21tZW50cycpIHsNCg0KCQkJCQkkKHBhcmFtcy5idXR0b24pLmdldFBhcmVudCgn +LmpzLXRvX2ZhdnNfaG9sZGVyJykuc3dpdGNoQ2xhc3MoJ2Zhdl9hZGRlZCcsICd0 +by1mYXZzJyk7DQoJCQkJfQ0KDQoJCQl9DQoJCX0NCgl9DQp9Ow0KDQp0bS5pbml0 +LmFkZChmdW5jdGlvbiAoKSB7DQoJdGVtcC5mYXZvdXJpdGVzX2FkZCA9IHsNCgkJ +J2luaXQnOiBmdW5jdGlvbiAoKSB7DQoJCQlpZiAodGhpcy5pbml0ZWQpIHsgcmV0 +dXJuOyB9DQoJCQl2YXIgc2VsZiA9IHRoaXM7DQoJCQl0aGlzLmluaXRlZCA9IHRy +dWU7DQoJCQl0aGlzLmhpZGRlbl9jb250YWluZXIgPSAkKCdmYXZvdXJpdGVzX2Fk +ZF9oaWRkZW4nKTsNCgkJCXRoaXMuZm9ybSA9ICQoJ2Zhdm91cml0ZXNfYWRkX2Zv +cm0nKTsNCgkJCXRoaXMuYWRkZXIgPSAkKCdmYXZvdXJpdGVzX2FkZCcpOw0KCQkJ +dGhpcy50YWdzID0gJCgnZmF2b3VyaXRlc19hZGRfdGFncycpOw0KCQkJdGhpcy5p +ZCA9ICQoJ2Zhdm91cml0ZXNfYWRkX2lkJyk7DQoJCQl0aGlzLmJ1dHRvbiA9ICQo +J2Zhdm91cml0ZXNfYWRkX3N1Ym1pdCcpOw0KDQoJCQlCcm93c2VyLkVuZ2luZS50 +cmlkZW50ICYmIHRoaXMudGFncy5hZGRFdmVudCgna2V5cHJlc3MnLCBmdW5jdGlv +biAoZSkgew0KCQkJCWlmIChlLmtleSA9PSAnZW50ZXInKSB7DQoJCQkJCWUuc3Rv +cCgpOw0KCQkJCQlzZWxmLmZvcm0uYXR0YWNoZWQuc3VibWl0KCk7DQoJCQkJfQ0K +CQkJfSk7DQoNCgkJCXZhciBjYW5jZWwgPSAkKCdmYXZvdXJpdGVzX2FkZF9jYW5j +ZWwnKTsNCg0KCQkJY2FuY2VsICYmIGNhbmNlbC5hZGRFdmVudCgnY2xpY2snLCBm +dW5jdGlvbiAoZSkgew0KCQkJCWUuc3RvcCgpOw0KCQkJCXNlbGYuaGlkZSgpOw0K +CQkJfSk7DQoJCX0sDQoJCSdzaG93JzogZnVuY3Rpb24gKGNvbnRhaW5lciwgaWQs +IHRhZ3Nfc3RyaW5nKSB7DQoJCQkhdGhpcy5pbml0ZWQgJiYgdGhpcy5pbml0KCk7 +DQoJCQl0aGlzLmlkLnZhbHVlID0gaWQ7DQoJCQlpZiAodGFnc19zdHJpbmcpIHsN +CgkJCQl0aGlzLnRhZ3MudmFsdWUgPSB0YWdzX3N0cmluZzsNCgkJCQl0aGlzLmJ1 +dHRvbi52YWx1ZSA9ICfQodC+0YXRgNCw0L3QuNGC0YwnOw0KCQkJfQ0KCQkJdGhp +cy5jb250YWluZXIgPSBjb250YWluZXI7DQoJCQljb250YWluZXIgJiYgdGhpcy5h +ZGRlci5pbmplY3QoY29udGFpbmVyKTsNCgkJCXRoaXMudGFncy5mb2N1cygpOw0K +CQl9LA0KCQknaGlkZSc6IGZ1bmN0aW9uICgpIHsNCgkJCXRoaXMuYWRkZXIuaW5q +ZWN0KHRoaXMuaGlkZGVuX2NvbnRhaW5lcik7DQoJCQl0aGlzLnRhZ3MudmFsdWUg +PSAnJzsNCgkJCXRoaXMuaWQudmFsdWUgPSAnJzsNCgkJCXRoaXMuY29udGFpbmVy +ID0gbnVsbDsNCgkJCXRoaXMuYnV0dG9uLnZhbHVlID0gJ9CU0L7QsdCw0LLQuNGC +0Ywg0LIg0LjQt9Cx0YDQsNC90L3QvtC1JzsNCgkJfSwNCgkJJ2NoYW5nZV90YWdz +JzogZnVuY3Rpb24gKGJ1dHRvbikgew0KCQkJdmFyIGNvbnRhaW5lciA9ICQoYnV0 +dG9uKS5nZXRQYXJlbnQoJ2Rpdi5oZW50cnknKSwNCgkJCQlpZCA9IGNvbnRhaW5l +ci5nZXRFbGVtZW50KCcuZW50cnktaW5mbycpLmlkLnJlcGxhY2UoJ2luZm9wYW5l +bCcsICcnKSwNCgkJCQl0YWdzX2hvbGRlciA9ICQoYnV0dG9uLnBhcmVudE5vZGUu +cGFyZW50Tm9kZSksDQoJCQkJdGFncyA9IHRhZ3NfaG9sZGVyLmdldEVsZW1lbnRz +KCdsaS5mYXYgYScpLA0KCQkJCXRhZ3Nfc3RyaW5nID0gJyc7DQoNCg0KCQkJZm9y +ICh2YXIgaSA9IDAsIGwgPSB0YWdzLmxlbmd0aDsgaTxsOyBpKyspIHsNCgkJCQko +aSE9MCkgJiYgKHRhZ3Nfc3RyaW5nICs9ICcsICcpOw0KCQkJCXRhZ3Nfc3RyaW5n +ICs9IHRhZ3NbaV0uaW5uZXJIVE1MOw0KCQkJfQ0KCQkJdGhpcy5zaG93KGNvbnRh +aW5lciwgaWQsIHRhZ3Nfc3RyaW5nKTsNCgkJfSwNCgkJJ2NsZWFyT3duVGFncyc6 +IGZ1bmN0aW9uIChidXR0b24pIHsNCgkJCXRoaXMuY29udGFpbmVyID0gYnV0dG9u +LmdldFBhcmVudCgnZGl2LmhlbnRyeScpOw0KCQkJdmFyIGZhdiA9IHRoaXMuY29u +dGFpbmVyLmdldEVsZW1lbnQoJ2Rpdi5qcy10b19mYXZzX2hvbGRlcicpOw0KCQkJ +ZmF2ICYmIGZhdi5yZW1vdmVDbGFzcygndG8tZmF2cycpLmFkZENsYXNzKCdmYXZf +YWRkZWQnKTsNCgkJCXRoaXMuc2V0VGFncygnJywgdHJ1ZSk7DQoJCX0sDQoJCSdz +ZXRUYWdzJzogZnVuY3Rpb24gKHRhZ3MsIHVuZmF2KSB7DQoJCQlpZiAoIXRoaXMu +Y29udGFpbmVyKSB7IHJldHVybjsgfQ0KDQoJCQl2YXIgdGFnc19ob2xkZXIgPSB0 +aGlzLmNvbnRhaW5lci5nZXRFbGVtZW50KCd1bC50YWdzJyk7DQoNCgkJCWlmICgh +dGFnc19ob2xkZXIpIHsNCgkJCQlpZiAodGFncykgew0KCQkJCQl2YXIgY29udGVu +dCA9IHRoaXMuY29udGFpbmVyLmdldEVsZW1lbnQoJ2Rpdi5jb250ZW50Jyk7DQoJ +CQkJCXRhZ3NfaG9sZGVyID0gKG5ldyBFbGVtZW50KCd1bCcsIHsgJ2NsYXNzJzog +J3RhZ3MgJ30pKS5pbmplY3QoY29udGVudCwgJ2FmdGVyJyk7DQoJCQkJfQ0KCQkJ +fQ0KCQkJaWYgKHRhZ3NfaG9sZGVyKSB7DQoJCQkJdmFyIGVkaXRfdGFncyA9IHRh +Z3NfaG9sZGVyLmdldEVsZW1lbnQoJ2xpLmZhdm91cml0ZXNfZWRpdF90YWdzJyk7 +DQoNCgkJCQl0YWdzX2hvbGRlci5nZXRFbGVtZW50cygnbGkuZmF2JykuZGlzcG9z +ZSgpOw0KDQoJCQkJaWYgKHVuZmF2KSB7DQoJCQkJICAgIGlmIChlZGl0X3RhZ3Mp +IGVkaXRfdGFncy5kaXNwb3NlKCk7DQoJCQkJfSBlbHNlIHsNCgkJCQkJaWYgKCFl +ZGl0X3RhZ3MpIHsNCgkJCQkJCWVkaXRfdGFncyA9IChuZXcgRWxlbWVudCgnbGkn +LCB7ICdjbGFzcyc6ICdmYXZvdXJpdGVzX2VkaXRfdGFncycsICdodG1sJzogJzxh +IG9uY2xpY2s9InRlbXAuZmF2b3VyaXRlc19hZGQuY2hhbmdlX3RhZ3ModGhpcyk7 +IHJldHVybiBmYWxzZTsiIGhyZWY9IiMiPtCY0LfQvNC10L3QuNGC0Ywg0YHQstC+ +0Lgg0LzQtdGC0LrQuDwvYT4nIH0pKS5pbmplY3QodGFnc19ob2xkZXIpOw0KCQkJ +CQl9DQoJCQkJfQ0KDQoJCQkJdmFyIGVtcHR5ID0gISh0YWdzX2hvbGRlci5nZXRF +bGVtZW50cygnbGknKS5sZW5ndGggKyAoZWRpdF90YWdzID8gLTEgOiAwICkpOw0K +DQoJCQkJaWYgKCF1bmZhdiAmJiB0YWdzKSB7DQoJCQkJCXZhciB0YWdzID0gdGFn +cy5zcGxpdCgnLCcpOw0KCQkJCQlmb3IodmFyIGk9MCwgbD10YWdzLmxlbmd0aDsg +aTxsOyBpKyspIHsNCgkJCQkJCXZhciB0YWcgPSB0YWdzW2ldLmNsZWFuKCk7DQoJ +CQkJCQkobmV3IEVsZW1lbnQoJ2xpJywgeyAnY2xhc3MnOiAnZmF2JywgJ2h0bWwn +OiAoKGVtcHR5ICYmIGk9PTApID8gJycgOiAnLCAnKSArICc8YSBocmVmPSJodHRw +Oi8vJyArIHRlbXAudXNlci5sb2dpbiArICcuJyArIHRlbXAuYmFzZV9zaG9ydCAr +ICcvZmF2b3JpdGVzL3RhZy8nICsgdGFnICsgJyI+JyArIHRhZyArICc8L2E+J30p +KS5pbmplY3QoZWRpdF90YWdzLCAnYmVmb3JlJyk7DQoJCQkJCX0NCgkJCQl9DQoN +CgkJCQlpZiAoIXRhZ3NfaG9sZGVyLmdldEVsZW1lbnRzKCdsaScpLmxlbmd0aCkg +eyB0YWdzX2hvbGRlci5kaXNwb3NlKCk7IH0NCg0KCQkJCXRoaXMuY29udGFpbmVy +ID0gbnVsbDsNCgkJCX0NCgkJfQ0KCX07DQp9KTsNCgoKCgovKiAgIGZ1dHVfYWxl +cnQgICAqLwpmdW5jdGlvbiBmdXR1X2FsZXJ0KGhlYWRlciwgdGV4dCwgY2xvc2Us +IGNsYXNzTmFtZSkgew0KCWlmICghJCgnZnV0dV9hbGVydHNfaG9sZGVyJykpIHsN +CgkJdmFyIGZ1dHVBbGVydE91dGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn +ZGl2Jyk7DQoJCWZ1dHVBbGVydE91dGVyLmNsYXNzTmFtZSA9ICdmdXR1X2FsZXJ0 +X291dGVyJzsNCgkJZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmdXR1QWxlcnRP +dXRlcik7DQoJCXZhciBmdXR1QWxlcnRGcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVs +ZW1lbnQoJ2RpdicpOw0KCQlmdXR1QWxlcnRGcmFtZS5jbGFzc05hbWUgPSAnZnJh +bWUnOw0KCQlmdXR1QWxlcnRPdXRlci5hcHBlbmRDaGlsZChmdXR1QWxlcnRGcmFt +ZSk7DQoJCQ0KCQl2YXIgZnV0dUFsZXJ0c0hvbGRlciA9IGRvY3VtZW50LmNyZWF0 +ZUVsZW1lbnQoJ2RpdicpOw0KCQlmdXR1QWxlcnRzSG9sZGVyLmlkID0gJ2Z1dHVf +YWxlcnRzX2hvbGRlcic7DQoJCWZ1dHVBbGVydHNIb2xkZXIuY2xhc3NOYW1lID0g +J2Z1dHVfYWxlcnRzX2hvbGRlcic7DQoJCWZ1dHVBbGVydEZyYW1lLmFwcGVuZENo +aWxkKGZ1dHVBbGVydHNIb2xkZXIpOw0KCQkNCgl9IGVsc2Ugew0KDQoNCgl9DQoJ +dmFyIGZ1dHVBbGVydCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOw0K +CWZ1dHVBbGVydC5jbGFzc05hbWUgPSAnZnV0dV9hbGVydCAnICsgY2xhc3NOYW1l +Ow0KCSQoJ2Z1dHVfYWxlcnRzX2hvbGRlcicpLmFwcGVuZENoaWxkKGZ1dHVBbGVy +dCk7DQoNCgl2YXIgZnV0dUFsZXJ0SGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxl +bWVudCgnZGl2Jyk7DQoJZnV0dUFsZXJ0SGVhZGVyLmNsYXNzTmFtZSA9ICdmdXR1 +X2FsZXJ0X2hlYWRlcic7DQoJZnV0dUFsZXJ0LmFwcGVuZENoaWxkKGZ1dHVBbGVy +dEhlYWRlcik7DQoJDQoJZnV0dUFsZXJ0SGVhZGVyLmlubmVySFRNTCA9IGhlYWRl +cjsNCglpZiAoY2xvc2UpIHsNCgkJdmFyIGZ1dHVBbGVydENsb3NlQnV0dG9uID0g +ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOw0KCQlmdXR1QWxlcnRDbG9zZUJ1 +dHRvbi5ocmVmID0gJyMnOw0KCQlmdXR1QWxlcnRDbG9zZUJ1dHRvbi5jbGFzc05h +bWUgPSAnZnV0dV9hbGVydF9jbG9zZV9idXR0b24nOw0KCQlmdXR1QWxlcnRDbG9z +ZUJ1dHRvbi5vbmNsaWNrID0gZnVuY3Rpb24oZXYpIHsNCgkJCWlmKCFldikgew0K +CQkJCWV2PXdpbmRvdy5ldmVudDsNCgkJCX0NCgkJCWlmICghZG9jdW1lbnQuYWxs +KSBldi5wcmV2ZW50RGVmYXVsdCgpOyBlbHNlIGV2LnJldHVyblZhbHVlID0gZmFs +c2U7DQoJCQkkKGZ1dHVBbGVydCkuZGlzcG9zZSgpDQoJCX0NCgkJZnV0dUFsZXJ0 +LmFwcGVuZENoaWxkKGZ1dHVBbGVydENsb3NlQnV0dG9uKTsNCgkJDQoJCXZhciBm +dXR1QWxlcnRDbG9zZUJ1dHRvbkljb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50 +KCdpbWcnKTsNCgkJZnV0dUFsZXJ0Q2xvc2VCdXR0b25JY29uLnNyYyA9ICcvaS9i +dXR0b25zL2J0bl9jbG9zZS5naWYnOw0KCQlmdXR1QWxlcnRDbG9zZUJ1dHRvbi5h +cHBlbmRDaGlsZChmdXR1QWxlcnRDbG9zZUJ1dHRvbkljb24pOw0KCX0NCgkNCgkN +Cgl2YXIgZnV0dUFsZXJ0VGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp +dicpOw0KCWZ1dHVBbGVydFRleHQuY2xhc3NOYW1lID0gJ2Z1dHVfYWxlcnRfdGV4 +dCc7DQoJZnV0dUFsZXJ0LmFwcGVuZENoaWxkKGZ1dHVBbGVydFRleHQpOw0KDQoJ +DQoJZnV0dUFsZXJ0VGV4dC5pbm5lckhUTUwgPSB0ZXh0Ow0KCQ0KCWZ1dHVBbGVy +dC5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7DQoJZnV0dUFsZXJ0LnN0eWxl +LnRvcCA9ICcwJzsNCglmdXR1QWxlcnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7 +DQoNCgkNCglpZiAoIWNsb3NlKSB7DQoJCSQoZnV0dUFsZXJ0KS5hZGRFdmVudCgi +Y2xpY2siLGZ1bmN0aW9uKCl7DQoJCQkkKGZ1dHVBbGVydCkuZGlzcG9zZSgpDQoJ +CX0pDQoJCXNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyAkKGZ1dHVBbGVydCkuZGlz +cG9zZSgpIH0sIDMwMDApOw0KCQkNCgl9DQp9DQoNCi8vIEZ1dHUgQWxlcnQgVGV4 +dHMNCnZhciBGQVQgPSB7DQoJcHJlbG9hZGVyIDogJ9CS0LDRiCDQt9Cw0L/RgNC+ +0YEg0L7RgtC/0YDQsNCy0LvQtdC9INC/0L4g0YHQtdC60YDQtdGC0L3QvtC5INC7 +0LjQvdC40LguINCW0LTQuNGC0LUg0L/QvtC20LDQu9GD0LnRgdGC0LAg0L7RgtCy +0LXRgtCwJywNCgllbXB0eTogJ9Cd0YMg0LTQu9GPINC90LDRh9Cw0LvQsCDRgdC6 +0LDQttC40YLQtSwg0YfRgtC+INCy0Ysg0L3QsNC80LXRgNC10L3RiyDQtNC10LvQ +sNGC0YwnLA0KDQoJLy8g0L/RgNC+0YTQuNC70YwNCglwcm9maWxlX2hlYWRlciA6 +ICfQpdCw0LHRgNCw0YXQsNCx0YAgLSDQndCw0YHRgtGA0L7QudC60LgnLA0KDQoJ +Ly8g0YDQtdC30Y7QvNC1DQoJcmVzdW1lX2hlYWRlciA6ICfQpdCw0LHRgNCw0YXQ +sNCx0YAg4oCUINCg0LXQt9GO0LzQtScsDQoJDQoJLy8g0L/QvtGH0YLQsA0KCW1h +aWxfaGVhZGVyIDogJ9Cl0LDQsdGA0LDRhdCw0LHRgCDigJQg0J/QvtGH0YLQsCcs +DQoJbWFpbF9sZXR0ZXJfc2VuZF9yZXF1ZXN0IDogJ9CS0Ysg0L7RgtC/0YDQsNCy +0LjQu9C4INC30LDQv9GA0L7RgSDQvdCwINC+0YLQv9GA0LDQstC60YMg0L/QuNGB +0YzQvNCwLicsDQoJbWFpbF9sZXR0ZXJfZGVsZXRlIDogJ9Cf0LjRgdGM0LzQviDR +g9C00LDQu9C10L3QvicsDQoNCgkvLyDQutC+0LzQvNC10L3RgtCw0YDQuNC4DQoJ +Y29tbWVudHNfaGVhZGVyIDogJ9Cl0LDQsdGA0LDRhdCw0LHRgCDigJQg0JrQvtC8 +0LzQtdC90YLQsNGA0LjQuCcsDQoJY29tbWVudHNfZXJyb3JfYmxhbmtfbWVzc2Fn +ZSA6ICfQktCy0LXQtNC40YLQtSDRh9GC0L4t0L3QuNCx0YPQtNGMIScsDQoJY29t +bWVudHNfYWRkX3N1Y2Nlc3MgOiAn0JLRiyDQtNC+0LHQsNCy0LjQu9C4INC60L7Q +vNC80LXQvdGC0LDRgNC40LkuJywNCgljb21tZW50c19hZGRfcmVxdWVzdCA6ICfQ +ktGLINC+0YLQv9GA0LDQstC40LvQuCDQt9Cw0L/RgNC+0YEg0L3QsCDQtNC+0LHQ +sNCy0LvQtdC90LjQtSDQutC+0LzQvNC10L3RgtCw0YDQuNGPLicsDQoNCgkvLyDQ +s9C+0YHQvtCy0LDQvdC40LUNCgl2b3RpbmdzX2hlYWRlciA6ICfQpdCw0LHRgNCw +0YXQsNCx0YAg4oCUINCT0L7Qu9C+0YHQvtCy0LDQvdC40Y8nLA0KCXZvdGluZ3Nf +dW5rbm93bl9lcnJvciA6ICfQndC10L7Qv9C+0LfQvdCw0L3QvdCw0Y8g0YHRgtGA +0LDQvdC90LDRjyDQvtGI0LjQsdC60LAnLA0KCXZvdGluZ3NfZXJyb3Jfc2VsZiA6 +ICfQk9C+0LvQvtGB0L7QstCw0YLRjCDQt9CwINGB0LLQvtC4INCy0LXRidC4INC9 +0LXQu9GM0LfRjycsDQoJdm90aW5nc19lcnJvcl9wcm9oaWJpdGVkIDogJ9CS0LDQ +vCDQt9Cw0L/RgNC10YnQtdC90L4g0LfQtNC10YHRjCDQs9C+0LvQvtGB0L7QstCw +0YLRjCcsDQoJdm90aW5nc19lcnJvcl9pc19leHBpcmVkIDogJ9CS0YDQtdC80Y8g +0LPQvtC70L7RgdC+0LLQsNC90LjRjyDQv9GA0L7RiNC70L4nLA0KCXZvdGluZ3Nf +ZXJyb3Jfbm9fYWNjZXNzIDogJ9Ct0YLQviDQtNC10LnRgdGC0LLQuNC1INC00L7R +gdGC0YPQv9C90L4g0YLQvtC70YzQutC+INC00LvRjyDQt9Cw0YDQtdCz0LjRgdGC +0YDQuNGA0L7QstCw0L3QvdGL0YUg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9C10Lkn +LA0KDQoJLy8g0LHQu9C+0LPQuA0KCWJsb2dzOiB7DQoJCWhlYWRlcjogJ9Cl0LDQ +sdGA0LDRhdCw0LHRgCDigJQg0JHQu9C+0LPQuCcsDQoJCWRpc2FibGVkOiAn0JLQ +sNGI0LAg0L/RgNC+0YHRjNCx0LAg0L4g0L/QvtC00L/QuNGB0LrQtS/QstGB0YLR +g9C/0LvQtdC90LjQuCDQsiDQsdC70L7QsyDRg9C20LUg0LHRi9C70LAg0L7RgtC/ +0YDQsNCy0LvQtdC90LAg0LzQvtC00LXRgNCw0YLQvtGA0YMnLA0KCQllbXB0eV9m +aWVsZDogJ9Cd0YMg0LLQstC10LTQuNGC0LUg0YXQvtGC0Ywg0YfRgtC+LdC90LjQ +sdGD0LTRjCEnLA0KCQlibG9nX2pvaW46ICfQktGLINCy0YHRgtGD0L/QuNC70Lgg +0LIg0LHQu9C+0LMnLA0KCQlibG9nX2xlYXZlOiAn0JLRiyDQv9C+0LrQuNC90YPQ +u9C4INCx0LvQvtCzJw0KCX0sDQoNCg0KCS8vINGA0LXQs9C40YHRgtGA0LDRhtC4 +0Y8NCglyZWdpc3RyYXRpb246IHsNCgkJaGVhZGVyOiAn0KXQsNCx0YDQsNGF0LDQ +sdGAIOKAlCDQoNC10LPQuNGB0YLRgNCw0YbQuNGPJywNCgkJZXJyb3I6ICfQntGI +0LjQsdC60LA6INC/0YDQvtCy0LXRgNGM0YLQtSDQv9GA0LDQstC40LvRjNC90L7R +gdGC0Ywg0LfQsNC/0L7Qu9C90LXQvdC40Y8g0YTQvtGA0LzRiycNCgl9LA0KDQoJ +Ly8g0L/QvtGB0YLRiw0KCXBvc3RzX2hlYWRlciA6ICfQpdCw0LHRgNCw0YXQsNCx +0YAg4oCUINCf0YPQsdC70LjQutCw0YbQuNC4JywNCglwb3N0c19zbGlkZXNob3df +YWRkIDogJ9Ch0LvQsNC50LTRiNC+0YMg0LTQvtCx0LDQstC70LXQvdC+JywNCg0K +CS8vINCU0L7QsdCw0LLQu9C10L3QuNC1INCyINC00YDRg9C30YzRjw0KCWZyaWVu +ZGxpZXJfaGVhZGVyIDogJ9Cl0LDQsdGA0LDRhdCw0LHRgCDigJQg0JTRgNGD0LfR +jNGPJywNCglmcmllbmRsaWVyX3Vua25vd25fZXJyb3IgOiAn0J3QtdC+0L/QvtC3 +0L3QsNC90L3QsNGPINGB0YLRgNCw0L3QvdCw0Y8g0L7RiNC40LHQutCwJywNCg0K +CS8vINCd0LDRgdGC0YDQvtC50LrQuA0KCXVzZXJfc2V0dGluZ3NfaGVhZGVyIDog +J9Cl0LDQsdGA0LDRhdCw0LHRgCDigJQg0J3QsNGB0YLRgNC+0LnQutC4INC/0L7Q +u9GM0LfQvtCy0LDRgtC10LvRjycsDQoJdXNlcl9zZXR0aW5nc19zYXZlX3N1Y2Nl +c3MgOiAn0J3QsNGB0YLRgNC+0LnQutC4INC+0LHQvdC+0LLQu9C10L3RiycsDQoJ +dXNlcl9zZXR0aW5nc191bmtub3duX2Vycm9yIDogJ9Cd0LXQuNC30LLQtdGB0YLQ +vdCw0Y8g0L7RiNC40LHQutCwJywNCgkNCgkvLyDQmtCw0YDRgtCwINCx0LvQvtCz +0L7Qsg0KCWJsb2dfbWFwX2hlYWRlciA6ICfQpdCw0LHRgNCw0YXQsNCx0YAg4oCU +INCa0LDRgNGC0LAg0LHQu9C+0LPQvtCyJywNCglibG9nX2Vycm9yX25vX2JyYW5k +IDogJ9Cc0LDRgNC60LAg0L3QtSDQvdCw0LnQtNC10L3QsCcsDQoJYmxvZ19lcnJv +cl9ub19tb2RlbCA6ICfQnNC+0LTQtdC70Ywg0L3QtSDQvdCw0LnQtNC10L3QsCcs +DQoJYmxvZ19lcnJvcl9ub19ibG9nIDogJ9CR0LvQvtCzINC90LUg0L3QsNC50LTQ +tdC9JywNCgkNCgkvLyDQmtCw0YDRgtCwDQoJZ21hcF9oZWFkZXIgOiAn0KXQsNCx +0YDQsNGF0LDQsdGAIOKAlCDQmtCw0YDRgtGLJywNCglnbWFwX21hcmtlcl9hZGRf +c3VjY2VzcyA6ICfQntCx0YrQtdC60YIg0LTQvtCx0LDQstC70LXQvScsDQoJZ21h +cF9tYXJrZXJfYWRkX25vX21hcmtlciA6ICfQn9C+0LbQsNC70YPQudGB0YLQsCwg +0LrQu9C40LrQvdC40YLQtSDQvdCwINC60LDRgNGC0YMg0LTQu9GPINC00L7QsdCw +0LLQu9C10L3QuNGPINC+0LHRitC10LrRgtCwJywNCglnbWFwX3NlYXJjaF9wbGFj +ZV9ub19hZGRyZXNzX2Vycm9yIDogJ9Cf0L7QttCw0LvRg9C50YHRgtCwLCDRg9GC +0L7Rh9C90LjRgtC1LCDRh9GC0L4sINGB0L7QsdGB0YLQstC10L3QvdC+LCDQuNGB +0LrQsNGC0YwuJywNCgkNCgkvLyDQmNC30LHRgNCw0L3QvdC+0LUNCglmYXZvdXJp +dGVzX2hlYWRlciA6ICAn0KXQsNCx0YDQsNGF0LDQsdGAIOKAlCDQmNC30LHRgNCw +0L3QvdC+0LUnLA0KCWZhdm91cml0ZXNfcmVxdWVzdF9hZGQgOiAgJ9Cl0LDQsdGA +0LDRhdCw0LHRgCDigJQg0JLRiyDQv9C+0YHQu9Cw0LvQuCDQt9Cw0L/RgNC+0YEg +0L3QsCDQtNC+0LHQsNCy0LvQtdC90LjQtSDQv9C+0YHRgtCwINCyINC40LfQsdGA +0LDQvdC90L7QtScsDQoJZmF2b3VyaXRlc19yZXF1ZXN0X3JlbW92ZSA6ICAn0KXQ +sNCx0YDQsNGF0LDQsdGAIOKAlCDQktGLINC/0L7RgdC70LDQu9C4INC30LDQv9GA +0L7RgSDQvdCwINGD0LTQsNC70LXQvdC40LUg0L/QvtGB0YLQsCDQuNC3INC40LfQ +sdGA0LDQvdC90L7Qs9C+JywNCg0KCWZhdm91cml0ZXNfcmVxdWVzdF9wb3N0X2Fk +ZF9zdWNjZXNzIDogICfQpdCw0LHRgNCw0YXQsNCx0YAg4oCUINCS0Ysg0LTQvtCx +0LDQstC40LvQuCDQv9C+0YHRgiDQsiDQuNC30LHRgNCw0L3QvdC+0LUnLA0KCWZh +dm91cml0ZXNfcmVxdWVzdF9wb3N0X3JlbW92ZV9zdWNjZXNzIDogICfQpdCw0LHR +gNCw0YXQsNCx0YAg4oCUINCS0Ysg0YPQtNCw0LvQuNC70Lgg0L/QvtGB0YIg0LjQ +tyDQuNC30LHRgNCw0L3QvdC+0LPQvicsDQoJDQoJZmF2b3VyaXRlc19yZXF1ZXN0 +X2NvbW1lbnRfYWRkX3N1Y2Nlc3MgOiAgJ9Cl0LDQsdGA0LDRhdCw0LHRgCDigJQg +0JLRiyDQtNC+0LHQsNCy0LjQu9C4INC60L7QvNC80LXQvdGC0LDRgNC40Lkg0LIg +0LjQt9Cx0YDQsNC90L3QvtC1JywNCglmYXZvdXJpdGVzX3JlcXVlc3RfY29tbWVu +dF9yZW1vdmVfc3VjY2VzcyA6ICAn0KXQsNCx0YDQsNGF0LDQsdGAIOKAlCDQktGL +INGD0LTQsNC70LjQu9C4INC60L7QvNC80LXQvdGC0LDRgNC40Lkg0LjQtyDQuNC3 +0LHRgNCw0L3QvdC+0LPQvicsDQoNCgkvLyDQn9Cf0JANCglwcGFfaGVhZGVyIDog +J9Cf0J/QkCcsDQoJDQoJDQoJLy8g0JPQtdC+DQoJZ2VvX2hlYWRlciA6ICAn0KXQ +sNCx0YDQsNGF0LDQsdGAIOKAlCDQodGC0YDQsNC90YsnLA0KCQ0KCS8vIA0KCWNv +bXBhbmllc19oZWFkZXIgOiAgJ9Cl0LDQsdGA0LDRhdCw0LHRgCDigJQg0JrQvtC8 +0L/QsNC90LjQuCcsDQoJDQoJcG9sbF9oZWFkZXIgOiAn0KXQsNCx0YDQsNGF0LDQ +sdGAIOKAlCDQntC/0YDQvtGB0YsnLA0KCWZhaWx0dXJlIDogJ9Cl0LDQsdGA0LDR +hdCw0LHRgCDigJQg0J7RiNC40LHQutCwJywNCgkvLyBhamF4IGVycm9yDQoJYWph +eF9lcnJvciA6ICfQpdCw0LHRgNCw0YXQsNCx0YAg4oCUINCe0YjQuNCx0LrQsCBB +amF4LdC30LDQv9GA0L7RgdCwJw0KfTsNCgoKCgovKiAgIGdlbyAgICovCmdlb0hh +bmRsZXIgPSB7DQoJdXJsOiAnL2FqYXgvZ2VvLycsDQoJY2xhc3NOYW1lcyA6IHsN +CgkJYWxsSG9sZGVyOiAnanMtZ2VvX2Jsb2NrX2hvbGRlcicsDQoJCWNvdW50cnlI +b2xkZXI6ICdqcy1nZW9fY291bnRyeV9zZWxlY3RfaG9sZGVyJywNCgkJcmVnaW9u +SG9sZGVyOiAnanMtZ2VvX3JlZ2lvbl9zZWxlY3RfaG9sZGVyJywNCgkJY2l0eUhv +bGRlcjogJ2pzLWdlb19jaXR5X3NlbGVjdF9ob2xkZXInLA0KCQljb3VudHJ5U2Vs +ZWN0OiAnanMtZ2VvX2NvdW50cnlfc2VsZWN0JywNCgkJcmVnaW9uU2VsZWN0OiAn +anMtZ2VvX3JlZ2lvbl9zZWxlY3QnLA0KCQljaXR5U2VsZWN0OiAnanMtZ2VvX2Np +dHlfc2VsZWN0Jw0KCX0sDQoJeG1sOiB7DQoJCXJlc3BvbnNlTm9kZXM6IHsNCgkJ +CWVycm9yIDogJ2Vycm9yJywNCgkJCXJlc3VsdCA6ICdtZXNzYWdlJywNCgkJCXJl +Z2lvbiA6ICdyZWdpb24nLA0KCQkJY2l0eSA6ICdjaXR5Jw0KCQl9LA0KDQoJCXBh +cnNlOiBmdW5jdGlvbih4bWxPYmopew0KCQkJdmFyIHhtbE5vZGVzID0ge307DQoJ +CQlmb3IgKHByb3AgaW4gZ2VvSGFuZGxlci54bWwucmVzcG9uc2VOb2Rlcykgew0K +CQkJCXhtbE5vZGVzW3Byb3BdID0geG1sT2JqLmdldEVsZW1lbnRzQnlUYWdOYW1l +KGdlb0hhbmRsZXIueG1sLnJlc3BvbnNlTm9kZXNbcHJvcF0pOw0KCQkJfQ0KCQkJ +cmV0dXJuIHhtbE5vZGVzOw0KCQl9DQoJfSwNCgkNCglzZW5kRGF0YSA6IGZ1bmN0 +aW9uIChzZWxlY3Rfb2JqLCBzZW5kX3R5cGUsIGdldF90eXBlKSB7DQoJCQ0KCQl2 +YXIgYWxsSG9sZGVyID0gJChzZWxlY3Rfb2JqKS5nZXRQYXJlbnQoJy4nICsgZ2Vv +SGFuZGxlci5jbGFzc05hbWVzLmFsbEhvbGRlcik7DQoJCWlmIChzZWxlY3Rfb2Jq +LnZhbHVlID09ICcnKSB7DQoJCQlpZiAoZ2V0X3R5cGUgPT0gJ3JlZ2lvbnMnKSB7 +DQoJCQkJJChhbGxIb2xkZXIpLmdldEVsZW1lbnQoJy4nICsgZ2VvSGFuZGxlci5j +bGFzc05hbWVzLnJlZ2lvbkhvbGRlcikuYWRkQ2xhc3MoJ2hpZGRlbicpOw0KCQkJ +CSQoYWxsSG9sZGVyKS5nZXRFbGVtZW50KCcuJyArIGdlb0hhbmRsZXIuY2xhc3NO +YW1lcy5jaXR5SG9sZGVyKS5hZGRDbGFzcygnaGlkZGVuJyk7DQoJCQkJJChhbGxI +b2xkZXIpLmdldEVsZW1lbnQoJy4nICsgZ2VvSGFuZGxlci5jbGFzc05hbWVzLnJl +Z2lvblNlbGVjdCkuc2VsZWN0ZWRJbmRleCA9IDA7DQoJCQkJJChhbGxIb2xkZXIp +LmdldEVsZW1lbnQoJy4nICsgZ2VvSGFuZGxlci5jbGFzc05hbWVzLmNpdHlTZWxl +Y3QpLnNlbGVjdGVkSW5kZXggPSAwOw0KCQkJfSBlbHNlIGlmIChnZXRfdHlwZSA9 +PSAnY2l0aWVzJykgew0KCQkJCSQoYWxsSG9sZGVyKS5nZXRFbGVtZW50KCcuJyAr +IGdlb0hhbmRsZXIuY2xhc3NOYW1lcy5jaXR5SG9sZGVyKS5hZGRDbGFzcygnaGlk +ZGVuJyk7DQoJCQkJJChhbGxIb2xkZXIpLmdldEVsZW1lbnQoJy4nICsgZ2VvSGFu +ZGxlci5jbGFzc05hbWVzLmNpdHlTZWxlY3QpLnNlbGVjdGVkSW5kZXggPSAwOw0K +CQkJfQ0KCQkJDQoJCX0gZWxzZSB7DQoJCQl2YXIgZGF0YSA9IHNlbmRfdHlwZSAr +ICc9JyArIHNlbGVjdF9vYmoudmFsdWU7DQoJCQl2YXIgdXJsID0gJy9hamF4L2dl +by8nICsgZ2V0X3R5cGUgKyAnLyc7DQoJCQlhamF4TG9hZFBvc3QodXJsLCBkYXRh +LCBnZW9IYW5kbGVyLnNlbmREYXRhT25sb2FkLCB3aW5kb3csIHtzZWxlY3Rfb2Jq +OnNlbGVjdF9vYmosIHNlbmRfdHlwZTpzZW5kX3R5cGUsIGdldF90eXBlOmdldF90 +eXBlfSk7DQoJCX0NCgl9LA0KCQ0KCXNlbmREYXRhT25sb2FkIDogZnVuY3Rpb24o +YWpheE9iaiwgcGFyYW1zKSB7DQoJCWlmKGFqYXhPYmogJiYgYWpheE9iai5yZXNw +b25zZVhNTCl7DQoJCQl2YXIgeG1sT2JqID0gYWpheE9iai5yZXNwb25zZVhNTDsN +CgkJCXZhciB4bWxOb2RlcyA9IGdlb0hhbmRsZXIueG1sLnBhcnNlKHhtbE9iaik7 +DQoJCQlpZih4bWxOb2Rlcy5lcnJvciAmJiB4bWxOb2Rlcy5lcnJvci5sZW5ndGgp +ew0KCQkJCXZhciBlcnJvcnNfbGVuZ3RoID0geG1sTm9kZXMuZXJyb3IubGVuZ3Ro +Ow0KCQkJCWZvciAodmFyIGkgPSAwOyBpIDwgZXJyb3JzX2xlbmd0aDsgaSsrKSB7 +DQoJCQkJCWZ1dHVfYWxlcnQoRkFULmdlb19oZWFkZXIsIHhtbE5vZGVzLmVycm9y +W2ldLmZpcnN0Q2hpbGQuZGF0YSwgdHJ1ZSwgJ2Vycm9yJyk7DQoJCQkJfQ0KCQkJ +fQ0KCQkJaWYoeG1sTm9kZXMucmVzdWx0ICYmIHhtbE5vZGVzLnJlc3VsdC5sZW5n +dGgpIHsNCgkJCQlnZW9IYW5kbGVyLnNob3dSZXN1bHQoeG1sTm9kZXMsIHBhcmFt +cyk7DQoJCQl9DQoJCX0NCgl9LA0KCQ0KCXNob3dSZXN1bHQgOiBmdW5jdGlvbiAo +eG1sTm9kZXMsIHBhcmFtcykgew0KDQoJCXZhciBhbGxIb2xkZXIgPSAkKHBhcmFt +cy5zZWxlY3Rfb2JqKS5nZXRQYXJlbnQoJy4nICsgZ2VvSGFuZGxlci5jbGFzc05h +bWVzLmFsbEhvbGRlcik7DQogICAgICAgIA0KCQlpZiAocGFyYW1zLmdldF90eXBl +ID09ICdyZWdpb25zJykgew0KCQkJdmFyIHNlbGVjdFJlZ2lvbnMgPSAkKGFsbEhv +bGRlcikuZ2V0RWxlbWVudCgnLicgKyBnZW9IYW5kbGVyLmNsYXNzTmFtZXMucmVn +aW9uU2VsZWN0KTsNCgkJCXZhciBzZWxlY3RSZWdpb25zSG9sZGVyID0gJChhbGxI +b2xkZXIpLmdldEVsZW1lbnQoJy4nICsgZ2VvSGFuZGxlci5jbGFzc05hbWVzLnJl +Z2lvbkhvbGRlcik7DQoJCQkNCgkJCXZhciBjdXJPcHRpb25zID0gc2VsZWN0UmVn +aW9ucy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb3B0aW9uJyk7DQoJCQl2YXIgY3Vy +T3B0aW9uc0xlbmd0aCA9IGN1ck9wdGlvbnMubGVuZ3RoOw0KCQkJDQoJCQlmb3Ig +KHZhciBpID0gMTsgaSA8IGN1ck9wdGlvbnNMZW5ndGg7IGkrKykgew0KCQkJCXNl +bGVjdFJlZ2lvbnMucmVtb3ZlKDEpOw0KCQkJfQ0KCQkJDQoJCQlpZiAoeG1sTm9k +ZXMucmVnaW9uICYmIHhtbE5vZGVzLnJlZ2lvbi5sZW5ndGgpIHsNCgkJCQlsID0g +eG1sTm9kZXMucmVnaW9uLmxlbmd0aDsNCgkJCQlmb3IgKHZhciBpID0gMDsgaSA8 +IGw7IGkrKykgew0KCQkJCQl2YXIgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxl +bWVudCgnb3B0aW9uJyk7DQoJCQkJCW9wdGlvbi52YWx1ZSA9IHhtbE5vZGVzLnJl +Z2lvbltpXS5nZXRBdHRyaWJ1dGUoJ2lkJyk7DQoJCQkJCW9wdGlvbi5pbm5lckhU +TUwgPSB4bWxOb2Rlcy5yZWdpb25baV0uZmlyc3RDaGlsZC5kYXRhOw0KCQkJCQlz +ZWxlY3RSZWdpb25zLmFwcGVuZENoaWxkKG9wdGlvbik7DQoJCQkJCSQoc2VsZWN0 +UmVnaW9ucykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpOw0KCQkJCQkkKHNlbGVjdFJl +Z2lvbnNIb2xkZXIpLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTsNCgkJCQl9DQoJCQkJ +JChhbGxIb2xkZXIpLmdldEVsZW1lbnQoJy4nICsgZ2VvSGFuZGxlci5jbGFzc05h +bWVzLmNpdHlIb2xkZXIpLmFkZENsYXNzKCdoaWRkZW4nKTsNCgkJCQkkKGFsbEhv +bGRlcikuZ2V0RWxlbWVudCgnLicgKyBnZW9IYW5kbGVyLmNsYXNzTmFtZXMuY2l0 +eVNlbGVjdCkuc2VsZWN0ZWRJbmRleCA9IDA7DQoJCQl9DQoJCQkNCgkJfSBlbHNl +IGlmIChwYXJhbXMuZ2V0X3R5cGUgPT0gJ2NpdGllcycpIHsNCgkJCXZhciBzZWxl +Y3RDaXRpZXMgPSAkKGFsbEhvbGRlcikuZ2V0RWxlbWVudCgnLicgKyBnZW9IYW5k +bGVyLmNsYXNzTmFtZXMuY2l0eVNlbGVjdCk7DQoJCQl2YXIgc2VsZWN0Q2l0aWVz +SG9sZGVyID0gJChhbGxIb2xkZXIpLmdldEVsZW1lbnQoJy4nICsgZ2VvSGFuZGxl +ci5jbGFzc05hbWVzLmNpdHlIb2xkZXIpOw0KCQkJDQoJCQl2YXIgY3VyT3B0aW9u +cyA9IHNlbGVjdENpdGllcy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb3B0aW9uJyk7 +DQoJCQl2YXIgY3VyT3B0aW9uc0xlbmd0aCA9IGN1ck9wdGlvbnMubGVuZ3RoOw0K +CQkJDQoJCQlmb3IgKHZhciBpID0gMTsgaSA8IGN1ck9wdGlvbnNMZW5ndGg7IGkr +Kykgew0KCQkJCXNlbGVjdENpdGllcy5yZW1vdmUoMSk7DQoJCQl9DQoJCQlpZiAo +eG1sTm9kZXMuY2l0eSAmJiB4bWxOb2Rlcy5jaXR5Lmxlbmd0aCkgew0KCQkJCWwg +PSB4bWxOb2Rlcy5jaXR5Lmxlbmd0aDsNCgkJCQlmb3IgKHZhciBpID0gMDsgaSA8 +IGw7IGkrKykgew0KCQkJCQl2YXIgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxl +bWVudCgnb3B0aW9uJyk7DQoJCQkJCW9wdGlvbi52YWx1ZSA9IHhtbE5vZGVzLmNp +dHlbaV0uZ2V0QXR0cmlidXRlKCdpZCcpOw0KCQkJCQlvcHRpb24uaW5uZXJIVE1M +ID0geG1sTm9kZXMuY2l0eVtpXS5maXJzdENoaWxkLmRhdGE7DQoJCQkJCXNlbGVj +dENpdGllcy5hcHBlbmRDaGlsZChvcHRpb24pOw0KCQkJCQkkKHNlbGVjdENpdGll +cykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpOw0KCQkJCQkkKHNlbGVjdENpdGllc0hv +bGRlcikucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpOw0KCQkJCX0NCgkJCX0NCgkJfQ0K +CX0NCn07CgoKCi8qICAgYWpheEZvcm0gICAqLwovKg0KCWFqYXhGb3JtQ2xhc3MN +CgnQkdCw0LfQvtCy0YvQuSDQutC70LDRgdGBLCDQvdC1INC/0YDQuNC80LXQvdGP +0Y7RidC40LnRgdGPINGB0LDQvNC+0YHRgtC+0Y/RgtC10LvRjNC90L4gKNC+0YIg +0L3QtdCz0L4g0YPQttC1INC90LDRgdC70LXQtNGD0Y7RgiDQv9C+0LTQutC70LDR +gdGB0YssINC+0LHRgdC70YPQttC40LLQsNGO0YnQuNC1INC60L7QvdC60YDQtdGC +0L3Ri9C1INGE0L7RgNC80YspDQoNCiovDQp2YXIgYWpheEZvcm1DbGFzcyA9IGZ1 +bmN0aW9uKCl7DQoNCgkvLyDQstC+0LfQvNC+0LbQvdGL0LUgdXJsICjQt9Cw0LTQ +sNGO0YLRgdGPINGB0LLQvtC40Lwg0LrQvtC90LrRgNC10YLQvdGL0Lwg0L/QvtC0 +0LrQu9Cw0YHRgdC+0LwpDQoJLy8g0L/RgNC4INC+0YLQv9GA0LDQstC60LUg0LTQ +sNC90L3Ri9GFINC90LAg0YHQtdGA0LLQtdGAINC90LAg0YTQvtGA0LzRgyDQvdCw +0LLQtdGI0LjQstCw0Y7RgtGB0Y8g0LDQvdCw0LvQvtCz0LjRh9C90YvQtSDQutC7 +0LDRgdGB0Ys6DQoJLy8gc2F2ZS1sb2FkaW5nLCBwcmV2aWV3LWxvYWRpbmcsIGRy +YWZ0LWxvYWRpbmcNCgl0aGlzLmFqYXhVcmxzID0gew0KCQlzYXZlOiAnJyAvLyDR +gdC+0YXRgNCw0L3QtdC90LjQtSDQv9C+0YHRgtCwDQoJCS8vcHJldmlldzogJycs +IC8vINC/0YDQtdC00L/RgNC+0YHQvNC+0YLRgA0KCQkvL2RyYWZ0OiAnJywgLy8g +0LIg0YfQtdGA0L3QvtCy0LjQutC4DQoJCS8vYXV0b3NhdmU6ICcnIC8vINCyINCw +0LLRgtC+0YHRjdC50LINCgl9Ow0KDQoJLy8g0JjQvNC10L3QsCB4bWwg0L3QvtC0 +0L7QsiDQuCDRgdC+0L7RgtCy0LXRgdGC0LLRg9GO0YnQuNC1INC40Lwg0LjQvNC1 +0L3QsCDRhNGD0L3QutGG0LjQuS3QvtCx0YDQsNCx0L7RgtGH0LjQutC+0LINCgl0 +aGlzLnhtbFJlc3BvbnNlID0gew0KCQltZXNzYWdlOiB7DQoJCQlub2RlOiAnbWVz +c2FnZScsDQoJCQloYW5kbGVyOiBudWxsDQoJCX0sDQoNCgkJZXJyb3I6IHsNCgkJ +CW5vZGU6ICdlcnJvcicsDQoJCQloYW5kbGVyOiAneG1sUmVzcG9uc2VIYW5kbGVy +X2Vycm9yJw0KCQl9LA0KDQoJCXJlZGlyZWN0OiB7DQoJCQlub2RlOiAncmVkaXJl +Y3RfdXJsJywNCgkJCWhhbmRsZXI6ICd4bWxSZXNwb25zZUhhbmRsZXJfcmVkaXJl +Y3QnDQoJCX0NCgl9Ow0KDQoJLy8g0JjRgdC/0L7Qu9GM0LfRg9C10LzRi9C1INCy +INGE0L7RgNC80LUgY2xhc3NOYW1lcw0KCXRoaXMuY2xhc3NOYW1lcyA9IHsNCgkJ +ZmllbGRIb2xkZXI6ICdqcy1maWVsZC1ob2xkZXInLCAvLyDQutC+0L3RgtC10LnQ +vdC10YAt0YDQvtC00LjRgtC10LvRjCDQv9C+0LvRjyDRhNC+0YDQvNGLINC4INC+ +0YjQuNCx0LrQuA0KCQlmaWVsZERhdGE6ICdqcy1maWVsZC1kYXRhJywgLy8g0L/Q +vtC70LUg0YTQvtGA0LzRiywg0LrQvtGC0L7RgNC+0LUg0L3Rg9C20L3QviDRgdC1 +0YDQuNCw0LvQuNC30L7QstCw0YLRjA0KCQlmaWVsZEVycm9yTXNnQm94OiAnanMt +ZmllbGQtZXJyb3ItbXNnJywgLy8g0LrQvtC90YLQtdC50L3QtdGAINC00LvRjyDQ +stGL0LLQvtC00LAg0YHQvtC+0LHRidC10L3QuNGPINC+0LEg0L7RiNC40LHQutC1 +DQoJCWZpZWxkTWFya2VkRXJyb3I6ICdqcy1tYXJrZWQtZXJyb3InLCAvLyDQv9C+ +0LzQtdGH0LDQtdC8INC60L7QvdGC0LXQudC90LXRgCwg0LXRgdC70Lgg0LIg0L/Q +vtC70LUgLSDQvtGI0LjQsdC60LANCgkJZmllbGRNYXJrZWRDaGVja2VkOiAnanMt +bWFya2VkLWNoZWNrZWQnLCAvLyDQv9C+0LzQtdGH0LDQtdC8INC60L7QvdGC0LXQ +udC90LXRgCwg0LXRgdC70Lgg0L/QvtC70LUg0L/RgNC+0YjQu9C+INC/0YDQvtCy +0LXRgNC60YMNCgkJZmllbGRJc1JlcXVpcmVkOiAnanMtcmVxdWlyZWQnLCAvLyDQ +v9C+0LvQtSwg0L7QsdGP0LfQsNGC0LXQu9GM0L3QvtC1INC00LvRjyDQt9Cw0L/Q +vtC70L3QtdC90LjRjyANCgkJZmllbGRQYXNzXzE6ICdqcy1wYXNzLWZpZWxkLW1h +aW4nLCAvLyDQv9C+0LvQtSDRgSDQvtGB0L3QvtCy0L3Ri9C8INC/0LDRgNC+0LvQ +tdC8DQoJCWZpZWxkUGFzc18yOiAnanMtcGFzcy1maWVsZC1yZXBlYXQnLCAvLyDQ +v9C+0LvQtSDRgSDQv9C+0LLRgtC+0YDQvtC8INC/0LDRgNC+0LvRjw0KCQlpc0xv +YWRpbmc6ICdsb2FkaW5nJywgLy8g0L/RgNC10LvQvtCw0LTQtdGADQoJCXVua25v +d25FcnJvckhvbGRlcjogJ2pzLXVua25vd24tZXJyb3ItaG9sZGVyJywgLy8g0LTQ +tdGA0LbQsNGC0LXQu9GMINCy0YvQstC+0LTQsCDQvdC10L7Qv9C+0LfQvdCw0L3Q +vdC+0Lkg0L7RiNC40LHQutC4DQoJCXVua25vd25FcnJvck1zZzogJ2pzLXVua25v +d24tZXJyb3ItbXNnJyAvLyDRgdCw0LzQviDQv9C+0LvQtSDQvdC10L7Qv9C+0LfQ +vdCw0L3QvdC+0Lkg0L7RiNC40LHQutC4DQoJfTsNCg0KCS8vINCS0YvQstC+0LTQ +uNC80YvQtSDQutC70LjQtdC90YLQvtC8INGB0L7QvtCx0YnQtdC90LjRjyDQvtCx +INC+0YjQuNCx0LrQsNGFDQoJdGhpcy5lcnJvck1lc3NhZ2VzID0gew0KCQlmaWVs +ZElzRW1wdHk6ICfQndC10L7QsdGF0L7QtNC40LzQviDQt9Cw0L/QvtC70L3QuNGC +0Ywg0Y3RgtC+INC/0L7Qu9C1JywNCgkJaW5wdXRJc0luY29ycmVjdDogJ9CS0Ysg +0LLQstC10LvQuCDQvdC10LTQvtC/0YPRgdGC0LjQvNGL0Lkg0YHQuNC80LLQvtC7 +JywNCgkJaW5wdXRJc0luc3VmZmljaWVudDogJ9CS0Ysg0LLQstC10LvQuCDQvdC1 +0LTQvtGB0YLQsNGC0L7Rh9C90L4g0YHQuNC80LLQvtC70L7QsicsDQoJCWVtYWls +SXNJbmNvcnJlY3Q6ICfQktGLINCy0LLQtdC70Lgg0L3QtdC00L7Qv9GD0YHRgtC4 +0LzRi9C5IGVtYWlsJywNCgkJdXJsSXNJbmNvcnJlY3Q6ICfQktGLINCy0LLQtdC7 +0Lgg0L3QtdC00L7Qv9GD0YHRgtC40LzRi9C5IHVybCcsDQoJCWlucHV0Q2hhcnNO +dW1iZXJJc0luY29ycmVjdDogJ9CS0Ysg0LLQstC10LvQuCDQvdC10LLQtdGA0L3Q +vtC1INGH0LjRgdC70L4g0LHRg9C60LInLA0KCQlwYXNzd29yZElzU2hvcnQ6ICfQ +n9Cw0YDQvtC70Ywg0YHQu9C40YjQutC+0Lwg0LrQvtGA0L7RgtC60LjQuScsDQoJ +CXBhc3N3b3Jkc0FyZU5vdEVxdWFsOiAn0J/QsNGA0L7Qu9C4INC90LUg0YHQvtCy +0L/QsNC00LDRjtGCJywNCgkJdW5rbm93bkVycm9yOiAn0J3QtdC+0L/QvtC30L3Q +sNC90L3QsNGPINC+0YjQuNCx0LrQsCcgLy8g0J/Rg9GB0YLQvtC1INGB0L7QvtCx +0YnQtdC90LjQtSDQvtCxINC+0YjQuNCx0LrQtQ0KCX07DQoNCn07DQoNCg0KT2Jq +ZWN0LmV4dGVuZE9iamVjdCgNCglhamF4Rm9ybUNsYXNzLnByb3RvdHlwZSwgew0K +DQoJLy8J0J/QtdGA0LXQutC70Y7Rh9C10L3QuNC1INC80LXQttC00YMg0YTQvtGA +0LzQsNC80Lgg0L3QsCDRgdGC0YDQsNC90LjRhtC1DQoJc3dpdGNoRm9ybTogZnVu +Y3Rpb24obGluayl7DQoJCQkkKCdyZWctd3JhcHBlcicpLmNsYXNzTmFtZSA9IGxp +bmsuY2xhc3NOYW1lOw0KCQkJcmV0dXJuIGZhbHNlOw0KCX0sDQoNCg0KCS8vINCf +0LXRgNC10LLQvtC00LjQvCB4bWwg0LTQtdGA0LXQstC+INCyINC+0LHRitC10LrR +gg0KCXBhcnNlWE1MOiBmdW5jdGlvbih4bWxPYmopew0KCQkJdmFyIHhtbE5vZGVz +ID0ge307DQoJCQlmb3IgKHByb3AgaW4gdGhpcy54bWxSZXNwb25zZSl7DQoJCQkJ +eG1sTm9kZXNbcHJvcF0gPSB4bWxPYmouZ2V0RWxlbWVudHNCeVRhZ05hbWUodGhp +cy54bWxSZXNwb25zZVtwcm9wXS5ub2RlKTsNCgkJCX0NCgkJCXJldHVybiB4bWxO +b2RlczsNCgl9LA0KDQoNCgkvLyDQktC+0LfQstGA0LDRidCw0LXRgiDQsdC70L7Q +uiDQstGL0LLQvtC00LAg0L7RiNC40LHQutC4INC00LvRjyDQtNCw0L3QvdC+0LPQ +viDQv9C+0LvRjyDRhNC+0YDQvNGLDQoJZ2V0RXJyb3JNc2dCb3hCeUZpZWxkOiBm +dW5jdGlvbihmaWVsZCl7DQoJCQl2YXIgZmllbGRIb2xkZXIgPSAkKGZpZWxkKS5n +ZXRQYXJlbnQoJy4nICsgdGhpcy5jbGFzc05hbWVzLmZpZWxkSG9sZGVyKTsNCgkJ +CWlmKGZpZWxkSG9sZGVyKXsNCgkJCQl2YXIgZXJyb3JNc2dCb3hlcyA9ICQoZmll +bGRIb2xkZXIpLmdldEVsZW1lbnRzKCcuJyArIHRoaXMuY2xhc3NOYW1lcy5maWVs +ZEVycm9yTXNnQm94KTsNCgkJCQlpZihlcnJvck1zZ0JveGVzICYmIGVycm9yTXNn +Qm94ZXMubGVuZ3RoKXsNCgkJCQkJcmV0dXJuIGVycm9yTXNnQm94ZXNbMF07DQoJ +CQkJfSANCgkJCX1lbHNlIHsNCgkJCQlyZXR1cm4gbnVsbDsNCgkJCX0NCgl9LA0K +DQoNCgkvLyANCgljb21wbGV0ZUZvcm06IGZ1bmN0aW9uKHJlZGlyZWN0VXJsKXsN +CgkJCWlmKHJlZGlyZWN0VXJsKXsNCgkJCQl3aW5kb3cubG9jYXRpb24uaHJlZiA9 +IHJlZGlyZWN0VXJsOw0KCQkJfSBlbHNlIHsNCgkJCQl3aW5kb3cubG9jYXRpb24u +aHJlZiA9ICIvIjsNCgkJCX0NCgl9LA0KDQoNCgkvLwnQn9GA0L7QstC10YDQutCw +INC30LDQv9C+0LvQvdC10L3QvdC+0YHRgtC4INGE0L7RgNC80Ysg0Lgg0L7RgtGB +0YPRgtGB0LLQuNGPINC+0YjQuNCx0L7QuiAo0YHQtNC10LvQsNGC0YwgY2xhc3NO +YW1lPSdyZXF1aXJlZCcg0LTQu9GPINC/0L7Qu9C10LkpDQoJY2hlY2tGb3JtQ29t +cGxpdGlvbjogZnVuY3Rpb24oZm9ybSl7DQoJCQl2YXIgZm9ybUlzQ29tcGxpdGVk +ID0gdHJ1ZTsgDQoJCQl2YXIgZGF0YXMgPSAkKGZvcm0pLmdldEVsZW1lbnRzKCcu +JyArIHRoaXMuY2xhc3NOYW1lcy5maWVsZERhdGEpOw0KDQoJCQlmb3IgKHZhciBp +PTAsIGxlbmd0aD1kYXRhcy5sZW5ndGg7IGk8bGVuZ3RoOyBpKyspew0KCQkJCQ0K +CQkJCQ0KCQkJCXZhciBmaWVsZEhvbGRlciA9ICQoZGF0YXNbaV0pLmdldFBhcmVu +dCgnLicgKyB0aGlzLmNsYXNzTmFtZXMuZmllbGRIb2xkZXIpOw0KCQkJCQ0KCQkJ +CWlmICgNCgkJCQkJCShkYXRhc1tpXS52YWx1ZSA9PSAnJyAmJiAvLyDQv9GD0YHR +gtC+0LUg0L7QsdGP0LfQsNGC0LXQu9GM0L3QvtC1INC/0L7Qu9C1DQoJCQkJCQkJ +JChkYXRhc1tpXSkuaGFzQ2xhc3ModGhpcy5jbGFzc05hbWVzLmZpZWxkSXNSZXF1 +aXJlZCkpIHx8DQoJCQkJCQkNCgkJCQkJCShkYXRhc1tpXS5nZXRBdHRyaWJ1dGUo +J3R5cGUnKSA9PSAnY2hlY2tib3gnICYmIC8vINC+0LHRj9C30LDRgtC10LvRjNC9 +0YvQuSDRh9C10LrQsdC+0LrRgQ0KCQkJCQkJCSQoZGF0YXNbaV0pLmhhc0NsYXNz +KHRoaXMuY2xhc3NOYW1lcy5maWVsZElzUmVxdWlyZWQpICYmDQoJCQkJCQkJIWRh +dGFzW2ldLmNoZWNrZWQpDQoJCQkJCSl7DQoJCQkJCWZvcm1Jc0NvbXBsaXRlZCA9 +IGZhbHNlOw0KCQkJCQl0aGlzLm1hcmtGaWVsZF9lcnJvcihkYXRhc1tpXSwgdGhp +cy5lcnJvck1lc3NhZ2VzLmZpZWxkSXNFbXB0eSk7DQoNCgkJCQl9IGVsc2UgaWYo +DQoJCQkJCQkoZmllbGRIb2xkZXIgJiYgLy8g0L/QvtC70LUg0YEg0L3QtdC40YHQ +v9GA0LDQstC70LXQvdC90L7QuSDQvtGI0LjQsdC60L7QuQ0KCQkJCQkJCSQoZmll +bGRIb2xkZXIpLmhhc0NsYXNzKHRoaXMuY2xhc3NOYW1lcy5maWVsZE1hcmtlZEVy +cm9yKSkNCgkJCQkJKXsNCgkJCQkJdmFyIGVycm9yTXNnQm94ID0gdGhpcy5nZXRF +cnJvck1zZ0JveEJ5RmllbGQoZGF0YXNbaV0pOw0KCQkJCQlpZiAoZXJyb3JNc2dC +b3gpIHsNCgkJCQkJCWVycm9yTXNnQm94LmlubmVySFRNTCA9ICcnOw0KCQkJCQl9 +DQoJDQoJCQkJCXRoaXMubWFya0ZpZWxkX2NsZWFyKGRhdGFzW2ldKTsNCgkJCQl9 +DQoJCQl9DQoJCQlyZXR1cm4gZm9ybUlzQ29tcGxpdGVkOw0KCX0sDQoNCgkvLyDQ +odC10YDQuNCw0LvQuNC30LDRhtC40Y8g0L/QvtC70LXQuSDRhNC+0YDQvNGLDQoJ +c2VyaWFsaXplRm9ybTogZnVuY3Rpb24oZm9ybSl7DQoJCQl2YXIgZGF0YSA9ICcn +Ow0KCQkJDQoJCQl2YXIgZGF0YXMgPSAkKGZvcm0pLmdldEVsZW1lbnRzKCcuJyAr +IHRoaXMuY2xhc3NOYW1lcy5maWVsZERhdGEpOw0KCQkJZm9yICh2YXIgaT0wLCBs +ZW5ndGg9ZGF0YXMubGVuZ3RoOyBpPGxlbmd0aDsgaSsrKXsNCgkJCQl2YXIgdHlw +ZSA9IGRhdGFzW2ldLmdldEF0dHJpYnV0ZSgndHlwZScpOw0KCQkJCXZhciBwYXJh +bSA9IGRhdGFzW2ldLmdldEF0dHJpYnV0ZSgnbmFtZScpOw0KCQkJCXZhciB2YWx1 +ZSA9IGRhdGFzW2ldLnZhbHVlOw0KDQoJCQkJaWYodHlwZSA9PSAncmFkaW8nICYm +ICFkYXRhc1tpXS5jaGVja2VkKXsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0KDQoJ +CQkJaWYodHlwZSA9PSAnY2hlY2tib3gnKXsNCgkJCQkJdmFsdWUgPSBkYXRhc1tp +XS5jaGVja2VkID8gdHJ1ZSA6IGZhbHNlOw0KCQkJCX0gZWxzZSB7DQoJCQkJCXZh +bHVlID0gZGF0YXNbaV0udmFsdWU7DQoJCQkJfQ0KCQkJCWRhdGEgKz0gKGkhPTAg +PyAnJicgOiAnJykgKyBwYXJhbSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2 +YWx1ZSk7DQoJCQl9DQoJCQlyZXR1cm4gZGF0YTsNCgl9LA0KCQ0KCS8vINCh0LXR +gNC40LDQu9C40LfQsNGG0LjRjyDQv9C+0LvQtdC5INGE0L7RgNC80YsNCgljbGFz +c2ljU2VyaWFsaXplRm9ybTogZnVuY3Rpb24oZm9ybSl7DQoJCQl2YXIgZGF0YSA9 +ICcnOw0KCQkJDQoJCQl2YXIgZGF0YXMgPSAkKGZvcm0pLmdldEVsZW1lbnRzKCcu +JyArIHRoaXMuY2xhc3NOYW1lcy5maWVsZERhdGEpOw0KCQkJZm9yICh2YXIgaT0w +LCBsZW5ndGg9ZGF0YXMubGVuZ3RoOyBpPGxlbmd0aDsgaSsrKXsNCgkJCQl2YXIg +dHlwZSA9IGRhdGFzW2ldLmdldEF0dHJpYnV0ZSgndHlwZScpOw0KCQkJCXZhciBw +YXJhbSA9IGRhdGFzW2ldLmdldEF0dHJpYnV0ZSgnbmFtZScpOw0KCQkJCXZhciB2 +YWx1ZSA9IGRhdGFzW2ldLnZhbHVlOw0KDQoJCQkJaWYodHlwZSA9PSAncmFkaW8n +ICYmICFkYXRhc1tpXS5jaGVja2VkKXsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0K +DQoJCQkJaWYodHlwZSA9PSAnY2hlY2tib3gnICYmICFkYXRhc1tpXS5jaGVja2Vk +KXsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0KCQkJCWRhdGEgKz0gKGRhdGEhPScn +ID8gJyYnIDogJycpICsgcGFyYW0gKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQo +dmFsdWUpOw0KCQkJfQ0KCQkJcmV0dXJuIGRhdGE7DQoJfSwNCg0KCS8vINCh0LXR +gNC40LDQu9C40LfQsNGG0LjRjyDQv9C+0LvQtdC5INGE0L7RgNC80YsNCglyZWFs +U2VyaWFsaXplRm9ybTogZnVuY3Rpb24oZm9ybSl7DQoJCQl2YXIgZGF0YSA9ICcn +Ow0KCQkJDQoJCQl2YXIgZGF0YXMgPSBmb3JtLmVsZW1lbnRzOw0KCQkJZm9yICh2 +YXIgaT0wLCBsZW5ndGg9ZGF0YXMubGVuZ3RoOyBpPGxlbmd0aDsgaSsrKXsNCgkJ +CQl2YXIgdHlwZSA9IGRhdGFzW2ldLmdldEF0dHJpYnV0ZSgndHlwZScpOw0KCQkJ +CXZhciBwYXJhbSA9IGRhdGFzW2ldLmdldEF0dHJpYnV0ZSgnbmFtZScpOw0KCQkJ +CXZhciB2YWx1ZSA9IGRhdGFzW2ldLnZhbHVlOw0KDQoJCQkJaWYodHlwZSA9PSAn +cmFkaW8nICYmICFkYXRhc1tpXS5jaGVja2VkKXsNCgkJCQkJY29udGludWU7DQoJ +CQkJfQ0KDQoJCQkJaWYodHlwZSA9PSAnY2hlY2tib3gnICYmICFkYXRhc1tpXS5j +aGVja2VkKXsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0KCQkJCWRhdGEgKz0gKGRh +dGEhPScnID8gJyYnIDogJycpICsgcGFyYW0gKyAnPScgKyBlbmNvZGVVUklDb21w +b25lbnQodmFsdWUpOw0KCQkJfQ0KCQkJcmV0dXJuIGRhdGE7DQoJfSwNCg0KDQoJ +Ly8g0J7RgtC/0YDQsNCy0LrQsCDQstGB0LXRhSDQv9C+0LvQtdC5INGE0L7RgNC8 +0Ysg0L3QsCDRgdC10YDQstC10YANCgkvLyBzdWJtaXRUeXBlIC0g0L3QtdC+0LHR +j9C30LDRgtC10LvRjNC90YvQuSDQv9Cw0YDQsNC80LXRgtGADQoJLy8gZkNoZWNr +Rm9ybUNvbXBsaXRpb24gLSDQvdC10L7QsdGP0LfQsNGC0LXQu9GM0L3Ri9C5INC/ +0LDRgNCw0LzQtdGC0YAgKNGB0LLQvtGPINGE0YPQvdC60YbQuNGPINC/0YDQvtCy +0LXRgNC60Lgg0YTQvtGA0LzRiyDQvdCwINC30LDQv9C+0LvQvdC10L3QvdC+0YHR +gtGMKQ0KCS8vCQlmQ2hlY2tGb3JtQ29tcGxpdGlvbiA9PSBmKCl7fSAo0L3QtSDQ +vdCw0LTQviDQv9GA0L7QstC10YDRj9GC0YwpDQoJLy8JCWZDaGVja0Zvcm1Db21w +bGl0aW9uID09IGZhbHNlINC40LvQuCBmQ2hlY2tGb3JtQ29tcGxpdGlvbiA9PSB1 +bmRlZmluZWQgKNC90LDQtNC+INC/0YDQvtCy0LXRgNGP0YLRjCkNCglzZW5kRGF0 +YTogZnVuY3Rpb24gKGZvcm0sIHN1Ym1pdFR5cGUsIGZDaGVja0Zvcm1Db21wbGl0 +aW9uLCBjbGFzc2ljU2VyaWFsaXplKXsNCgkJCS8vINCf0YDQvtCy0LXRgNC60LAg +0L3QsCDQt9Cw0L/QvtC70L3QtdC90L3QvtGB0YLRjCDQstGB0LXRhSDQv9C+0LvQ +tdC5INC4INC90LAg0LjRhSDQstCw0LvQuNC00L3QvtGB0YLRjA0KCQkJaWYoIWZD +aGVja0Zvcm1Db21wbGl0aW9uICYmICF0aGlzLmNoZWNrRm9ybUNvbXBsaXRpb24o +Zm9ybSkpIHsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9IGVsc2UgaWYoZkNoZWNr +Rm9ybUNvbXBsaXRpb24gJiYgIWZDaGVja0Zvcm1Db21wbGl0aW9uKGZvcm0pKXsN +CgkJCQlhbGVydCgnZmFsc2UnKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoN +CgkJCS8vINCX0LDQtNCw0LXQvCDQutC70LDRgdGB0L3QtdC50LwsINC+0L/RgNC1 +0LTQtdC70Y/RjtGJ0LjQuSwg0YfRgtC+INC40LzQtdC90L3QviDQs9GA0YPQt9C4 +0YLRgdGPINCyINC00LDQvdC90YvQuSDQvNC+0LzQtdC90YINCgkJCXZhciBsb2Fk +aW5nQ2xhc3NOYW1lID0gKHN1Ym1pdFR5cGUgfHwgJ3NhdmUnKSArICctJyArIHRo +aXMuY2xhc3NOYW1lcy5pc0xvYWRpbmc7DQoNCgkJCS8vINCf0YDQvtCy0LXRgNC6 +0LAg0YLQvtCz0L4sINGH0YLQviDRhNC+0YDQvNCwINC90LUg0L7QsdGA0LDQsdCw +0YLRi9Cy0LDQtdGCINGD0LbQtSDRgtC+0LPQviwg0YfRgtC+INC80Ysg0LfQsNC/ +0YDQvtGB0LjQu9C4INCyINC00LDQvdC90YvQuSDQvNC+0LzQtdC90YINCgkJCWlm +KCQoZm9ybSkuaGFzQ2xhc3MobG9hZGluZ0NsYXNzTmFtZSkpew0KCQkJCXJldHVy +biBmYWxzZTsNCgkJCX0NCgkJCQ0KCQkJLy8g0LXRgdC70Lggc3VibWl0VHlwZSDQ +vdC1INC/0LXRgNC10LTQsNC9LCDRgtC+INC40YHQv9C+0LvRjNC30YPQtdC8IHRo +aXMuYWpheFVybHMuc2F2ZQ0KCQkJdmFyIHVybCA9IHRoaXMuYWpheFVybHNbc3Vi +bWl0VHlwZV0gfHwgdGhpcy5hamF4VXJscy5zYXZlOw0KCQkJDQoJCQlpZiAoIWNs +YXNzaWNTZXJpYWxpemUpIHsNCgkJCQl2YXIgZGF0YSA9IHRoaXMuc2VyaWFsaXpl +Rm9ybShmb3JtKTsNCgkJCX0gZWxzZSB7DQoJCQkJdmFyIGRhdGEgPSB0aGlzLmNs +YXNzaWNTZXJpYWxpemVGb3JtKGZvcm0pOw0KCQkJfQ0KDQoJCQl2YXIgcGFyYW1z +ID0gew0KCQkJCWZvcm06IGZvcm0sDQoJCQkJbG9hZGluZ0NsYXNzTmFtZTogbG9h +ZGluZ0NsYXNzTmFtZQ0KCQkJfTsNCg0KCQkJJChmb3JtKS5hZGRDbGFzcyhsb2Fk +aW5nQ2xhc3NOYW1lKTsNCgkJCQ0KCQkJYWpheFBvc3QoDQoJCQkJdXJsLA0KCQkJ +CWRhdGEsDQoJCQkJdGhpcy5zZW5kRGF0YU9ubG9hZCwNCgkJCQlwYXJhbXMsDQoJ +CQkJdGhpcyk7DQoJCQkNCgkJCXRoaXMuX2Zvcm0gPSAkKGZvcm0pOw0KCQkJcmV0 +dXJuIGZhbHNlOw0KCX0sDQoNCg0KCS8vINCn0YLQtdC90LjQtSDQvtGC0LLQtdGC +0LAg0YHQtdGA0LLQtdGA0LAg0L3QsCDQv9C10YDQtdGB0YvQu9C60YMgINCy0YHQ +tdGFINC00LDQvdC90YvRhSDRhNC+0YDQvNGLINC4INC+0LHRgNCw0LHQvtGC0LrQ +sCDQstGL0LTQsNC90L3Ri9GFINC+0YjQuNCx0L7Qug0KCXNlbmREYXRhT25sb2Fk +OiBmdW5jdGlvbiAoYWpheE9iaiwgcGFyYW1zKXsNCg0KCQkJaWYgKHRoaXMuX2Zv +cm0pIHRoaXMuX2Zvcm0ucmVtb3ZlQ2xhc3MocGFyYW1zLmxvYWRpbmdDbGFzc05h +bWUpOw0KCQkJaWYoYWpheE9iaiAmJiBhamF4T2JqLnJlc3BvbnNlWE1MKXsNCgkJ +CQl2YXIgeG1sT2JqID0gYWpheE9iai5yZXNwb25zZVhNTDsNCgkJCQl2YXIgeG1s +Tm9kZXMgPSB0aGlzLnBhcnNlWE1MKHhtbE9iaik7DQoNCgkJCQlmb3IgKHByb3Ag +aW4geG1sTm9kZXMpew0KCQkJCQlpZih0aGlzW3RoaXMueG1sUmVzcG9uc2VbcHJv +cF0uaGFuZGxlcl0pIHsNCgkJCQkJCXRoaXNbdGhpcy54bWxSZXNwb25zZVtwcm9w +XS5oYW5kbGVyXSh4bWxOb2RlcywgcGFyYW1zKTsNCgkJCQkJfQ0KCQkJCX0NCgkJ +CX0NCgl9LA0KDQoJLy8g0J7QsdGA0LDQsdC+0YLRh9C40Log0L7RgtCy0LXRgtCw +INGB0LXRgNCy0LXRgNCwINC/0YDQuCDQv9C+0LvRg9GH0LXQvdC40Lgg0L7RiNC4 +0LHQutC4DQoJeG1sUmVzcG9uc2VIYW5kbGVyX2Vycm9yOiBmdW5jdGlvbih4bWxO +b2RlcywgcGFyYW1zKXsNCgkJaWYoeG1sTm9kZXMuZXJyb3IgJiYgeG1sTm9kZXMu +ZXJyb3IubGVuZ3RoKSB7DQoJCQkkKHBhcmFtcy5mb3JtKS5yZW1vdmVDbGFzcyhw +YXJhbXMubG9hZGluZ0NsYXNzTmFtZSk7DQoNCgkJCWZvciAodmFyIGk9MDsgaTx4 +bWxOb2Rlcy5lcnJvci5sZW5ndGg7IGkrKyl7DQoJCQkJdmFyIGZpZWxkTWFya2Vk +RXJyb3IgPSBwYXJhbXMuZm9ybVt4bWxOb2Rlcy5lcnJvcltpXS5nZXRBdHRyaWJ1 +dGUoJ2ZpZWxkJyldOw0KCQkJCXZhciBlcnJvck1lc3NhZ2UgPSB4bWxOb2Rlcy5l +cnJvcltpXS5maXJzdENoaWxkID8geG1sTm9kZXMuZXJyb3JbaV0uZmlyc3RDaGls +ZC5kYXRhIDogdGhpcy5lcnJvck1lc3NhZ2VzLnVua25vd25FcnJvcjsNCg0KCQkJ +CWlmKCFmaWVsZE1hcmtlZEVycm9yKSB7DQoJCQkJCWZpZWxkTWFya2VkRXJyb3Ig +PSAkKHBhcmFtcy5mb3JtKS5nZXRFbGVtZW50KCcuJyArIHRoaXMuY2xhc3NOYW1l +cy51bmtub3duRXJyb3JNc2cpOw0KCQkJCX0gDQoJCQkJDQoJCQkJaWYgKGZpZWxk +TWFya2VkRXJyb3IpIHsNCgkJCQkJdGhpcy5tYXJrRmllbGRfZXJyb3IoZmllbGRN +YXJrZWRFcnJvciwgZXJyb3JNZXNzYWdlKTsNCgkJCQl9DQoJCQl9DQoNCgkJfQ0K +CX0sDQoNCgkvLyDQntCx0YDQsNCx0L7RgtGH0LjQuiDQvtGC0LLQtdGC0LAg0YHQ +tdGA0LLQtdGA0LAg0L/RgNC4INGA0LXQtNC40YDQtdC60YLQtQ0KCXhtbFJlc3Bv +bnNlSGFuZGxlcl9yZWRpcmVjdDogZnVuY3Rpb24oeG1sTm9kZXMsIHBhcmFtcyl7 +DQoJCWlmKHhtbE5vZGVzLnJlZGlyZWN0ICYmIHhtbE5vZGVzLnJlZGlyZWN0Lmxl +bmd0aCkgew0KCQkJdGhpcy5jb21wbGV0ZUZvcm0oeG1sTm9kZXMucmVkaXJlY3Rb +MF0uZmlyc3RDaGlsZC5kYXRhKTsNCgkJfQ0KCX0sDQoNCg0KCS8vINCf0LXRgNC1 +0YHRi9C70LrQsCDQv9C+0LvQtdC5INGE0L7RgNC80YsgKNC/0LXRgNCy0L7QtSDQ +v9C+0LvQtSDQvNCw0YHRgdC40LLQsCAtINGC0LXQutGD0YnQtdC1KQ0KCWNoZWNr +RGF0YTogZnVuY3Rpb24gKGZpZWxkcywgYWN0aW9uLCBzdWJtaXRUeXBlKXsNCgkJ +CQ0KCQkJLy8g0LXRgdC70Lggc3VibWl0VHlwZSDQvdC1INC/0LXRgNC10LTQsNC9 +LCDRgtC+INC40YHQv9C+0LvRjNC30YPQtdC8IHRoaXMuYWpheFVybHMuc2F2ZQ0K +CQkJdmFyIHVybCA9IHRoaXMuYWpheFVybHNbc3VibWl0VHlwZV0gfHwgdGhpcy5h +amF4VXJscy5zYXZlOw0KDQoJCQl2YXIgZGF0YSA9ICIiOw0KCQkJdmFyIGZpZWxk +Ow0KCQkJDQoJCQlpZiAoZmllbGRzLmxlbmd0aCAmJiBmaWVsZHMubGVuZ3RoID4g +MSkgew0KCQkJCWZpZWxkID0gZmllbGRzWzBdOw0KCQkJCQ0KCQkJCWZvciAodmFy +IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7DQoJCQkJCXZhciB0eXBl +ID0gZmllbGRzW2ldLmdldEF0dHJpYnV0ZSgndHlwZScpOw0KCQkJCQl2YXIgcGFy +YW0gPSBmaWVsZHNbaV0uZ2V0QXR0cmlidXRlKCduYW1lJyk7DQoJCQkJCXZhciB2 +YWx1ZTsNCg0KCQkJCQlpZih0eXBlID09ICdjaGVja2JveCcpew0KCQkJCQkJdmFs +dWUgPSBmaWVsZHNbaV0uY2hlY2tlZCA/IHRydWUgOiBmYWxzZTsNCgkJCQkJfSBl +bHNlIHsNCgkJCQkJCXZhbHVlID0gZmllbGRzW2ldLnZhbHVlOw0KCQkJCQl9DQoN +CgkJCQkJZGF0YSArPSAoaSE9MCA/ICcmJyA6ICcnKSArIHBhcmFtICsgJz0nICsg +ZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTsNCgkJCQl9DQoJCQkJDQoJCQl9IGVs +c2Ugew0KCQkJCWZpZWxkID0gZmllbGRzLmxlbmd0aCA/IGZpZWxkc1swXSA6IGZp +ZWxkczsNCgkJCQl2YXIgcGFyYW0gPSBmaWVsZC5nZXRBdHRyaWJ1dGUoJ25hbWUn +KTsNCgkJCQl2YXIgdmFsdWUgPSBmaWVsZC52YWx1ZTsNCgkJCQlkYXRhID0gcGFy +YW0gKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpOw0KCQkJfQ0KCQkJ +DQoNCgkJCWRhdGEgKz0gIiZhY3Rpb249IiArIGFjdGlvbjsNCg0KCQkJdmFyIGZp +ZWxkUGFyZW50ID0gJChmaWVsZCkuZ2V0UGFyZW50KCcuJyArIHRoaXMuY2xhc3NO +YW1lcy5maWVsZEhvbGRlcik7DQoJCQlpZihmaWVsZFBhcmVudCkgJChmaWVsZFBh +cmVudCkuYWRkQ2xhc3ModGhpcy5jbGFzc05hbWVzLmlzTG9hZGluZyk7DQoJCQkN +CgkJCWFqYXhQb3N0KA0KCQkJCXVybCwNCgkJCQlkYXRhLA0KCQkJCXRoaXMuY2hl +Y2tEYXRhT25sb2FkLA0KCQkJCWZpZWxkLA0KCQkJCXRoaXMpOw0KCX0sDQoNCgkN +CgkvLyDQp9GC0LXQvdC40LUg0L7RgtCy0LXRgtCwINGB0LXRgNCy0LXRgNCwINC9 +0LAg0L/QtdGA0LXRgdGL0LvQutGDINC60L7QvdC60YDQtdGC0L3QvtCz0L4g0L/Q +vtC70Y8g0YTQvtGA0LzRiyDQuCDQvtCx0YDQsNCx0L7RgtC60LAg0LLRi9C00LDQ +vdC90YvRhSDQvtGI0LjQsdC+0LoNCgljaGVja0RhdGFPbmxvYWQ6IGZ1bmN0aW9u +IChhamF4T2JqLCBmaWVsZCl7DQoJCQkNCgkJCXZhciBmaWVsZFBhcmVudCA9ICQo +ZmllbGQpLmdldFBhcmVudCgnLicgKyB0aGlzLmNsYXNzTmFtZXMuZmllbGRIb2xk +ZXIpOw0KCQkJaWYoZmllbGRQYXJlbnQpICQoZmllbGRQYXJlbnQpLnJlbW92ZUNs +YXNzKHRoaXMuY2xhc3NOYW1lcy5pc0xvYWRpbmcpOw0KDQoJCQlpZihhamF4T2Jq +ICYmIGFqYXhPYmoucmVzcG9uc2VYTUwpew0KCQkJCQ0KCQkJCXZhciB4bWxPYmog +PSBhamF4T2JqLnJlc3BvbnNlWE1MOw0KCQkJCXZhciB4bWxOb2RlcyA9IHRoaXMu +cGFyc2VYTUwoeG1sT2JqKTsNCgkJCQkNCgkJCQlpZih4bWxOb2Rlcy5lcnJvciAm +JiB4bWxOb2Rlcy5lcnJvci5sZW5ndGgpIHsNCgkJCQkJZm9yICh2YXIgaT0wOyBp +PHhtbE5vZGVzLmVycm9yLmxlbmd0aDsgaSsrKXsNCgkJCQkJCXZhciBmaWVsZE1h +cmtlZEVycm9yID0gZmllbGQ7DQoJCQkJCQl2YXIgZXJyb3JNZXNzYWdlID0geG1s +Tm9kZXMuZXJyb3JbaV0uZmlyc3RDaGlsZC5kYXRhOw0KCQkJCQkJdGhpcy5tYXJr +RmllbGRfZXJyb3IoZmllbGRNYXJrZWRFcnJvciwgZXJyb3JNZXNzYWdlKTsNCgkJ +CQkJfQ0KDQoJCQkJfSBlbHNlIGlmKHhtbE5vZGVzLnJlZGlyZWN0ICYmIHhtbE5v +ZGVzLnJlZGlyZWN0Lmxlbmd0aCkgew0KCQkJCQl0aGlzLmNvbXBsZXRlRm9ybSh4 +bWxOb2Rlcy5yZWRpcmVjdFswXS5maXJzdENoaWxkLmRhdGEpOw0KDQoJCQkJfSBl +bHNlIHsNCgkJCQkJdGhpcy5tYXJrRmllbGRfY2hlY2tlZChmaWVsZCk7DQoJCQkJ +fQ0KDQoJCQl9DQoJfSwNCg0KDQoNCg0KCS8vINCe0YfQuNGJ0LDQtdC8INC/0L7Q +u9C1INC+0YIg0LvRjtCx0YvRhSDQvtGC0LzQtdGC0L7Qug0KCW1hcmtGaWVsZF9j +bGVhcjogZnVuY3Rpb24oZmllbGQpew0KCQkJdmFyIGZpZWxkSG9sZGVyID0gJChm +aWVsZCkuZ2V0UGFyZW50KCcuJyArIHRoaXMuY2xhc3NOYW1lcy5maWVsZEhvbGRl +cik7DQoJCQlpZihmaWVsZEhvbGRlcil7DQoJCQkJJChmaWVsZEhvbGRlcikucmVt +b3ZlQ2xhc3ModGhpcy5jbGFzc05hbWVzLmZpZWxkTWFya2VkRXJyb3IpOw0KCQkJ +CSQoZmllbGRIb2xkZXIpLnJlbW92ZUNsYXNzKHRoaXMuY2xhc3NOYW1lcy5maWVs +ZE1hcmtlZENoZWNrZWQpOw0KCQkJfQ0KCX0sDQoNCg0KCS8vINCe0YLQvNC10YfQ +sNC10Lwg0L/QvtC70LUg0LrQsNC6INC/0YDQvtGI0LXQtNGI0LXQtSDQv9GA0L7Q +stC10YDQutGDDQoJbWFya0ZpZWxkX2NoZWNrZWQ6IGZ1bmN0aW9uKGZpZWxkKXsN +CgkJCXZhciBmaWVsZEhvbGRlciA9ICQoZmllbGQpLmdldFBhcmVudCgnLicgKyB0 +aGlzLmNsYXNzTmFtZXMuZmllbGRIb2xkZXIpOw0KCQkJaWYoZmllbGRIb2xkZXIp +ew0KCQkJCSQoZmllbGRIb2xkZXIpLnJlbW92ZUNsYXNzKHRoaXMuY2xhc3NOYW1l +cy5maWVsZE1hcmtlZEVycm9yKTsNCgkJCQkkKGZpZWxkSG9sZGVyKS5hZGRDbGFz +cyh0aGlzLmNsYXNzTmFtZXMuZmllbGRNYXJrZWRDaGVja2VkKTsNCgkJCX0NCgl9 +LA0KDQoNCgkvLyDQntGC0LzQtdGH0LDQtdC8INC/0L7Qu9C1INC60LDQuiDQvtGI +0LjQsdC+0YfQvdC+0LUg0Lgg0LLRi9Cy0L7QtNC40Lwg0YHQvtC+0LHRidC10L3Q +uNC1INC+0LEg0L7RiNC40LHQutC1DQoJbWFya0ZpZWxkX2Vycm9yOiBmdW5jdGlv +bihmaWVsZCwgZXJyb3JNZXNzYWdlKSB7DQoJCQl2YXIgZmllbGRIb2xkZXIgPSAk +KGZpZWxkKS5nZXRQYXJlbnQoJy4nICsgdGhpcy5jbGFzc05hbWVzLmZpZWxkSG9s +ZGVyKTsNCgkJCWlmKGZpZWxkSG9sZGVyKXsNCgkJCQkkKGZpZWxkSG9sZGVyKS5y +ZW1vdmVDbGFzcyh0aGlzLmNsYXNzTmFtZXMuZmllbGRNYXJrZWRDaGVja2VkKTsN +CgkJCQkkKGZpZWxkSG9sZGVyKS5hZGRDbGFzcyh0aGlzLmNsYXNzTmFtZXMuZmll +bGRNYXJrZWRFcnJvcik7DQoNCgkJCQl2YXIgZXJyb3JNc2dCb3ggPSB0aGlzLmdl +dEVycm9yTXNnQm94QnlGaWVsZChmaWVsZCk7DQoJCQkJaWYoZXJyb3JNc2dCb3gp +ew0KCQkJCQllcnJvck1zZ0JveC5pbm5lckhUTUwgPSBlcnJvck1lc3NhZ2U7DQoJ +CQkJfQ0KCQkJfQ0KCQkJDQoJfSwNCg0KDQoJLy8J0J/RgNC+0LLQtdGA0LrQsCDQ +v9C+0LvRjyDQvdCwINC/0YPRgdGC0L7RgtGDDQoJY2hlY2tGaWVsZF9lbXB0eTog +ZnVuY3Rpb24oZSwgZmllbGQpew0KDQoJCQlpZihlID09IG51bGwgJiYgZmllbGQu +dmFsdWUgIT0gJycpIHsNCgkJCQl0aGlzLm1hcmtGaWVsZF9jbGVhcihmaWVsZCk7 +DQoJCQkJcmV0dXJuOw0KCQkJfQ0KDQoJCQlpZighZSkgZSA9IHdpbmRvdy5ldmVu +dDsNCgkJCQ0KCQkJc3dpdGNoKGUudHlwZSl7DQoJCQkJY2FzZSAnYmx1cic6DQoJ +CQkJCWlmKGZpZWxkLnZhbHVlLmxlbmd0aCAhPSAwKXsNCgkJCQkJCXRoaXMubWFy +a0ZpZWxkX2NsZWFyKGZpZWxkKTsNCgkJCQkJfQ0KCQkJCQlicmVhazsNCg0KCQkJ +CWNhc2UgJ2tleXVwJzoNCgkJCQkJdGhpcy5tYXJrRmllbGRfY2xlYXIoZmllbGQp +Ow0KCQkJCQlicmVhazsNCg0KCQkJCWNhc2UgJ2NoYW5nZSc6DQoJCQkJCWlmKGZp +ZWxkLnZhbHVlICE9ICcnKXsNCgkJCQkJCXRoaXMubWFya0ZpZWxkX2NsZWFyKGZp +ZWxkKTsNCgkJCQkJfQ0KCQkJCQlicmVhazsNCgkJCX0NCgl9DQoNCn0pOwoKCgov +KiAgIHBvbGxGb3JtICAgKi8KdmFyIHBvbGxGb3JtQ2xhc3MgPSBmdW5jdGlvbigp +ew0KCXBvbGxGb3JtQ2xhc3Muc3VwZXJDbGFzcy5hcHBseSh0aGlzLCBhcmd1bWVu +dHMpOw0KDQoJdGhpcy5hamF4VXJscyA9IHsNCgkJc2F2ZTogIi9hamF4L3BvbGwv +Ig0KCX07DQoJDQoJT2JqZWN0LmV4dGVuZE9iamVjdCgNCgkJdGhpcy54bWxSZXNw +b25zZSwgew0KCQkNCgkJdHdpdHRlciA6IHsNCgkJCW5vZGU6ICd0d2l0dGVyJywN +CgkJCWhhbmRsZXI6ICd4bWxSZXNwb25zZUhhbmRsZXJfdHdpdHRlcicNCgkJfSwN +CgkJDQoJCXJlZ2lvbiA6IHsNCgkJCW5vZGU6ICdyZWdpb24nLA0KCQkJaGFuZGxl +cjogJ3htbFJlc3BvbnNlSGFuZGxlcl9yZWdpb24nDQoJCX0sDQoJCQ0KCQljaXR5 +IDogew0KCQkJbm9kZTogJ2NpdHknLA0KCQkJaGFuZGxlcjogJ3htbFJlc3BvbnNl +SGFuZGxlcl9jaXR5Jw0KCQl9LA0KCQkNCgkJdGV4dCA6IHsNCgkJCW5vZGU6ICd0 +ZXh0JywNCgkJCWhhbmRsZXI6ICd4bWxSZXNwb25zZUhhbmRsZXJfdGV4dCcNCgkJ +fSwNCgkJDQoJCWh0bWwgOiB7DQoJCQlub2RlOiAnaHRtbCcsDQoJCQloYW5kbGVy +OiAneG1sUmVzcG9uc2VIYW5kbGVyX2h0bWwnDQoJCX0NCgl9KTsNCg0KfTsNCg0K +cG9sbEZvcm1DbGFzcy5pbmhlcml0c0Zyb20oYWpheEZvcm1DbGFzcyk7DQoNCk9i +amVjdC5leHRlbmRPYmplY3QoDQoJcG9sbEZvcm1DbGFzcy5wcm90b3R5cGUsIHsN +CgkNCglzZW5kRGF0YTogZnVuY3Rpb24gKGZvcm0sIHN1Ym1pdFR5cGUsIHBvc3Rf +aWQpew0KCQkvLyDQl9Cw0LTQsNC10Lwg0LrQu9Cw0YHRgdC90LXQudC8LCDQvtC/ +0YDQtdC00LXQu9GP0Y7RidC40LksINGH0YLQviDQuNC80LXQvdC90L4g0LPRgNGD +0LfQuNGC0YHRjyDQsiDQtNCw0L3QvdGL0Lkg0LzQvtC80LXQvdGCDQoJCXZhciBs +b2FkaW5nQ2xhc3NOYW1lID0gKHN1Ym1pdFR5cGUgfHwgJ3NhdmUnKSArICctJyAr +IHRoaXMuY2xhc3NOYW1lcy5pc0xvYWRpbmc7DQoNCgkJLy8g0J/RgNC+0LLQtdGA +0LrQsCDRgtC+0LPQviwg0YfRgtC+INGE0L7RgNC80LAg0L3QtSDQvtCx0YDQsNCx +0LDRgtGL0LLQsNC10YIg0YPQttC1INGC0L7Qs9C+LCDRh9GC0L4g0LzRiyDQt9Cw +0L/RgNC+0YHQuNC70Lgg0LIg0LTQsNC90L3Ri9C5INC80L7QvNC10L3Rgg0KCQlp +ZigkKGZvcm0pLmhhc0NsYXNzKGxvYWRpbmdDbGFzc05hbWUpKXsNCgkJCXJldHVy +biBmYWxzZTsNCgkJfQ0KCQlpZiAoc3VibWl0VHlwZSA9PSAncG9sbCcpIHsNCgkJ +CXZhciBkYXRhID0gJ2FjdGlvbj12b3RlJzsNCgkJfSBlbHNlIGlmIChzdWJtaXRU +eXBlID09ICdjYW5jZWwnKSB7DQoJCQl2YXIgZGF0YSA9ICdhY3Rpb249cGFzcyc7 +DQoJCX0NCgkJZGF0YSArPSAnJnBvc3RfaWQ9JyArIHBvc3RfaWQgKyAnJic7DQoJ +CWRhdGEgKz0gdGhpcy5jbGFzc2ljU2VyaWFsaXplRm9ybShmb3JtKTsNCgkJDQoJ +CQ0KCQkvLyDQtdGB0LvQuCBzdWJtaXRUeXBlINC90LUg0L/QtdGA0LXQtNCw0L0s +INGC0L4g0LjRgdC/0L7Qu9GM0LfRg9C10LwgdGhpcy5hamF4VXJscy5zYXZlDQoJ +CXZhciB1cmwgPSB0aGlzLmFqYXhVcmxzW3N1Ym1pdFR5cGVdIHx8IHRoaXMuYWph +eFVybHMuc2F2ZTsNCgkJDQoJCQ0KCQl2YXIgcGFyYW1zID0gew0KCQkJZm9ybTog +Zm9ybSwNCgkJCWxvYWRpbmdDbGFzc05hbWU6IGxvYWRpbmdDbGFzc05hbWUNCgkJ +fTsNCg0KCQkkKGZvcm0pLmFkZENsYXNzKGxvYWRpbmdDbGFzc05hbWUpOw0KCQkN +CgkJYWpheFBvc3QoDQoJCQl1cmwsDQoJCQlkYXRhLA0KCQkJdGhpcy5zZW5kRGF0 +YU9ubG9hZCwNCgkJCXBhcmFtcywNCgkJCXRoaXMpOw0KCQkNCgkJcmV0dXJuIGZh +bHNlOw0KCX0sDQoJeG1sUmVzcG9uc2VIYW5kbGVyX2h0bWw6IGZ1bmN0aW9uKHht +bE5vZGVzLCBwYXJhbXMpew0KCQlpZih4bWxOb2Rlcy5odG1sICYmIHhtbE5vZGVz +Lmh0bWwubGVuZ3RoKSB7DQoJCQlwYXJhbXMuZm9ybS5wYXJlbnROb2RlLmlubmVy +SFRNTCA9IHhtbE5vZGVzLmh0bWxbMF0uZmlyc3RDaGlsZC5kYXRhOw0KCQl9DQoJ +fSwNCgkvLyDQntCx0YDQsNCx0L7RgtGH0LjQuiDQvtGC0LLQtdGC0LAg0YHQtdGA +0LLQtdGA0LAg0L/RgNC4INC/0L7Qu9GD0YfQtdC90LjQuCDQvtGI0LjQsdC60LgN +Cgl4bWxSZXNwb25zZUhhbmRsZXJfZXJyb3I6IGZ1bmN0aW9uKHhtbE5vZGVzLCBw +YXJhbXMpew0KCQlpZih4bWxOb2Rlcy5lcnJvciAmJiB4bWxOb2Rlcy5lcnJvci5s +ZW5ndGgpIHsNCgkJCSQocGFyYW1zLmZvcm0pLnJlbW92ZUNsYXNzKHBhcmFtcy5s +b2FkaW5nQ2xhc3NOYW1lKTsNCg0KCQkJZm9yICh2YXIgaT0wOyBpPHhtbE5vZGVz +LmVycm9yLmxlbmd0aDsgaSsrKXsNCgkJCQl2YXIgZmllbGRNYXJrZWRFcnJvciA9 +IHBhcmFtcy5mb3JtW3htbE5vZGVzLmVycm9yW2ldLmdldEF0dHJpYnV0ZSgnZmll +bGQnKV07DQoJCQkJaWYgKGZpZWxkTWFya2VkRXJyb3IpIHsNCgkJCQkJdmFyIGVy +cm9yTWVzc2FnZSA9IHhtbE5vZGVzLmVycm9yW2ldLmZpcnN0Q2hpbGQgPyB4bWxO +b2Rlcy5lcnJvcltpXS5maXJzdENoaWxkLmRhdGEgOiB0aGlzLmVycm9yTWVzc2Fn +ZXMudW5rbm93bkVycm9yOw0KDQoJCQkJCWlmKCFmaWVsZE1hcmtlZEVycm9yKQ0K +CQkJCQkJZmllbGRNYXJrZWRFcnJvciA9ICQocGFyYW1zLmZvcm0pLmdldEVsZW1l +bnQoJy4nICsgdGhpcy5jbGFzc05hbWVzLnVua25vd25FcnJvck1zZyk7DQoNCgkJ +CQkJdGhpcy5tYXJrRmllbGRfZXJyb3IoZmllbGRNYXJrZWRFcnJvciwgZXJyb3JN +ZXNzYWdlKTsNCgkJCQl9IGVsc2Ugew0KCQkJCQl2YXIgZXJyb3JNZXNzYWdlID0g +eG1sTm9kZXMuZXJyb3JbaV0uZmlyc3RDaGlsZCA/IHhtbE5vZGVzLmVycm9yW2ld +LmZpcnN0Q2hpbGQuZGF0YSA6IHRoaXMuZXJyb3JNZXNzYWdlcy51bmtub3duRXJy +b3I7DQoJCQkJCWZ1dHVfYWxlcnQoRkFULnBvbGxfaGVhZGVyLCBlcnJvck1lc3Nh +Z2UsIGZhbHNlLCAnZXJyb3InKTsNCgkJCQl9DQoJCQl9DQoNCgkJfQ0KCX0NCn0p +Ow0KDQoNCnZhciBwb2xsRm9ybSA9IG5ldyBwb2xsRm9ybUNsYXNzKCk7CgoKCi8q +ICAgYmxvZ3MgICAqLwpibG9nc0hhbmRsZXIgPSB7DQoNCgl1cmxfbGVhdmVfam9p +bjogJy9hamF4L2Jsb2dzL21lbWJlcnNoaXAvJywNCgl1cmxfZ2V0X2luZm86ICcv +YWpheC9ibG9ncy9nZXRpbmZvLycsDQoJDQoJeG1sOiB7DQoJCXJlc3BvbnNlTm9k +ZXM6IHsNCgkJCWVycm9yIDogJ2Vycm9yJywNCgkJCW1lbWJlcnNfY291bnRfc3Ry +IDogJ21lbWJlcnNfY291bnRfc3RyJywNCgkJCXJlc3VsdCA6ICdtZXNzYWdlJywN +CgkJCXBhcmFtIDogJ3BhcmFtJywNCgkJCWRpdmNvbnRlbnQgOiAnZGl2Y29udGVu +dCcNCgkJfSwNCg0KCQlwYXJzZTogZnVuY3Rpb24oeG1sT2JqKXsNCgkJCXZhciB4 +bWxOb2RlcyA9IHt9Ow0KCQkJZm9yIChwcm9wIGluIGJsb2dzSGFuZGxlci54bWwu +cmVzcG9uc2VOb2Rlcykgew0KCQkJCXhtbE5vZGVzW3Byb3BdID0geG1sT2JqLmdl +dEVsZW1lbnRzQnlUYWdOYW1lKGJsb2dzSGFuZGxlci54bWwucmVzcG9uc2VOb2Rl +c1twcm9wXSk7DQoJCQl9DQoJCQlyZXR1cm4geG1sTm9kZXM7DQoJCX0NCgl9LA0K +CQ0KCWpvaW5MZWF2ZUJsb2cgOiBmdW5jdGlvbihhY3Rpb24sIHRhcmdldF9pZCkg +ew0KCQl2YXIgZGF0YSA9ICdhY3Rpb249JysgYWN0aW9uICsnJmJsb2dfaWQ9JyAr +IHRhcmdldF9pZDsNCgkJYWpheExvYWRQb3N0KGJsb2dzSGFuZGxlci51cmxfbGVh +dmVfam9pbiArIGFjdGlvbiArICcvJywgZGF0YSwgYmxvZ3NIYW5kbGVyLmpvaW5M +ZWF2ZUJsb2dPbmxvYWQpOw0KCX0sDQoJDQoJDQoJam9pbkxlYXZlQmxvZ09ubG9h +ZCA6IGZ1bmN0aW9uKGFqYXhPYmopIHsNCgkJaWYoYWpheE9iaiAmJiBhamF4T2Jq +LnJlc3BvbnNlWE1MKXsNCgkJCXZhciB4bWxPYmogPSBhamF4T2JqLnJlc3BvbnNl +WE1MOw0KCQkJdmFyIHhtbE5vZGVzID0gYmxvZ3NIYW5kbGVyLnhtbC5wYXJzZSh4 +bWxPYmopOw0KCQkJaWYoeG1sTm9kZXMuZXJyb3IgJiYgeG1sTm9kZXMuZXJyb3Iu +bGVuZ3RoKXsNCgkJCQl2YXIgZXJyb3JzX2xlbmd0aCA9IHhtbE5vZGVzLmVycm9y +Lmxlbmd0aDsNCgkJCQlmb3IgKHZhciBpID0gMDsgaSA8IGVycm9yc19sZW5ndGg7 +IGkrKykgew0KCQkJCQlmdXR1X2FsZXJ0KEZBVC5ibG9ncy5oZWFkZXIsIHhtbE5v +ZGVzLmVycm9yW2ldLmZpcnN0Q2hpbGQuZGF0YSwgdHJ1ZSwgJ2Vycm9yJyk7DQoJ +CQkJfQ0KCQkJfQ0KCQkJaWYoeG1sTm9kZXMucmVzdWx0ICYmIHhtbE5vZGVzLnJl +c3VsdC5sZW5ndGgpIHsNCgkJCQlpZih4bWxOb2Rlcy5wYXJhbSAmJiB4bWxOb2Rl +cy5wYXJhbS5sZW5ndGgpIHsNCgkJCQkJaWYgKHhtbE5vZGVzLnBhcmFtWzBdLmZp +cnN0Q2hpbGQuZGF0YSA9PSAnbGVhdmUnKSB7DQoJCQkJCQkkKCdqcy1hZGRCbG9n +TWVtYmVyJykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpOw0KCQkJCQkJJCgnanMtcmVt +b3ZlQmxvZ01lbWJlcicpLmFkZENsYXNzKCdoaWRkZW4nKTsNCgkJCQkJCWZ1dHVf +YWxlcnQoRkFULmJsb2dzLmhlYWRlciwgRkFULmJsb2dzLmJsb2dfbGVhdmUsIGZh +bHNlLCAnbWVzc2FnZScpOw0KCQkJCQl9IGVsc2UgaWYgKHhtbE5vZGVzLnBhcmFt +WzBdLmZpcnN0Q2hpbGQuZGF0YSA9PSAnam9pbicpIHsNCgkJCQkJCSQoJ2pzLWFk +ZEJsb2dNZW1iZXInKS5hZGRDbGFzcygnaGlkZGVuJyk7DQoJCQkJCQkkKCdqcy1y +ZW1vdmVCbG9nTWVtYmVyJykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpOw0KCQkJCQkJ +ZnV0dV9hbGVydChGQVQuYmxvZ3MuaGVhZGVyLCBGQVQuYmxvZ3MuYmxvZ19qb2lu +LCBmYWxzZSwgJ21lc3NhZ2UnKTsNCgkJCQkJfQ0KCQkJCQkkKCdtZW1iZXJzX2Nv +dW50Jykuc2V0KCdodG1sJywgeG1sTm9kZXMubWVtYmVyc19jb3VudF9zdHJbMF0u +Zmlyc3RDaGlsZC5kYXRhKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9LA0KCQ0KCWdl +dEJsb2dQZW9wbGUgOiBmdW5jdGlvbihhY3Rpb24sIHRhcmdldF9pZCkgew0KCQlp +ZiAoYWN0aW9uID09ICdhZG1pbmlzdHJhdGlvbicpIHsNCgkJCWlmICgkKCdqcy1h +ZG1pbnNfbW9kZXJhdG9yc19ob2xkZXInKS5oYXNDbGFzcygnanMtaXNfbG9hZGVk +JykpIHsNCgkJCQkkKCdqcy1hZG1pbnNfbW9kZXJhdG9yc19ob2xkZXInKS5yZW1v +dmVDbGFzcygnaGlkZGVuJyk7DQoJCQkJDQovLwkJCQlhZGRDbGFzcygkKCdqcy1h +ZG1pbnNfbW9kZXJhdG9yc19ob2xkZXJfc2hvdycpLCAnaGlkZGVuJyk7DQovLwkJ +CQlyZW1vdmVDbGFzcygkKCdqcy1hZG1pbnNfbW9kZXJhdG9yc19ob2xkZXJfaGlk +ZScpLCAnaGlkZGVuJyk7DQoJCQl9IGVsc2UgaWYgKCEkKCdqcy1hZG1pbnNfbW9k +ZXJhdG9yc19ob2xkZXInKS5oYXNDbGFzcygnanMtaXNfbG9hZGluZycpKSB7DQoJ +CQkJdmFyIGRhdGEgPSAna2luZD0nKyBhY3Rpb24gKycmYmxvZ19pZD0nICsgdGFy +Z2V0X2lkOw0KCQkJCWFqYXhMb2FkUG9zdChibG9nc0hhbmRsZXIudXJsX2dldF9p +bmZvLCBkYXRhLCBibG9nc0hhbmRsZXIuZ2V0QmxvZ1Blb3BsZU9ubG9hZCwgd2lu +ZG93LCB7YWN0aW9uOmFjdGlvbn0pOw0KCQkJCSQoJ2pzLWFkbWluc19tb2RlcmF0 +b3JzX2hvbGRlcicpLmFkZENsYXNzKCdqcy1pc19sb2FkaW5nJyk7DQoJCQkJDQov +LwkJCQlhZGRDbGFzcygkKCdqcy1hZG1pbnNfbW9kZXJhdG9yc19ob2xkZXJfc2hv +dycpLCAnaGlkZGVuJyk7DQovLwkJCQlyZW1vdmVDbGFzcygkKCdqcy1hZG1pbnNf +bW9kZXJhdG9yc19ob2xkZXJfaGlkZScpLCAnaGlkZGVuJyk7DQoJCQl9DQoJCQkJ +DQoJCX0gZWxzZSBpZiAoYWN0aW9uID09ICdtZW1iZXJzJykgew0KCQkJaWYgKCQo +J2pzLWFkbWluc19yZWFkZXJzX2hvbGRlcicpLmhhc0NsYXNzKCdqcy1pc19sb2Fk +ZWQnKSkgew0KCQkJCSQoJ2pzLWFkbWluc19yZWFkZXJzX2hvbGRlcicpLnJlbW92 +ZUNsYXNzKCdoaWRkZW4nKTsNCgkJCQkNCgkJCQkkKCdqcy1hZG1pbnNfcmVhZGVy +c19ob2xkZXJfc2hvdycpLmFkZENsYXNzKCdoaWRkZW4nKTsNCgkJCQkkKCdqcy1h +ZG1pbnNfcmVhZGVyc19ob2xkZXJfaGlkZScpLnJlbW92ZUNsYXNzKCdoaWRkZW4n +KTsNCgkJCX0gZWxzZSBpZiAoISQoJ2pzLWFkbWluc19yZWFkZXJzX2hvbGRlcicp +Lmhhc0NsYXNzKCdqcy1pc19sb2FkaW5nJykpIHsNCgkJCQl2YXIgZGF0YSA9ICdr +aW5kPScrIGFjdGlvbiArJyZibG9nX2lkPScgKyB0YXJnZXRfaWQ7DQoJCQkJYWph +eExvYWRQb3N0KGJsb2dzSGFuZGxlci51cmxfZ2V0X2luZm8sIGRhdGEsIGJsb2dz +SGFuZGxlci5nZXRCbG9nUGVvcGxlT25sb2FkLCB3aW5kb3csIHthY3Rpb246YWN0 +aW9ufSk7DQoJCQkJJCgnanMtYWRtaW5zX3JlYWRlcnNfaG9sZGVyJykuYWRkQ2xh +c3MoJ2pzLWlzX2xvYWRpbmcnKTsNCgkJCQkNCgkJCQkkKCdqcy1hZG1pbnNfcmVh +ZGVyc19ob2xkZXJfc2hvdycpLmFkZENsYXNzKCdoaWRkZW4nKTsNCgkJCQkkKCdq +cy1hZG1pbnNfcmVhZGVyc19ob2xkZXJfaGlkZScpLnJlbW92ZUNsYXNzKCdoaWRk +ZW4nKTsNCgkJCX0NCgkJfQ0KCQkNCgl9LA0KCQ0KCWhpZGVCbG9nUGVvcGxlIDog +ZnVuY3Rpb24oYWN0aW9uKSB7DQoJCWlmIChhY3Rpb24gPT0gJ2FkbWluaXN0cmF0 +aW9uJykgew0KCQkJJCgnanMtYWRtaW5zX21vZGVyYXRvcnNfaG9sZGVyJykuYWRk +Q2xhc3MoJ2hpZGRlbicpOw0KCQkJJCgnanMtYWRtaW5zX21vZGVyYXRvcnNfaG9s +ZGVyX3Nob3cnKS5yZW1vdmVDbGFzcygnaGlkZGVuJyk7DQoJCQkkKCdqcy1hZG1p +bnNfbW9kZXJhdG9yc19ob2xkZXJfaGlkZScpLmFkZENsYXNzKCdoaWRkZW4nKTsN +CgkJfSBlbHNlIGlmIChhY3Rpb24gPT0gJ21lbWJlcnMnKSB7DQoJCQkkKCdqcy1h +ZG1pbnNfcmVhZGVyc19ob2xkZXInKS5hZGRDbGFzcygnaGlkZGVuJyk7DQoJCQkk +KCdqcy1hZG1pbnNfcmVhZGVyc19ob2xkZXJfc2hvdycpLnJlbW92ZUNsYXNzKCdo +aWRkZW4nKTsNCgkJCSQoJ2pzLWFkbWluc19yZWFkZXJzX2hvbGRlcl9oaWRlJyku +YWRkQ2xhc3MoJ2hpZGRlbicpOw0KCQl9DQoJfSwNCgkNCglnZXRCbG9nUGVvcGxl +T25sb2FkIDogZnVuY3Rpb24oYWpheE9iaiwgcGFyYW1zKSB7DQoJCWlmKGFqYXhP +YmogJiYgYWpheE9iai5yZXNwb25zZVhNTCl7DQoJCQl2YXIgeG1sT2JqID0gYWph +eE9iai5yZXNwb25zZVhNTDsNCgkJCXZhciB4bWxOb2RlcyA9IGJsb2dzSGFuZGxl +ci54bWwucGFyc2UoeG1sT2JqKTsNCgkJCWlmKHhtbE5vZGVzLmVycm9yICYmIHht +bE5vZGVzLmVycm9yLmxlbmd0aCl7DQoJCQkJdmFyIGVycm9yc19sZW5ndGggPSB4 +bWxOb2Rlcy5lcnJvci5sZW5ndGg7DQoJCQkJZm9yICh2YXIgaSA9IDA7IGkgPCBl +cnJvcnNfbGVuZ3RoOyBpKyspIHsNCgkJCQkJZnV0dV9hbGVydChGQVQuYmxvZ3Mu +aGVhZGVyLCB4bWxOb2Rlcy5lcnJvcltpXS5maXJzdENoaWxkLmRhdGEsIHRydWUs +ICdlcnJvcicpOw0KCQkJCX0NCgkJCX0NCgkJCWlmKHhtbE5vZGVzLnJlc3VsdCAm +JiB4bWxOb2Rlcy5yZXN1bHQubGVuZ3RoKSB7DQoJCQkJaWYoeG1sTm9kZXMuZGl2 +Y29udGVudCAmJiB4bWxOb2Rlcy5kaXZjb250ZW50Lmxlbmd0aCkgew0KCQkJCQlp +ZiAocGFyYW1zLmFjdGlvbiA9PSAnYWRtaW5pc3RyYXRpb24nKSB7DQoJCQkJCQkk +KCdqcy1hZG1pbnNfbW9kZXJhdG9yc19ob2xkZXInKS5pbm5lckhUTUwgPSB4bWxO +b2Rlcy5kaXZjb250ZW50WzBdLmZpcnN0Q2hpbGQuZGF0YTsNCgkJCQkJCSQoJ2pz +LWFkbWluc19tb2RlcmF0b3JzX2hvbGRlcicpLnJlbW92ZUNsYXNzKCdoaWRkZW4n +KTsNCgkJCQkJCSQoJ2pzLWFkbWluc19tb2RlcmF0b3JzX2hvbGRlcicpLnJlbW92 +ZUNsYXNzKCdqcy1pc19sb2FkaW5nJyk7DQoJCQkJCQkkKCdqcy1hZG1pbnNfbW9k +ZXJhdG9yc19ob2xkZXInKS5hZGRDbGFzcygnanMtaXNfbG9hZGVkJyk7DQoJCQkJ +CQkNCi8vCQkJCQkJYWRkQ2xhc3MoJCgnanMtYWRtaW5zX21vZGVyYXRvcnNfaG9s +ZGVyX3Nob3cnKSwgJ2hpZGRlbicpOw0KLy8JCQkJCQlyZW1vdmVDbGFzcygkKCdq +cy1hZG1pbnNfbW9kZXJhdG9yc19ob2xkZXJfaGlkZScpLCAnaGlkZGVuJyk7DQoJ +CQkJCX0gZWxzZSBpZiAocGFyYW1zLmFjdGlvbiA9PSAnbWVtYmVycycpIHsNCgkJ +CQkJCSQoJ2pzLWFkbWluc19yZWFkZXJzX2hvbGRlcicpLmlubmVySFRNTCA9IHht +bE5vZGVzLmRpdmNvbnRlbnRbMF0uZmlyc3RDaGlsZC5kYXRhOw0KCQkJCQkJJCgn +anMtYWRtaW5zX3JlYWRlcnNfaG9sZGVyJykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicp +Ow0KCQkJCQkJJCgnanMtYWRtaW5zX3JlYWRlcnNfaG9sZGVyJykucmVtb3ZlQ2xh +c3MoJ2pzLWlzX2xvYWRpbmcnKTsNCgkJCQkJCSQoJ2pzLWFkbWluc19yZWFkZXJz +X2hvbGRlcicpLmFkZENsYXNzKCdqcy1pc19sb2FkZWQnKTsNCgkJCQkJCQ0KLy8J +CQkJCQlhZGRDbGFzcygkKCdqcy1hZG1pbnNfcmVhZGVyc19ob2xkZXJfc2hvdycp +LCAnaGlkZGVuJyk7DQovLwkJCQkJCXJlbW92ZUNsYXNzKCQoJ2pzLWFkbWluc19y +ZWFkZXJzX2hvbGRlcl9oaWRlJyksICdoaWRkZW4nKTsNCgkJCQkJfQ0KCQkJCX0N +CgkJCX0NCgkJfQ0KCX0sDQoJDQoJdG9nZ2xlQmxvZ0luZm8gOiBmdW5jdGlvbiAo +dGFyZ2V0X2lkLGVsZW1lbnQpIHsNCgkJdmFyIF9ib3ggPSAkKCdqcy1ibG9nX2lu +Zm8nKTsNCgkJaWYgKF9ib3guaGFzQ2xhc3MoJ2hpZGRlbicpKSB7DQoJCQlfYm94 +LnJlbW92ZUNsYXNzKCdoaWRkZW4nKTsNCgkJCWJsb2dzSGFuZGxlci5nZXRCbG9n +UGVvcGxlKCdhZG1pbmlzdHJhdGlvbicsIHRhcmdldF9pZCk7IA0KCQkJDQoJCQkN +CgkJCXZhciBwID0gZWxlbWVudC5nZXRQb3NpdGlvbigpOw0KCQkJX2JveC5zdHls +ZS50b3AgPSAocC55IC0gMTQpICsgJ3B4JzsNCgkJCWlmIChwLnggPiAoJChkb2N1 +bWVudCkuZ2V0U2l6ZSgpLngvMikpIHsNCgkJCQlfYm94LmFkZENsYXNzKCJ0aXBC +b3gtdG9vLW1hY2gtcmlnaHQiKQ0KCQkJfSBlbHNlIHsNCgkJCQlfYm94LnJlbW92 +ZUNsYXNzKCJ0aXBCb3gtdG9vLW1hY2gtcmlnaHQiKQ0KCQkJfQ0KCQkJX2JveC5z +dHlsZS5sZWZ0ID0gcC54ICsgJ3B4JzsNCgkJCV9ib3guc3R5bGUuZGlzcGxheSA9 +ICdibG9jayc7DQoJCQkNCgkJCQ0KCQkJDQoJCX0gZWxzZSB7DQoJCQlfYm94LmFk +ZENsYXNzKCdoaWRkZW4nKTsNCgkJfQ0KCQkNCgl9LA0KCQ0KCWZpbHRlciA6IGZ1 +bmN0aW9uIChvYmopIHsNCgkJdmFyIGZpZWxkcyA9ICQob2JqLmZvcm0pLmdldEVs +ZW1lbnRzKCcuanMtZmllbGQtZGF0YScpOw0KCQlmb3IgKHZhciBpPTAsIGo9Zmll +bGRzLmxlbmd0aDsgaTxqOyBpKyspIHsNCgkJCWlmKGZpZWxkc1tpXS5jaGVja2Vk +ID09IHRydWUpIHsNCgkJCQl3aW5kb3cubG9jYXRpb24uaHJlZiA9ICcvYmxvZycg +KyBmaWVsZHNbaV0udmFsdWU7DQoJCQl9DQoJCX0NCgl9DQp9Ow0KDQoNCg0KDQp2 +YXIgYWRtaW5CbG9nUGVvcGxlRm9ybUNsYXNzID0gZnVuY3Rpb24oKXsNCglhZG1p +bkJsb2dQZW9wbGVGb3JtQ2xhc3Muc3VwZXJDbGFzcy5hcHBseSh0aGlzLCBhcmd1 +bWVudHMpOw0KDQoJdGhpcy5hamF4VXJscyA9IHsNCgkJc2F2ZTogIi9hamF4L2Js +b2dzL21lbWJlcnNoaXAvc2V0X2dyb3VwLyINCgl9Ow0KCQ0KCU9iamVjdC5leHRl +bmRPYmplY3QoDQoJCXRoaXMueG1sUmVzcG9uc2UsIHsNCgkJDQoJCW1lc3NhZ2U6 +IHsNCgkJCW5vZGU6ICdtZXNzYWdlJywNCgkJCWhhbmRsZXI6ICd4bWxSZXNwb25z +ZUhhbmRsZXJfbWVzc2FnZScNCgkJfQ0KCQkNCgl9KTsNCg0KfTsNCg0KYWRtaW5C +bG9nUGVvcGxlRm9ybUNsYXNzLmluaGVyaXRzRnJvbShhamF4Rm9ybUNsYXNzKTsN +Cg0KT2JqZWN0LmV4dGVuZE9iamVjdCgNCglhZG1pbkJsb2dQZW9wbGVGb3JtQ2xh +c3MucHJvdG90eXBlLCB7DQoJDQoJc2VyaWFsaXplRm9ybTogZnVuY3Rpb24oZm9y +bSl7DQoJCQl2YXIgZGF0YSA9ICcnOw0KCQkJDQoJCQl2YXIgZGF0YXMgPSAkKGZv +cm0pLmdldEVsZW1lbnRzKCcuJyArIHRoaXMuY2xhc3NOYW1lcy5maWVsZERhdGEp +Ow0KCQkJZm9yICh2YXIgaT0wLCBsZW5ndGg9ZGF0YXMubGVuZ3RoOyBpPGxlbmd0 +aDsgaSsrKXsNCgkJCQl2YXIgdHlwZSA9IGRhdGFzW2ldLmdldEF0dHJpYnV0ZSgn +dHlwZScpOw0KCQkJCXZhciBwYXJhbSA9IGRhdGFzW2ldLmdldEF0dHJpYnV0ZSgn +bmFtZScpOw0KCQkJCXZhciB2YWx1ZSA9IGRhdGFzW2ldLnZhbHVlOw0KDQoJCQkJ +aWYodHlwZSA9PSAncmFkaW8nICYmICFkYXRhc1tpXS5jaGVja2VkKXsNCgkJCQkJ +Y29udGludWU7DQoJCQkJfQ0KDQoJCQkJaWYodHlwZSA9PSAnY2hlY2tib3gnICYm +ICFkYXRhc1tpXS5jaGVja2VkKXsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0KCQkJ +CWRhdGEgKz0gKGRhdGEhPScnID8gJyYnIDogJycpICsgcGFyYW0gKyAnPScgKyBl +bmNvZGVVUklDb21wb25lbnQodmFsdWUpOw0KCQkJfQ0KCQkJcmV0dXJuIGRhdGE7 +DQoJfSwNCglzZW5kRGF0YU9ubG9hZDogZnVuY3Rpb24gKGFqYXhPYmosIHBhcmFt +cyl7DQoJCQlpZihhamF4T2JqICYmIGFqYXhPYmoucmVzcG9uc2VYTUwpew0KCQkJ +CXZhciB4bWxPYmogPSBhamF4T2JqLnJlc3BvbnNlWE1MOw0KCQkJCXZhciB4bWxO +b2RlcyA9IHRoaXMucGFyc2VYTUwoeG1sT2JqKTsNCg0KCQkJCWZvciAocHJvcCBp +biB4bWxOb2Rlcyl7DQoJCQkJCWlmKHRoaXNbdGhpcy54bWxSZXNwb25zZVtwcm9w +XS5oYW5kbGVyXSkgew0KCQkJCQkJdGhpc1t0aGlzLnhtbFJlc3BvbnNlW3Byb3Bd +LmhhbmRsZXJdKHhtbE5vZGVzLCBwYXJhbXMpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJ +fQ0KCQkJJChwYXJhbXMuZm9ybSkucmVtb3ZlQ2xhc3MoJ3NhdmUtbG9hZGluZycp +Ow0KCX0sDQoJeG1sUmVzcG9uc2VIYW5kbGVyX21lc3NhZ2U6IGZ1bmN0aW9uICh4 +bWxOb2RlcywgcGFyYW1zKSB7DQoJCWlmICh4bWxOb2Rlcy5tZXNzYWdlICYmIHht +bE5vZGVzLm1lc3NhZ2UubGVuZ3RoICYmIHhtbE5vZGVzLm1lc3NhZ2VbMF0uZmly +c3RDaGlsZC5kYXRhID09ICdvaycpIHsNCgkJCWZ1dHVfYWxlcnQoRkFULmJsb2dz +LmhlYWRlciwgJ9Cf0YDQsNCy0LAg0YHQvtGF0YDQsNC90LXQvdGLJywgZmFsc2Us +ICdtZXNzYWdlJyk7DQoJCX0NCgl9DQp9KTsNCg0KDQp2YXIgYWRtaW5CbG9nUGVv +cGxlRm9ybSA9IG5ldyBhZG1pbkJsb2dQZW9wbGVGb3JtQ2xhc3MoKTsNCg0KDQov +Kg0KdG0uaW5pdC5hZGQoZnVuY3Rpb24oKXsNCgkNCgl2YXIgYmxvZ0luZm9CbG9j +ayA9ICQoZG9jdW1lbnQpLmdldEVsZW1lbnQoIi5ibG9nLWFib3V0LXRleHQiKTsN +CglpZiAoYmxvZ0luZm9CbG9jaykgew0KCQl2YXIgYmxvZ2luZm9CbG9ja0Nsb3Nl +QnV0dG9uID0gYmxvZ0luZm9CbG9jay5nZXRFbGVtZW50KCJhLmNsb3NlLWJsb2ct +aW5mbyIpOw0KCQlpZiAoYmxvZ2luZm9CbG9ja0Nsb3NlQnV0dG9uKSB7DQoJCQli +bG9naW5mb0Jsb2NrQ2xvc2VCdXR0b24uYWRkRXZlbnQoImNsaWNrIixmdW5jdGlv +bigpew0KCQkJCWJsb2dJbmZvQmxvY2suYWRkQ2xhc3MoImhpZGRlbiIpOw0KCQkJ +CXJldHVybiBmYWxzZQ0KCQkJfSkNCgkJfQ0KCQl2YXIgYmxvZ0luZm9CbG9ja0No +aWxkcyA9IGJsb2dJbmZvQmxvY2suZ2V0RWxlbWVudHMoIioiKTsNCgkJZm9yICh2 +YXIgaT0wLGw9YmxvZ0luZm9CbG9ja0NoaWxkcy5sZW5ndGg7IGkgPCBsIDsgaSsr +KSB7DQoJCQlibG9nSW5mb0Jsb2NrQ2hpbGRzW2ldLmNsaWNrZXIgPSAiYmxvZ0lu +Zm9CbG9ja0NoaWxkcyI7DQoJCX07DQoJCXZhciB3aG9pcyA9JChkb2N1bWVudCku +Z2V0RWxlbWVudCgiLmJsb2ctd2hvaXMiKTsNCgkJaWYod2hvaXMpIHsNCgkJCXdo +b2lzLmNsaWNrZXIgPSAiYmxvZ0luZm9CbG9ja0NoaWxkcyI7DQoJCX0NCgkJJChk +b2N1bWVudCkuYWRkRXZlbnQoImNsaWNrIixmdW5jdGlvbihlKXsNCgkJCWlmICgh +ZS50YXJnZXQuY2xpY2tlciB8fCAhZS50YXJnZXQuY2xpY2tlciA9PSAiYmxvZ0lu +Zm9CbG9ja0NoaWxkcyIpIHsNCgkJCQlibG9nSW5mb0Jsb2NrLmFkZENsYXNzKCJo +aWRkZW4iKTsNCgkJCX0NCgkJfSkNCgl9DQp9KTsNCiovCgoK + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline; filename=validation.js +Content-Type: application/x-javascript; charset=utf-8; name=validation.js +Content-Location: http://habrahabr.ru/js/1307631427/tm/validation.js +Content-Transfer-Encoding: Base64 + +dmFyIHRtID0gKHR5cGVvZih0bSkgIT0gJ3VuZGVmaW5lZCcpID8gdG0gOiB7fTsK +Ci8qKgogKiDQmtC70LDRgdGBINC/0YDQvtCy0LXRgNC60Lgg0LfQvdCw0YfQtdC9 +0LjQuSDQv9C+0LvQtdC5INCy0L4g0LLRgdGP0LrQuNGFINGE0L7RgNC80LDRhQog +KiBAcGFyYW0g0KTQvtGA0LzQsCwg0LrQvtGC0L7RgNGD0Y4g0L3Rg9C20L3QviDQ +v9GA0L7QstC10YDRj9GC0YwKICogQGF1dGhvciBiZWJvcGtpZCwgbWRldmlscwog +Ki8KdG0uVmFsaWRhdG9yID0gQ2xhc3MoewoKCWluaXRpYWxpemU6IGZ1bmN0aW9u +ICgpIHsKCQkvKioKCQkgKiDQodC/0LjRgdC+0Log0Y3Qu9C10LzQtdC90YLQvtCy +INC00LvRjyDQstCw0LvQuNC00LDRhtC40LgKCQkgKi8KCQl0aGlzLl9lbGVtZW50 +cyA9IFtdOwoJfSwKCgkvKioKCSAqINCd0LXQv9C+0YHRgNC10LTRgdGC0LLQtdC9 +0L3QviDRhNGD0L3QutGG0LjQuCDQtNC70Y8g0LLQsNC70LjQtNCw0YbQuNC4INC3 +0L3QsNGH0LXQvdC40LksINC40Lwg0L/QtdGA0LXQtNCw0LXRgtGB0Y8g0YLRgNC4 +INC/0LDRgNCw0LzQtdGC0YDQsAoJICogQHBhcmFtIHtTdHJpbmd9INGB0YLRgNC+ +0LrQsCDQtNC70Y8g0LLQsNC70LjQtNCw0YbQuNC4CgkgKiBAcGFyYW0ge09iamVj +dH0g0L/RgNC+0LjQt9Cy0L7Qu9GM0L3Ri9C5INC/0LDRgNCw0LzQtdGC0YAKCSAq +IEBwYXJhbSB7RWxlbWVudH0g0L/QvtC70LUsINC60L7RgtC+0YDQvtC1INC80Ysg +0LLQsNC70LjQtNC40YDRg9C10LwKCSAqLwoJaGFuZGxlcnM6IHsKCQlyZXF1aXJl +ZDogZnVuY3Rpb24odmFsdWUpIHsKCQkJcmV0dXJuIHZhbHVlICYmICgodmFsdWUu +bGVuZ3RoID4gMCkgPyB0cnVlIDogZmFsc2UpOwoJCX0sCgkJbWlubGVuOiBmdW5j +dGlvbih2YWx1ZSwgbWluTGVuZ3RoKSB7CgkJCXJldHVybiB2YWx1ZSAmJiAoKHZh +bHVlLmxlbmd0aCA+PSBtaW5MZW5ndGgpID8gdHJ1ZSA6IGZhbHNlKTsKCQl9LAoJ +CW1heGxlbjogZnVuY3Rpb24odmFsdWUsIG1heExlbmd0aCkgewoJCQlyZXR1cm4g +dmFsdWUgJiYgKCh2YWx1ZS5sZW5ndGggPD0gbWF4TGVuZ3RoKSA/IHRydWUgOiBm +YWxzZSk7CgkJfSwKCQlsb2dpbjogZnVuY3Rpb24odmFsdWUpIHsKCQkJcmV0dXJu +IHZhbHVlICYmIC9eW2EtekEtWjAtOVwtX10qJC8udGVzdCh2YWx1ZSk7CgkJfSwK +CQllbWFpbDogZnVuY3Rpb24odmFsdWUpIHsKCQkJcmV0dXJuIHZhbHVlICYmIC9e +KFthLXpBLVowLTlfXC5cLVwrXSkrXEAoKFthLXpBLVowLTlcLV0pK1wuKSsoW2Et +ekEtWjAtOV17Miw0fSkrJC8udGVzdCh2YWx1ZSk7CgkJfSwKCQlyYWRpb1JlcXVp +cmVkOiBmdW5jdGlvbiAodmFsdWUpIHsKCQkgICAgdmFyIG9rPWZhbHNlOwoJCSAg +ICBpZiAodHlwZW9mKHZhbHVlKSA9PSAnb2JqZWN0JykgewoJCSAgICAgICAgZm9y +KHZhciBpIGluIHZhbHVlKSB7CgkJICAgICAgICAgICAgb2s9dHJ1ZTsKCQkgICAg +ICAgICAgICBicmVhazsKCQkgICAgICAgIH0KCQkgICAgfQoJCSAgICAKCQkgICAg +cmV0dXJuIG9rOwoJCX0sCgkJaGFicmFjdXRtZTogZnVuY3Rpb24odmFsdWUpewoJ +CQlpZiAoYXJndW1lbnRzLmNhbGxlZS5kb25lIHx8ICh2YWx1ZS5sZW5ndGggPCAx +NzAwKSB8fCAodmFsdWUuaW5kZXhPZignXDxoYWJyYWN1dCcpICE9IC0xKSkgewkJ +CQkKCQkJICByZXR1cm4gdHJ1ZQkJCQoJCQl9IGVsc2UgewkJCQkKCQkJCS8vYXJn +dW1lbnRzLmNhbGxlZS5kb25lID0gdHJ1ZTsKCQkJCXJldHVybiBmYWxzZQoJCQl9 +OwoJCX0KCX0sCgkKCS8qKgoJICog0J7Rh9C40YnQsNC10YIg0YHQvtGB0YLQvtGP +0L3QuNC1INCy0LDQu9C40LTQsNGC0L7RgNCwCgkgKi8KCWNsZWFyOiBmdW5jdGlv +bigpIHsKCQl0aGlzLl9lbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pewoJ +CQlpdGVtLmVsZW1lbnQuX3ZhbGlkYXRvciA9IGZhbHNlOyAKCQl9KTsKCQl0aGlz +Ll9lbGVtZW50cyA9IFtdOwoJfSwKCQoJLyoqCgkgKiDQlNC+0LHQsNCy0LvRj9C1 +0YIg0Y3Qu9C10LzQtdC90YLRiyDQtNC70Y8g0LHRg9C00YPRidC10Lkg0LLQsNC7 +0LjQtNCw0YbQuNC4CgkgKiBAcGFyYW0ge0VsZW1lbnR9IHBhcmVudAoJICovCglh +ZGRFbGVtZW50czogZnVuY3Rpb24ocGFyZW50KSB7CgkJdG0uZ2V0RWxlbWVudHNG +b3JWYWxpZGF0aW9uKHBhcmVudCkuZm9yRWFjaChmdW5jdGlvbihmaWVsZCl7CgkJ +CXRoaXMuX2FkZEVsZW1lbnQoZmllbGQpOwoJCX0sIHRoaXMpOwoJfSwKCQoJLyoq +CgkgKiDQlNC10LDQutGC0LjQstC40YDRg9C10YIg0Y3Qu9C10LzQtdC90YLRiyDQ +uNC3INCx0YPQtNGD0YnQtdC5INCy0LDQu9C40LTQsNGG0LjQuAoJICogQHBhcmFt +IHtFbGVtZW50fSBwYXJlbnQKCSAqLwoJZGlzYWJsZUVsZW1lbnRzOiBmdW5jdGlv +bihwYXJlbnQpIHsKCQl0bS5nZXRFbGVtZW50c0ZvclZhbGlkYXRpb24ocGFyZW50 +KS5mb3JFYWNoKGZ1bmN0aW9uKGZpZWxkKXsKCQkJZmllbGQuX3ZhbGlkYXRpb25F +bmFibGVkID0gZmFsc2U7CgkJfSwgdGhpcyk7Cgl9LAoKCS8qKgoJICog0JTQtdCw +0LrRgtC40LLQuNGA0YPQtdGCINGN0LvQtdC80LXQvdGC0Ysg0LjQtyDQsdGD0LTR +g9GJ0LXQuSDQstCw0LvQuNC00LDRhtC40LgKCSAqIEBwYXJhbSB7RWxlbWVudH0g +cGFyZW50CgkgKi8KCWVuYWJsZUVsZW1lbnRzOiBmdW5jdGlvbihwYXJlbnQpIHsK +CQl0bS5nZXRFbGVtZW50c0ZvclZhbGlkYXRpb24ocGFyZW50KS5mb3JFYWNoKGZ1 +bmN0aW9uKGZpZWxkKXsKCQkJZmllbGQuX3ZhbGlkYXRpb25FbmFibGVkID0gdHJ1 +ZTsKCQl9LCB0aGlzKTsKCX0sCgoJLyoqCgkgKiDQlNC+0LHQsNCy0LvRj9C10YIg +0Y3Qu9C10LzQtdC90YLRiyDQtNC70Y8g0LHRg9C00YPRidC10Lkg0LLQsNC70LjQ +tNCw0YbQuNC4CgkgKiBAcGFyYW0ge0VsZW1lbnR9IHBhcmVudAoJICovCglyZW1v +dmVFbGVtZW50czogZnVuY3Rpb24ocGFyZW50KSB7CgkJdG0uZ2V0RWxlbWVudHNG +b3JWYWxpZGF0aW9uKHBhcmVudCkuZm9yRWFjaChmdW5jdGlvbihmaWVsZCl7CgkJ +CXRoaXMuX3JlbW92ZUVsZW1lbnQoZmllbGQpOwoJCX0sIHRoaXMpOwoJfSwKCgkv +KioKCSAqINCU0L7QsdCw0LLQu9GP0LXRgiDRjdC70LXQvNC10L3RgiDQtNC70Y8g +0LHRg9C00YPRidC10Lkg0LLQsNC70LjQtNCw0YbQuNC4CgkgKiBAcGFyYW0ge0Vs +ZW1lbnR9IGVsZW1lbnQKCSAqLwoJX2FkZEVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1l +bnQpIHsKCQlpZiAoIWVsZW1lbnQuX3ZhbGlkYXRvcikgewoJCQllbGVtZW50Ll92 +YWxpZGF0b3IgPSB0aGlzOwoJCQllbGVtZW50Ll92YWxpZGF0aW9uRW5hYmxlZCA9 +IHRydWU7CgkJCXRoaXMuX2VsZW1lbnRzLnB1c2godGhpcy5fZ2V0RWxlbWVudE9i +amVjdChlbGVtZW50KSk7CgkJfQoJfSwKCgkvKioKCSAqINCf0LDRgNGB0LjRgiDQ +uNC90YTQvtGA0LzQsNGG0LjRjiDQvtCxINGN0LvQtdC80LXQvdGC0LUg0Lgg0LLQ +vtC30LLRgNCw0YnQsNC10YIg0L7QsdGK0LXQutGCINGN0LvQtdC80LXQvdGC0LAK +CSAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudAoJICovCglfZ2V0RWxlbWVudE9i +amVjdDogZnVuY3Rpb24oZWxlbWVudCkgewoJCXZhciB2YWxpZGF0aW9uU3RyaW5n +Qml0cyA9IGVsZW1lbnQuZ2V0KCd2YWxpZGF0ZScpLnNwbGl0KCcgJyk7IAoJCXZh +ciBlbGVtZW50T2JqZWN0ID0gewoJCQknZWxlbWVudCc6IGVsZW1lbnQsCgkJCSd2 +YWxpZGF0aW9ucyc6IFtdCgkJfTsKCQlmb3IgKHZhciBpPTA7IGk8dmFsaWRhdGlv +blN0cmluZ0JpdHMubGVuZ3RoOyBpKyspIHsKCQkJdmFyIHZhbGlkYXRpb25FeHBy +ZXNzaW9uID0gdmFsaWRhdGlvblN0cmluZ0JpdHNbaV07CgkJCXZhciBjb2xvbiA9 +IHZhbGlkYXRpb25FeHByZXNzaW9uLmluZGV4T2YoJzonKTsKCQkJdmFyIHBhcmFt +ID0gbnVsbDsKCQkJaWYgKGNvbG9uICE9IC0xKSB7CgkJCQl2YXIgaGFuZGxlciA9 +IHZhbGlkYXRpb25FeHByZXNzaW9uLnN1YnN0cigwLCBjb2xvbik7CgkJCQlwYXJh +bSA9IHZhbGlkYXRpb25FeHByZXNzaW9uLnN1YnN0cihjb2xvbisxKTsKCQkJfSBl +bHNlIHsKCQkJCXZhciBoYW5kbGVyID0gdmFsaWRhdGlvbkV4cHJlc3Npb247CgkJ +CX0KCQkJZWxlbWVudE9iamVjdC52YWxpZGF0aW9ucy5wdXNoKHsKCQkJCSdoYW5k +bGVyJzogaGFuZGxlciwKCQkJCSdwYXJhbSc6IHBhcmFtCgkJCX0pOwoJCX0KCQly +ZXR1cm4gZWxlbWVudE9iamVjdDsKCX0sCgoJLyoqCgkgKiDQo9C00LDQu9GP0LXR +giDRjdC70LXQvNC10L3RgtGLINC40Lcg0LLQsNC70LjQtNCw0YbQuNC4CgkgKiBA +cGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQKCSAqLwoJX3JlbW92ZUVsZW1lbnQ6IGZ1 +bmN0aW9uKGVsZW1lbnQpIHsKCQlmb3IgKHZhciBpPTA7IGk8dGhpcy5fZWxlbWVu +dHMubGVuZ3RoOyBpKyspIHsKCQkJaWYgKHRoaXMuX2VsZW1lbnRzW2ldLmVsZW1l +bnQgPT0gZWxlbWVudCkgewoJCQkJZWxlbWVudC5fdmFsaWRhdG9yID0gZmFsc2U7 +CgkJCQl0aGlzLl9lbGVtZW50cy5zcGxpY2UoaSwgMSk7CgkJCQlyZXR1cm47CgkJ +CX0KCQl9Cgl9LAoKCS8qKgoJICog0JLQvtC30LLRgNCw0YnQsNC10YIg0LfQvdCw +0YfQtdC90LjQtSDRjdC70LXQvNC10L3RgtCwCgkgKiBAcGFyYW0ge0VsZW1lbnR9 +IGVsZW1lbnQKCSAqLwoJX2dldFZhbHVlOiBmdW5jdGlvbihlbGVtZW50KSB7CgkJ +c3dpdGNoICgkKGVsZW1lbnQpLmdldCgndGFnJykpIHsKCQkJY2FzZSAnaW5wdXQn +OgoJCQkJc3dpdGNoIChlbGVtZW50LmdldCgidHlwZSIpKSB7CgkJCQkJY2FzZSAn +dGV4dCc6CgkJCQkJY2FzZSAncGFzc3dvcmQnOgoJCQkJCWNhc2UgJ2ZpbGUnOgoJ +CQkJCQlyZXR1cm4gZWxlbWVudC52YWx1ZTsKCQkJCQljYXNlICdjaGVja2JveCc6 +CgkJCQkJY2FzZSAncmFkaW8nOgoJCQkJCQlyZXR1cm4gZWxlbWVudC5nZXQoImNo +ZWNrZWQiKSA/IGVsZW1lbnQudmFsdWUgOiBudWxsOwoJCQkJCQoJCQkJfQoJCQkJ +YnJlYWs7CgkJCWNhc2UgJ3RleHRhcmVhJzoKCQkJCXJldHVybiBlbGVtZW50LnZh +bHVlOwoJCQljYXNlICdzZWxlY3QnOgoJCQkJcmV0dXJuIGVsZW1lbnQuZ2V0KCJ2 +YWx1ZSIpOwoJCQljYXNlICdmaWVsZHNldCc6CiAgICAgICAgICAgICAgICB2YXIg +ZmllbGRzID0gZWxlbWVudC5nZXRFbGVtZW50cygnaW5wdXQsc2VsZWN0LHRleHRh +cmVhLGZpZWxkc2V0Jyk7CiAgICAJCSAgICB2YXIgcmV0ID0ge307CiAgICAJCQlm +b3IgKHZhciBpID0gMCwgbCA9IGZpZWxkcy5sZW5ndGg7IGk8bDsgaSsrKSB7CiAg +ICAJCQkgICAgdmFyIGZpZWxkID0gZmllbGRzW2ldOwogICAgCQkJICAgIHZhciBu +YW1lID0gZmllbGQubmFtZTsKICAgIAkJCSAgICB2YXIgdmFsdWUgPSB0aGlzLl9n +ZXRWYWx1ZShmaWVsZCk7CiAgICAJCQkgICAgaWYodHlwZW9mKHZhbHVlKSAhPT0g +J3VuZGVmaW5lZCcgJiYgdmFsdWUgIT09IG51bGwpIHsKICAgIAkJCSAgICAgICAg +IXJldFtuYW1lXSA/CiAgICAJCQkgICAgICAgICAgICByZXRbbmFtZV0gPSB2YWx1 +ZSA6CiAgICAJCQkgICAgICAgICAgICByZXRbbmFtZV0uZm9yRWFjaCA/CiAgICAJ +CQkgICAgICAgICAgICAgICAgcmV0W25hbWVdLnB1c2godmFsdWUpIDoKICAgIAkJ +CSAgICAgICAgICAgICAgICAocmV0W25hbWVdID0gWyByZXRbbmFtZV0sIHZhbHVl +IF0pOwogICAgCQkJICAgIH0KICAgIAkJCX0KICAgIAkJCXJldHVybiByZXQ7CgkJ +CQlicmVhazsKCQl9Cgl9LAoKCS8qKgoJICog0J/RgNC+0LjQt9Cy0L7QtNC40YIg +0LLQsNC70LjQtNCw0YbQuNGOINC+0LHRitC10LrRgtCwINCy0LDQu9C40LTQsNGG +0LjQuAoJICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnQKCSAqLwoJX3ZhbGlkYXRl +RWxlbWVudE9iamVjdDogZnVuY3Rpb24oZWxlbWVudE9iamVjdCkgewoJCXZhciBl +bGVtZW50ID0gZWxlbWVudE9iamVjdC5lbGVtZW50OwoJCXZhciB2YWx1ZSA9IHRo +aXMuX2dldFZhbHVlKGVsZW1lbnQpOwoJCWZvciAodmFyIGk9MDsgaTxlbGVtZW50 +T2JqZWN0LnZhbGlkYXRpb25zLmxlbmd0aDsgaSsrKSB7CgkJCWlmIChlbGVtZW50 +T2JqZWN0LmVsZW1lbnQuX3ZhbGlkYXRpb25FbmFibGVkKSB7CgkJCQl2YXIgaGFu +ZGxlciA9IGVsZW1lbnRPYmplY3QudmFsaWRhdGlvbnNbaV0uaGFuZGxlcjsKCQkJ +CXZhciBwYXJhbSA9IGVsZW1lbnRPYmplY3QudmFsaWRhdGlvbnNbaV0ucGFyYW07 +CgkJCQlpZiAoIXRoaXMuaGFuZGxlcnNbaGFuZGxlcl0odmFsdWUsIHBhcmFtKSkg +CgkJCQkJcmV0dXJuIGhhbmRsZXI7CgkJCX0KCQl9CgkJcmV0dXJuIGZhbHNlOwoJ +fSwKCgkvKioKCSAqINCf0YDQvtC40LfQstC+0LTQuNGCINCy0LDQu9C40LTQsNGG +0LjRjiDQvtCx0YrQtdC60YLQsCDQstCw0LvQuNC00LDRhtC40LgKCSAqIEBwYXJh +bSB7RWxlbWVudH0gZWxlbWVudAoJICovCgl2YWxpZGF0ZUVsZW1lbnQ6IGZ1bmN0 +aW9uKGVsZW1lbnQpIHsKCQlyZXR1cm4gX3ZhbGlkYXRlRWxlbWVudE9iamVjdCh0 +aGlzLl9nZXRFbGVtZW50T2JqZWN0KGVsZW1lbnQpKTsKCX0sCgoJLyoqCgkgKiDQ +n9GA0L7QuNC30LLQvtC00LjRgiDQstCw0LvQuNC00LDRhtC40Y4g0LLRgdC10YUg +0L7QsdGK0LXQutGC0L7QsgoJICovCgl2YWxpZGF0ZTogZnVuY3Rpb24oKSB7CgkJ +dmFyIHJlc3VsdCA9IFtdOwoJCWZvciAodmFyIGk9MDsgaTx0aGlzLl9lbGVtZW50 +cy5sZW5ndGg7IGkrKykgewoJCQl2YXIgZXJyb3IgPSB0aGlzLl92YWxpZGF0ZUVs +ZW1lbnRPYmplY3QodGhpcy5fZWxlbWVudHNbaV0pOwoJCQlpZiAoZXJyb3IpIHsK +CQkJCXJlc3VsdC5wdXNoKHsKCQkJCQknZWxlbWVudCc6IHRoaXMuX2VsZW1lbnRz +W2ldLmVsZW1lbnQsCgkJCQkJJ2Vycm9yVHlwZSc6IGVycm9yCgkJCQl9KTsKCQkJ +fQoJCX0KCQlyZXR1cm4gcmVzdWx0OwoJfQp9KTsKCnRtLmdldEVsZW1lbnRzRm9y +VmFsaWRhdGlvbiA9IGZ1bmN0aW9uKGNvbnRhaW5lcikgewoJdmFyIGVsZW1lbnRz +ID0gW107CglpZiAoIWNvbnRhaW5lcikgeyByZXR1cm4gW107IH07CgkkKGNvbnRh +aW5lcikuZ2V0RWxlbWVudHMoJ2lucHV0LHNlbGVjdCx0ZXh0YXJlYSxmaWVsZHNl +dCcpLmZvckVhY2goCgkJZnVuY3Rpb24gKGZpZWxkKSB7CgkJCWlmICghdG0uYmFk +VGFncy5jb250YWlucyhmaWVsZC50YWdOYW1lKSAmJiBmaWVsZC5nZXQoJ3ZhbGlk +YXRlJykgIT0gbnVsbCkgewoJCQkJZWxlbWVudHMucHVzaChmaWVsZCk7CgkJCX07 +Cgl9LCB0aGlzKTsKCXJldHVybiBlbGVtZW50czsKfTs= + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline; filename=xmlhandler.js +Content-Type: application/x-javascript; charset=utf-8; name=xmlhandler.js +Content-Location: http://habrahabr.ru/js/1307631427/tm/xmlhandler.js +Content-Transfer-Encoding: Base64 + +dmFyIHRtID0gKHR5cGVvZih0bSkgIT0gJ3VuZGVmaW5lZCcpID8gdG0gOiB7fTsK +IAovKioKICog0J7QsdGA0LDQsdC+0YLRh9C40Log0L7RgtCy0LXRgtC+0LIg0L7R +giDRgdC10YDQstC10YDQsAogKiBAYXV0aG9yIG1kZXZpbHMKICogQGNvbnN0cnVj +dG9yCiAqLwp0bS5IYW5kbGVyID0gZnVuY3Rpb24oKXsKCQoJdGhpcy5oYW5kbGVy +cyA9IHsKCQkKCQkncmVkaXJlY3RfdXJsJyA6IGZ1bmN0aW9uKG5vZGVzLCByLCBq +c29uKSB7CgkJCWZvciAodmFyIGk9MDsgaTxub2Rlcy5sZW5ndGg7IGkrKykgewoJ +CQkgICAgaWYgKCEkKCdkZWJ1ZycpKSB7CgkJCSAgICAgICAgd2luZG93LmxvY2F0 +aW9uLmhyZWYgPSBqc29uID8gbm9kZXNbaV0gOiBub2Rlc1tpXS5maXJzdENoaWxk +LmRhdGE7CgkJCSAgICB9IGVsc2UgewoJCQkgICAgICAgIHRtLmxvZygncmVkaXJl +Y3Q6ICcsIGpzb24gPyBub2Rlc1tpXSA6IG5vZGVzW2ldLmZpcnN0Q2hpbGQuZGF0 +YSk7CgkJCSAgICB9CgkJCQkKCQkJfQoJCX0sCgkJCgkJCgkJJ3JlZGlyZWN0JyA6 +IGZ1bmN0aW9uKG5vZGVzLCByLCBqc29uKSB7CgkJCWZvciAodmFyIGk9MDsgaTxu +b2Rlcy5sZW5ndGg7IGkrKykgewoJCQkgICAgaWYgKCEkKCdkZWJ1ZycpKSB7CgkJ +CSAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBqc29uID8gbm9kZXNbaV0g +OiBub2Rlc1tpXS5maXJzdENoaWxkLmRhdGE7CgkJCSAgICB9IGVsc2UgewoJCQkg +ICAgICAgIHRtLmxvZygncmVkaXJlY3Q6ICcsIGpzb24gPyBub2Rlc1tpXSA6IG5v +ZGVzW2ldLmZpcnN0Q2hpbGQuZGF0YSk7CgkJCSAgICB9CgkJCX0KCQl9LAoJCQoJ +CSdodG1sJzogZnVuY3Rpb24obm9kZXMpIHsKCQkJZm9yICh2YXIgaT0wOyBpPG5v +ZGVzLmxlbmd0aDsgaSsrKSB7CgkJCQlpZiAobm9kZXNbaV0uZ2V0QXR0cmlidXRl +KCdmb3InKSkgewoJCQkJCXZhciBlbGVtZW50ID0gJChub2Rlc1tpXS5nZXRBdHRy +aWJ1dGUoJ2ZvcicpKTsKCQkJCQlpZiAoZWxlbWVudCkgewoJCQkJCQllbGVtZW50 +LmlubmVySFRNTCA9IG5vZGVzW2ldLmZpcnN0Q2hpbGQuZGF0YTsKCQkJCQl9CgkJ +CQl9CgkJCX0JCQkKCQl9LAoJCQoJCSdyZW1vdmUnOiBmdW5jdGlvbihub2Rlcykg +ewoJCQlmb3IgKHZhciBpPTA7IGk8bm9kZXMubGVuZ3RoOyBpKyspIHsKCQkJCWlm +IChub2Rlc1tpXS5nZXRBdHRyaWJ1dGUoJ2VsZW1lbnQnKSkgewoJCQkJCXZhciBl +bGVtZW50ID0gJChub2Rlc1tpXS5nZXRBdHRyaWJ1dGUoJ2VsZW1lbnQnKSk7CgkJ +CQkJaWYgKGVsZW1lbnQpIHsKCQkJCQkJZWxlbWVudC5wYXJlbnROb2RlLnJlbW92 +ZUNoaWxkKGVsZW1lbnQpOwoJCQkJCX0KCQkJCX0KCQkJfQkJCgkJfSwKCgkJJ3No +b3cnOiBmdW5jdGlvbihub2RlcykgewoJCQlmb3IgKHZhciBpPTA7IGk8bm9kZXMu +bGVuZ3RoOyBpKyspIHsKCQkJCWlmIChub2Rlc1tpXS5nZXRBdHRyaWJ1dGUoJ2Vs +ZW1lbnQnKSkgewoJCQkJCXZhciBlbGVtZW50ID0gJChub2Rlc1tpXS5nZXRBdHRy +aWJ1dGUoJ2VsZW1lbnQnKSk7CgkJCQkJaWYgKGVsZW1lbnQpIHsKCQkJCQkJZWxl +bWVudC5yZW1vdmVDbGFzcygnaGlkZGVuJyk7CgkJCQkJfQoJCQkJfQoJCQl9CQkK +CQl9LAoJCQkJCgkJJ2hpZGUnOiBmdW5jdGlvbihub2RlcykgewoJCQlmb3IgKHZh +ciBpPTA7IGk8bm9kZXMubGVuZ3RoOyBpKyspIHsKCQkJCWlmIChub2Rlc1tpXS5n +ZXRBdHRyaWJ1dGUoJ2VsZW1lbnQnKSkgewoJCQkJCXZhciBlbGVtZW50ID0gJChu +b2Rlc1tpXS5nZXRBdHRyaWJ1dGUoJ2VsZW1lbnQnKSk7CgkJCQkJaWYgKGVsZW1l +bnQpIHsKCQkJCQkJZWxlbWVudC5hZGRDbGFzcygnaGlkZGVuJyk7CgkJCQkJfQoJ +CQkJfQoJCQl9CQkKCQl9LAoJCQoJCQoJCQoJCSdzZXR2YWx1ZSc6IGZ1bmN0aW9u +KG5vZGVzKSB7CgkJCWZvciAodmFyIGk9MDsgaTxub2Rlcy5sZW5ndGg7IGkrKykg +ewoJCQkJaWYgKG5vZGVzW2ldLmdldEF0dHJpYnV0ZSgnZWxlbWVudCcpKSB7CgkJ +CQkJdmFyIGVsZW1lbnQgPSAkKG5vZGVzW2ldLmdldEF0dHJpYnV0ZSgnZWxlbWVu +dCcpKTsKCQkJCQlpZiAoZWxlbWVudCkgewoJCQkJCQllbGVtZW50LnNldCgidmFs +dWUiLCBub2Rlc1tpXS5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpOwoJCQkJCX0KCQkJ +CX0KCQkJfQkJCgkJfSwKCgkJJ2FsZXJ0JzogZnVuY3Rpb24obm9kZXMpIHsKCQkJ +Zm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykgewoJCQkJZnV0 +dV9hbGVydChGQVQucHJvZmlsZV9oZWFkZXIsIG5vZGVzW2ldLmZpcnN0Q2hpbGQu +ZGF0YSwgZmFsc2UsICdtZXNzYWdlJyk7CgkJCX0KCQl9CgoJfTsKfTsKCnRtLkhh +bmRsZXIucHJvdG90eXBlID0gewoJCQoJLyoqCgkgKiDQoNCw0YHRiNC40YDQtdC9 +0LjQtSDRgdC/0LjRgdC60LAg0L7QsdGA0LDQsdC+0YLRh9C40LrQvtCyCgkgKiBA +cGFyYW0ge09iamVjdH0gb2JqZWN0CgkgKi8KCWV4dGVuZDogZnVuY3Rpb24ob2Jq +ZWN0KSB7CgkJJGV4dGVuZCh0aGlzLmhhbmRsZXJzLCBvYmplY3QpOwoJfSwKCgkv +KioKCSAqIAoJICogQHBhcmFtIHtFbGVtZW50fSB4bWxPYmplY3QKCSAqIEBwYXJh +bSB7T2JqZWN0fSB0aGlzT2JqZWN0CgkgKi8KCXByb2Nlc3M6IGZ1bmN0aW9uKHJl +c3BvbnNlLCB0aGlzT2JqZWN0KSB7CgkgICAgdmFyIGpzb24gPSAhcmVzcG9uc2Uu +Y2hpbGROb2RlczsKCgkgICAgaWYgKGpzb24pIHsKICAgIAkJZm9yICh2YXIgdGFn +IGluIHRoaXMuaGFuZGxlcnMpIHsKICAgIAkJICAgIGlmIChyZXNwb25zZVt0YWdd +KSB7CiAgICAJCSAgICAgICAgdGhpcy5oYW5kbGVyc1t0YWddLmNhbGwoCiAgICAJ +CSAgICAgICAgICAgIHRoaXNPYmplY3QsCgkJICAgICAgICAgICAgICAgIHJlc3Bv +bnNlW3RhZ10uZm9yRWFjaCA/CgkJICAgICAgICAgICAgICAgICAgICByZXNwb25z +ZVt0YWddIDoKCQkgICAgICAgICAgICAgICAgICAgIFtyZXNwb25zZVt0YWddXSwK +CQkgICAgICAgICAgICAgICAgcmVzcG9uc2UsCgkJICAgICAgICAgICAgICAgIHRy +dWUKICAgIAkJICAgICAgICApOwogICAgCQkgICAgfQogICAgCQl9CgkgICAgfSBl +bHNlIHsKICAgICAgICAgICAgZm9yICh2YXIgdGFnIGluIHRoaXMuaGFuZGxlcnMp +IHsKICAgIAkJCXZhciBub2RlcyA9IHJlc3BvbnNlLmdldEVsZW1lbnRzQnlUYWdO +YW1lKHRhZyk7CiAgICAJCQlpZiAobm9kZXMubGVuZ3RoID4gMCkgewogICAgCQkJ +CXRoaXMuaGFuZGxlcnNbdGFnXS5jYWxsKHRoaXNPYmplY3QsIG5vZGVzLCByZXNw +b25zZSk7CiAgICAJCQl9CiAgICAJCX0KCSAgICB9Cgl9CgkKfTsKCnRtLkFqYXgg +PSAodHlwZW9mKHRtLkFqYXgpICE9ICd1bmRlZmluZWQnKSA/IHRtLkFqYXggOiB7 +fTsKdG0uQWpheC5RdWljayA9IHsKCWdldDogZnVuY3Rpb24odXJsLCBkYXRhICxv +cHRpb25zKSB7CgkJdmFyIG9wcyA9IHsKCQkJJ2hhbmRsZXInOiBuZXcgdG0uSGFu +ZGxlcigpLAoJCQknZmFpbHR1cmUnOiBmdW5jdGlvbigpewoJCQkJZnV0dV9hbGVy +dChGQVQucHJvZmlsZV9oZWFkZXIsICfQntGI0LjQsdC60LAg0L/QtdGA0LXQtNCw +0YfQuCDQtNCw0L3QvdGL0YUnLCBmYWxzZSwgJ21lc3NhZ2UnKTsKCQkJfSwKCQkJ +J3RoaXNPYmplY3QnOiB0aGlzLAoJCQknYWZ0ZXInOiBudWxsLAoJCQknYmVmb3Jl +JzogbnVsbAoJCX07CgkJb3B0aW9ucyAmJiAkZXh0ZW5kKG9wcywgb3B0aW9ucyk7 +CgkJdmFyIHJlcXVlc3QgPSBuZXcgUmVxdWVzdCh7CgkJCSdtZXRob2QnOiAnZ2V0 +JywKCQkJJ3VybCc6IHVybCwKCQkJJ29uQ29tcGxldGUnOiAoZnVuY3Rpb24ocmVz +cG9uc2VUZXh0LCByZXNwb25zZVhtbCl7CgkJCQlvcHMuYmVmb3JlICYmIG9wcy5i +ZWZvcmUoKTsKCQkJCW9wcy5oYW5kbGVyLnByb2Nlc3MocmVzcG9uc2VYbWwsIG9w +cy50aGlzT2JqZWN0KTsKCQkJCW9wcy5hZnRlciAmJiBvcHMuYWZ0ZXIoKTsKCQkJ +fSkuYmluZCh0aGlzKSwKCQkJJ29uRmFpbHVyZSc6IGZ1bmN0aW9uKCl7CgkJCQlv +cHMuZmFpbHR1cmUgJiYgb3BzLmZhaWx0dXJlKCk7CgkJCX0KCQl9KS5zZW5kKCk7 +Cgl9LAoJCglwb3N0OiBmdW5jdGlvbih1cmwsIGRhdGEsIG9wdGlvbnMpIHsKCQl2 +YXIgb3BzID0gewoJCQknaGFuZGxlcic6IG5ldyB0bS5IYW5kbGVyKCksCgkJCSdm +YWlsdHVyZSc6IGZ1bmN0aW9uKCl7CgkJCQlmdXR1X2FsZXJ0KEZBVC5wcm9maWxl +X2hlYWRlciwgJ9Ce0YjQuNCx0LrQsCDQv9C10YDQtdC00LDRh9C4INC00LDQvdC9 +0YvRhScsIGZhbHNlLCAnbWVzc2FnZScpOwoJCQl9LAoJCQkndGhpc09iamVjdCc6 +IHRoaXMsCgkJCSdhZnRlcic6IG51bGwsCgkJCSdiZWZvcmUnOiBudWxsCgkJfTsK +CQlvcHRpb25zICYmICRleHRlbmQob3BzLCBvcHRpb25zKTsKCQl2YXIgcmVxdWVz +dCA9IG5ldyBSZXF1ZXN0KHsKCQkJJ21ldGhvZCc6ICdwb3N0JywKCQkJJ3VybCc6 +IHVybCwKCQkJJ2RhdGEnOiBkYXRhLAoJCQknb25Db21wbGV0ZSc6IChmdW5jdGlv +bihyZXNwb25zZVRleHQsIHJlc3BvbnNlWG1sKXsKCQkJCW9wcy5iZWZvcmUgJiYg +b3BzLmJlZm9yZSgpOwoJCQkJb3BzLmhhbmRsZXIucHJvY2VzcyhyZXNwb25zZVht +bCwgb3BzLnRoaXNPYmplY3QpOwoJCQkJb3BzLmFmdGVyICYmIG9wcy5hZnRlcigp +OwoJCQl9KS5iaW5kKHRoaXMpLAoJCQknb25GYWlsdXJlJzogZnVuY3Rpb24oKXsK +CQkJCW9wcy5mYWlsdHVyZSAmJiBvcHMuZmFpbHR1cmUoKTsKCQkJfQoJCX0pLnNl +bmQoKTsKCX0KfTs= + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline; filename=control.js +Content-Type: application/x-javascript; charset=utf-8; name=control.js +Content-Location: http://habrahabr.ru/js/1307631427/tm/controls/control.js +Content-Transfer-Encoding: Base64 + +dmFyIHRtID0gKHR5cGVvZih0bSkgIT0gJ3VuZGVmaW5lZCcpID8gdG0gOiB7fTsK +dG0uQ29udHJvbHMgPSAodHlwZW9mKHRtLkNvbnRyb2xzKSAhPSAndW5kZWZpbmVk +JykgPyB0bS5Db250cm9scyA6IHt9OwoKdG0uQ29udHJvbHMuYXR0YWNoRWxlbWVu +dHMgPSBmdW5jdGlvbihwYXJlbnQpIHsKCSQocGFyZW50KS5nZXRFbGVtZW50cygn +KicpLmZvckVhY2goCgkJZnVuY3Rpb24gKGZpZWxkKSB7CgkJICAgIGlmIChmaWVs +ZCAmJiAhdG0uYmFkVGFncy5jb250YWlucyhmaWVsZC50YWdOYW1lKSAmJiAoICgo +ZmllbGQuY2xhc3NOYW1lLmluZGV4T2YoInRtLWNvbnRyb2wiKSAhPSAtMSkgJiYg +ZmllbGQuZ2V0QXR0cmlidXRlKCdyZXYnKSkgfHwgZmllbGQuZ2V0QXR0cmlidXRl +KCdjb250cm9sJykgKSkgewoJCQkJdmFyIGNuYW1lID0gZmllbGQuZ2V0QXR0cmli +dXRlKCdyZXYnKTsKCQkJCWlmICghY25hbWUpIHsKCQkJCQljbmFtZSA9IGZpZWxk +LmdldEF0dHJpYnV0ZSgnY29udHJvbCcpOwoJCQkJfQoJCQkJaWYgKHRtLkNvbnRy +b2xzW2NuYW1lXSkgewoJCQkJCXZhciBjbCA9IHRtLkNvbnRyb2xzW2NuYW1lXTsK +CQkJCQl2YXIgY29udHJvbCA9IG5ldyBjbChmaWVsZCk7CgkJCQl9IGVsc2UgewoJ +CQkJCXRtLkNvbnRyb2xzLmxvYWQoY25hbWUsIGZ1bmN0aW9uKCl7CgkJCQkJCWlm +IChhcmd1bWVudHMuY2FsbGVlLmRvbmUpIHJldHVybjsKCQkJCQkJdmFyIGNsID0g +dG0uQ29udHJvbHNbY25hbWVdOwoJCQkJCQl2YXIgY29udHJvbCA9IG5ldyBjbChm +aWVsZCk7CgkJCQkJCWFyZ3VtZW50cy5jYWxsZWUuZG9uZSA9IHRydWU7CgkJCQkJ +fSk7CgkJCQl9CgkJCX07Cgl9LCB0aGlzKTsKfQoKdG0uQ29udHJvbHMuX3dhaXRp +bmdGb3JMb2FkID0ge307Cgp0bS5Db250cm9scy5sb2FkID0gZnVuY3Rpb24obmFt +ZSwgY29tcGxldGUpIHsKCXZhciBzaXRlYmFzZSA9ICIiCglpZiAodGVtcC5iYXNl +X3Nob3J0KSB7c2l0ZWJhc2UgPSAiaHR0cDovLyIgKyB0ZW1wLmJhc2Vfc2hvcnR9 +CglpZiAodG0uQ29udHJvbHNbbmFtZV0pIHsKCQljb21wbGV0ZSgpOwoJfSBlbHNl +IHsKCQlpZiAodG0uQ29udHJvbHMuX3dhaXRpbmdGb3JMb2FkW25hbWVdKSB7CgkJ +CXRtLkNvbnRyb2xzLl93YWl0aW5nRm9yTG9hZFtuYW1lXS5wdXNoKGNvbXBsZXRl +KTsKCQkJCgkJfSBlbHNlIHsKCQkJdG0uQ29udHJvbHMuX3dhaXRpbmdGb3JMb2Fk +W25hbWVdID0gW2NvbXBsZXRlXTsKCQkJdmFyIHVybCA9IHNpdGViYXNlICsgJy9q +cy90bS9jb250cm9scy8nICsgbmFtZSArICcuanMnOwoJCQl2YXIgbXlTY3JpcHQg +PSBuZXcgQXNzZXQuamF2YXNjcmlwdCh1cmwsIHsKCQkJCW9ubG9hZDogKGZ1bmN0 +aW9uKCl7CgkJCQkJZm9yICh2YXIgaT0wO2k8dG0uQ29udHJvbHMuX3dhaXRpbmdG +b3JMb2FkW25hbWVdLmxlbmd0aDtpKyspIHsKCQkJCQkJdG0uQ29udHJvbHMuX3dh +aXRpbmdGb3JMb2FkW25hbWVdW2ldKCk7CgkJCQkJfQoJCQkJfSkKCQkJfSk7CgkJ +fQoJfQp9OwoKdG0uQ29udHJvbHMuYmFzZSA9IENsYXNzKHsKCQoJaW5pdGlhbGl6 +ZTogZnVuY3Rpb24oZWxlbWVudCwgb3B0aW9ucykgewoJCSRleHRlbmQodGhpcywg +b3B0aW9ucyk7CgkJdGhpcy5fZWxlbWVudCA9ICQoZWxlbWVudCk7Cgl9LAoJCgln +ZXRGb3JtOiBmdW5jdGlvbigpIHsKCQl2YXIgZm9ybVRhZyA9IHRoaXMuX2VsZW1l +bnQuZ2V0UGFyZW50KCdmb3JtJyk7CgkJcmV0dXJuIGZvcm1UYWcgJiYgZm9ybVRh +Zy5hdHRhY2hlZDsKCX0KCQp9KTsKCgp0bS5pbml0LmFkZChmdW5jdGlvbigpewoK +CXRtLkNvbnRyb2xzLmF0dGFjaEVsZW1lbnRzKGRvY3VtZW50KTsKCn0pOwo= + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline; filename=favourites_add.js +Content-Type: application/x-javascript; charset=utf-8; name=favourites_add.js +Content-Location: http://habrahabr.ru/js/1307631427/tm/forms/favourites_add.js +Content-Transfer-Encoding: Base64 + +dG09dG18fHt9Owp0bS5Gb3Jtcz10bS5Gb3Jtc3x8e307Cgp0bS5Gb3Jtcy5mYXZv +dXJpdGVzX2FkZCA9IGZ1bmN0aW9uICgpIHsKCXRoaXMuX2hhbmRsZXIuZXh0ZW5k +KHsKCQknbWVzc2FnZSc6IGZ1bmN0aW9uKG5vZGVzKSB7CgkJCWlmICh0ZW1wLmZh +dm91cml0ZXNfYWRkLmNvbnRhaW5lcikgewoJCQkJdmFyIGZhdiA9IHRlbXAuZmF2 +b3VyaXRlc19hZGQuY29udGFpbmVyLmdldEVsZW1lbnQoJ2Rpdi5qcy10b19mYXZz +X2hvbGRlcicpOwoJCQkJZmF2ICYmIGZhdi5yZW1vdmVDbGFzcygndG8tZmF2cycp +LmFkZENsYXNzKCdmYXZfYWRkZWQnKTsKCQkJCXRlbXAuZmF2b3VyaXRlc19hZGQu +c2V0VGFncyh0ZW1wLmZhdm91cml0ZXNfYWRkLnRhZ3MudmFsdWUpOwoJCQl9OwoJ +CQl0ZW1wLmZhdm91cml0ZXNfYWRkLmhpZGUoKTsKCQl9Cgl9KTsKfTs= + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline; filename=button.js +Content-Type: application/x-javascript; charset=utf-8; name=button.js +Content-Location: http://habrahabr.ru/js/1307631427/tm/controls/button.js +Content-Transfer-Encoding: Base64 + +dG0uQ29udHJvbHMuYnV0dG9uID0gbmV3IENsYXNzKHsKCUV4dGVuZHM6IHRtLkNv +bnRyb2xzLmJhc2UsCglpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50KSB7CgkJ +dGhpcy5fZWxlbWVudCA9ICQoZWxlbWVudCk7CgkJLyoKCQkgKiB1cmwKCQkgKiBk +ZWYKCQkgKi8KCQl2YXIgbz17fTsKCQkKCQlpZiAoZWxlbWVudC5nZXQoInJlbCIp +KSB7CgkJCXRoaXMuX3BhcmFtcyA9IGV2YWwoJ289JyArIGVsZW1lbnQuZ2V0KCJy +ZWwiKSk7CgkJCQoJCX0KCQl0aGlzLl9lbGVtZW50LmFkZEV2ZW50KCdjbGljaycs +IHRoaXMuY2xpY2suYmluZCh0aGlzKSk7CgkJdGhpcy5faGFuZGxlciA9IG5ldyB0 +bS5IYW5kbGVyKCk7CgkJCgkJaWYgKHRoaXMuX3BhcmFtcy5kZWYucXVpY2tfdm90 +ZSkgewoJCQl0aGlzLl9oYW5kbGVyLmV4dGVuZCh7CgkJCQkic2NvcmUiOiBmdW5j +dGlvbihub2Rlcyl7CgkJCQkJdmFyIG5ld1VzZXJzY29yZSwgbWludXNNYXJrID0g +IiI7CgkJCQkJZm9yICh2YXIgaT0wOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHsK +CQkJCQkJaWYgKG5vZGVzW2ldLnRhZ05hbWUgPT0gInNjb3JlIil7CgkJCQkJCQlu +ZXdVc2Vyc2NvcmUgPSBub2Rlc1tpXS5maXJzdENoaWxkLmRhdGE7CgkJCQkJCQl2 +YXIgcGFyc2VkTmV3VXNlcnNjb3JlID0gbmV3VXNlcnNjb3JlICsgIiI7Ly9jb252 +ZXJ0cyBOb2RlTGlzdCB0byBzdHJpbmcKCQkJCQkJCWlmIChwYXJzZWROZXdVc2Vy +c2NvcmUuY2hhckF0KDApID09ICLigJMiKSB7IG1pbnVzTWFyayA9ICIgY2xhc3M9 +J21pbnVzJyJ9OwoJCQkJCQl9CgkJCQkJfTsKCQkJCQllbGVtZW50LnBhcmVudE5v +ZGUuc2V0KCJodG1sIiwiPHNwYW4iK21pbnVzTWFyaysiPiIrIG5ld1VzZXJzY29y +ZSArIjwvc3Bhbj4iKTsKCQkJCX0sCgkJCQkiZXJyb3IiOiBmdW5jdGlvbihub2Rl +cyl7CgkJCQkJdmFyIGVycm9ydGV4dCA9ICIiOwoJCQkJCWZvciAodmFyIGk9MDsg +aSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7CgkJCQkJCWlmIChub2Rlc1tpXS50YWdO +YW1lID09ICJlcnJvciIpewoJCQkJCQkJZXJyb3J0ZXh0ICs9IG5vZGVzW2ldLmZp +cnN0Q2hpbGQuZGF0YSArICI8YnIvPiI7CgkJCQkJCX0KCQkJCQl9OwoJCQkJCWZ1 +dHVfYWxlcnQoItCe0Lkt0L7QuS3QvtC5INGBINC60L7Qu9Cx0LDRgdC+0LkhIiwg +ZXJyb3J0ZXh0LCBmYWxzZSwgJ2Vycm9yJyk7CgkJCQl9CgkJCX0pCgkJfQoJfSwK +CWNsaWNrOiBmdW5jdGlvbihlKSB7CgkJZS5zdG9wKCk7CgkJdmFyIHVybCA9IHRo +aXMuX3BhcmFtcy51cmw7CgkJdmFyIHBhcmFtcyA9ICRtZXJnZSh0aGlzLl9wYXJh +bXMuZGVmKTsKCQl2YXIgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHsKCQkJJ21ldGhv +ZCc6ICdwb3N0JywKCQkJJ3VybCc6IHVybCwKCQkJJ2RhdGEnOiBwYXJhbXMsCgkJ +CSdvbkNvbXBsZXRlJzogKGZ1bmN0aW9uKHJlc3BvbnNlVGV4dCwgcmVzcG9uc2VY +bWwpewoJCQkJdGhpcy5faGFuZGxlci5wcm9jZXNzKHJlc3BvbnNlWG1sLCB0aGlz +KTsKCQkJfSkuYmluZCh0aGlzKQoJCX0pLnNlbmQoKTsKCX0KfSk7 + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline; filename=form.js +Content-Type: application/x-javascript; charset=utf-8; name=form.js +Content-Location: http://habrahabr.ru/js/1307631427/tm/form.js +Content-Transfer-Encoding: Base64 + +dmFyIHRtID0gKHR5cGVvZih0bSkgIT0gJ3VuZGVmaW5lZCcpID8gdG0gOiB7fTsK +CnRtLkZvcm1zID0gKHR5cGVvZih0bS5Gb3JtcykgIT0gJ3VuZGVmaW5lZCcpID8g +dG0uRm9ybXMgOiB7fTsKCnRtLkZvcm1zLl93YWl0aW5nRm9yTG9hZCA9IHt9OwoK +dG0uRm9ybXMubG9hZCA9IGZ1bmN0aW9uKG5hbWUsIGNvbXBsZXRlKSB7CglpZiAo +dG0uRm9ybXNbbmFtZV0pIHsKCQljb21wbGV0ZSgpOwoJfSBlbHNlIHsKCQlpZiAo +dG0uRm9ybXMuX3dhaXRpbmdGb3JMb2FkW25hbWVdKSB7CgkJCXRtLkZvcm1zLl93 +YWl0aW5nRm9yTG9hZFtuYW1lXS5wdXNoKGNvbXBsZXRlKTsKCQl9IGVsc2UgewoJ +CQl0bS5Gb3Jtcy5fd2FpdGluZ0ZvckxvYWRbbmFtZV0gPSBbY29tcGxldGVdOwoJ +CQl2YXIgdXJsID0gJy9qcy90bS9mb3Jtcy8nICsgbmFtZSArICcuanMnOwoJCQl2 +YXIgbXlTY3JpcHQgPSBuZXcgQXNzZXQuamF2YXNjcmlwdCh1cmwsIHsKCQkJCW9u +bG9hZDogKGZ1bmN0aW9uKCl7CgkJCQkJZm9yICh2YXIgaT0wO2k8dG0uRm9ybXMu +X3dhaXRpbmdGb3JMb2FkW25hbWVdLmxlbmd0aDtpKyspCgkJCQkJCXRtLkZvcm1z +Ll93YWl0aW5nRm9yTG9hZFtuYW1lXVtpXSgpOwoJCQkJfSkKCQkJfSk7CgkJfQoJ +fQp9OwoKLyoqCiAqINCa0LvQsNGB0YEg0LDQstGC0L7QvNCw0YLQuNC30LDRhtC4 +0LggQWpheCDQtNC70Y8g0YTQvtGA0LwKICogQGF1dGhvciBtZGV2aWxzCiAqLwp0 +bS5Gb3JtID0gQ2xhc3MoewoJCglhZGRFdmVudDogZnVuY3Rpb24obmFtZSwgY2Fs +bGJhY2spIHsKCQl0aGlzLl9mb3JtLmFkZEV2ZW50KG5hbWUsIGNhbGxiYWNrKTsK +CX0sCgkKCWZpcmVFdmVudDogZnVuY3Rpb24obmFtZSkgewoJCXRoaXMuX2Zvcm0u +ZmlyZUV2ZW50KG5hbWUpOwoJfSwKCQoJc3VibWl0Q2FuY2VsZWQ6IGZhbHNlLAoJ +Cglpbml0aWFsaXplOiBmdW5jdGlvbihmb3JtKSB7CgkJdmFyIHNlbGYgPSB0aGlz +OwoJCQoJCXRoaXMuX2Zvcm0gPSAkKGZvcm0pOwoJCXRoaXMuX2Zvcm0uYXR0YWNo +ZWQgPSB0aGlzOwoJCXRoaXMuX3ZhbGlkYXRvciA9IG5ldyB0bS5WYWxpZGF0b3Io +KTsKCQkKCQl0aGlzLnJlc2V0VmFsaWRhdGlvbigpOwoKCQl0aGlzLmFqYXggPSBm +YWxzZTsKCQlpZiAodGhpcy5fZm9ybS5oYXNDbGFzcygnYWpheCcpKSB7CgkJCXRo +aXMuZW5hYmxlQWpheCgpOwoJCX0KCQkKCQl0aGlzLmNhcHRjaGEgPSBmYWxzZTsK +CQlpZiAodGhpcy5fZm9ybS5oYXNDbGFzcygnY2FwdGNoYScpKSB7CgkJCXRoaXMu +Y2FwdGNoYSA9IHRydWU7CgkJfQoJCQoJCWlmICh0aGlzLl9mb3JtLmhhc0NsYXNz +KCdpZnJhbWUtYWpheCcpKSB7CgkJICAgIHRoaXMuaWZyYW1lQWpheCA9IHRydWU7 +CgkJfQoJCQoJCXZhciBvblN1Ym1pdEZ1bmN0aW9uID0gZnVuY3Rpb24oZXZlbnQp +ewogICAgCQlpZiAoJChldmVudC50YXJnZXQpLmhhc0NsYXNzKCdsb2FkaW5nJykp +IHsKICAgIAkJCWV2ZW50LnN0b3AoKTsKICAgIAkJCXJldHVybiBmYWxzZTsKICAg +IAkJfQogICAgCQl2YXIgbyA9IG51bGw7CiAgICAJCWlmIChzZWxmLnN1Ym1pdChl +dmVudC50YXJnZXQubmFtZSwgZXZlbnQudGFyZ2V0LmdldCgicmVsIikgJiYgKGV2 +YWwoJ289JyArIGV2ZW50LnRhcmdldC5nZXQoInJlbCIpKSkpKQogICAgCQkJZXZl +bnQuc3RvcCgpOwogICAgCX0KCQkKCQlmb3IgKHZhciBpPTA7IGk8Zm9ybS5lbGVt +ZW50cy5sZW5ndGg7IGkrKykgewoJCQlpZiAodGhpcy5fZm9ybS5lbGVtZW50c1tp +XS50eXBlID09ICdzdWJtaXQnKSB7CgkJCQkkKHRoaXMuX2Zvcm0uZWxlbWVudHNb +aV0pLmFkZEV2ZW50KCdjbGljaycsIG9uU3VibWl0RnVuY3Rpb24pOwoJCQl9CgkJ +fQoJCQoJCWZvcm0uYWRkRXZlbnQoJ3N1Ym1pdCcsIG9uU3VibWl0RnVuY3Rpb24p +OwoJCQoJCQoJCXZhciBleHRlbmRlciA9IHRoaXMuX2Zvcm0uZ2V0RWxlbWVudCgi +YS5mb3JtLWV4dGVuZGVyIiksIAoJCWV4dHM7CgkJCgkJaWYgKGV4dGVuZGVyKSB7 +CgkJCWV4dHMgPSAkKGV4dGVuZGVyKS5nZXRBdHRyaWJ1dGUoInJldiIpOwoJCX07 +CgkJIAoJCWlmICghZXh0cykgeyBleHRzID0gdGhpcy5fZm9ybS5nZXRBdHRyaWJ1 +dGUoImV4dGVuZCIpO30KCQlpZiAoZXh0cykgewoJCQl2YXIgZXh0ZW5kaW5ncyA9 +IGV4dHMuc3BsaXQoJywnKTsKCQkJZm9yICh2YXIgaT0wO2k8ZXh0ZW5kaW5ncy5s +ZW5ndGg7aSsrKSB7CgkJCQl2YXIgZXhuYW1lID0gZXh0ZW5kaW5nc1tpXTsKCQkJ +CWlmICh0bS5Gb3Jtc1tleG5hbWVdKSB7CgkJCQkJdG0uRm9ybXNbZXhuYW1lXS5j +YWxsKHRoaXMpOwoJCQkJfSBlbHNlIHsKCQkJCQkoZnVuY3Rpb24obm0pewoJCQkJ +CQl0bS5Gb3Jtcy5sb2FkKG5tLCAoZnVuY3Rpb24oKXsKCQkJCQkJCWlmICh0bS5G +b3Jtc1tubV0pCgkJCQkJCQkJdG0uRm9ybXNbbm1dLmNhbGwodGhpcyk7CgkJCQkJ +CX0pLmJpbmQodGhpcykpOwoJCQkJCX0pLmJpbmQodGhpcykoZXhuYW1lKTsKCQkJ +CX0KCQkJfQoJCX0KCX0sCgoJcmVzZXRWYWxpZGF0aW9uOiBmdW5jdGlvbigpIHsK +CQl0aGlzLl92YWxpZGF0b3IuY2xlYXIoKTsKCQl0aGlzLl92YWxpZGF0b3IuYWRk +RWxlbWVudHModGhpcy5fZm9ybSk7CgkJdGhpcy5fZm9ybS5nZXRFbGVtZW50cygn +Lm5vLXZhbGlkYXRlJykuZm9yRWFjaCgoZnVuY3Rpb24oaXRlbSl7CgkJCXRoaXMu +X3ZhbGlkYXRvci5yZW1vdmVFbGVtZW50cyhpdGVtKTsKCQl9KS5iaW5kKHRoaXMp +KTsKCX0sCgoJZXJyb3JEZXNjcmlwdGlvbnM6IHsKCQkncmVxdWlyZWQnOiAn0KHQ +u9C10LTRg9C10YIg0LfQsNC/0L7Qu9C90LjRgtGMINC/0L7Qu9C1JywKCQknbWlu +bGVuJzogJ9Ci0LXQutGB0YIg0YHQu9C40YjQutC+0Lwg0LrQvtGA0L7RgtC60LjQ +uScsCgkJJ21heGxlbic6ICfQotC10LrRgdGCINGB0LvQuNGI0LrQvtC8INC00LvQ +uNC90L3Ri9C5JywKCQknbG9naW4nOiAn0J3QtdCy0LXRgNC90L4g0YPQutCw0LfQ +sNC9INC70L7Qs9C40L0nLAoJCSdlbWFpbCc6ICfQndC10LLQtdGA0L3QviDRg9C6 +0LDQt9Cw0L0g0LDQtNGA0LXRgSDRjdC70LXQutGC0YDQvtC90L3QvtC5INC/0L7R +h9GC0YsnLAoJCSdoYWJyYWN1dG1lJyA6ICfQmNGB0L/QvtC70YzQt9GD0LnRgtC1 +INGF0LDQsdGA0LDQutCw0YIsINGH0YLQviDQsdGLINGB0LrRgNGL0YLRjCDQsdC+ +0LvRjNGI0L7QuSDRgtC10LrRgdGCINC30LAg0YHRgdGL0LvQutC+0LkgwqvRh9C4 +0YLQsNGC0Ywg0LTQsNC70YzRiNC1wrsnLAoJCSdyYWRpb1JlcXVpcmVkJzogJ9Ch +0LvQtdC00YPQtdGCINC30LDQv9C+0LvQvdC40YLRjCDQv9C+0LvQtScKCX0sCgkK +CS8qKgoJICog0JLQsNC70LjQtNCw0YbQuNGPINCy0YHQtdC5INGE0L7RgNC80Ysg +0Lgg0LLRi9Cy0L7QtCDQvtGI0LjQsdC+0Log0YDRj9C00L7QvCDRgSDQv9C+0LvR +j9C80LgKCSAqLwoJdmFsaWRhdGU6IGZ1bmN0aW9uKCkgewoJCQoJCXZhciBpbnZh +bGlkRmllbGRzID0gdGhpcy5fZm9ybS5nZXRFbGVtZW50cygnLmludmFsaWQnKS5m +b3JFYWNoKGZ1bmN0aW9uKGRsKXsKCQkJZGwucmVtb3ZlQ2xhc3MoJ2ludmFsaWQn +KTsKCQl9KTsKCQl0aGlzLnNob3dVbmtub3duRXJyb3IoJycpOwoJCQoJCXZhciBl +cnJvcnMgPSB0aGlzLl92YWxpZGF0b3IudmFsaWRhdGUoKTsKCQkKCQkvLyBDQVBU +Q0hBCgkJaWYodGhpcy5jYXB0Y2hhICYmICQoJ2NhcHRjaGFfd3JhcHBlcicpLmhh +c0NsYXNzKCdoaWRkZW4nKSAmJiBlcnJvcnMubGVuZ3RoID4gMCl7CgkJICBmb3Ig +KHZhciBpPTA7IGk8ZXJyb3JzLmxlbmd0aDsgaSsrKSB7CgkJICAgIC8vYWxlcnQo +J2ExOiAnK2Vycm9yc1tpXS5lbGVtZW50Lm5hbWUpOwoJCSAgICBpZihlcnJvcnNb +aV0uZWxlbWVudC5uYW1lID09ICdjYXB0Y2hhJyl7CgkJICAgICAgZXJyb3JzLnNw +bGljZShpLDEpOyAKCQkgICAgfQoJCSAgfQoJCX0KCQkJICAJICAgIAoJCQoJCQoJ +CWlmIChlcnJvcnMubGVuZ3RoID4gMCkgewoJCQlmb3IgKHZhciBpPTA7IGk8ZXJy +b3JzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgLy9hbGVydCgnYTI6ICcrZXJyb3Jz +W2ldLmVsZW1lbnQubmFtZSk7CgkJCQl2YXIgZmllbGRIb2xkZXIgPSAkKGVycm9y +c1tpXS5lbGVtZW50KS5nZXRQYXJlbnQoJ2RsJyk7CgkJCQl2YXIgZXJyb3JGaWVs +ZEhvbGRlciA9IGZpZWxkSG9sZGVyLmdldEVsZW1lbnQoJy5lcnJvcicpOwoJCQkJ +dmFyIGVycm9yRmllbGQgPSBlcnJvckZpZWxkSG9sZGVyLmdldEVsZW1lbnQoJ3Nw +YW4nKTsKCQkJCXZhciBlcnJvckxpc3QgPSBlcnJvckZpZWxkSG9sZGVyLmdldEVs +ZW1lbnQoJ3VsJyk7CgkJCQkKCQkJCXZhciBlcnJvclRleHQgPSB0aGlzLmVycm9y +RGVzY3JpcHRpb25zW2Vycm9yc1tpXS5lcnJvclR5cGVdOwoJCQkJCgkJCQlpZiAo +ZXJyb3JMaXN0KSB7CgkJCQkJdmFyIGVycm9yTGkgPSBlcnJvckxpc3QuZ2V0RWxl +bWVudCgnLicgKyBlcnJvcnNbaV0uZXJyb3JUeXBlKTsKCQkJCQlpZiAoZXJyb3JM +aSkgewoJCQkJCQllcnJvclRleHQgPSBlcnJvckxpLmdldCgnaHRtbCcpOwoJCQkJ +CX0KCQkJCX0KCQkJCQoJCQkJdGhpcy5zaG93RXJyb3IoZXJyb3JzW2ldLmVsZW1l +bnQsIGVycm9yVGV4dCk7CgoJCQl9CgkJCXJldHVybiBmYWxzZTsKCQl9IGVsc2Ug +ewoJCQlyZXR1cm4gdHJ1ZTsKCQl9CgkJCgl9LAoJCgkvKioKCSAqINCf0L7QutCw +0Lcg0YHQvtC+0LHRidC10L3QuNGPINC+0LEg0L7RiNC40LHQutC1CgkgKiBAcGFy +YW0ge0VsZW1lbnR9IGVsZW1lbnQKCSAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0Cgkg +Ki8KCXNob3dFcnJvcjogZnVuY3Rpb24oZWxlbWVudCwgdGV4dCkgewoKCQl2YXIg +ZmllbGRIb2xkZXIgPSAkKGVsZW1lbnQpLmdldFBhcmVudCgnZGwnKTsKCQlpZiAo +IWZpZWxkSG9sZGVyKSB7IHRoaXMuc2hvd1Vua25vd25FcnJvcih0ZXh0KTsgcmV0 +dXJuOyB9CgkJdmFyIGVycm9yRmllbGRIb2xkZXIgPSBmaWVsZEhvbGRlci5nZXRF +bGVtZW50KCcuZXJyb3InKTsKCQlpZiAoIWVycm9yRmllbGRIb2xkZXIpIHsgdGhp +cy5zaG93VW5rbm93bkVycm9yKHRleHQpOyByZXR1cm47IH0KCQl2YXIgZXJyb3JG +aWVsZCA9IGVycm9yRmllbGRIb2xkZXIuZ2V0RWxlbWVudCgnc3BhbicpOwoJCWlm +ICghZXJyb3JGaWVsZCkgeyB0aGlzLnNob3dVbmtub3duRXJyb3IodGV4dCk7IHJl +dHVybjsgfQoJCWVycm9yRmllbGQuc2V0KCdodG1sJywgdGV4dCk7CgkJZmllbGRI +b2xkZXIuYWRkQ2xhc3MoJ2ludmFsaWQnKTsKCgl9LAoJCgkvKioKCSAqINCf0L7Q +utCw0Lcg0L3QtdC40LfQstC10YHRgtC90L7QuSDQvtGI0LjQsdC60LgKCSAqIEBw +YXJhbSB7T2JqZWN0fSB0ZXh0CgkgKi8KCXNob3dVbmtub3duRXJyb3I6IGZ1bmN0 +aW9uKHRleHQpIHsKCQkKCQl2YXIgZWxlbWVudCA9IHRoaXMuX2Zvcm0uZ2V0RWxl +bWVudCgnLnVua25vd24tZXJyb3InKTsKCQlpZiAoZWxlbWVudCkgewoJCQllbGVt +ZW50LmlubmVySFRNTCA9IHRleHQ7CgkJfQoJCQoJfSwKCgkvKioKCSAqINCY0L3Q +uNGG0LjQsNGG0LjRjyDQstCw0LvQuNC00LDRhtC40Lgg0Lgg0L7RgtC/0YDQsNCy +0LrQuCDRhNC+0YDQvNGLCgkgKiBAcGFyYW0ge1N0cmluZ30gYWN0aW9uCgkgKi8K +CXN1Ym1pdDogZnVuY3Rpb24oYWN0aW9uLCBwYXJhbXMpIHsKCQlwYXJhbXMgJiYg +cGFyYW1zLnJlc2V0VmFsaWRhdGlvbiAmJiB0aGlzLnJlc2V0VmFsaWRhdGlvbigp +OwoJCQoJCWlmKGFjdGlvbikgewoJCSAgICB2YXIgaW5wdXQgPSB0aGlzLl9mb3Jt +LmdldEVsZW1lbnQoJ2lucHV0W25hbWU9YWN0aW9uXScpOwoJCSAgICBpZiAoaW5w +dXQpIHsKCQkgICAgICAgIGlucHV0LnZhbHVlID0gYWN0aW9uOwoJCSAgICB9CgkJ +fQoJCQoJCWlmICh0aGlzLnZhbGlkYXRlKCkpCgkJCWlmICh0aGlzLmFqYXgpIHsK +CQkJCXRoaXMuc3VibWl0Q2FuY2VsZWQgPSBmYWxzZTsKCQkJCXRoaXMuZmlyZUV2 +ZW50KCJ0bTpiZWZvcmUtc2VuZCIpOwoJCQkJaWYgKCF0aGlzLnN1Ym1pdENhbmNl +bGVkKSB7CgkJCQkJdGhpcy5zZW5kQWpheChhY3Rpb24sIHBhcmFtcyk7CgkJCQkJ +dGhpcy5maXJlRXZlbnQoInRtOmFmdGVyLXNlbmQiKTsKCQkJCX0gZWxzZQoJCQkJ +CXJldHVybiBmYWxzZTsKCQkJfQoJCQllbHNlIAoJCQkJcmV0dXJuIGZhbHNlOwoJ +CXJldHVybiB0cnVlOwoJfSwKCQoJc2V0TG9hZGluZzogZnVuY3Rpb24obCkgewoJ +CWlmIChsKSB7CgkJCXRoaXMuZmlyZUV2ZW50KCdmb3JtOmRpc2FibGVkJyk7CgkJ +CWZvciAodmFyIGk9MDtpPHRoaXMuX2Zvcm0uZWxlbWVudHMubGVuZ3RoO2krKykg +ewoJCQkJaWYgKHRoaXMuX2Zvcm0uZWxlbWVudHNbaV0udHlwZSA9PSAnc3VibWl0 +JykgewoJCQkJCSQodGhpcy5fZm9ybS5lbGVtZW50c1tpXSkuYWRkQ2xhc3MoJ2xv +YWRpbmcnKTsKCQkJCQkkKHRoaXMuX2Zvcm0uZWxlbWVudHNbaV0pLmRpc2FibGVk +ID0gdHJ1ZTsKCQkJCX0KCQkJfQoJCX0gZWxzZSB7CgkJCXRoaXMuZmlyZUV2ZW50 +KCdmb3JtOmVuYWJsZWQnKTsKCQkJZm9yICh2YXIgaT0wO2k8dGhpcy5fZm9ybS5l +bGVtZW50cy5sZW5ndGg7aSsrKSB7CgkJCQlpZiAodGhpcy5fZm9ybS5lbGVtZW50 +c1tpXS50eXBlID09ICdzdWJtaXQnKSB7CgkJCQkJJCh0aGlzLl9mb3JtLmVsZW1l +bnRzW2ldKS5yZW1vdmVDbGFzcygnbG9hZGluZycpOwoJCQkJCSQodGhpcy5fZm9y +bS5lbGVtZW50c1tpXSkuZGlzYWJsZWQgPSBmYWxzZTsKCQkJCX0KCQkJfQoJCX0K +CX0sCgkKCS8qKgoJICog0J7RgtC/0YDQsNCy0LrQuCDRhNC+0YDQvNGLINGH0LXR +gNC10LcgQWpheAoJICogQHBhcmFtIHtTdHJpbmd9IGFjdGlvbgoJICovCglzZW5k +QWpheDogZnVuY3Rpb24oYWN0aW9uLCBwYXJhbXMpIHsJCgkJdGhpcy5zZXRMb2Fk +aW5nKHRydWUpOwoKCQl2YXIgc2VsZiA9IHRoaXMsCgkJICAgIG9uU3VjY2VzcyA9 +IGZ1bmN0aW9uIChyZXNwb25zZVRleHQsIHJlc3BvbnNlWE1MKSB7CgkJICAgIHNl +bGYuX2hhbmRsZXIucHJvY2VzcyhyZXNwb25zZVhNTHx8cmVzcG9uc2VUZXh0LCBz +ZWxmKTsKCQl9LAoJCSAgICBvbkNvbXBsZXRlID0gZnVuY3Rpb24gKCkgewoJCSAg +ICBzZWxmLnNldExvYWRpbmcoZmFsc2UpOwoJCX0KCQkKCQlpZiAodGhpcy5pZnJh +bWVBamF4KSB7CgkJICAgIHRtLnNlbmRGb3JtVmlhSWZyYW1lKHsKCQkgICAgICAg +ICdmb3JtJzogdGhpcy5fZm9ybSwKCQkgICAgICAgICdvblN1Y2Nlc3MnOiBvblN1 +Y2Nlc3MsCgkJICAgICAgICAnb25Db21wbGV0ZSc6IG9uQ29tcGxldGUKCQkgICAg +fSk7CgkJfSBlbHNlIHsKCQkgICAgdmFyIGV4dGVuZERhdGEgPSB7fTsKICAgIAkJ +ZXh0ZW5kRGF0YVthY3Rpb25dID0gJ3RydWUnOwogICAgCQl2YXIgZGF0YSA9IHRo +aXMudG9PYmplY3QoZXh0ZW5kRGF0YSk7CgogICAgCQlpZiAodGhpcy5fZm9ybS5n +ZXRBdHRyaWJ1dGVOb2RlKSB7CiAgICAJCQl2YXIgeHVybCA9IHRoaXMuX2Zvcm0u +Z2V0QXR0cmlidXRlTm9kZSgnYWN0aW9uJykudmFsdWU7CiAgICAJCX0gZWxzZSB7 +CiAgICAJCQl2YXIgeHVybCA9IHRoaXMuX2Zvcm0uZ2V0KCdhY3Rpb24nKTsgCiAg +ICAJCX0KCiAgICAJCXBhcmFtcyAmJiBwYXJhbXMudXJsICYmICh4dXJsID0gcGFy +YW1zLnVybCk7CgogICAgCQl2YXIgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHsKICAg +IAkJCSdtZXRob2QnOiAncG9zdCcsCiAgICAJCQkndXJsJzogeHVybCwKICAgIAkJ +CSdkYXRhJzogZGF0YSwKICAgIAkJCSdvblN1Y2Nlc3MnOiBvblN1Y2Nlc3MsCiAg +ICAJCQknb25Db21wbGV0ZSc6IG9uQ29tcGxldGUKICAgIAkJfSkuc2VuZCgpOwoJ +CX0KCX0sCgkKCS8qKgoJICog0JfQsNC/0LjRgdGMINC00LDQvdC90YvRhSDRhNC+ +0YDQvNGLINCyINC+0LHRitC10LrRggoJICogQHBhcmFtIHtPYmplY3R9IGV4dGVu +ZAoJICovCgl0b09iamVjdDogZnVuY3Rpb24oZXh0ZW5kKSB7CgkJdmFyIHJlc3Vs +dCA9IHt9OwoKCQl2YXIgZWxlbWVudHMgPSB0aGlzLl9mb3JtLmVsZW1lbnRzOwoJ +CWZvciAodmFyIGk9MCwgbGVuZ3RoPWVsZW1lbnRzLmxlbmd0aDsgaTxsZW5ndGg7 +IGkrKykgewoJCQkKCQkJdmFyIGVsZW1lbnQgPSAkKGVsZW1lbnRzW2ldKTsKCQkJ +CgkJCWlmIChlbGVtZW50LmdldFBhcmVudCgnLm5vLXNlbmQnKSkgY29udGludWU7 +CgoJCQl2YXIgdHlwZSAgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgndHlwZScpOwoJ +CQl2YXIgcGFyYW0gPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnbmFtZScpOwoJCQl2 +YXIgdmFsdWUgPSBlbGVtZW50LnZhbHVlOwoJCQkKCQkJaWYgKHBhcmFtKSB7CgkJ +CQoJCQkJaWYgKHR5cGUgPT0gJ3JhZGlvJyAmJiAhZWxlbWVudC5jaGVja2VkKSB7 +CgkJCQkJY29udGludWU7CgkJCQl9CgkJCQkKCQkJCWlmICh0eXBlID09ICdjaGVj +a2JveCcpIHsKCQkJCQlpZiAoIWVsZW1lbnQuY2hlY2tlZCkgCgkJCQkJCWNvbnRp +bnVlOwoJCQkJCWVsc2UgewoJCQkJCQlyZXN1bHRbcGFyYW1dID0gdmFsdWU9PSdv +bicgfHwgIXZhbHVlID8gJ3RydWUnIDogdmFsdWU7CgkJCQkJCWNvbnRpbnVlOwoJ +CQkJCX0KCQkJCX0KCQkJCQoJCQkJaWYgKHR5cGUgPT0gJ3N1Ym1pdCcgfHwgdHlw +ZSA9PSAncmVzZXQnKSB7CgkJCQkJY29udGludWU7CgkJCQl9CgkJCQkKCQkJCXJl +c3VsdFtwYXJhbV0gPSB2YWx1ZTsKCQkJfQoJCX0KCgkJaWYgKGV4dGVuZCkKCQkJ +JGV4dGVuZChyZXN1bHQsIGV4dGVuZCk7CgoJCXJldHVybiByZXN1bHQ7CgoJfSwK +CQoJLyoqCgkgKiDQktC60LvRjtGH0LDQtdGCINC/0L7QtNC00LXRgNC20LrRgyBB +amF4INC00LvRjyDRhNC+0YDQvNGLCgkgKi8KCWVuYWJsZUFqYXg6IGZ1bmN0aW9u +KCkgewoJCQoJCWlmICghdGhpcy5faGFuZGxlcikgewoJCQl0aGlzLl9oYW5kbGVy +ID0gbmV3IHRtLkhhbmRsZXIoKTsKCQkJdGhpcy5faGFuZGxlci5leHRlbmQoewoJ +CQkJJ2Vycm9yJzogZnVuY3Rpb24obm9kZXMsIGpzb24pIHsKCQkJCQkKCQkJCQlm +b3IgKHZhciBpPTA7IGk8bm9kZXMubGVuZ3RoOyBpKyspIHsKCQkJCQkJdmFyIG5v +ZGUgPSBub2Rlc1tpXTsKCQkJCQkJaWYgKG5vZGUuZ2V0QXR0cmlidXRlKCJmaWVs +ZCIpKSB7CgkJCQkJCQlmb3IgKHZhciBlPTA7IGU8dGhpcy5fZm9ybS5lbGVtZW50 +cy5sZW5ndGg7IGUrKykgewoJCQkJCQkJCXZhciBpdGVtID0gdGhpcy5fZm9ybS5l +bGVtZW50c1tlXTsKCQkJCQkJCQlpZiAoJChpdGVtKS5nZXQoIm5hbWUiKSA9PSBu +b2RlLmdldEF0dHJpYnV0ZSgiZmllbGQiKSkgewoJCQkJCQkJCQl0aGlzLnNob3dF +cnJvcihpdGVtLCBub2RlLmZpcnN0Q2hpbGQuZGF0YSk7CQkJCQkJCQkJCgkJCQkJ +CQkJfQoJCQkJCQkJfQoJCQkJCQl9IGVsc2UgewoJCQkJCQkJaWYgKHRoaXMuX2Zv +cm0uZ2V0RWxlbWVudCgnLnVua25vd24tZXJyb3InKSkgewoJCQkJCQkJCXRoaXMu +c2hvd1Vua25vd25FcnJvcihub2RlLmZpcnN0Q2hpbGQuZGF0YSk7CgkJCQkJCQl9 +IGVsc2UgewoJCQkJCQkJCWZ1dHVfYWxlcnQoRkFULnZvdGluZ3NfaGVhZGVyLCBu +b2RlLmZpcnN0Q2hpbGQuZGF0YSwgdHJ1ZSwgJ2Vycm9yJyk7CgkJCQkJCQl9CgkJ +CQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0pOwoJCX0KCQkKCQl0aGlzLmFqYXggPSB0 +cnVlOwoJCQoJfSwKCgkvKioKCSAqINCS0YvQutC70Y7Rh9Cw0LXRgiDQv9C+0LTQ +tNC10YDQttC60YMgQWpheCDQtNC70Y8g0YTQvtGA0LzRiwoJICovCglkaXNhYmxl +QWpheDogZnVuY3Rpb24oKSB7CgoJCXRoaXMuYWpheCA9IGZhbHNlOwoKCX0KCn0p +OwoKLyoqCiAqINCf0YDQuNGB0L7QtdC00LjQvdC10L3QuNC1INC90LDRiNC10Lkg +0YTQvtGA0LzRiyDQutC+INCy0YHQtdC8INC90YPQttC90YvQvCDRhNC+0YDQvNCw +0LwKICog0LIg0LTQvtC60YPQvNC10L3RgtC1LgogKi8KdG0uRm9ybS5hdHRhY2gg +PSBmdW5jdGlvbigpIHsKCQoJZm9yICh2YXIgaT0wOyBpPGRvY3VtZW50LmZvcm1z +Lmxlbmd0aDsgaSsrKSB7CgkJdmFyIGZvcm0gPSAkKGRvY3VtZW50LmZvcm1zW2ld +KTsKCQlpZiAoIWZvcm0uYXR0YWNoZWQpIHsKCQkJaWYgKGZvcm0uaGFzQ2xhc3Mo +InRtLWZvcm0iKSkgewoJCQkJdmFyIHRtRm9ybSA9IG5ldyB0bS5Gb3JtKGRvY3Vt +ZW50LmZvcm1zW2ldKTsKCQkJCS8vIC4uLgoJCQl9CgkJfQoJfQoKfTsKCnRtLmlu +aXQuYWRkKGZ1bmN0aW9uKCl7CgkKCXRtLkZvcm0uYXR0YWNoKCk7CgkKfSk7 + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline; filename=autosuggest.js +Content-Type: application/x-javascript; charset=utf-8; name=autosuggest.js +Content-Location: http://habrahabr.ru/js/1307631427/autosuggest.js +Content-Transfer-Encoding: Base64 + +dmFyIGF1dG9zdWdnZXN0Q2xhc3MgPSBmdW5jdGlvbihmaWVsZCwgc3VibWl0VHlw +ZSwgaXNNdWx0aXBseVN1Z2dlc3Rpb25zT24sIHN5bWJvbCkgew0KDQoJZmllbGQu +c2V0QXR0cmlidXRlKCdhdXRvY29tcGxldGUnLCAnb2ZmJyk7DQoJDQoJaWYoaXNN +dWx0aXBseVN1Z2dlc3Rpb25zT24gJiYgIXN5bWJvbCkgew0KCQl0aGlzLmlzTXVs +dGlwbHlTdWdnZXN0aW9uc09uID0gaXNNdWx0aXBseVN1Z2dlc3Rpb25zT247DQoJ +CXRoaXMuc3ltYm9sID0gWycsJ107DQoJfQ0KCWVsc2UgaWYgKCFpc011bHRpcGx5 +U3VnZ2VzdGlvbnNPbikgewkNCgkJdGhpcy5pc011bHRpcGx5U3VnZ2VzdGlvbnNP +biA9IGZhbHNlOw0KCQl0aGlzLnN5bWJvbCA9ICcnOw0KCX0NCgllbHNlIGlmKGlz +TXVsdGlwbHlTdWdnZXN0aW9uc09uICYmIHN5bWJvbCkgew0KCQl0aGlzLmlzTXVs +dGlwbHlTdWdnZXN0aW9uc09uID0gdHJ1ZTsNCgkJdGhpcy5zeW1ib2wgPSBzeW1i +b2w7DQoJfQ0KCWlmKCFzdWJtaXRUeXBlKSB7DQoJCXZhciBzdWJtaXRUeXBlID0g +J3NlYXJjaCc7DQoJfQ0KCQ0KCXZhciBfdGhpcyA9IHRoaXM7DQoJdGhpcy5wb3Np +dGlvbiA9IDA7DQoJdGhpcy5jdXJyVmFsdWVzID0gW107DQoJDQoJdGhpcy5sYXN0 +VmFsdWUgPSAnJzsNCgl0aGlzLm5ld1ZhbHVlID0gJyc7DQoJDQoJdGhpcy5wYXJh +bXMgPSB7fTsNCgkNCgl0aGlzLmFqYXhVcmwgPSAnL2FqYXgvc3VnZ2VzdC8nOw0K +CQ0KCS8vINCY0YHQv9C+0LvRjNC30YPQtdC80YvQtSDQsiDRhNC+0YDQvNC1IGNs +YXNzTmFtZXMNCgl0aGlzLmNsYXNzTmFtZXMgPSB7DQoJCWhvbGRlciA6ICdqcy1h +dXRvc3VnZ2VzdC1ob2xkZXInLCAJLy/RgNC+0LTQuNGC0LXQu9GMINC/0L7Qu9GP +INCy0LLQvtC00LAg0Lgg0L/QvtC70Y8g0LLRi9Cy0L7QtNCwINGA0LXQt9GD0LvR +jNGC0LDRgtC+0LIg0L/QvtC40YHQutCwDQoJCWZpZWxkIDogJ2pzLWF1dG9zdWdn +ZXN0LWZpZWxkJywgCS8v0L/QvtC70LUg0LLQstC+0LTQsA0KCQlvdXRwdXQgOiAn +anMtYXV0b3N1Z2dlc3Qtb3V0cHV0JywJLy/RgNC+0LTQuNGC0LXQu9GMINC/0L7Q +u9C10Lkg0LLRi9Cy0L7QtNCwINGA0LXRg9C30LvRjNGC0LDRgtC+0LINCgkJaXNM +b2FkaW5nIDogJ2pzLWF1dG9zdWdnZXN0LWxvYWRpbmcnCS8v0L/RgNC10LvQvtCw +0LTQtdGADQoJfTsNCgkNCgkvLyDQmNC80LXQvdCwIHhtbCDQvdC+0LTQvtCyINC4 +INGB0L7QvtGC0LLQtdGB0YLQstGD0Y7RidC40LUg0LjQvCDQuNC80LXQvdCwINGE +0YPQvdC60YbQuNC5LdC+0LHRgNCw0LHQvtGC0YfQuNC60L7Qsg0KCXRoaXMueG1s +UmVzcG9uc2UgPSB7DQoJCW5vZGF0YTogew0KCQkJbm9kZTogJ25vZGF0YScsDQoJ +CQloYW5kbGVyOiBudWxsDQoJCX0sDQoNCgkJZXJyb3I6IHsNCgkJCW5vZGU6ICdl +cnJvcicsDQoJCQloYW5kbGVyOiAneG1sUmVzcG9uc2VIYW5kbGVyX2Vycm9yJw0K +CQl9LA0KDQoJCWl0ZW06IHsNCgkJCW5vZGU6ICdpdGVtJywNCgkJCWhhbmRsZXI6 +ICd4bWxSZXNwb25zZUhhbmRsZXJfb3V0cHV0Jw0KCQl9DQoJfTsNCgkNCgkNCgkv +LyDQktGL0LLQvtC00LjQvNGL0LkgaHRtbCANCgl0aGlzLmh0bWxSZXNwb25zZSA9 +IHsNCgkJaXRlbTogJ2RpdicsDQoJCXZhbHVlOiAnZW0nDQoJfTsNCgkNCglpZiAo +aXNPcGVyYSB8fCB3aW5kb3cud2Via2l0KSB7DQoJCWZpZWxkLm9ua2V5cHJlc3Mg +PSBmdW5jdGlvbihldikgew0KCQkJdmFyIHRhcmcgPSBudWxsOw0KCQkJaWYgKGV2 +LnRhcmdldCkgdGFyZyA9IGV2LnRhcmdldDsNCgkJCWVsc2UgaWYgKGV2LnNyY0Vs +ZW1lbnQpIHRhcmcgPSBldi5zcmNFbGVtZW50Ow0KCQkJaWYgKHRhcmcubm9kZVR5 +cGUgPT0gMykgLy8gZGVmZWF0IFNhZmFyaSBidWcNCgkJCQl0YXJnID0gdGFyZy5w +YXJlbnROb2RlOw0KCQkJc2V0VGltZW91dChmdW5jdGlvbigpeyBfdGhpcy5vbkNo +YW5nZSh0YXJnLCBzdWJtaXRUeXBlKTsgfSwgMzApOw0KCQl9DQoJfQ0KCQ0KCWZp +ZWxkLm9ua2V5ZG93biA9IGZ1bmN0aW9uKGV2KXsNCgkJZXYgPSBldiB8fCB3aW5k +b3cuZXZlbnQ7DQoJCWlmIChfdGhpcy5pc0FjdGlvbktleShldikpIHsNCgkJCV90 +aGlzLm9uS2V5VXAoZXYpOw0KCQl9DQoJfTsNCgkNCglmaWVsZC5vbmtleXVwID0g +ZnVuY3Rpb24oZXYpew0KCQlldiA9IGV2IHx8IHdpbmRvdy5ldmVudDsNCgkJaWYg +KF90aGlzLmlzQWN0aW9uS2V5KGV2KSkgcmV0dXJuOw0KCQlpZiAoIWlzT3BlcmEg +JiYgIXdpbmRvdy53ZWJraXQpIHsNCgkJCXZhciB0YXJnID0gbnVsbDsNCgkJCWlm +IChldi50YXJnZXQpIHRhcmcgPSBldi50YXJnZXQ7DQoJCQllbHNlIGlmIChldi5z +cmNFbGVtZW50KSB0YXJnID0gZXYuc3JjRWxlbWVudDsNCgkJCWlmICh0YXJnLm5v +ZGVUeXBlID09IDMpIC8vIGRlZmVhdCBTYWZhcmkgYnVnDQoJCQkJdGFyZyA9IHRh +cmcucGFyZW50Tm9kZTsNCgkJCXNldFRpbWVvdXQoZnVuY3Rpb24oKXsgX3RoaXMu +b25DaGFuZ2UodGFyZywgc3VibWl0VHlwZSk7IH0sIDMwKTsNCgkJfQ0KCX07DQoJ +DQp9Ow0KDQovLyDQn9C10YDQtdCy0L7QtNC40LwgeG1sINC00LXRgNC10LLQviDQ +siDQvtCx0YrQtdC60YINCmF1dG9zdWdnZXN0Q2xhc3MucHJvdG90eXBlLnBhcnNl +WE1MID0gZnVuY3Rpb24oeG1sT2JqKXsNCgkJdmFyIHhtbE5vZGVzID0ge307DQoN +CgkJZm9yIChwcm9wIGluIHRoaXMueG1sUmVzcG9uc2Upew0KCQkJeG1sTm9kZXNb +cHJvcF0gPSB4bWxPYmouZ2V0RWxlbWVudHNCeVRhZ05hbWUodGhpcy54bWxSZXNw +b25zZVtwcm9wXS5ub2RlKTsNCgkJfQ0KCQlyZXR1cm4geG1sTm9kZXM7DQp9Ow0K +DQphdXRvc3VnZ2VzdENsYXNzLnByb3RvdHlwZS5vbktleVVwID0gZnVuY3Rpb24o +ZXYpIHsNCglldiA9IGV2IHx8IHdpbmRvdy5ldmVudDsNCglyZXR1cm4gdGhpcy5h +Y3Rpb24oZXYpOw0KfTsNCg0KYXV0b3N1Z2dlc3RDbGFzcy5wcm90b3R5cGUub25D +aGFuZ2UgPSBmdW5jdGlvbihmaWVsZCwgc3VibWl0VHlwZSkgew0KCWlmICghZmll +bGQuZmFrZUNoYW5nZSkgew0KCQl0aGlzLnByb2Nlc3NRdW90ZXMoZmllbGQpOw0K +CQl0aGlzLnJlcXVlc3RTdWdnZXN0cyhmaWVsZCwgc3VibWl0VHlwZSk7DQoJfQ0K +CQ0KfTsNCg0KYXV0b3N1Z2dlc3RDbGFzcy5wcm90b3R5cGUuaXNBY3Rpb25LZXkg +PSBmdW5jdGlvbihldikgew0KCXN3aXRjaCAoZ2V0Q2hhckNvZGUoZXYpKSB7DQoJ +CWNhc2UgMTM6IC8vIEVudGVyDQoJCWNhc2UgMjc6IC8vIEVzY2FwZQ0KCQljYXNl +IDQwOiAvLyBEb3duDQoJCWNhc2UgMzg6IC8vIFVwDQoJCQlyZXR1cm4gdHJ1ZTsN +CgkJYnJlYWs7DQoJfQ0KfQ0KDQphdXRvc3VnZ2VzdENsYXNzLnByb3RvdHlwZS5h +Y3Rpb24gPSBmdW5jdGlvbihldikgew0KCXN3aXRjaCAoZ2V0Q2hhckNvZGUoZXYp +KSB7DQoJCWNhc2UgMTM6CS8v0LXRgdC70Lgg0L3QsNC20LDRgtCwINC60LvQsNCy +0LjRiNCwIEVudGVyDQoJCQlpZih0eXBlb2YodGhpcy5vdXRwdXQpICE9ICd1bmRl +ZmluZWQnICYmICEkKHRoaXMub3V0cHV0KS5oYXNDbGFzcygnaGlkZGVuJykpIHsg +Ly8gZml4ZWQgIzExMTcNCgkJCQlpZiAodGhpcy5zZXRWYWx1ZSgpKSB7DQoJCQkJ +CWlmICghZG9jdW1lbnQuYWxsKQ0KCQkJCQkJZXYucHJldmVudERlZmF1bHQoKTsN +CgkJCQkJZWxzZQ0KCQkJCQkJZXYucmV0dXJuVmFsdWUgPSBmYWxzZTsNCgkJCQl9 +DQoJCQl9DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJCWJyZWFrOw0KCQljYXNlIDI3OiAv +LyBFc2NhcGUNCgkJCWlmICghJCh0aGlzLm91dHB1dCkuaGFzQ2xhc3MoJ2hpZGRl +bicpKSB7DQoJCQkJJCh0aGlzLm91dHB1dCkuYWRkQ2xhc3MoJ2hpZGRlbicpOw0K +CQkJfQ0KCQkJcmV0dXJuIHRydWU7DQoJCQlicmVhazsNCgkJY2FzZSA0MDoJLy/Q +tdGB0LvQuCDQvdCw0LbQsNGC0LAg0LrQu9Cw0LLQuNGI0LAgItCS0L3QuNC3Ig0K +CQkJdGhpcy5tYWtlU3RlcHMoJ2Rvd24nKTsNCgkJCXJldHVybiB0cnVlOw0KCQli +cmVhazsNCgkJY2FzZSAzODoJLy/QtdGB0LvQuCDQvdCw0LbQsNGC0LAg0LrQu9Cw +0LLQuNGI0LAgItCS0LLQtdGA0YUiDQoJCQl0aGlzLm1ha2VTdGVwcygndXAnKTsN +CgkJCXJldHVybiB0cnVlOw0KCQlicmVhazsNCgl9DQoJcmV0dXJuIGZhbHNlOw0K +fQ0KDQphdXRvc3VnZ2VzdENsYXNzLnByb3RvdHlwZS5wcm9jZXNzUXVvdGVzID0g +ZnVuY3Rpb24oZmllbGQpIHsNCgl0aGlzLmlzUXVvdGVPcGVuZWQgPSBmYWxzZTsN +Cgl0aGlzLmlzUXVvdGVDbG9zZWRQcmV2aW91c2x5ID0gZmFsc2U7DQoJdGhpcy5u +b0luZGV4ZWRTdHJpbmcgPScnOw0KCWlmKGZpZWxkLnZhbHVlLmluZGV4T2YoJyIn +KSAhPSAtMSkgew0KCQl2YXIgcXVvdGVzUmVzdWx0cyA9IGZpZWxkLnZhbHVlLm1h +dGNoKC8iL2cpOw0KCX0NCglpZihxdW90ZXNSZXN1bHRzICYmIHF1b3Rlc1Jlc3Vs +dHMubGVuZ3RoJTI9PTApIHsNCgkJdGhpcy5pc1F1b3RlT3BlbmVkID0gZmFsc2U7 +DQoJCWlmKGZpZWxkLnZhbHVlLm1hdGNoKC8iJHwiXG58IlxyXG4vKSkgew0KCQkJ +dGhpcy5pc1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9IHRydWU7DQoJCX0NCgkJZWxz +ZSB7DQoJCQl0aGlzLmlzUXVvdGVDbG9zZWRQcmV2aW91c2x5ID0gZmFsc2U7DQoJ +CX0NCgl9DQoJZWxzZSBpZiAocXVvdGVzUmVzdWx0cyAmJiBxdW90ZXNSZXN1bHRz +Lmxlbmd0aCUyIT0wKSB7IHRoaXMuaXNRdW90ZU9wZW5lZCA9IHRydWU7IH0NCgkN +CglpZiAodGhpcy5pc011bHRpcGx5U3VnZ2VzdGlvbnNPbiA9PSB0cnVlKSB7IC8v +0LXRgdC70Lgg0LLQutC70Y7Rh9C10L3QsCDQvtC/0YbQuNGPINC80L3QvtC20LXR +gdGC0LLQtdC90L3Ri9GFINC/0L7QtNGB0LrQsNC30L7QuiANCgkJaWYodGhpcy5p +c1F1b3RlT3BlbmVkID09IHRydWUgfHwgdGhpcy5pc1F1b3RlQ2xvc2VkUHJldmlv +dXNseSA9PSB0cnVlKSB7IC8v0LXRgdC70Lgg0L7RgtC60YDRi9GC0LAg0LrQsNCy +0YvRh9C60LANCgkJCXZhciB3b3Jkc19xdW90ZXMgPSBmaWVsZC52YWx1ZS5zcGxp +dCgnIicpOw0KCQkJdGhpcy5pc1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9PSB0cnVl +PyB0aGlzLm5ld1ZhbHVlID0gd29yZHNfcXVvdGVzW3dvcmRzX3F1b3Rlcy5sZW5n +dGgtMl0gOiB0aGlzLm5ld1ZhbHVlID0gd29yZHNfcXVvdGVzW3dvcmRzX3F1b3Rl +cy5sZW5ndGgtMV0NCgkJCXRoaXMubmV3VmFsdWUgPSB0aGlzLm5ld1ZhbHVlLnJl +cGxhY2UoLyheXHMrKXwoXG4pL2csICcnKTsNCgkJCXZhciB3b3JkcyA9IGZpZWxk +LnZhbHVlLnNwbGl0KHRoaXMuc3ltYm9sKTsNCgkJCXZhciB3b3Jkc19sZW5ndGg9 +d29yZHMubGVuZ3RoLTE7DQoJCQlmb3IodmFyIGs9MDsgazx3b3Jkc19sZW5ndGg7 +IGsrKykgew0KCQkJCWlmKGs9PTApIHsNCgkJCQkJdGhpcy5ub0luZGV4ZWRTdHJp +bmcgKz0gd29yZHNba107DQoJCQkJfQ0KCQkJCWVsc2Ugew0KCQkJCQl0aGlzLm5v +SW5kZXhlZFN0cmluZyArPSB0aGlzLnN5bWJvbCArIHdvcmRzW2tdOw0KCQkJCX0N +CgkJCX0NCgkJfSBlbHNlIHsNCgkJCXZhciB3b3JkcyA9IGZpZWxkLnZhbHVlLnNw +bGl0KHRoaXMuc3ltYm9sKTsNCgkJCXRoaXMubmV3VmFsdWUgPSB3b3Jkc1t3b3Jk +cy5sZW5ndGgtMV0ucmVwbGFjZSgvKF5ccyspfChcbikvZywgJycpOw0KCQkJdmFy +IHdvcmRzX2xlbmd0aD13b3Jkcy5sZW5ndGgtMTsNCgkJCWZvcih2YXIgaz0wOyBr +PHdvcmRzX2xlbmd0aDsgaysrKSB7DQoJCQkJaWYoaz09MCkgew0KCQkJCQl0aGlz +Lm5vSW5kZXhlZFN0cmluZyArPSB3b3Jkc1trXTsNCgkJCQl9DQoJCQkJZWxzZSB7 +DQoJCQkJCXRoaXMubm9JbmRleGVkU3RyaW5nICs9IHRoaXMuc3ltYm9sICsgd29y +ZHNba107DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KCWVsc2Ugew0KCQlpZih0aGlz +LmlzUXVvdGVPcGVuZWQgPT0gdHJ1ZSkgew0KCQkJdmFyIHdvcmRzX3F1b3RlcyA9 +IGZpZWxkLnZhbHVlLnNwbGl0KCciJyk7DQoJCQl0aGlzLm5ld1ZhbHVlID0gd29y +ZHNfcXVvdGVzW3dvcmRzX3F1b3Rlcy5sZW5ndGgtMV0ucmVwbGFjZSgvKF5ccysp +fChcbikvZywgJycpOw0KCQl9DQoJCWVsc2Ugew0KCQkJdGhpcy5uZXdWYWx1ZSA9 +IGZpZWxkLnZhbHVlOw0KCQl9DQoJfQ0KfQ0KDQphdXRvc3VnZ2VzdENsYXNzLnBy +b3RvdHlwZS5yZXF1ZXN0U3VnZ2VzdHMgPSBmdW5jdGlvbihmaWVsZCwgc3VibWl0 +VHlwZSkgew0KCQkJdGhpcy5ob2xkZXIgPSB0aGlzLmhvbGRlciB8fCAkKGZpZWxk +KS5nZXRQYXJlbnQoJy4nICsgdGhpcy5jbGFzc05hbWVzLmhvbGRlcik7DQoJCQl0 +aGlzLm91dHB1dCA9IHRoaXMub3V0cHV0IHx8ICQodGhpcy5ob2xkZXIpLmdldEVs +ZW1lbnQoJy4nICsgdGhpcy5jbGFzc05hbWVzLm91dHB1dCk7DQoJCQlpZiAodGhp +cy5uZXdWYWx1ZSA9PSAnJykgew0KCQkJCSQodGhpcy5vdXRwdXQpLmFkZENsYXNz +KCdoaWRkZW4nKTsNCgkJCQl0aGlzLm91dHB1dC5pbm5lckhUTUwgPScnOw0KCQkJ +CXRoaXMubGFzdFZhbHVlID0gdGhpcy5uZXdWYWx1ZTsNCgkJCQlyZXR1cm4gZmFs +c2U7DQoJCQl9DQoJCQllbHNlIHsNCgkJCQkkKHRoaXMub3V0cHV0KS5yZW1vdmVD +bGFzcygnaGlkZGVuJyk7DQoJCQl9DQoJCQlpZiAoJCh0aGlzLmhvbGRlcikuaGFz +Q2xhc3ModGhpcy5jbGFzc05hbWVzLmlzTG9hZGluZykgfHwgdGhpcy5sYXN0VmFs +dWUgPT0gdGhpcy5uZXdWYWx1ZSkgew0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0N +CgkJCXZhciBkYXRhID0gJ2xldHRlcnM9JyArIHRoaXMubmV3VmFsdWUgKyAnJnR5 +cGU9JyArIHN1Ym1pdFR5cGU7DQoJCQl0aGlzLnBhcmFtcyA9IHsNCgkJCQlob2xk +ZXIgOiB0aGlzLmhvbGRlciwNCgkJCQlmaWVsZCA6IGZpZWxkLA0KCQkJCXN0cmlu +ZyA6IHRoaXMubmV3VmFsdWUsDQoJCQkJb3V0cHV0IDogdGhpcy5vdXRwdXQsDQoJ +CQkJbm9JbmRleGVkU3RyaW5nIDogdGhpcy5ub0luZGV4ZWRTdHJpbmcNCgkJCX07 +DQoJCQlhamF4TG9hZFBvc3QodGhpcy5hamF4VXJsLCBkYXRhLCB0aGlzLnNlbmRE +YXRhT25sb2FkLCB0aGlzLCB0aGlzLnBhcmFtcyk7DQoJCQkkKHRoaXMuaG9sZGVy +KS5hZGRDbGFzcyh0aGlzLmNsYXNzTmFtZXMuaXNMb2FkaW5nKTsNCgkJCXRoaXMu +bGFzdFZhbHVlID0gdGhpcy5uZXdWYWx1ZTsNCn0NCg0KLy8g0KfRgtC10L3QuNC1 +INC+0YLQstC10YLQsCDRgdC10YDQstC10YDQsCDQvdCwINC/0LXRgNC10YHRi9C7 +0LrRgyAg0LLRgdC10YUg0LTQsNC90L3Ri9GFINGE0L7RgNC80Ysg0Lgg0L7QsdGA +0LDQsdC+0YLQutCwINCy0YvQtNCw0L3QvdGL0YUg0L7RiNC40LHQvtC6DQphdXRv +c3VnZ2VzdENsYXNzLnByb3RvdHlwZS5zZW5kRGF0YU9ubG9hZCA9IGZ1bmN0aW9u +KGFqYXhPYmosIHBhcmFtcykgew0KCSQocGFyYW1zLmhvbGRlcikucmVtb3ZlQ2xh +c3ModGhpcy5jbGFzc05hbWVzLmlzTG9hZGluZyk7DQoJaWYoYWpheE9iaiAmJiBh +amF4T2JqLnJlc3BvbnNlWE1MKXsNCgkJdmFyIHhtbE9iaiA9IGFqYXhPYmoucmVz +cG9uc2VYTUw7DQoJCXZhciB4bWxOb2RlcyA9IHRoaXMucGFyc2VYTUwoeG1sT2Jq +KTsNCg0KCQlmb3IgKHByb3AgaW4geG1sTm9kZXMpew0KCQkJaWYodGhpc1t0aGlz +LnhtbFJlc3BvbnNlW3Byb3BdLmhhbmRsZXJdKSB7DQoJCQkJdGhpc1t0aGlzLnht +bFJlc3BvbnNlW3Byb3BdLmhhbmRsZXJdKHhtbE5vZGVzLCBwYXJhbXMpOw0KCQkJ +fQ0KCQl9DQoJfQ0KfTsNCg0KLy8g0JLRi9Cy0L7QtCDQtNCw0L3QvdGL0YUNCmF1 +dG9zdWdnZXN0Q2xhc3MucHJvdG90eXBlLnhtbFJlc3BvbnNlSGFuZGxlcl9vdXRw +dXQgPSBmdW5jdGlvbih4bWxOb2RlcywgcGFyYW1zKSB7DQoJdmFyIF90aGlzID0g +dGhpczsNCgkkKHBhcmFtcy5vdXRwdXQpLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTsN +Cgl0aGlzLnBvc2l0aW9uID0gMDsNCgl0aGlzLnBhcmFtcy5vdXRwdXQuaW5uZXJI +VE1MID0gJyc7DQoJaWYoeG1sTm9kZXMuaXRlbSAmJiB4bWxOb2Rlcy5pdGVtLmxl +bmd0aCkgew0KCQlmb3IodmFyIGk9MDsgaTx4bWxOb2Rlcy5pdGVtLmxlbmd0aDsg +aSsrKSB7DQoJCQl2YXIgaXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhp +cy5odG1sUmVzcG9uc2UuaXRlbSk7DQoJCQl2YXIgaHRtbCA9IHhtbE5vZGVzLml0 +ZW1baV0uZmlyc3RDaGlsZC5kYXRhOw0KCQkJdGhpcy5jdXJyVmFsdWVzW2ldID0g +eG1sTm9kZXMuaXRlbVtpXS5maXJzdENoaWxkLmRhdGE7DQoJCQl2YXIgc2VhcmNo +U3RyaW5nID0gbmV3IFJlZ0V4cCgnKCcgKyBwYXJhbXMuc3RyaW5nICsgJyknLCAn +Z2knKTsNCgkJCXZhciByZXBsYWNlU3RyaW5nID0gJzwnICt0aGlzLmh0bWxSZXNw +b25zZS52YWx1ZSArICc+JyArICckMScgKyAnPC8nICsgdGhpcy5odG1sUmVzcG9u +c2UudmFsdWUgKyAnPic7DQoJCQl2YXIgaHRtbCA9IGh0bWwucmVwbGFjZShzZWFy +Y2hTdHJpbmcsIHJlcGxhY2VTdHJpbmcpOw0KCQkJcGFyYW1zLm91dHB1dC5hcHBl +bmRDaGlsZChpdGVtKTsNCgkJCWl0ZW0uaW5uZXJIVE1MID0gaHRtbDsNCgkJfQ0K +DQoJCXBhcmFtcy5maWVsZC5vbmZvY3VzID0gZnVuY3Rpb24oKSB7DQoJCQkkKHBh +cmFtcy5vdXRwdXQpLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTsNCgkJfQkNCgkJDQoJ +CXBhcmFtcy5maWVsZC5vbmJsdXIgPSBmdW5jdGlvbihldikgew0KDQoJCQlpZigh +ZXYpIHsgZXYgPSB3aW5kb3cuZXZlbnQ7IH0NCg0KCQkJdmFyIHRhcmc7DQoJCQkJ +aWYgKCFldikgdmFyIGV2ID0gd2luZG93LmV2ZW50Ow0KCQkJCWlmIChldi50YXJn +ZXQpIHRhcmcgPSBldi50YXJnZXQ7DQoJCQkJZWxzZSBpZiAoZXYuc3JjRWxlbWVu +dCkgdGFyZyA9IGV2LnNyY0VsZW1lbnQ7DQoJCQkJaWYgKHRhcmcubm9kZVR5cGUg +PT0gMykgLy8gZGVmZWF0IFNhZmFyaSBidWcNCgkJCQkJdGFyZyA9IHRhcmcucGFy +ZW50Tm9kZTsNCgkJCQ0KCQkJaWYodGFyZyE9cGFyYW1zLmZpZWxkICYmIHRhcmcu +cGFyZW50Tm9kZSE9cGFyYW1zLm91dHB1dCkgew0KCQkJCSQocGFyYW1zLm91dHB1 +dCkuYWRkQ2xhc3MoJ2hpZGRlbicpOw0KCQkJfQ0KCQl9DQoJCQ0KCQlkb2N1bWVu +dC5hZGRFdmVudCgnY2xpY2snLCBmdW5jdGlvbiAoZSkgew0KCQkgICAgdmFyIHQg +PSBlLnRhcmdldDsNCgkJICAgIGlmICh0IT1wYXJhbXMuZmllbGQgJiYgdCE9cGFy +YW1zLm91dHB1dCkgew0KCQkgICAgICAgICQocGFyYW1zLm91dHB1dCkuYWRkQ2xh +c3MoJ2hpZGRlbicpOw0KCQkgICAgfQ0KCQl9KTsNCg0KCQl0aGlzLm1vdXNlSGFu +ZGxlcigpOw0KCX0NCn07DQoNCi8vINGD0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdC8 +INC30L3QsNGH0LXQvdC40LUNCmF1dG9zdWdnZXN0Q2xhc3MucHJvdG90eXBlLnNl +dFZhbHVlID0gZnVuY3Rpb24oKSB7DQoJdmFyIHJlc3VsdCA9IGZhbHNlOw0KCWlm +KHRoaXMucGFyYW1zLm91dHB1dCAmJiB0aGlzLnBhcmFtcy5vdXRwdXQuZ2V0RWxl +bWVudHNCeVRhZ05hbWUodGhpcy5odG1sUmVzcG9uc2UuaXRlbSlbMF0pIHsNCgkJ +dmFyIHJlc3VsdF9pdGVtcyA9IHRoaXMucGFyYW1zLm91dHB1dC5nZXRFbGVtZW50 +c0J5VGFnTmFtZSh0aGlzLmh0bWxSZXNwb25zZS5pdGVtKTsNCgkJdmFyIHJlc3Vs +dF9pdGVtc19sZW5ndGggPSByZXN1bHRfaXRlbXMubGVuZ3RoOw0KCQlmb3IgKHZh +ciBpPTA7IGk8cmVzdWx0X2l0ZW1zLmxlbmd0aDsgaSsrKSB7DQoJCQlpZihyZXN1 +bHRfaXRlbXNbaV0uY2xhc3NOYW1lID09ICdhY3RpdmUnKSB7DQoJCQkJaWYodGhp +cy5pc011bHRpcGx5U3VnZ2VzdGlvbnNPbiA9PSB0cnVlKSB7DQoJCQkJCWlmKHRo +aXMuaXNRdW90ZU9wZW5lZCA9PSB0cnVlIHx8IHRoaXMuaXNRdW90ZUNsb3NlZFBy +ZXZpb3VzbHkgPT0gdHJ1ZSkgew0KCQkJCQkJdmFyIHJlcGxhY2VkVmFsdWUgPSB0 +aGlzLnBhcmFtcy5zdHJpbmcucmVwbGFjZSh0aGlzLnBhcmFtcy5zdHJpbmcsIHRo +aXMuY3VyclZhbHVlc1t0aGlzLnBvc2l0aW9uLTFdKTsNCgkJCQkJCWlmKHRoaXMu +cGFyYW1zLm5vSW5kZXhlZFN0cmluZyE9JycpIHsNCgkJCQkJCQl0aGlzLnBhcmFt +cy5maWVsZC52YWx1ZSA9IHRoaXMucGFyYW1zLm5vSW5kZXhlZFN0cmluZyArIHRo +aXMuc3ltYm9sICsgdGhpcy5zcGFjZXIgKyAnIicgKyByZXBsYWNlZFZhbHVlOw0K +CQkJCQkJCWlmKHRoaXMuaXNRdW90ZUNsb3NlZFByZXZpb3VzbHkgPT0gdHJ1ZSkg +ew0KCQkJCQkJCQl0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSArPSAnIic7DQoJCQkJ +CQkJCXJlc3VsdCA9IHRydWU7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQkJZWxz +ZSB7DQoJCQkJCQkJdGhpcy5wYXJhbXMuZmllbGQudmFsdWUgPSAnIicgKyByZXBs +YWNlZFZhbHVlOw0KCQkJCQkJCXJlc3VsdCA9IHRydWU7DQoJCQkJCQkJaWYodGhp +cy5pc1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9PSB0cnVlKSB7IHRoaXMucGFyYW1z +LmZpZWxkLnZhbHVlICs9ICciJzsgfQ0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCWVs +c2Ugew0KCQkJCQkJdmFyIHJlcGxhY2VkVmFsdWUgPSB0aGlzLnBhcmFtcy5zdHJp +bmcucmVwbGFjZSh0aGlzLnBhcmFtcy5zdHJpbmcsIHRoaXMuY3VyclZhbHVlc1t0 +aGlzLnBvc2l0aW9uLTFdKTsNCgkJCQkJCWlmKHRoaXMucGFyYW1zLm5vSW5kZXhl +ZFN0cmluZyE9JycpIHsNCgkJCQkJCQl0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSA9 +IHRoaXMucGFyYW1zLm5vSW5kZXhlZFN0cmluZyArIHRoaXMuc3ltYm9sICsgdGhp +cy5zcGFjZXIgKyByZXBsYWNlZFZhbHVlOw0KCQkJCQkJCXJlc3VsdCA9IHRydWU7 +DQoJCQkJCQl9DQoJCQkJCQllbHNlIHsNCgkJCQkJCQl0aGlzLnBhcmFtcy5maWVs +ZC52YWx1ZSA9IHJlcGxhY2VkVmFsdWU7DQoJCQkJCQkJcmVzdWx0ID0gdHJ1ZTsN +CgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQllbHNlIHsNCgkJCQkJaWYodGhp +cy5pc1F1b3RlT3BlbmVkID09IHRydWUgfHwgdGhpcy5pc1F1b3RlQ2xvc2VkUHJl +dmlvdXNseSA9PSB0cnVlKSB7DQoJCQkJCQkNCgkJCQkJCXRoaXMucGFyYW1zLmZp +ZWxkLnZhbHVlID0gJyInICsgdGhpcy5jdXJyVmFsdWVzW3RoaXMucG9zaXRpb24t +MV07DQoJCQkJCQlyZXN1bHQgPSB0cnVlOw0KCQkJCQl9DQoJCQkJCWVsc2Ugew0K +CQkJCQkJdGhpcy5wYXJhbXMuZmllbGQudmFsdWUgPSB0aGlzLmN1cnJWYWx1ZXNb +dGhpcy5wb3NpdGlvbi0xXTsNCgkJCQkJCXJlc3VsdCA9IHRydWU7DQoJCQkJCX0N +CgkJCQl9DQoJCQkJDQoJCQkJJCh0aGlzLnBhcmFtcy5vdXRwdXQpLmFkZENsYXNz +KCdoaWRkZW4nKTsNCgkJCQkNCgkJCQl0aGlzLnBhcmFtcy5vdXRwdXQuaW5uZXJI +VE1MID0gJyc7DQoJCQkJDQoJCQkJaWYodGhpcy5wYXJhbXMuZmllbGQudmFsdWUg +JiYgdGhpcy5wYXJhbXMuZmllbGQudmFsdWUubWF0Y2goL1xyXG4kLykpIHsNCgkJ +CQkJdGhpcy5wYXJhbXMuZmllbGQudmFsdWUgPSB0aGlzLnBhcmFtcy5maWVsZC52 +YWx1ZS5yZXBsYWNlKC9cclxuJC8sICcnKTsNCgkJCQl9DQoJCQkJDQoJCQkJZWxz +ZSB7DQoJCQkJCXRoaXMucGFyYW1zLmZpZWxkID0gdGhpcy5jdXJyVmFsdWVzW2ld +Ow0KCQkJCQkkKHRoaXMucGFyYW1zLm91dHB1dCkuYWRkQ2xhc3MoJ2hpZGRlbicp +Ow0KCQkJCQl0aGlzLnBhcmFtcy5vdXRwdXQuaW5uZXJIVE1MID0gJyc7DQoJCQkJ +fQ0KCQkJfQ0KCQl9DQoJfQ0KCXJldHVybiByZXN1bHQ7DQp9Ow0KDQovLyDQvdCw +0LLQuNCz0LDRhtC40Y8g0L/QviDRgNC10LfRg9C70YzRgtCw0YLQsNC8INC30LDQ +v9GA0L7RgdCwINGBINC/0L7QvNC+0YnRjNGOINC60LvQsNCy0LjQsNGC0YPRgNGL +DQphdXRvc3VnZ2VzdENsYXNzLnByb3RvdHlwZS5tYWtlU3RlcHMgPSBmdW5jdGlv +bihkaXJlY3Rpb24pIHsNCglfdGhpcyA9IHRoaXMNCglpZih0aGlzLnBhcmFtcy5v +dXRwdXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGhpcy5odG1sUmVzcG9uc2UuaXRl +bSlbMF0pIHsNCgkJdGhpcy5wYXJhbXMuZmllbGQuZmFrZUNoYW5nZSA9IHRydWU7 +DQoJCQ0KCQl2YXIgcmVzdWx0X2l0ZW1zID0gdGhpcy5wYXJhbXMub3V0cHV0Lmdl +dEVsZW1lbnRzQnlUYWdOYW1lKHRoaXMuaHRtbFJlc3BvbnNlLml0ZW0pOw0KCQl2 +YXIgcmVzdWx0X2l0ZW1zX2xlbmd0aCA9IHJlc3VsdF9pdGVtcy5sZW5ndGg7DQoJ +CWZvciAodmFyIGk9MDsgaTxyZXN1bHRfaXRlbXMubGVuZ3RoOyBpKyspIHsNCgkJ +CXJlc3VsdF9pdGVtc1tpXS5jbGFzc05hbWUgPSAnJzsNCgkJfQ0KCQl0aGlzLnNw +YWNlciA9ICcnOw0KCQl0aGlzLnN5bWJvbCA9PSAnLCcgPyB0aGlzLnNwYWNlciA9 +ICcgJyA6IHRoaXMuc3BhY2VyID0gJyc7DQoJCWlmKGRpcmVjdGlvbiA9PSAnZG93 +bicgJiYgdGhpcy5wb3NpdGlvbjw9cmVzdWx0X2l0ZW1zX2xlbmd0aC0xKSB7DQoJ +CQlyZXN1bHRfaXRlbXNbdGhpcy5wb3NpdGlvbl0uY2xhc3NOYW1lID0gJ2FjdGl2 +ZSc7DQoJCQlpZih0aGlzLmlzTXVsdGlwbHlTdWdnZXN0aW9uc09uID09IHRydWUp +IHsNCgkJCQlpZih0aGlzLmlzUXVvdGVPcGVuZWQgPT0gdHJ1ZSB8fCB0aGlzLmlz +UXVvdGVDbG9zZWRQcmV2aW91c2x5ID09IHRydWUpIHsNCgkJCQkJdmFyIHJlcGxh +Y2VkVmFsdWUgPSB0aGlzLnBhcmFtcy5zdHJpbmcucmVwbGFjZSh0aGlzLnBhcmFt +cy5zdHJpbmcsIHRoaXMuY3VyclZhbHVlc1t0aGlzLnBvc2l0aW9uXSk7DQoJCQkJ +CWlmKHRoaXMucGFyYW1zLm5vSW5kZXhlZFN0cmluZyE9JycpIHsNCgkJCQkJCXRo +aXMucGFyYW1zLmZpZWxkLnZhbHVlID0gdGhpcy5wYXJhbXMubm9JbmRleGVkU3Ry +aW5nICsgdGhpcy5zeW1ib2wgKyB0aGlzLnNwYWNlciArICciJyArIHJlcGxhY2Vk +VmFsdWU7DQoJCQkJCQlpZih0aGlzLmlzUXVvdGVDbG9zZWRQcmV2aW91c2x5ID09 +IHRydWUpIHsgdGhpcy5wYXJhbXMuZmllbGQudmFsdWUgKz0gJyInOyB9DQoJCQkJ +CX0NCgkJCQkJZWxzZSB7DQoJCQkJCQl0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSA9 +ICciJyArIHJlcGxhY2VkVmFsdWU7DQoJCQkJCQlpZih0aGlzLmlzUXVvdGVDbG9z +ZWRQcmV2aW91c2x5ID09IHRydWUpIHsgdGhpcy5wYXJhbXMuZmllbGQudmFsdWUg +Kz0gJyInOyB9DQoJCQkJCX0NCgkJCQl9DQoJCQkJZWxzZSB7DQoJCQkJCXZhciBy +ZXBsYWNlZFZhbHVlID0gdGhpcy5wYXJhbXMuc3RyaW5nLnJlcGxhY2UodGhpcy5w +YXJhbXMuc3RyaW5nLCB0aGlzLmN1cnJWYWx1ZXNbdGhpcy5wb3NpdGlvbl0pOw0K +CQkJCQlpZih0aGlzLnBhcmFtcy5ub0luZGV4ZWRTdHJpbmchPScnKSB7DQoJCQkJ +CQl0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSA9IHRoaXMucGFyYW1zLm5vSW5kZXhl +ZFN0cmluZyArIHRoaXMuc3ltYm9sICsgdGhpcy5zcGFjZXIgKyByZXBsYWNlZFZh +bHVlOw0KCQkJCQl9DQoJCQkJCWVsc2Ugew0KCQkJCQkJdGhpcy5wYXJhbXMuZmll +bGQudmFsdWUgPSByZXBsYWNlZFZhbHVlOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0K +CQkJZWxzZSB7DQoJCQkJaWYodGhpcy5pc1F1b3RlT3BlbmVkID09IHRydWUgfHwg +dGhpcy5pc1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9PSB0cnVlKSB7DQoJCQkJCXRo +aXMucGFyYW1zLmZpZWxkLnZhbHVlID0gJyInICsgdGhpcy5jdXJyVmFsdWVzW3Ro +aXMucG9zaXRpb25dOw0KCQkJCQlpZih0aGlzLmlzUXVvdGVDbG9zZWRQcmV2aW91 +c2x5ID09IHRydWUpIHsgdGhpcy5wYXJhbXMuZmllbGQudmFsdWUgKz0gJyInOyB9 +DQoJCQkJfQ0KCQkJCWVsc2Ugew0KCQkJCQl0aGlzLnBhcmFtcy5maWVsZC52YWx1 +ZSA9IHRoaXMuY3VyclZhbHVlc1t0aGlzLnBvc2l0aW9uXTsNCgkJCQl9DQoJCQl9 +DQoJCQl0aGlzLnBvc2l0aW9uKys7DQoJCX0NCgkJZWxzZSBpZihkaXJlY3Rpb24g +PT0gJ3VwJyAmJiB0aGlzLnBvc2l0aW9uPjEpIHsNCgkJCXJlc3VsdF9pdGVtc1t0 +aGlzLnBvc2l0aW9uLTJdLmNsYXNzTmFtZSA9ICdhY3RpdmUnOw0KCQkJaWYodGhp +cy5pc011bHRpcGx5U3VnZ2VzdGlvbnNPbiA9PSB0cnVlKSB7DQoJCQkJaWYodGhp +cy5pc1F1b3RlT3BlbmVkID09IHRydWUgfHwgdGhpcy5pc1F1b3RlQ2xvc2VkUHJl +dmlvdXNseSA9PSB0cnVlKSB7DQoJCQkJCXZhciByZXBsYWNlZFZhbHVlID0gdGhp +cy5wYXJhbXMuc3RyaW5nLnJlcGxhY2UodGhpcy5wYXJhbXMuc3RyaW5nLCB0aGlz +LmN1cnJWYWx1ZXNbdGhpcy5wb3NpdGlvbi0yXSk7DQoJCQkJCWlmKHRoaXMucGFy +YW1zLm5vSW5kZXhlZFN0cmluZyE9JycpIHsNCgkJCQkJCXRoaXMucGFyYW1zLmZp +ZWxkLnZhbHVlID0gdGhpcy5wYXJhbXMubm9JbmRleGVkU3RyaW5nICsgdGhpcy5z +eW1ib2wgKyB0aGlzLnNwYWNlciArICciJyArIHJlcGxhY2VkVmFsdWU7DQoJCQkJ +CQlpZih0aGlzLmlzUXVvdGVDbG9zZWRQcmV2aW91c2x5ID09IHRydWUpIHsgdGhp +cy5wYXJhbXMuZmllbGQudmFsdWUgKz0gJyInOyB9DQoJCQkJCX0NCgkJCQkJZWxz +ZSB7DQoJCQkJCQl0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSA9ICciJyArIHJlcGxh +Y2VkVmFsdWU7DQoJCQkJCQlpZih0aGlzLmlzUXVvdGVDbG9zZWRQcmV2aW91c2x5 +ID09IHRydWUpIHsgdGhpcy5wYXJhbXMuZmllbGQudmFsdWUgKz0gJyInOyB9DQoJ +CQkJCX0NCgkJCQl9DQoJCQkJZWxzZSB7DQoJCQkJCXZhciByZXBsYWNlZFZhbHVl +ID0gdGhpcy5wYXJhbXMuc3RyaW5nLnJlcGxhY2UodGhpcy5wYXJhbXMuc3RyaW5n +LCB0aGlzLmN1cnJWYWx1ZXNbdGhpcy5wb3NpdGlvbi0yXSk7DQoJCQkJCWlmKHRo +aXMucGFyYW1zLm5vSW5kZXhlZFN0cmluZyE9JycpIHsNCgkJCQkJCXRoaXMucGFy +YW1zLmZpZWxkLnZhbHVlID0gdGhpcy5wYXJhbXMubm9JbmRleGVkU3RyaW5nICsg +dGhpcy5zeW1ib2wgKyB0aGlzLnNwYWNlciArIHJlcGxhY2VkVmFsdWU7DQoJCQkJ +CX0NCgkJCQkJZWxzZSB7DQoJCQkJCQl0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSA9 +IHJlcGxhY2VkVmFsdWU7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQllbHNlIHsN +CgkJCQlpZih0aGlzLmlzUXVvdGVPcGVuZWQgPT0gdHJ1ZSB8fCB0aGlzLmlzUXVv +dGVDbG9zZWRQcmV2aW91c2x5ID09IHRydWUpIHsNCgkJCQkJdGhpcy5wYXJhbXMu +ZmllbGQudmFsdWUgPSAnIicgKyB0aGlzLmN1cnJWYWx1ZXNbdGhpcy5wb3NpdGlv +bi0yXTsNCgkJCQkJaWYodGhpcy5pc1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9PSB0 +cnVlKSB7IHRoaXMucGFyYW1zLmZpZWxkLnZhbHVlICs9ICciJzsgfQ0KCQkJCX0N +CgkJCQllbHNlIHsNCgkJCQkJdGhpcy5wYXJhbXMuZmllbGQudmFsdWUgPSB0aGlz +LmN1cnJWYWx1ZXNbdGhpcy5wb3NpdGlvbi0yXTsNCgkJCQl9DQoJCQl9DQoJCQl0 +aGlzLnBvc2l0aW9uLS07DQoJCX0NCgkJZWxzZSBpZiAodGhpcy5wb3NpdGlvbj5y +ZXN1bHRfaXRlbXNfbGVuZ3RoLTEpIHsNCgkJCXRoaXMucG9zaXRpb249MDsNCgkJ +CXJlc3VsdF9pdGVtc1t0aGlzLnBvc2l0aW9uXS5jbGFzc05hbWUgPSAnYWN0aXZl +JzsNCgkJCWlmKHRoaXMuaXNNdWx0aXBseVN1Z2dlc3Rpb25zT24gPT0gdHJ1ZSkg +ew0KCQkJCWlmKHRoaXMuaXNRdW90ZU9wZW5lZCA9PSB0cnVlIHx8IHRoaXMuaXNR +dW90ZUNsb3NlZFByZXZpb3VzbHkgPT0gdHJ1ZSkgew0KCQkJCQl2YXIgcmVwbGFj +ZWRWYWx1ZSA9IHRoaXMucGFyYW1zLnN0cmluZy5yZXBsYWNlKHRoaXMucGFyYW1z +LnN0cmluZywgdGhpcy5jdXJyVmFsdWVzW3RoaXMucG9zaXRpb25dKTsNCgkJCQkJ +aWYodGhpcy5wYXJhbXMubm9JbmRleGVkU3RyaW5nIT0nJykgew0KCQkJCQkJdGhp +cy5wYXJhbXMuZmllbGQudmFsdWUgPSB0aGlzLnBhcmFtcy5ub0luZGV4ZWRTdHJp +bmcgKyB0aGlzLnN5bWJvbCArIHRoaXMuc3BhY2VyICsgJyInICsgcmVwbGFjZWRW +YWx1ZTsNCgkJCQkJCWlmKHRoaXMuaXNRdW90ZUNsb3NlZFByZXZpb3VzbHkgPT0g +dHJ1ZSkgeyB0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSArPSAnIic7IH0NCgkJCQkJ +fQ0KCQkJCQllbHNlIHsNCgkJCQkJCXRoaXMucGFyYW1zLmZpZWxkLnZhbHVlID0g +JyInICsgcmVwbGFjZWRWYWx1ZTsNCgkJCQkJCWlmKHRoaXMuaXNRdW90ZUNsb3Nl +ZFByZXZpb3VzbHkgPT0gdHJ1ZSkgeyB0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSAr +PSAnIic7IH0NCgkJCQkJfQ0KCQkJCX0NCgkJCQllbHNlIHsNCgkJCQkJdmFyIHJl +cGxhY2VkVmFsdWUgPSB0aGlzLnBhcmFtcy5zdHJpbmcucmVwbGFjZSh0aGlzLnBh +cmFtcy5zdHJpbmcsIHRoaXMuY3VyclZhbHVlc1t0aGlzLnBvc2l0aW9uXSk7DQoJ +CQkJCWlmKHRoaXMucGFyYW1zLm5vSW5kZXhlZFN0cmluZyE9JycpIHsNCgkJCQkJ +CXRoaXMucGFyYW1zLmZpZWxkLnZhbHVlID0gdGhpcy5wYXJhbXMubm9JbmRleGVk +U3RyaW5nICsgdGhpcy5zeW1ib2wgKyB0aGlzLnNwYWNlciArIHJlcGxhY2VkVmFs +dWU7DQoJCQkJCX0NCgkJCQkJZWxzZSB7DQoJCQkJCQl0aGlzLnBhcmFtcy5maWVs +ZC52YWx1ZSA9IHJlcGxhY2VkVmFsdWU7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJ +CQllbHNlIHsNCgkJCQlpZih0aGlzLmlzUXVvdGVPcGVuZWQgPT0gdHJ1ZSB8fCB0 +aGlzLmlzUXVvdGVDbG9zZWRQcmV2aW91c2x5ID09IHRydWUpIHsNCgkJCQkJdGhp +cy5wYXJhbXMuZmllbGQudmFsdWUgPSAnIicgKyB0aGlzLmN1cnJWYWx1ZXNbdGhp +cy5wb3NpdGlvbl07DQoJCQkJCWlmKHRoaXMuaXNRdW90ZUNsb3NlZFByZXZpb3Vz +bHkgPT0gdHJ1ZSkgeyB0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSArPSAnIic7IH0N +CgkJCQl9DQoJCQkJZWxzZSB7DQoJCQkJCXRoaXMucGFyYW1zLmZpZWxkLnZhbHVl +ID0gdGhpcy5jdXJyVmFsdWVzW3RoaXMucG9zaXRpb25dOw0KCQkJCX0NCgkJCX0N +CgkJCXRoaXMucG9zaXRpb24rKzsNCgkJfQ0KCQllbHNlIGlmKGRpcmVjdGlvbiA9 +PSAndXAnICYmIHRoaXMucG9zaXRpb248PTEpIHsNCgkJCXRoaXMucG9zaXRpb249 +cmVzdWx0X2l0ZW1zX2xlbmd0aC0xOw0KCQkJcmVzdWx0X2l0ZW1zW3RoaXMucG9z +aXRpb25dLmNsYXNzTmFtZSA9ICdhY3RpdmUnOw0KCQkJaWYodGhpcy5pc011bHRp +cGx5U3VnZ2VzdGlvbnNPbiA9PSB0cnVlKSB7DQoJCQkJaWYodGhpcy5pc1F1b3Rl +T3BlbmVkID09IHRydWUgfHwgdGhpcy5pc1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9 +PSB0cnVlKSB7DQoJCQkJCXZhciByZXBsYWNlZFZhbHVlID0gdGhpcy5wYXJhbXMu +c3RyaW5nLnJlcGxhY2UodGhpcy5wYXJhbXMuc3RyaW5nLCB0aGlzLmN1cnJWYWx1 +ZXNbdGhpcy5wb3NpdGlvbl0pOw0KCQkJCQlpZih0aGlzLnBhcmFtcy5ub0luZGV4 +ZWRTdHJpbmchPScnKSB7DQoJCQkJCQl0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSA9 +IHRoaXMucGFyYW1zLm5vSW5kZXhlZFN0cmluZyArIHRoaXMuc3ltYm9sICsgdGhp +cy5zcGFjZXIgKyAnIicgKyByZXBsYWNlZFZhbHVlOw0KCQkJCQkJaWYodGhpcy5p +c1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9PSB0cnVlKSB7IHRoaXMucGFyYW1zLmZp +ZWxkLnZhbHVlICs9ICciJzsgfQ0KCQkJCQl9DQoJCQkJCWVsc2Ugew0KCQkJCQkJ +dGhpcy5wYXJhbXMuZmllbGQudmFsdWUgPSAnIicgKyByZXBsYWNlZFZhbHVlOw0K +CQkJCQkJaWYodGhpcy5pc1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9PSB0cnVlKSB7 +IHRoaXMucGFyYW1zLmZpZWxkLnZhbHVlICs9ICciJzsgfQ0KCQkJCQl9DQoJCQkJ +fQ0KCQkJCWVsc2Ugew0KCQkJCQl2YXIgcmVwbGFjZWRWYWx1ZSA9IHRoaXMucGFy +YW1zLnN0cmluZy5yZXBsYWNlKHRoaXMucGFyYW1zLnN0cmluZywgdGhpcy5jdXJy +VmFsdWVzW3RoaXMucG9zaXRpb25dKTsNCgkJCQkJaWYodGhpcy5wYXJhbXMubm9J +bmRleGVkU3RyaW5nIT0nJykgew0KCQkJCQkJdGhpcy5wYXJhbXMuZmllbGQudmFs +dWUgPSB0aGlzLnBhcmFtcy5ub0luZGV4ZWRTdHJpbmcgKyB0aGlzLnN5bWJvbCAr +IHRoaXMuc3BhY2VyICsgcmVwbGFjZWRWYWx1ZTsNCgkJCQkJfQ0KCQkJCQllbHNl +IHsNCgkJCQkJCXRoaXMucGFyYW1zLmZpZWxkLnZhbHVlID0gcmVwbGFjZWRWYWx1 +ZTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCWVsc2Ugew0KCQkJCWlmKHRoaXMu +aXNRdW90ZU9wZW5lZCA9PSB0cnVlIHx8IHRoaXMuaXNRdW90ZUNsb3NlZFByZXZp +b3VzbHkgPT0gdHJ1ZSkgew0KCQkJCQl0aGlzLnBhcmFtcy5maWVsZC52YWx1ZSA9 +ICciJyArIHRoaXMuY3VyclZhbHVlc1t0aGlzLnBvc2l0aW9uXTsNCgkJCQkJaWYo +dGhpcy5pc1F1b3RlQ2xvc2VkUHJldmlvdXNseSA9PSB0cnVlKSB7IHRoaXMucGFy +YW1zLmZpZWxkLnZhbHVlICs9ICciJzsgfQ0KCQkJCX0NCgkJCQllbHNlIHsNCgkJ +CQkJdGhpcy5wYXJhbXMuZmllbGQudmFsdWUgPSB0aGlzLmN1cnJWYWx1ZXNbdGhp +cy5wb3NpdGlvbl07DQoJCQkJfQ0KCQkJfQ0KCQkJdGhpcy5wb3NpdGlvbisrOw0K +CQl9DQoJCXNldFRpbWVvdXQoZnVuY3Rpb24oKXsNCgkJCV90aGlzLnBhcmFtcy5m +aWVsZC5mYWtlQ2hhbmdlID0gZmFsc2U7DQoJCX0sNTApDQoJCQ0KCQkNCgl9DQp9 +Ow0KDQovL9C90LDQstC40LPQsNGG0LjRjyDQv9C+INGA0LXQt9GD0LvRjNGC0LDR +gtCw0Lwg0LfQsNC/0YDQvtGB0LAg0YEg0L/QvtC80L7RidGM0Y4g0LzRi9GI0LrQ +uA0KYXV0b3N1Z2dlc3RDbGFzcy5wcm90b3R5cGUubW91c2VIYW5kbGVyID0gZnVu +Y3Rpb24oKSB7DQoJdmFyIF90aGlzID0gdGhpczsNCgl2YXIgaXRlbXMgPSB0aGlz +LnBhcmFtcy5vdXRwdXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGhpcy5odG1sUmVz +cG9uc2UuaXRlbSk7DQoJdmFyIGl0ZW1zX2xlbmd0aCA9IGl0ZW1zLmxlbmd0aDsN +CgkNCg0KDQoNCglmb3IgKHZhciBpPTA7IGk8aXRlbXNfbGVuZ3RoOyBpKyspIHsN +CgkJaXRlbXNbaV0ub25tb3VzZW92ZXIgPSBmdW5jdGlvbihpXykgew0KCQkJcmV0 +dXJuIGZ1bmN0aW9uICgpIHsNCgkJCQlmb3IgKHZhciBrPTA7IGs8aXRlbXNfbGVu +Z3RoOyBrKyspIHsNCgkJCQkJaXRlbXNba10uY2xhc3NOYW1lID0gJyc7DQoJCQkJ +fQ0KCQkJCXRoaXMuY2xhc3NOYW1lID0gJ2FjdGl2ZSc7DQoJCQkJX3RoaXMucG9z +aXRpb24gPSBpXysxOw0KCQkJfQ0KCQl9KGkpOw0KCQlpdGVtc1tpXS5vbm1vdXNl +b3V0ID0gZnVuY3Rpb24oKSB7DQoJCQl0aGlzLmNsYXNzTmFtZSA9ICcnOw0KCQkJ +LyogX3RoaXMucG9zaXRpb24gPSAwOyAqLw0KCQl9DQoJCWl0ZW1zW2ldLm9uY2xp +Y2sgPSBmdW5jdGlvbihpXykgew0KCQkJcmV0dXJuIGZ1bmN0aW9uKCkgew0KCQkJ +CXZhciBob2xkZXIgPSAkKHRoaXMpLmdldFBhcmVudCgnLicgKyBfdGhpcy5jbGFz +c05hbWVzLmhvbGRlcik7DQoJCQkJdmFyIGZpZWxkID0gJChob2xkZXIpLmdldEVs +ZW1lbnQoJy4nICsgX3RoaXMuY2xhc3NOYW1lcy5maWVsZCk7DQoJCQkJaWYoX3Ro +aXMuaXNNdWx0aXBseVN1Z2dlc3Rpb25zT24gPT0gdHJ1ZSkgew0KCQkJCQlpZihf +dGhpcy5pc1F1b3RlT3BlbmVkID09IHRydWUpIHsNCgkJCQkJCXZhciByZXBsYWNl +ZFZhbHVlID0gX3RoaXMucGFyYW1zLnN0cmluZy5yZXBsYWNlKF90aGlzLnBhcmFt +cy5zdHJpbmcsIF90aGlzLmN1cnJWYWx1ZXNbaV9dKTsNCgkJCQkJCV90aGlzLnNw +YWNlciA9Jyc7DQoJCQkJCQlfdGhpcy5zeW1ib2wgPT0gJywnID8gX3RoaXMuc3Bh +Y2VyID0gJyAnIDogX3RoaXMuc3BhY2VyID0gJyc7DQoJCQkJCQlpZihfdGhpcy5w +YXJhbXMubm9JbmRleGVkU3RyaW5nIT0nJykgew0KCQkJCQkJCV90aGlzLnBhcmFt +cy5maWVsZC52YWx1ZSA9IF90aGlzLnBhcmFtcy5ub0luZGV4ZWRTdHJpbmcgKyBf +dGhpcy5zeW1ib2wgKyBfdGhpcy5zcGFjZXIgKyAnIicgKyByZXBsYWNlZFZhbHVl +Ow0KCQkJCQkJfQ0KCQkJCQkJZWxzZSB7DQoJCQkJCQkJX3RoaXMucGFyYW1zLmZp +ZWxkLnZhbHVlID0gJyInICsgcmVwbGFjZWRWYWx1ZTsNCgkJCQkJCX0NCgkJCQkJ +fQ0KCQkJCQllbHNlIHsNCgkJCQkJCXZhciByZXBsYWNlZFZhbHVlID0gX3RoaXMu +cGFyYW1zLnN0cmluZy5yZXBsYWNlKF90aGlzLnBhcmFtcy5zdHJpbmcsIF90aGlz +LmN1cnJWYWx1ZXNbaV9dKTsNCgkJCQkJCV90aGlzLnNwYWNlciA9Jyc7DQoJCQkJ +CQlfdGhpcy5zeW1ib2wgPT0gJywnID8gX3RoaXMuc3BhY2VyID0gJyAnIDogX3Ro +aXMuc3BhY2VyID0gJyc7DQoJCQkJCQlpZihfdGhpcy5wYXJhbXMubm9JbmRleGVk +U3RyaW5nIT0nJykgew0KCQkJCQkJCV90aGlzLnBhcmFtcy5maWVsZC52YWx1ZSA9 +IF90aGlzLnBhcmFtcy5ub0luZGV4ZWRTdHJpbmcgKyBfdGhpcy5zeW1ib2wgKyBf +dGhpcy5zcGFjZXIgKyByZXBsYWNlZFZhbHVlOw0KCQkJCQkJfQ0KCQkJCQkJZWxz +ZSB7DQoJCQkJCQkJX3RoaXMucGFyYW1zLmZpZWxkLnZhbHVlID0gcmVwbGFjZWRW +YWx1ZTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCQkkKF90aGlzLnBhcmFtcy5vdXRw +dXQpLmFkZENsYXNzKCdoaWRkZW4nKTsNCgkJCQl9DQoJCQkJZWxzZSB7DQoJCQkJ +CWlmKF90aGlzLmlzUXVvdGVPcGVuZWQgPT0gdHJ1ZSkgew0KCQkJCQkJZmllbGQu +dmFsdWUgPSAnIicgKyBfdGhpcy5jdXJyVmFsdWVzW2lfXTsNCgkJCQkJfQ0KCQkJ +CQllbHNlIHsNCgkJCQkJCWZpZWxkLnZhbHVlID0gX3RoaXMuY3VyclZhbHVlc1tp +X107DQoJCQkJCX0NCgkJCQl9DQoJCQkJCQ0KCQkJCSQoX3RoaXMucGFyYW1zLm91 +dHB1dCkuYWRkQ2xhc3MoJ2hpZGRlbicpOw0KCQkJCQ0KCQkJCV90aGlzLnBhcmFt +cy5vdXRwdXQuaW5uZXJIVE1MID0gJyc7DQoJCQkJDQoJCQkJZmllbGQuZm9jdXMo +KTsNCgkJCX0NCgkJfShpKTsNCgl9DQp9Ow0KDQoNCg0Kd2luZG93LmFkZEV2ZW50 +KCdsb2FkJywgZnVuY3Rpb24oKSB7DQoJaWYgKCQoJ3RvcGljLXRhZ3MnKSkgew0K +CQl2YXIgQXV0b3N1Z2dlc3QwMSA9IG5ldyBhdXRvc3VnZ2VzdENsYXNzKCQoJ3Rv +cGljLXRhZ3MnKSwgJ3RhZ3MnLCB0cnVlLCAnLCcpOw0KCX0NCglpZiAoJCgnc2Vh +cmNoJykpIHsNCgkJdmFyIEF1dG9zdWdnZXN0MDIgPSBuZXcgYXV0b3N1Z2dlc3RD +bGFzcygkKCdzZWFyY2gnKSwgJ3NlYXJjaCcsIGZhbHNlLCAnJyk7DQoJfQ0KICAv +KmlmICgkKCd0bycpKSB7DQoJCXZhciBBdXRvc3VnZ2VzdDAzID0gbmV3IGF1dG9z +dWdnZXN0Q2xhc3MoJCgndG8nKSwgJ3VzZXInLCB0cnVlLCAnLCcpOw0KCX0qLw0K +CWlmICgkKCd0YWctc2VhcmNoLWZpZWxkJykpIHsNCgkJdmFyIEF1dG9zdWdnZXN0 +MDQgPSBuZXcgYXV0b3N1Z2dlc3RDbGFzcygkKCd0YWctc2VhcmNoLWZpZWxkJyks +ICd0YWdzJywgZmFsc2UsICcnKTsNCgl9DQoJaWYgKCQoJ21haW4tc2VhcmNoLWZp +ZWxkJykpIHsNCgkJdmFyIEF1dG9zdWdnZXN0MDUgPSBuZXcgYXV0b3N1Z2dlc3RD +bGFzcygkKCdtYWluLXNlYXJjaC1maWVsZCcpLCAnc2VhcmNoJywgZmFsc2UsICcn +KTsNCgl9DQoJaWYgKCQoJ2Zhdm91cml0ZXNfYWRkX3RhZ3MnKSkgew0KCSAgICB2 +YXIgQXV0b3N1Z2dlc3QwNiA9IG5ldyBhdXRvc3VnZ2VzdENsYXNzKCQoJ2Zhdm91 +cml0ZXNfYWRkX3RhZ3MnKSwgJ3RhZ3MnLCB0cnVlLCAnLCcpOw0KCX0NCn0pOw0K + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline; filename=highlight.js +Content-Type: application/x-javascript; charset=utf-8; name=highlight.js +Content-Location: http://habrahabr.ru/js/1307631427/highlight.js +Content-Transfer-Encoding: Base64 + +dmFyIGhsanM9bmV3IGZ1bmN0aW9uKCl7dmFyIHE9e307dmFyIGE9e307ZnVuY3Rp +b24gbyhjKXtyZXR1cm4gYy5yZXBsYWNlKC8mL2dtLCImYW1wOyIpLnJlcGxhY2Uo +LzwvZ20sIiZsdDsiKS5yZXBsYWNlKC8+L2dtLCImZ3Q7Iil9ZnVuY3Rpb24gbCh0 +LHMpe2lmKCF0KXtyZXR1cm4gZmFsc2V9Zm9yKHZhciBjPTA7Yzx0Lmxlbmd0aDtj +Kyspe2lmKHRbY109PXMpe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9ZnVuY3Rp +b24gZSh0LHMsYyl7dmFyIHU9Im0iKyh0LmNJPyJpIjoiIikrKGM/ImciOiIiKTty +ZXR1cm4gbmV3IFJlZ0V4cChzLHUpfWZ1bmN0aW9uIGsocyl7Zm9yKHZhciBjPTA7 +YzxzLmNoaWxkTm9kZXMubGVuZ3RoO2MrKyl7bm9kZT1zLmNoaWxkTm9kZXNbY107 +aWYobm9kZS5ub2RlTmFtZT09IkNPREUiKXtyZXR1cm4gbm9kZX1pZighKG5vZGUu +bm9kZVR5cGU9PTMmJm5vZGUubm9kZVZhbHVlLm1hdGNoKC9ccysvKSkpe3JldHVy +biBudWxsfX19ZnVuY3Rpb24gaSh0KXt2YXIgcz0iIjtmb3IodmFyIGM9MDtjPHQu +Y2hpbGROb2Rlcy5sZW5ndGg7YysrKXtpZih0LmNoaWxkTm9kZXNbY10ubm9kZVR5 +cGU9PTMpe3MrPXQuY2hpbGROb2Rlc1tjXS5ub2RlVmFsdWV9ZWxzZXtpZih0LmNo +aWxkTm9kZXNbY10ubm9kZU5hbWU9PSJCUiIpe3MrPSJcbiJ9ZWxzZXtzKz1pKHQu +Y2hpbGROb2Rlc1tjXSl9fX1yZXR1cm4gc31mdW5jdGlvbiBiKHUpe3ZhciBzPXUu +Y2xhc3NOYW1lLnNwbGl0KC9ccysvKTtzPXMuY29uY2F0KHUucGFyZW50Tm9kZS5j +bGFzc05hbWUuc3BsaXQoL1xzKy8pKTtmb3IodmFyIGM9MDtjPHMubGVuZ3RoO2Mr +Kyl7dmFyIHQ9c1tjXS5yZXBsYWNlKC9ebGFuZ3VhZ2UtLywiIik7aWYodD09Im5v +LWhpZ2hsaWdodCIpe3Rocm93Ik5vIGhpZ2hsaWdodCJ9aWYocVt0XSl7cmV0dXJu +IHR9fX1mdW5jdGlvbiBkKGMpe3ZhciBzPVtdOyhmdW5jdGlvbih1LHYpe2Zvcih2 +YXIgdD0wO3Q8dS5jaGlsZE5vZGVzLmxlbmd0aDt0Kyspe2lmKHUuY2hpbGROb2Rl +c1t0XS5ub2RlVHlwZT09Myl7dis9dS5jaGlsZE5vZGVzW3RdLm5vZGVWYWx1ZS5s +ZW5ndGh9ZWxzZXtpZih1LmNoaWxkTm9kZXNbdF0ubm9kZU5hbWU9PSJCUiIpe3Yr +PTF9ZWxzZXtzLnB1c2goe2V2ZW50OiJzdGFydCIsb2Zmc2V0OnYsbm9kZTp1LmNo +aWxkTm9kZXNbdF19KTt2PWFyZ3VtZW50cy5jYWxsZWUodS5jaGlsZE5vZGVzW3Rd +LHYpO3MucHVzaCh7ZXZlbnQ6InN0b3AiLG9mZnNldDp2LG5vZGU6dS5jaGlsZE5v +ZGVzW3RdfSl9fX1yZXR1cm4gdn0pKGMsMCk7cmV0dXJuIHN9ZnVuY3Rpb24gbihB +LEIseil7dmFyIHQ9MDt2YXIgeT0iIjt2YXIgdj1bXTtmdW5jdGlvbiB3KCl7aWYo +QS5sZW5ndGgmJkIubGVuZ3RoKXtpZihBWzBdLm9mZnNldCE9QlswXS5vZmZzZXQp +e3JldHVybihBWzBdLm9mZnNldDxCWzBdLm9mZnNldCk/QTpCfWVsc2V7cmV0dXJu +KEFbMF0uZXZlbnQ9PSJzdGFydCImJkJbMF0uZXZlbnQ9PSJzdG9wIik/QjpBfX1l +bHNle3JldHVybiBBLmxlbmd0aD9BOkJ9fWZ1bmN0aW9uIHUoRil7dmFyIEc9Ijwi +K0Yubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtmb3IodmFyIEQ9MDtEPEYuYXR0cmli +dXRlcy5sZW5ndGg7RCsrKXt2YXIgRT1GLmF0dHJpYnV0ZXNbRF07Rys9IiAiK0Uu +bm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZihFLm5vZGVWYWx1ZSE9dW5kZWZpbmVk +KXtHKz0nPSInK28oRS5ub2RlVmFsdWUpKyciJ319cmV0dXJuIEcrIj4ifWZ1bmN0 +aW9uIEMoRCl7cmV0dXJuIjwvIitELm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkrIj4i +fXdoaWxlKEEubGVuZ3RofHxCLmxlbmd0aCl7dmFyIHg9dygpLnNwbGljZSgwLDEp +WzBdO3krPW8oei5zdWJzdHIodCx4Lm9mZnNldC10KSk7dD14Lm9mZnNldDtpZih4 +LmV2ZW50PT0ic3RhcnQiKXt5Kz11KHgubm9kZSk7di5wdXNoKHgubm9kZSl9ZWxz +ZXtpZih4LmV2ZW50PT0ic3RvcCIpe3ZhciBzPXYubGVuZ3RoO2Rve3MtLTt2YXIg +Yz12W3NdO3krPUMoYyl9d2hpbGUoYyE9eC5ub2RlKTt2LnNwbGljZShzLDEpO3do +aWxlKHM8di5sZW5ndGgpe3krPXUodltzXSk7cysrfX19fXkrPXouc3Vic3RyKHQp +O3JldHVybiB5fWZ1bmN0aW9uIGgoSyxFKXtmdW5jdGlvbiBMKFEsUCl7US5zbT1b +XTtmb3IodmFyIE89MDtPPFEuYy5sZW5ndGg7TysrKXtmb3IodmFyIE49MDtOPFAu +bS5sZW5ndGg7TisrKXtpZihQLm1bTl0uY049PVEuY1tPXSl7US5zbVtRLnNtLmxl +bmd0aF09UC5tW05dfX19fWZ1bmN0aW9uIEEoTixQKXtpZighUC5jKXtyZXR1cm4g +bnVsbH1pZighUC5zbSl7TChQLEkpfWZvcih2YXIgTz0wO088UC5zbS5sZW5ndGg7 +TysrKXtpZihQLnNtW09dLmJSLnRlc3QoTikpe3JldHVybiBQLnNtW09dfX1yZXR1 +cm4gbnVsbH1mdW5jdGlvbiB4KE8sTil7aWYoRFtPXS5lJiZEW09dLmVSLnRlc3Qo +Tikpe3JldHVybiAxfWlmKERbT10uZVcpe3ZhciBQPXgoTy0xLE4pO3JldHVybiBQ +P1ArMTowfXJldHVybiAwfWZ1bmN0aW9uIHkoTixPKXtyZXR1cm4gTy5pUiYmTy5p +Ui50ZXN0KE4pfWZ1bmN0aW9uIEIoVCxSKXt2YXIgUD1bXTtmdW5jdGlvbiBTKFUp +e2lmKCFsKFAsVSkpe1BbUC5sZW5ndGhdPVV9fWlmKFQuYyl7Zm9yKHZhciBPPTA7 +TzxSLm0ubGVuZ3RoO08rKyl7aWYobChULmMsUi5tW09dLmNOKSl7UyhSLm1bT10u +Yil9fX12YXIgTj1ELmxlbmd0aC0xO2Rve2lmKERbTl0uZSl7UyhEW05dLmUpfU4t +LX13aGlsZShEW04rMV0uZVcpO2lmKFQuaSl7UyhULmkpfXZhciBRPSIoIitQWzBd +O2Zvcih2YXIgTz0wO088UC5sZW5ndGg7TysrKXtRKz0ifCIrUFtPXX1RKz0iKSI7 +cmV0dXJuIGUoUixRKX1mdW5jdGlvbiB0KFAsTyl7dmFyIFE9RFtELmxlbmd0aC0x +XTtpZighUS50KXtRLnQ9QihRLEkpfVA9UC5zdWJzdHIoTyk7dmFyIE49US50LmV4 +ZWMoUCk7aWYoIU4pe3JldHVybltQLCIiLHRydWVdfWlmKE4uaW5kZXg9PTApe3Jl +dHVyblsiIixOWzBdLGZhbHNlXX1lbHNle3JldHVybltQLnN1YnN0cigwLE4uaW5k +ZXgpLE5bMF0sZmFsc2VdfX1mdW5jdGlvbiBzKFIsTil7dmFyIE89SS5jST9OWzBd +LnRvTG93ZXJDYXNlKCk6TlswXTtmb3IodmFyIFEgaW4gUi5rZXl3b3JkR3JvdXBz +KXtpZighUi5rZXl3b3JkR3JvdXBzLmhhc093blByb3BlcnR5KFEpKXtjb250aW51 +ZX12YXIgUD1SLmtleXdvcmRHcm91cHNbUV0uaGFzT3duUHJvcGVydHkoTyk7aWYo +UCl7cmV0dXJuW1EsUF19fXJldHVybiBmYWxzZX1mdW5jdGlvbiBHKFEsVCl7aWYo +IVQua3x8IVQubCl7cmV0dXJuIG8oUSl9aWYoIVQubFIpe3ZhciBTPSIoIitULmxb +MF07Zm9yKHZhciBQPTE7UDxULmwubGVuZ3RoO1ArKyl7Uys9InwiK1QubFtQXX1T +Kz0iKSI7VC5sUj1lKEksUyx0cnVlKX12YXIgUj0iIjt2YXIgVT0wO1QubFIubGFz +dEluZGV4PTA7dmFyIE89VC5sUi5leGVjKFEpO3doaWxlKE8pe1IrPW8oUS5zdWJz +dHIoVSxPLmluZGV4LVUpKTt2YXIgTj1zKFQsTyk7aWYoTil7dSs9TlsxXTtSKz0n +PHNwYW4gY2xhc3M9IicrTlswXSsnIj4nK28oT1swXSkrIjwvc3Bhbj4ifWVsc2V7 +Uis9byhPWzBdKX1VPVQubFIubGFzdEluZGV4O089VC5sUi5leGVjKFEpfVIrPW8o +US5zdWJzdHIoVSxRLmxlbmd0aC1VKSk7cmV0dXJuIFJ9ZnVuY3Rpb24gTShOLFAp +e2lmKFAuc3ViTGFuZ3VhZ2UmJmFbUC5zdWJMYW5ndWFnZV0pe3ZhciBPPWgoUC5z +dWJMYW5ndWFnZSxOKTt1Kz1PLmtleXdvcmRfY291bnQ7Qys9Ty5yO3JldHVybiBP +LnZhbHVlfWVsc2V7cmV0dXJuIEcoTixQKX19ZnVuY3Rpb24gSihQLE4pe3ZhciBP +PVAubk0/IiI6JzxzcGFuIGNsYXNzPSInK1AuZGlzcGxheUNsYXNzTmFtZSsnIj4n +O2lmKFAuckIpe2MrPU87UC5idWZmZXI9IiJ9ZWxzZXtpZihQLmVCKXtjKz1vKE4p +K087UC5idWZmZXI9IiJ9ZWxzZXtjKz1PO1AuYnVmZmVyPU59fURbRC5sZW5ndGhd +PVB9ZnVuY3Rpb24gRihTLE8sVCl7dmFyIFU9RFtELmxlbmd0aC0xXTtpZihUKXtj +Kz1NKFUuYnVmZmVyK1MsVSk7cmV0dXJuIGZhbHNlfXZhciBQPUEoTyxVKTtpZihQ +KXtjKz1NKFUuYnVmZmVyK1MsVSk7SihQLE8pO0MrPVAucjtyZXR1cm4gUC5yQn12 +YXIgTj14KEQubGVuZ3RoLTEsTyk7aWYoTil7dmFyIFI9VS5uTT8iIjoiPC9zcGFu +PiI7aWYoVS5yRSl7Yys9TShVLmJ1ZmZlcitTLFUpK1J9ZWxzZXtpZihVLmVFKXtj +Kz1NKFUuYnVmZmVyK1MsVSkrUitvKE8pfWVsc2V7Yys9TShVLmJ1ZmZlcitTK08s +VSkrUn19d2hpbGUoTj4xKXtSPURbRC5sZW5ndGgtMl0ubk0/IiI6Ijwvc3Bhbj4i +O2MrPVI7Ti0tO0QubGVuZ3RoLS19RC5sZW5ndGgtLTtEW0QubGVuZ3RoLTFdLmJ1 +ZmZlcj0iIjtpZihVLnN0YXJ0cyl7Zm9yKHZhciBRPTA7UTxJLm0ubGVuZ3RoO1Er +Kyl7aWYoSS5tW1FdLmNOPT1VLnN0YXJ0cyl7SihJLm1bUV0sIiIpO2JyZWFrfX19 +cmV0dXJuIFUuckV9aWYoeShPLFUpKXt0aHJvdyJJbGxlZ2FsIn19dmFyIEk9cVtL +XTt2YXIgRD1bSS5kTV07dmFyIEM9MDt2YXIgdT0wO3ZhciBjPSIiO3RyeXt2YXIg +dz0wO0kuZE0uYnVmZmVyPSIiO2Rve3ZhciB6PXQoRSx3KTt2YXIgdj1GKHpbMF0s +elsxXSx6WzJdKTt3Kz16WzBdLmxlbmd0aDtpZighdil7dys9elsxXS5sZW5ndGh9 +fXdoaWxlKCF6WzJdKTtpZihELmxlbmd0aD4xKXt0aHJvdyJJbGxlZ2FsIn1yZXR1 +cm57cjpDLGtleXdvcmRfY291bnQ6dSx2YWx1ZTpjfX1jYXRjaChIKXtpZihIPT0i +SWxsZWdhbCIpe3JldHVybntyOjAsa2V5d29yZF9jb3VudDowLHZhbHVlOm8oRSl9 +fWVsc2V7dGhyb3cgSH19fWZ1bmN0aW9uIGooKXtmb3IodmFyIHMgaW4gcSl7aWYo +IXEuaGFzT3duUHJvcGVydHkocykpe2NvbnRpbnVlfXZhciB0PXFbc107Zm9yKHZh +ciBjPTA7Yzx0Lm0ubGVuZ3RoO2MrKyl7dmFyIHU9dC5tW2NdO2lmKHUuYil7dS5i +Uj1lKHQsIl4iK3UuYil9aWYodS5lKXt1LmVSPWUodCwiXiIrdS5lKX1pZih1Lmkp +e3UuaVI9ZSh0LCJeKD86Iit1LmkrIikiKX10LmRNLmlSPWUodCwiXig/OiIrdC5k +TS5pKyIpIik7aWYodS5yPT11bmRlZmluZWQpe3Uucj0xfWlmKCF1LmRpc3BsYXlD +bGFzc05hbWUpe3UuZGlzcGxheUNsYXNzTmFtZT11LmNOfX19fWZ1bmN0aW9uIGco +KXtmdW5jdGlvbiB0KHcpe2lmKCF3LmtleXdvcmRHcm91cHMpe2Zvcih2YXIgdiBp +biB3Lmspe2lmKCF3LmsuaGFzT3duUHJvcGVydHkodikpe2NvbnRpbnVlfWlmKHcu +a1t2XSBpbnN0YW5jZW9mIE9iamVjdCl7dy5rZXl3b3JkR3JvdXBzPXcua31lbHNl +e3cua2V5d29yZEdyb3Vwcz17a2V5d29yZDp3Lmt9fWJyZWFrfX19Zm9yKHZhciBz +IGluIHEpe2lmKCFxLmhhc093blByb3BlcnR5KHMpKXtjb250aW51ZX12YXIgdT1x +W3NdO3QodS5kTSk7Zm9yKHZhciBjPTA7Yzx1Lm0ubGVuZ3RoO2MrKyl7dCh1Lm1b +Y10pfX19ZnVuY3Rpb24gZigpe2lmKGYuY2FsbGVkKXtyZXR1cm59Zi5jYWxsZWQ9 +dHJ1ZTtqKCk7ZygpO2E9cX1mdW5jdGlvbiByKHksQyl7ZigpO3RyeXt2YXIgRj1p +KHkpO3ZhciB2PWIoeSl9Y2F0Y2goeil7aWYoej09Ik5vIGhpZ2hsaWdodCIpe3Jl +dHVybn19aWYodil7dmFyIEI9aCh2LEYpLnZhbHVlfWVsc2V7dmFyIEQ9MDtmb3Io +dmFyIEUgaW4gYSl7aWYoIWEuaGFzT3duUHJvcGVydHkoRSkpe2NvbnRpbnVlfXZh +ciB0PWgoRSxGKTt2YXIgYz10LmtleXdvcmRfY291bnQrdC5yO2lmKGM+RCl7RD1j +O3ZhciBCPXQudmFsdWU7dj1FfX19aWYoQil7dmFyIHg9eS5jbGFzc05hbWU7aWYo +IXgubWF0Y2godikpe3grPSIgIit2fXZhciBzPWQoeSk7aWYocy5sZW5ndGgpe3Zh +ciB1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInByZSIpO3UuaW5uZXJIVE1MPUI7 +Qj1uKHMsZCh1KSxGKX1pZihDKXtCPUIucmVwbGFjZSgvXigoPFtePl0rPnxcdCkr +KS9nbSxmdW5jdGlvbihHLEosSSxIKXtyZXR1cm4gSi5yZXBsYWNlKC9cdC9nLEMp +fSl9dmFyIEE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7QS5pbm5lckhU +TUw9JzxwcmU+PGNvZGUgY2xhc3M9IicreCsnIj4nK0IrIjwvY29kZT48L3ByZT4i +O3ZhciB3PXkucGFyZW50Tm9kZS5wYXJlbnROb2RlO3cucmVwbGFjZUNoaWxkKEEu +Zmlyc3RDaGlsZCx5LnBhcmVudE5vZGUpfX1mdW5jdGlvbiBtKCl7aWYobS5jYWxs +ZWQpe3JldHVybn1tLmNhbGxlZD10cnVlO2YoKTtpZihhcmd1bWVudHMubGVuZ3Ro +KXtmb3IodmFyIGM9MDtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKXtpZihxW2FyZ3Vt +ZW50c1tjXV0pe2FbYXJndW1lbnRzW2NdXT1xW2FyZ3VtZW50c1tjXV19fX12YXIg +dD1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicHJlIik7Zm9yKHZhciBj +PTA7Yzx0Lmxlbmd0aDtjKyspe3ZhciBzPWsodFtjXSk7aWYocyl7cihzLGhsanMu +dGFiUmVwbGFjZSl9fX1mdW5jdGlvbiBwKCl7dmFyIGM9YXJndW1lbnRzO3ZhciBz +PWZ1bmN0aW9uKCl7bS5hcHBseShudWxsLGMpfTtpZih3aW5kb3cuYWRkRXZlbnRM +aXN0ZW5lcil7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2Fk +ZWQiLHMsZmFsc2UpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixzLGZh +bHNlKX1lbHNle2lmKHdpbmRvdy5hdHRhY2hFdmVudCl7d2luZG93LmF0dGFjaEV2 +ZW50KCJvbmxvYWQiLHMpfWVsc2V7d2luZG93Lm9ubG9hZD1zfX19dGhpcy5MQU5H +VUFHRVM9cTt0aGlzLmluaXRIaWdobGlnaHRpbmdPbkxvYWQ9cDt0aGlzLmhpZ2hs +aWdodEJsb2NrPXI7dGhpcy5pbml0SGlnaGxpZ2h0aW5nPW07dGhpcy5JUj0iW2Et +ekEtWl1bYS16QS1aMC05X10qIjt0aGlzLlVJUj0iW2EtekEtWl9dW2EtekEtWjAt +OV9dKiI7dGhpcy5OUj0iXFxiXFxkKyhcXC5cXGQrKT8iO3RoaXMuQ05SPSJcXGIo +MHhbQS1aYS16MC05XSt8XFxkKyhcXC5cXGQrKT8pIjt0aGlzLlJTUj0iIXwhPXwh +PT18JXwlPXwmfCYmfCY9fFxcKnxcXCo9fFxcK3xcXCs9fCx8XFwufC18LT18L3wv +PXw6fDt8PHw8PHw8PD18PD18PXw9PXw9PT18Pnw+PXw+Pnw+Pj18Pj4+fD4+Pj18 +XFw/fFxcW3xcXHt8XFwofFxcXnxcXF49fFxcfHxcXHw9fFxcfFxcfHx+Ijt0aGlz +LkFTTT17Y046InN0cmluZyIsYjoiJyIsZToiJyIsaToiXFxuIixjOlsiZXNjYXBl +Il0scjowfTt0aGlzLlFTTT17Y046InN0cmluZyIsYjonIicsZTonIicsaToiXFxu +IixjOlsiZXNjYXBlIl0scjowfTt0aGlzLkJFPXtjTjoiZXNjYXBlIixiOiJcXFxc +LiIsZToiXiIsbk06dHJ1ZSxyOjB9O3RoaXMuQ0xDTT17Y046ImNvbW1lbnQiLGI6 +Ii8vIixlOiIkIixyOjB9O3RoaXMuQ0JMQ0xNPXtjTjoiY29tbWVudCIsYjoiL1xc +KiIsZToiXFwqLyJ9O3RoaXMuSENNPXtjTjoiY29tbWVudCIsYjoiIyIsZToiJCJ9 +O3RoaXMuQ05NPXtjTjoibnVtYmVyIixiOnRoaXMuQ05SLGU6Il4iLHI6MH19KCk7 +dmFyIGluaXRIaWdobGlnaHRpbmdPbkxvYWQ9aGxqcy5pbml0SGlnaGxpZ2h0aW5n +T25Mb2FkO2hsanMuTEFOR1VBR0VTLmJhc2g9ZnVuY3Rpb24oKXt2YXIgYT17InRy +dWUiOjEsImZhbHNlIjoxfTtyZXR1cm57ZE06e2w6W2hsanMuSVJdLGM6WyJzdHJp +bmciLCJzaGViYW5nIiwiY29tbWVudCIsIm51bWJlciIsInRlc3RfY29uZGl0aW9u +Iiwic3RyaW5nIiwidmFyaWFibGUiXSxrOntrZXl3b3JkOnsiaWYiOjEsdGhlbjox +LCJlbHNlIjoxLGZpOjEsImZvciI6MSwiYnJlYWsiOjEsImNvbnRpbnVlIjoxLCJ3 +aGlsZSI6MSwiaW4iOjEsImRvIjoxLGRvbmU6MSxlY2hvOjEsZXhpdDoxLCJyZXR1 +cm4iOjEsc2V0OjEsZGVjbGFyZToxfSxsaXRlcmFsOmF9fSxjSTpmYWxzZSxtOlt7 +Y046InNoZWJhbmciLGI6IigjIVxcL2JpblxcL2Jhc2gpfCgjIVxcL2JpblxcL3No +KSIsZToiXiIscjoxMH0saGxqcy5IQ00se2NOOiJ0ZXN0X2NvbmRpdGlvbiIsYjoi +XFxbICIsZToiIFxcXSIsYzpbInN0cmluZyIsInZhcmlhYmxlIiwibnVtYmVyIl0s +bDpbaGxqcy5JUl0sazp7bGl0ZXJhbDphfSxyOjB9LHtjTjoidGVzdF9jb25kaXRp +b24iLGI6IlxcW1xcWyAiLGU6IiBcXF1cXF0iLGM6WyJzdHJpbmciLCJ2YXJpYWJs +ZSIsIm51bWJlciJdLGw6W2hsanMuSVJdLGs6e2xpdGVyYWw6YX19LHtjTjoidmFy +aWFibGUiLGI6IlxcJChbYS16QS1aMC05X10rKVxcYiIsZToiXiJ9LHtjTjoidmFy +aWFibGUiLGI6IlxcJFxceygoW159XSl8KFxcXFx9KSkrXFx9IixlOiJeIixjOlsi +bnVtYmVyIl19LHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxpOiJcXG4iLGM6WyJl +c2NhcGUiLCJ2YXJpYWJsZSJdLHI6MH0se2NOOiJzdHJpbmciLGI6JyInLGU6JyIn +LGk6IlxcbiIsYzpbImVzY2FwZSIsInZhcmlhYmxlIl0scjowfSxobGpzLkJFLGhs +anMuQ05NLHtjTjoiY29tbWVudCIsYjoiXFwvXFwvIixlOiIkIixpOiIuIn1dfX0o +KTtobGpzLkxBTkdVQUdFUy5jcz17ZE06e2w6W2hsanMuVUlSXSxjOlsiY29tbWVu +dCIsInN0cmluZyIsIm51bWJlciJdLGs6eyJhYnN0cmFjdCI6MSxhczoxLGJhc2U6 +MSxib29sOjEsImJyZWFrIjoxLCJieXRlIjoxLCJjYXNlIjoxLCJjYXRjaCI6MSwi +Y2hhciI6MSxjaGVja2VkOjEsImNsYXNzIjoxLCJjb25zdCI6MSwiY29udGludWUi +OjEsZGVjaW1hbDoxLCJkZWZhdWx0IjoxLGRlbGVnYXRlOjEsImRvIjoxLCJkbyI6 +MSwiZG91YmxlIjoxLCJlbHNlIjoxLCJlbnVtIjoxLGV2ZW50OjEsZXhwbGljaXQ6 +MSxleHRlcm46MSwiZmFsc2UiOjEsImZpbmFsbHkiOjEsZml4ZWQ6MSwiZmxvYXQi +OjEsImZvciI6MSxmb3JlYWNoOjEsImdvdG8iOjEsImlmIjoxLGltcGxpY2l0OjEs +ImluIjoxLCJpbnQiOjEsImludGVyZmFjZSI6MSxpbnRlcm5hbDoxLGlzOjEsbG9j +azoxLCJsb25nIjoxLG5hbWVzcGFjZToxLCJuZXciOjEsIm51bGwiOjEsb2JqZWN0 +OjEsb3BlcmF0b3I6MSxvdXQ6MSxvdmVycmlkZToxLHBhcmFtczoxLCJwcml2YXRl +IjoxLCJwcm90ZWN0ZWQiOjEsInB1YmxpYyI6MSxyZWFkb25seToxLHJlZjoxLCJy +ZXR1cm4iOjEsc2J5dGU6MSxzZWFsZWQ6MSwic2hvcnQiOjEsc2l6ZW9mOjEsc3Rh +Y2thbGxvYzoxLCJzdGF0aWMiOjEsc3RyaW5nOjEsc3RydWN0OjEsInN3aXRjaCI6 +MSwidGhpcyI6MSwidGhyb3ciOjEsInRydWUiOjEsInRyeSI6MSwidHlwZW9mIjox +LHVpbnQ6MSx1bG9uZzoxLHVuY2hlY2tlZDoxLHVuc2FmZToxLHVzaG9ydDoxLHVz +aW5nOjEsdmlydHVhbDoxLCJ2b2xhdGlsZSI6MSwidm9pZCI6MSwid2hpbGUiOjEs +YXNjZW5kaW5nOjEsZGVzY2VuZGluZzoxLGZyb206MSxnZXQ6MSxncm91cDoxLGlu +dG86MSxqb2luOjEsbGV0OjEsb3JkZXJieToxLHBhcnRpYWw6MSxzZWxlY3Q6MSxz +ZXQ6MSx2YWx1ZToxLCJ2YXIiOjEsd2hlcmU6MSx5aWVsZDoxfX0sbTpbe2NOOiJj +b21tZW50IixiOiIvLy8iLGU6IiQiLHJCOnRydWUsYzpbInhtbERvY1RhZyJdfSx7 +Y046InhtbERvY1RhZyIsYjoiLy8vfDwhLS18LS0+IixlOiJeIn0se2NOOiJ4bWxE +b2NUYWciLGI6IjwvPyIsZToiPiJ9LHtjTjoic3RyaW5nIixiOidAIicsZTonIics +YzpbInF1b3RlUXVvdGUiXX0se2NOOiJxdW90ZVF1b3RlIixiOiciIicsZToiXiJ9 +LGhsanMuQ0xDTSxobGpzLkNCTENMTSxobGpzLkFTTSxobGpzLlFTTSxobGpzLkJF +LGhsanMuQ05NXX07aGxqcy5MQU5HVUFHRVMucnVieT1mdW5jdGlvbigpe3ZhciBh +PSJbYS16QS1aX11bYS16QS1aMC05X10qKFxcIXxcXD8pPyI7dmFyIGM9IlthLXpB +LVpfXVxcdypbIT89XT98Wy0rfl1cXEB8PDx8Pj58PX58PT09P3w8PT58Wzw+XT0/ +fFxcKlxcKnxbLS8rJV4mKn5gfF18XFxbXFxdPT8iO3ZhciBiPVsiY29tbWVudCIs +InN0cmluZyIsImNoYXIiLCJjbGFzcyIsImZ1bmN0aW9uIiwiY29uc3RhbnQiLCJz +eW1ib2wiLCJudW1iZXIiLCJ2YXJpYWJsZSIsImlkZW50aWZpZXIiLCJyZWdleHBf +Y29udGFpbmVyIl07dmFyIGQ9e2tleXdvcmQ6e2FuZDoxLCJmYWxzZSI6MSx0aGVu +OjEsZGVmaW5lZDoxLG1vZHVsZToxLCJpbiI6MSwicmV0dXJuIjoxLHJlZG86MSwi +aWYiOjEsQkVHSU46MSxyZXRyeToxLGVuZDoxLCJmb3IiOjEsInRydWUiOjEsc2Vs +ZjoxLHdoZW46MSxuZXh0OjEsdW50aWw6MSwiZG8iOjEsYmVnaW46MSx1bmxlc3M6 +MSxFTkQ6MSxyZXNjdWU6MSxuaWw6MSwiZWxzZSI6MSwiYnJlYWsiOjEsdW5kZWY6 +MSxub3Q6MSwic3VwZXIiOjEsImNsYXNzIjoxLCJjYXNlIjoxLHJlcXVpcmU6MSx5 +aWVsZDoxLGFsaWFzOjEsIndoaWxlIjoxLGVuc3VyZToxLGVsc2lmOjEsb3I6MSxk +ZWY6MX0sa2V5bWV0aG9kczp7X19pZF9fOjEsX19zZW5kX186MSxhYm9ydDoxLGFi +czoxLCJhbGw/IjoxLGFsbG9jYXRlOjEsYW5jZXN0b3JzOjEsImFueT8iOjEsYXJp +dHk6MSxhc3NvYzoxLGF0OjEsYXRfZXhpdDoxLGF1dG9sb2FkOjEsImF1dG9sb2Fk +PyI6MSwiYmV0d2Vlbj8iOjEsYmluZGluZzoxLGJpbm1vZGU6MSwiYmxvY2tfZ2l2 +ZW4/IjoxLGNhbGw6MSxjYWxsY2M6MSxjYWxsZXI6MSxjYXBpdGFsaXplOjEsImNh +cGl0YWxpemUhIjoxLGNhc2VjbXA6MSwiY2F0Y2giOjEsY2VpbDoxLGNlbnRlcjox +LGNob21wOjEsImNob21wISI6MSxjaG9wOjEsImNob3AhIjoxLGNocjoxLCJjbGFz +cyI6MSxjbGFzc19ldmFsOjEsImNsYXNzX3ZhcmlhYmxlX2RlZmluZWQ/IjoxLGNs +YXNzX3ZhcmlhYmxlczoxLGNsZWFyOjEsY2xvbmU6MSxjbG9zZToxLGNsb3NlX3Jl +YWQ6MSxjbG9zZV93cml0ZToxLCJjbG9zZWQ/IjoxLGNvZXJjZToxLGNvbGxlY3Q6 +MSwiY29sbGVjdCEiOjEsY29tcGFjdDoxLCJjb21wYWN0ISI6MSxjb25jYXQ6MSwi +Y29uc3RfZGVmaW5lZD8iOjEsY29uc3RfZ2V0OjEsY29uc3RfbWlzc2luZzoxLGNv +bnN0X3NldDoxLGNvbnN0YW50czoxLGNvdW50OjEsY3J5cHQ6MSwiZGVmYXVsdCI6 +MSxkZWZhdWx0X3Byb2M6MSwiZGVsZXRlIjoxLCJkZWxldGUhIjoxLGRlbGV0ZV9h +dDoxLGRlbGV0ZV9pZjoxLGRldGVjdDoxLGRpc3BsYXk6MSxkaXY6MSxkaXZtb2Q6 +MSxkb3duY2FzZToxLCJkb3duY2FzZSEiOjEsZG93bnRvOjEsZHVtcDoxLGR1cDox +LGVhY2g6MSxlYWNoX2J5dGU6MSxlYWNoX2luZGV4OjEsZWFjaF9rZXk6MSxlYWNo +X2xpbmU6MSxlYWNoX3BhaXI6MSxlYWNoX3ZhbHVlOjEsZWFjaF93aXRoX2luZGV4 +OjEsImVtcHR5PyI6MSxlbnRyaWVzOjEsZW9mOjEsImVvZj8iOjEsImVxbD8iOjEs +ImVxdWFsPyI6MSwiZXZhbCI6MSxleGVjOjEsZXhpdDoxLCJleGl0ISI6MSxleHRl +bmQ6MSxmYWlsOjEsZmNudGw6MSxmZXRjaDoxLGZpbGVubzoxLGZpbGw6MSxmaW5k +OjEsZmluZF9hbGw6MSxmaXJzdDoxLGZsYXR0ZW46MSwiZmxhdHRlbiEiOjEsZmxv +b3I6MSxmbHVzaDoxLGZvcl9mZDoxLGZvcmVhY2g6MSxmb3JrOjEsZm9ybWF0OjEs +ZnJlZXplOjEsImZyb3plbj8iOjEsZnN5bmM6MSxnZXRjOjEsZ2V0czoxLGdsb2Jh +bF92YXJpYWJsZXM6MSxncmVwOjEsZ3N1YjoxLCJnc3ViISI6MSwiaGFzX2tleT8i +OjEsImhhc192YWx1ZT8iOjEsaGFzaDoxLGhleDoxLGlkOjEsaW5jbHVkZToxLCJp +bmNsdWRlPyI6MSxpbmNsdWRlZF9tb2R1bGVzOjEsaW5kZXg6MSxpbmRleGVzOjEs +aW5kaWNlczoxLGluZHVjZWRfZnJvbToxLGluamVjdDoxLGluc2VydDoxLGluc3Bl +Y3Q6MSxpbnN0YW5jZV9ldmFsOjEsaW5zdGFuY2VfbWV0aG9kOjEsaW5zdGFuY2Vf +bWV0aG9kczoxLCJpbnN0YW5jZV9vZj8iOjEsImluc3RhbmNlX3ZhcmlhYmxlX2Rl +ZmluZWQ/IjoxLGluc3RhbmNlX3ZhcmlhYmxlX2dldDoxLGluc3RhbmNlX3Zhcmlh +YmxlX3NldDoxLGluc3RhbmNlX3ZhcmlhYmxlczoxLCJpbnRlZ2VyPyI6MSxpbnRl +cm46MSxpbnZlcnQ6MSxpb2N0bDoxLCJpc19hPyI6MSxpc2F0dHk6MSwiaXRlcmF0 +b3I/IjoxLGpvaW46MSwia2V5PyI6MSxrZXlzOjEsImtpbmRfb2Y/IjoxLGxhbWJk +YToxLGxhc3Q6MSxsZW5ndGg6MSxsaW5lbm86MSxsanVzdDoxLGxvYWQ6MSxsb2Nh +bF92YXJpYWJsZXM6MSxsb29wOjEsbHN0cmlwOjEsImxzdHJpcCEiOjEsbWFwOjEs +Im1hcCEiOjEsbWF0Y2g6MSxtYXg6MSwibWVtYmVyPyI6MSxtZXJnZToxLCJtZXJn +ZSEiOjEsbWV0aG9kOjEsIm1ldGhvZF9kZWZpbmVkPyI6MSxtZXRob2RfbWlzc2lu +ZzoxLG1ldGhvZHM6MSxtaW46MSxtb2R1bGVfZXZhbDoxLG1vZHVsbzoxLG5hbWU6 +MSxuZXN0aW5nOjEsIm5ldyI6MSxuZXh0OjEsIm5leHQhIjoxLCJuaWw/IjoxLG5p +dGVtczoxLCJub256ZXJvPyI6MSxvYmplY3RfaWQ6MSxvY3Q6MSxvcGVuOjEscGFj +azoxLHBhcnRpdGlvbjoxLHBpZDoxLHBpcGU6MSxwb3A6MSxwb3BlbjoxLHBvczox +LHByZWM6MSxwcmVjX2Y6MSxwcmVjX2k6MSxwcmludDoxLHByaW50ZjoxLHByaXZh +dGVfY2xhc3NfbWV0aG9kOjEscHJpdmF0ZV9pbnN0YW5jZV9tZXRob2RzOjEsInBy +aXZhdGVfbWV0aG9kX2RlZmluZWQ/IjoxLHByaXZhdGVfbWV0aG9kczoxLHByb2M6 +MSxwcm90ZWN0ZWRfaW5zdGFuY2VfbWV0aG9kczoxLCJwcm90ZWN0ZWRfbWV0aG9k +X2RlZmluZWQ/IjoxLHByb3RlY3RlZF9tZXRob2RzOjEscHVibGljX2NsYXNzX21l +dGhvZDoxLHB1YmxpY19pbnN0YW5jZV9tZXRob2RzOjEsInB1YmxpY19tZXRob2Rf +ZGVmaW5lZD8iOjEscHVibGljX21ldGhvZHM6MSxwdXNoOjEscHV0YzoxLHB1dHM6 +MSxxdW86MSxyYWlzZToxLHJhbmQ6MSxyYXNzb2M6MSxyZWFkOjEscmVhZF9ub25i +bG9jazoxLHJlYWRjaGFyOjEscmVhZGxpbmU6MSxyZWFkbGluZXM6MSxyZWFkcGFy +dGlhbDoxLHJlaGFzaDoxLHJlamVjdDoxLCJyZWplY3QhIjoxLHJlbWFpbmRlcjox +LHJlb3BlbjoxLHJlcGxhY2U6MSxyZXF1aXJlOjEsInJlc3BvbmRfdG8/IjoxLHJl +dmVyc2U6MSwicmV2ZXJzZSEiOjEscmV2ZXJzZV9lYWNoOjEscmV3aW5kOjEscmlu +ZGV4OjEscmp1c3Q6MSxyb3VuZDoxLHJzdHJpcDoxLCJyc3RyaXAhIjoxLHNjYW46 +MSxzZWVrOjEsc2VsZWN0OjEsc2VuZDoxLHNldF90cmFjZV9mdW5jOjEsc2hpZnQ6 +MSxzaW5nbGV0b25fbWV0aG9kX2FkZGVkOjEsc2luZ2xldG9uX21ldGhvZHM6MSxz +aXplOjEsc2xlZXA6MSxzbGljZToxLCJzbGljZSEiOjEsc29ydDoxLCJzb3J0ISI6 +MSxzb3J0X2J5OjEsc3BsaXQ6MSxzcHJpbnRmOjEsc3F1ZWV6ZToxLCJzcXVlZXpl +ISI6MSxzcmFuZDoxLHN0YXQ6MSxzdGVwOjEsc3RvcmU6MSxzdHJpcDoxLCJzdHJp +cCEiOjEsc3ViOjEsInN1YiEiOjEsc3VjYzoxLCJzdWNjISI6MSxzdW06MSxzdXBl +cmNsYXNzOjEsc3dhcGNhc2U6MSwic3dhcGNhc2UhIjoxLHN5bmM6MSxzeXNjYWxs +OjEsc3lzb3BlbjoxLHN5c3JlYWQ6MSxzeXNzZWVrOjEsc3lzdGVtOjEsc3lzd3Jp +dGU6MSx0YWludDoxLCJ0YWludGVkPyI6MSx0ZWxsOjEsdGVzdDoxLCJ0aHJvdyI6 +MSx0aW1lczoxLHRvX2E6MSx0b19hcnk6MSx0b19mOjEsdG9faGFzaDoxLHRvX2k6 +MSx0b19pbnQ6MSx0b19pbzoxLHRvX3Byb2M6MSx0b19zOjEsdG9fc3RyOjEsdG9f +c3ltOjEsdHI6MSwidHIhIjoxLHRyX3M6MSwidHJfcyEiOjEsdHJhY2VfdmFyOjEs +dHJhbnNwb3NlOjEsdHJhcDoxLHRydW5jYXRlOjEsInR0eT8iOjEsdHlwZToxLHVu +Z2V0YzoxLHVuaXE6MSwidW5pcSEiOjEsdW5wYWNrOjEsdW5zaGlmdDoxLHVudGFp +bnQ6MSx1bnRyYWNlX3ZhcjoxLHVwY2FzZToxLCJ1cGNhc2UhIjoxLHVwZGF0ZTox +LHVwdG86MSwidmFsdWU/IjoxLHZhbHVlczoxLHZhbHVlc19hdDoxLHdhcm46MSx3 +cml0ZToxLHdyaXRlX25vbmJsb2NrOjEsInplcm8/IjoxLHppcDoxfX07cmV0dXJu +e2RNOntsOlthXSxjOmIsazpkfSxtOlt7Y046ImNvbW1lbnQiLGI6IiMiLGU6IiQi +LGM6WyJ5YXJkb2N0YWciXX0se2NOOiJ5YXJkb2N0YWciLGI6IkBbQS1aYS16XSsi +LGU6Il4ifSx7Y046ImNvbW1lbnQiLGI6Il5cXD1iZWdpbiIsZToiXlxcPWVuZCIs +YzpbInlhcmRvY3RhZyJdLHI6MTB9LHtjTjoiY29tbWVudCIsYjoiXl9fRU5EX18i +LGU6IlxcbiQifSx7Y046InBhcmFtcyIsYjoiXFwoIixlOiJcXCkiLGw6W2FdLGs6 +ZCxjOmJ9LHtjTjoiZnVuY3Rpb24iLGI6IlxcYmRlZlxccysiLGU6IiB8JHw7Iixs +OlthXSxrOmQsYzpbImZ0aXRsZSIsInBhcmFtcyIsImNvbW1lbnQiXX0se2NOOiJm +dGl0bGUiLGRpc3BsYXlDbGFzc05hbWU6InRpdGxlIixiOmMsZToiXiIsbDpbYV0s +azpkfSx7Y046ImNsYXNzIixiOiJcXGIoY2xhc3N8bW9kdWxlKVxcYiIsZToiJHw7 +IixsOltobGpzLlVJUl0sazpkLGM6WyJ0aXRsZSIsImluaGVyaXRhbmNlIiwiY29t +bWVudCJdLGs6eyJjbGFzcyI6MSxtb2R1bGU6MX19LHtjTjoidGl0bGUiLGI6IltB +LVphLXpfXVxcdyooOjpcXHcrKSooXFw/fFxcISk/IixlOiJeIixyOjB9LHtjTjoi +aW5oZXJpdGFuY2UiLGI6IjxcXHMqIixlOiJeIixjOlsicGFyZW50Il19LHtjTjoi +cGFyZW50IixiOiIoIitobGpzLklSKyI6Oik/IitobGpzLklSLGU6Il4ifSx7Y046 +Im51bWJlciIsYjoiKFxcYjBbMC03X10rKXwoXFxiMHhbMC05YS1mQS1GX10rKXwo +XFxiWzEtOV1bMC05X10qKFxcLlswLTlfXSspPyl8WzBfXVxcYiIsZToiXiIscjow +fSx7Y046Im51bWJlciIsYjoiXFw/XFx3IixlOiJeIn0se2NOOiJzdHJpbmciLGI6 +IiciLGU6IiciLGM6WyJlc2NhcGUiLCJzdWJzdCJdLHI6MH0se2NOOiJzdHJpbmci +LGI6JyInLGU6JyInLGM6WyJlc2NhcGUiLCJzdWJzdCJdLHI6MH0se2NOOiJzdHJp +bmciLGI6IiVbcXddP1xcKCIsZToiXFwpIixjOlsiZXNjYXBlIiwic3Vic3QiXSxy +OjEwfSx7Y046InN0cmluZyIsYjoiJVtxd10/XFxbIixlOiJcXF0iLGM6WyJlc2Nh +cGUiLCJzdWJzdCJdLHI6MTB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT97IixlOiJ9 +IixjOlsiZXNjYXBlIiwic3Vic3QiXSxyOjEwfSx7Y046InN0cmluZyIsYjoiJVtx +d10/PCIsZToiPiIsYzpbImVzY2FwZSIsInN1YnN0Il0scjoxMH0se2NOOiJzdHJp +bmciLGI6IiVbcXddPy8iLGU6Ii8iLGM6WyJlc2NhcGUiLCJzdWJzdCJdLHI6MTB9 +LHtjTjoic3RyaW5nIixiOiIlW3F3XT8lIixlOiIlIixjOlsiZXNjYXBlIiwic3Vi +c3QiXSxyOjEwfSx7Y046InN0cmluZyIsYjoiJVtxd10/LSIsZToiLSIsYzpbImVz +Y2FwZSIsInN1YnN0Il0scjoxMH0se2NOOiJzdHJpbmciLGI6IiVbcXddP1xcfCIs +ZToiXFx8IixjOlsiZXNjYXBlIiwic3Vic3QiXSxyOjEwfSx7Y046ImNvbnN0YW50 +IixiOiIoOjopPyhbQS1aXVxcdyooOjopPykrIixlOiJeIixyOjB9LHtjTjoic3lt +Ym9sIixiOiI6IixlOiJeIixjOlsic3RyaW5nIiwiaWRlbnRpZmllciJdfSx7Y046 +ImlkZW50aWZpZXIiLGI6YSxlOiJeIixsOlthXSxrOmQscjowfSxobGpzLkJFLHtj +Tjoic3Vic3QiLGI6IiNcXHsiLGU6In0iLGw6W2FdLGs6ZCxjOmJ9LHtjTjoicmVn +ZXhwX2NvbnRhaW5lciIsYjoiKCIraGxqcy5SU1IrIilcXHMqIixlOiJeIixuTTp0 +cnVlLGM6WyJjb21tZW50IiwicmVnZXhwIl0scjowfSx7Y046InJlZ2V4cCIsYjoi +LyIsZToiL1thLXpdKiIsaToiXFxuIixjOlsiZXNjYXBlIl19LHtjTjoidmFyaWFi +bGUiLGI6IihcXCRcXFcpfCgoXFwkfFxcQFxcQD8pKFxcdyspKSIsZToiXiJ9XX19 +KCk7aGxqcy5YTUxfQ09NTUVOVD17Y046ImNvbW1lbnQiLGI6IjwhLS0iLGU6Ii0t +PiJ9O2hsanMuWE1MX0FUVFI9e2NOOiJhdHRyaWJ1dGUiLGI6Ilxcc1tBLVphLXow +LTlcXC5fOi1dKz0iLGU6Il4iLGM6WyJ2YWx1ZSJdfTtobGpzLlhNTF9WQUxVRV9R +VU9UPXtjTjoidmFsdWUiLGI6JyInLGU6JyInfTtobGpzLlhNTF9WQUxVRV9BUE9T +PXtjTjoidmFsdWUiLGI6IiciLGU6IicifTtobGpzLkxBTkdVQUdFUy54bWw9e2RN +OntjOlsicGkiLCJjb21tZW50IiwiY2RhdGEiLCJ0YWciXX0sY0k6dHJ1ZSxtOlt7 +Y046InBpIixiOiI8XFw/IixlOiJcXD8+IixyOjEwfSxobGpzLlhNTF9DT01NRU5U +LHtjTjoiY2RhdGEiLGI6IjxcXCFcXFtDREFUQVxcWyIsZToiXFxdXFxdPiJ9LHtj +TjoidGFnIixiOiI8Lz8iLGU6Ij4iLGM6WyJ0aXRsZSIsInRhZ19pbnRlcm5hbCJd +LHI6MS41fSx7Y046InRpdGxlIixiOiJbQS1aYS16MC05XFwuXzotXSsiLGU6Il4i +LHI6MH0se2NOOiJ0YWdfaW50ZXJuYWwiLGI6Il4iLGVXOnRydWUsbk06dHJ1ZSxj +OlsiYXR0cmlidXRlIl0scjowLGk6IltcXCtcXC5dIn0saGxqcy5YTUxfQVRUUixo +bGpzLlhNTF9WQUxVRV9RVU9ULGhsanMuWE1MX1ZBTFVFX0FQT1NdfTtobGpzLkhU +TUxfVEFHUz17Y29kZToxLGtiZDoxLGZvbnQ6MSxub3NjcmlwdDoxLHN0eWxlOjEs +aW1nOjEsdGl0bGU6MSxtZW51OjEsdHQ6MSx0cjoxLHBhcmFtOjEsbGk6MSx0Zm9v +dDoxLHRoOjEsaW5wdXQ6MSx0ZDoxLGRsOjEsYmxvY2txdW90ZToxLGZpZWxkc2V0 +OjEsYmlnOjEsZGQ6MSxhYmJyOjEsb3B0Z3JvdXA6MSxkdDoxLGJ1dHRvbjoxLGlz +aW5kZXg6MSxwOjEsc21hbGw6MSxkaXY6MSxkaXI6MSxlbToxLGZyYW1lOjEsbWV0 +YToxLHN1YjoxLGJkbzoxLGxhYmVsOjEsYWNyb255bToxLHN1cDoxLGJvZHk6MSx4 +bWw6MSxiYXNlZm9udDoxLGJhc2U6MSxicjoxLGFkZHJlc3M6MSxzdHJvbmc6MSxs +ZWdlbmQ6MSxvbDoxLHNjcmlwdDoxLGNhcHRpb246MSxzOjEsY29sOjEsaDI6MSxo +MzoxLGgxOjEsaDY6MSxoNDoxLGg1OjEsdGFibGU6MSxzZWxlY3Q6MSxub2ZyYW1l +czoxLHNwYW46MSxhcmVhOjEsZGZuOjEsc3RyaWtlOjEsY2l0ZToxLHRoZWFkOjEs +aGVhZDoxLG9wdGlvbjoxLGZvcm06MSxocjoxLCJ2YXIiOjEsbGluazoxLGI6MSxj +b2xncm91cDoxLHVsOjEsYXBwbGV0OjEsZGVsOjEsaWZyYW1lOjEscHJlOjEsZnJh +bWVzZXQ6MSxpbnM6MSx0Ym9keToxLGh0bWw6MSxzYW1wOjEsbWFwOjEsb2JqZWN0 +OjEsYToxLHhtbG5zOjEsY2VudGVyOjEsdGV4dGFyZWE6MSxpOjEscToxLHU6MX07 +aGxqcy5IVE1MX0RPQ1RZUEU9e2NOOiJkb2N0eXBlIixiOiI8IURPQ1RZUEUiLGU6 +Ij4iLHI6MTB9O2hsanMuSFRNTF9BVFRSPXtjTjoiYXR0cmlidXRlIixiOiJcXHNb +YS16QS1aXFw6Xy1dKz0iLGU6Il4iLGM6WyJ2YWx1ZSJdfTtobGpzLkhUTUxfU0hP +UlRfQVRUUj17Y046ImF0dHJpYnV0ZSIsYjoiIFthLXpBLVpdKyIsZToiXiJ9O2hs +anMuSFRNTF9WQUxVRT17Y046InZhbHVlIixiOiJbYS16QS1aMC05XSsiLGU6Il4i +fTtobGpzLkxBTkdVQUdFUy5odG1sPXtkTTp7YzpbInRhZyIsImNvbW1lbnQiLCJk +b2N0eXBlIiwidmJzY3JpcHQiXX0sY0k6dHJ1ZSxtOltobGpzLlhNTF9DT01NRU5U +LGhsanMuSFRNTF9ET0NUWVBFLHtjTjoidGFnIixsOltobGpzLklSXSxrOmhsanMu +SFRNTF9UQUdTLGI6IjxzdHlsZSIsZToiPiIsYzpbImF0dHJpYnV0ZSJdLGk6Iltc +XCtcXC5dIixzdGFydHM6ImNzcyJ9LHtjTjoidGFnIixsOltobGpzLklSXSxrOmhs +anMuSFRNTF9UQUdTLGI6IjxzY3JpcHQiLGU6Ij4iLGM6WyJhdHRyaWJ1dGUiXSxp +OiJbXFwrXFwuXSIsc3RhcnRzOiJqYXZhc2NyaXB0In0se2NOOiJ0YWciLGw6W2hs +anMuSVJdLGs6aGxqcy5IVE1MX1RBR1MsYjoiPFtBLVphLXovXSIsZToiPiIsYzpb +ImF0dHJpYnV0ZSJdLGk6IltcXCtcXC5dIn0se2NOOiJjc3MiLGU6Ijwvc3R5bGU+ +IixyRTp0cnVlLHN1Ykxhbmd1YWdlOiJjc3MifSx7Y046ImphdmFzY3JpcHQiLGU6 +IjxcL3NjcmlwdD4iLHJFOnRydWUsc3ViTGFuZ3VhZ2U6ImphdmFzY3JpcHQifSxo +bGpzLkhUTUxfQVRUUixobGpzLkhUTUxfU0hPUlRfQVRUUixobGpzLlhNTF9WQUxV +RV9RVU9ULGhsanMuWE1MX1ZBTFVFX0FQT1MsaGxqcy5IVE1MX1ZBTFVFLHtjTjoi +dmJzY3JpcHQiLGI6IjwlIixlOiIlPiIsc3ViTGFuZ3VhZ2U6InZic2NyaXB0In1d +fTtobGpzLkxBTkdVQUdFUy5qYXZhc2NyaXB0PXtkTTp7bDpbaGxqcy5VSVJdLGM6 +WyJzdHJpbmciLCJjb21tZW50IiwibnVtYmVyIiwicmVnZXhwX2NvbnRhaW5lciIs +ImZ1bmN0aW9uIl0sazp7a2V5d29yZDp7ImluIjoxLCJpZiI6MSwiZm9yIjoxLCJ3 +aGlsZSI6MSwiZmluYWxseSI6MSwidmFyIjoxLCJuZXciOjEsImZ1bmN0aW9uIjox +LCJkbyI6MSwicmV0dXJuIjoxLCJ2b2lkIjoxLCJlbHNlIjoxLCJicmVhayI6MSwi +Y2F0Y2giOjEsImluc3RhbmNlb2YiOjEsIndpdGgiOjEsInRocm93IjoxLCJjYXNl +IjoxLCJkZWZhdWx0IjoxLCJ0cnkiOjEsInRoaXMiOjEsInN3aXRjaCI6MSwiY29u +dGludWUiOjEsInR5cGVvZiI6MSwiZGVsZXRlIjoxfSxsaXRlcmFsOnsidHJ1ZSI6 +MSwiZmFsc2UiOjEsIm51bGwiOjF9fX0sbTpbaGxqcy5DTENNLGhsanMuQ0JMQ0xN +LGhsanMuQ05NLGhsanMuQVNNLGhsanMuUVNNLGhsanMuQkUse2NOOiJyZWdleHBf +Y29udGFpbmVyIixiOiIoIitobGpzLlJTUisifGNhc2V8cmV0dXJufHRocm93KVxc +cyoiLGU6Il4iLG5NOnRydWUsbDpbaGxqcy5JUl0sazp7InJldHVybiI6MSwidGhy +b3ciOjEsImNhc2UiOjF9LGM6WyJjb21tZW50IiwicmVnZXhwIl0scjowfSx7Y046 +InJlZ2V4cCIsYjoiLy4qP1teXFxcXC9dL1tnaW1dKiIsZToiXiJ9LHtjTjoiZnVu +Y3Rpb24iLGI6IlxcYmZ1bmN0aW9uXFxiIixlOiJ7IixsOltobGpzLlVJUl0sazp7 +ImZ1bmN0aW9uIjoxfSxjOlsidGl0bGUiLCJwYXJhbXMiXX0se2NOOiJ0aXRsZSIs +YjoiW0EtWmEteiRfXVswLTlBLVphLXokX10qIixlOiJeIn0se2NOOiJwYXJhbXMi +LGI6IlxcKCIsZToiXFwpIixjOlsic3RyaW5nIiwiY29tbWVudCJdfV19O2hsanMu +TEFOR1VBR0VTLmx1YT1mdW5jdGlvbigpe3ZhciBhPSJcXFs9KlxcWyIsYj0iXFxd +PSpcXF0iO3JldHVybntkTTp7bDpbaGxqcy5VSVJdLGs6e2tleXdvcmQ6e2FuZDox +LCJicmVhayI6MSwiZG8iOjEsImVsc2UiOjEsZWxzZWlmOjEsZW5kOjEsImZhbHNl +IjoxLCJmb3IiOjEsImlmIjoxLCJpbiI6MSxsb2NhbDoxLG5pbDoxLG5vdDoxLG9y +OjEscmVwZWF0OjEsInJldHVybiI6MSx0aGVuOjEsInRydWUiOjEsdW50aWw6MSwi +d2hpbGUiOjF9LGJ1aWx0X2luOntfRzoxLF9WRVJTSU9OOjEsYXNzZXJ0OjEsY29s +bGVjdGdhcmJhZ2U6MSxkb2ZpbGU6MSxlcnJvcjoxLGdldGZlbnY6MSxnZXRtZXRh +dGFibGU6MSxpcGFpcnM6MSxsb2FkOjEsbG9hZGZpbGU6MSxsb2Fkc3RyaW5nOjEs +bW9kdWxlOjEsbmV4dDoxLHBhaXJzOjEscGNhbGw6MSxwcmludDoxLHJhd2VxdWFs +OjEscmF3Z2V0OjEscmF3c2V0OjEscmVxdWlyZToxLHNlbGVjdDoxLHNldGZlbnY6 +MSxzZXRtZXRhdGFibGU6MSx0b251bWJlcjoxLHRvc3RyaW5nOjEsdHlwZToxLHVu +cGFjazoxLHhwY2FsbDoxLGNvcm91dGluZToxLGRlYnVnOjEsaW86MSxtYXRoOjEs +b3M6MSwicGFja2FnZSI6MSxzdHJpbmc6MSx0YWJsZToxfX0sYzpbImNvbW1lbnQi +LCJmdW5jdGlvbiIsIm51bWJlciIsInN0cmluZyJdfSxtOlt7Y046ImNvbW1lbnQi +LGI6Ii0tKD8hIithKyIpIixlOiIkIn0se2NOOiJjb21tZW50IixiOiItLSIrYSxl +OmIsYzpbImxvbmdfYnJhY2tldHMiXSxyOjEwfSx7Y046ImxvbmdfYnJhY2tldHMi +LGI6YSxlOmIsYzpbImxvbmdfYnJhY2tldHMiXSxuTTp0cnVlfSx7Y046ImZ1bmN0 +aW9uIixiOiJcXGJmdW5jdGlvblxcYiIsZToiXFwpIixsOltobGpzLlVJUl0sazp7 +ImZ1bmN0aW9uIjoxfSxjOlsidGl0bGUiLCJwYXJhbXMiLCJjb21tZW50Il19LHtj +TjoidGl0bGUiLGI6IihbX2EtekEtWl1cXHcqXFwuKSooW19hLXpBLVpdXFx3Kjop +P1tfYS16QS1aXVxcdyoiLGU6Il4ifSx7Y046InBhcmFtcyIsYjoiXFwoIixlVzp0 +cnVlLGM6WyJjb21tZW50Il19LGhsanMuQ05NLGhsanMuQVNNLGhsanMuUVNNLHtj +Tjoic3RyaW5nIixiOmEsZTpiLGM6WyJsb25nX2JyYWNrZXRzIl0scjoxMH0saGxq +cy5CRV19fSgpO2hsanMuTEFOR1VBR0VTLmxpc3A9ZnVuY3Rpb24oKXt2YXIgYT0i +W2EtekEtWl9cXC1cXCtcXCpcXC9cXDxcXD1cXD5cXCZcXCNdW2EtekEtWjAtOV9c +XC1cXCtcXCpcXC9cXDxcXD1cXD5cXCZcXCNdKiI7dmFyIGI9IihcXC18XFwrKT9c +XGQrKFxcLlxcZCt8XFwvXFxkKyk/KChkfGV8ZnxsfHMpKFxcK3xcXC0pP1xcZCsp +PyI7cmV0dXJue2NJOnRydWUsZE06e2w6W2FdLGM6WyJsaXRlcmFsIiwibnVtYmVy +Iiwic3RyaW5nIiwiY29tbWVudCIsInF1b3RlZCIsImxpc3QiXSxpOiJbXlxcc10i +fSxtOlt7Y046InN0cmluZyIsYjonIicsZTonIicsYzpbImVzY2FwZSJdLHI6MH0s +aGxqcy5CRSx7Y046Im51bWJlciIsYjpiLGU6Il4ifSx7Y046Im51bWJlciIsYjoi +I2JbMC0xXSsoL1swLTFdKyk/IixlOiJeIn0se2NOOiJudW1iZXIiLGI6IiNvWzAt +N10rKC9bMC03XSspPyIsZToiXiJ9LHtjTjoibnVtYmVyIixiOiIjeFswLTlhLWZd +KygvWzAtOWEtZl0rKT8iLGU6Il4ifSx7Y046Im51bWJlciIsYjoiI2NcXCgiK2Ir +IiArIitiLGU6IlxcKSJ9LHtjTjoiY29tbWVudCIsYjoiOyIsZToiJCJ9LHtjTjoi +cXVvdGVkIixiOiJbJ2BdXFwoIixlOiJcXCkiLGM6WyJudW1iZXIiLCJzdHJpbmci +LCJ2YXJpYWJsZSIsImtleXdvcmQiLCJxdW90ZWRfbGlzdCJdfSx7Y046InF1b3Rl +ZCIsYjoiXFwocXVvdGUgIixlOiJcXCkiLGM6WyJudW1iZXIiLCJzdHJpbmciLCJ2 +YXJpYWJsZSIsImtleXdvcmQiLCJxdW90ZWRfbGlzdCJdLGw6W2FdLGs6e3RpdGxl +OntxdW90ZToxfX19LHtjTjoicXVvdGVkX2xpc3QiLGI6IlxcKCIsZToiXFwpIixj +OlsicXVvdGVkX2xpc3QiLCJsaXRlcmFsIiwibnVtYmVyIiwic3RyaW5nIl19LHtj +TjoibGlzdCIsYjoiXFwoIixlOiJcXCkiLGM6WyJ0aXRsZSIsImJvZHkiXX0se2NO +OiJ0aXRsZSIsYjphLGU6Il4iLGVXOnRydWV9LHtjTjoiYm9keSIsYjoiXiIsZVc6 +dHJ1ZSxlRTp0cnVlLGM6WyJxdW90ZWQiLCJsaXN0IiwibGl0ZXJhbCIsIm51bWJl +ciIsInN0cmluZyIsImNvbW1lbnQiLCJ2YXJpYWJsZSIsImtleXdvcmQiXX0se2NO +OiJrZXl3b3JkIixiOiJbOiZdIithLGU6Il4ifSx7Y046InZhcmlhYmxlIixiOiJc +XCoiLGU6IlxcKiJ9LHtjTjoibGl0ZXJhbCIsYjoiXFxiKHR7MX18bmlsKVxcYiIs +ZToiXiJ9XX19KCk7aGxqcy5MQU5HVUFHRVMuamF2YT17ZE06e2w6W2hsanMuVUlS +XSxjOlsiamF2YWRvYyIsImNvbW1lbnQiLCJzdHJpbmciLCJjbGFzcyIsIm51bWJl +ciIsImFubm90YXRpb24iXSxrOnsiZmFsc2UiOjEsInN5bmNocm9uaXplZCI6MSwi +aW50IjoxLCJhYnN0cmFjdCI6MSwiZmxvYXQiOjEsInByaXZhdGUiOjEsImNoYXIi +OjEsImludGVyZmFjZSI6MSwiYm9vbGVhbiI6MSwic3RhdGljIjoxLCJudWxsIjox +LCJpZiI6MSwiY29uc3QiOjEsImZvciI6MSwidHJ1ZSI6MSwid2hpbGUiOjEsImxv +bmciOjEsInRocm93IjoxLHN0cmljdGZwOjEsImZpbmFsbHkiOjEsInByb3RlY3Rl +ZCI6MSwiZXh0ZW5kcyI6MSwiaW1wb3J0IjoxLCJuYXRpdmUiOjEsImZpbmFsIjox +LCJpbXBsZW1lbnRzIjoxLCJyZXR1cm4iOjEsInZvaWQiOjEsImVudW0iOjEsImVs +c2UiOjEsImJyZWFrIjoxLCJ0cmFuc2llbnQiOjEsIm5ldyI6MSwiY2F0Y2giOjEs +Imluc3RhbmNlb2YiOjEsImJ5dGUiOjEsInN1cGVyIjoxLCJjbGFzcyI6MSwidm9s +YXRpbGUiOjEsImNhc2UiOjEsYXNzZXJ0OjEsInNob3J0IjoxLCJwYWNrYWdlIjox +LCJkZWZhdWx0IjoxLCJkb3VibGUiOjEsInB1YmxpYyI6MSwidHJ5IjoxLCJ0aGlz +IjoxLCJzd2l0Y2giOjEsImNvbnRpbnVlIjoxLCJ0aHJvd3MiOjF9fSxtOlt7Y046 +ImNsYXNzIixsOltobGpzLlVJUl0sYjoiKGNsYXNzIHxpbnRlcmZhY2UgKSIsZToi +eyIsaToiOiIsazp7ImNsYXNzIjoxLCJpbnRlcmZhY2UiOjF9LGM6WyJpbmhlcml0 +YW5jZSIsInRpdGxlIl19LHtjTjoiaW5oZXJpdGFuY2UiLGI6IihpbXBsZW1lbnRz +fGV4dGVuZHMpIixlOiJeIixuTTp0cnVlLGw6W2hsanMuSVJdLGs6eyJleHRlbmRz +IjoxLCJpbXBsZW1lbnRzIjoxfSxyOjEwfSx7Y046InRpdGxlIixiOmhsanMuVUlS +LGU6Il4ifSx7Y046InBhcmFtcyIsYjoiXFwoIixlOiJcXCkiLGM6WyJzdHJpbmci +LCJhbm5vdGF0aW9uIl19LGhsanMuQ05NLGhsanMuQVNNLGhsanMuUVNNLGhsanMu +QkUsaGxqcy5DTENNLHtjTjoiamF2YWRvYyIsYjoiL1xcKlxcKiIsZToiXFwqLyIs +YzpbImphdmFkb2N0YWciXSxyOjEwfSx7Y046ImphdmFkb2N0YWciLGI6IkBbQS1a +YS16XSsiLGU6Il4ifSxobGpzLkNCTENMTSx7Y046ImFubm90YXRpb24iLGI6IkBb +QS1aYS16XSsiLGU6Il4ifV19O2hsanMuTEFOR1VBR0VTLnBocD17ZE06e2w6W2hs +anMuSVJdLGM6WyJjb21tZW50IiwibnVtYmVyIiwic3RyaW5nIiwidmFyaWFibGUi +LCJwcmVwcm9jZXNzb3IiXSxrOnthbmQ6MSxpbmNsdWRlX29uY2U6MSxsaXN0OjEs +ImFic3RyYWN0IjoxLGdsb2JhbDoxLCJwcml2YXRlIjoxLGVjaG86MSwiaW50ZXJm +YWNlIjoxLGFzOjEsInN0YXRpYyI6MSxlbmRzd2l0Y2g6MSxhcnJheToxLCJudWxs +IjoxLCJpZiI6MSxlbmR3aGlsZToxLG9yOjEsImNvbnN0IjoxLCJmb3IiOjEsZW5k +Zm9yZWFjaDoxLHNlbGY6MSwidmFyIjoxLCJ3aGlsZSI6MSxpc3NldDoxLCJwdWJs +aWMiOjEsInByb3RlY3RlZCI6MSxleGl0OjEsZm9yZWFjaDoxLCJ0aHJvdyI6MSxl +bHNlaWY6MSwiZXh0ZW5kcyI6MSxpbmNsdWRlOjEsX19GSUxFX186MSxlbXB0eTox +LHJlcXVpcmVfb25jZToxLCJmdW5jdGlvbiI6MSwiZG8iOjEseG9yOjEsInJldHVy +biI6MSwiaW1wbGVtZW50cyI6MSxwYXJlbnQ6MSxjbG9uZToxLHVzZToxLF9fQ0xB +U1NfXzoxLF9fTElORV9fOjEsImVsc2UiOjEsImJyZWFrIjoxLHByaW50OjEsImV2 +YWwiOjEsIm5ldyI6MSwiY2F0Y2giOjEsX19NRVRIT0RfXzoxLCJjbGFzcyI6MSwi +Y2FzZSI6MSxleGNlcHRpb246MSxwaHBfdXNlcl9maWx0ZXI6MSwiZGVmYXVsdCI6 +MSxkaWU6MSxyZXF1aXJlOjEsX19GVU5DVElPTl9fOjEsZW5kZGVjbGFyZToxLCJm +aW5hbCI6MSwidHJ5IjoxLCJ0aGlzIjoxLCJzd2l0Y2giOjEsImNvbnRpbnVlIjox +LGVuZGZvcjoxLGVuZGlmOjEsZGVjbGFyZToxLHVuc2V0OjF9fSxjSTp0cnVlLG06 +W2hsanMuQ0xDTSxobGpzLkhDTSx7Y046ImNvbW1lbnQiLGI6Ii9cXCoiLGU6Ilxc +Ki8iLGM6WyJwaHBkb2MiXX0se2NOOiJwaHBkb2MiLGI6Ilxcc0BbQS1aYS16XSsi +LGU6Il4iLHI6MTB9LGhsanMuQ05NLHtjTjoic3RyaW5nIixiOiInIixlOiInIixj +OlsiZXNjYXBlIl0scjowfSx7Y046InN0cmluZyIsYjonIicsZTonIicsYzpbImVz +Y2FwZSJdLHI6MH0saGxqcy5CRSx7Y046InZhcmlhYmxlIixiOiJcXCRbYS16QS1a +X1x4N2YtXHhmZl1bYS16QS1aMC05X1x4N2YtXHhmZl0qIixlOiJeIn0se2NOOiJw +cmVwcm9jZXNzb3IiLGI6IjxcXD9waHAiLGU6Il4iLHI6MTB9LHtjTjoicHJlcHJv +Y2Vzc29yIixiOiJcXD8+IixlOiJeIn1dfTtobGpzLkxBTkdVQUdFUy5weXRob249 +e2RNOntsOltobGpzLlVJUl0saToiKDwvfC0+KSIsYzpbImNvbW1lbnQiLCJzdHJp +bmciLCJmdW5jdGlvbiIsImNsYXNzIiwibnVtYmVyIiwiZGVjb3JhdG9yIl0sazp7 +a2V5d29yZDp7YW5kOjEsZWxpZjoxLGlzOjEsZ2xvYmFsOjEsYXM6MSwiaW4iOjEs +ImlmIjoxLGZyb206MSxyYWlzZToxLCJmb3IiOjEsZXhjZXB0OjEsImZpbmFsbHki +OjEscHJpbnQ6MSwiaW1wb3J0IjoxLHBhc3M6MSwicmV0dXJuIjoxLGV4ZWM6MSwi +ZWxzZSI6MSwiYnJlYWsiOjEsbm90OjEsIndpdGgiOjEsImNsYXNzIjoxLGFzc2Vy +dDoxLHlpZWxkOjEsInRyeSI6MSwid2hpbGUiOjEsImNvbnRpbnVlIjoxLGRlbDox +LG9yOjEsZGVmOjEsbGFtYmRhOjEsbm9ubG9jYWw6MTB9LGJ1aWx0X2luOntOb25l +OjEsVHJ1ZToxLEZhbHNlOjEsRWxsaXBzaXM6MSxOb3RJbXBsZW1lbnRlZDoxfX19 +LG06W3tjTjoiZnVuY3Rpb24iLGw6W2hsanMuVUlSXSxiOiJcXGJkZWYgIixlOiI6 +IixpOiIkIixrOntkZWY6MX0sYzpbInRpdGxlIiwicGFyYW1zIl0scjoxMH0se2NO +OiJjbGFzcyIsbDpbaGxqcy5VSVJdLGI6IlxcYmNsYXNzICIsZToiOiIsaToiWyR7 +XSIsazp7ImNsYXNzIjoxfSxjOlsidGl0bGUiLCJwYXJhbXMiXSxyOjEwfSx7Y046 +InRpdGxlIixiOmhsanMuVUlSLGU6Il4ifSx7Y046InBhcmFtcyIsYjoiXFwoIixl +OiJcXCkiLGM6WyJzdHJpbmciXX0saGxqcy5IQ00saGxqcy5DTk0se2NOOiJzdHJp +bmciLGI6InU/cj8nJyciLGU6IicnJyIscjoxMH0se2NOOiJzdHJpbmciLGI6J3U/ +cj8iIiInLGU6JyIiIicscjoxMH0saGxqcy5BU00saGxqcy5RU00saGxqcy5CRSx7 +Y046InN0cmluZyIsYjoiKHV8cnx1ciknIixlOiInIixjOlsiZXNjYXBlIl0scjox +MH0se2NOOiJzdHJpbmciLGI6Jyh1fHJ8dXIpIicsZTonIicsYzpbImVzY2FwZSJd +LHI6MTB9LHtjTjoiZGVjb3JhdG9yIixiOiJAIixlOiIkIn1dfTtobGpzLkxBTkdV +QUdFUy50ZXg9e2RNOntjOlsicGFyYW1ldGVyIiwiY29tbWFuZCIsInNwZWNpYWwi +LCJmb3JtdWxhIiwiY29tbWVudCJdfSxtOlt7Y046InBhcmFtZXRlciIsYjoiXFxc +XFthLXpBLVrQsC3Rj9CQLdGPXStbXFwqXT8gKj0gKi0/XFxkKlxcLj9cXGQrKHB0 +fHBjfG1tfGNtfGlufGRkfGNjfGV4fGVtKT8iLGU6Il4iLHJCOnRydWUsYzpbImNv +bW1hbmQiLCJudW1iZXIiXSxuTTp0cnVlLHI6MTB9LHtjTjoiY29tbWFuZCIsYjoi +XFxcXFthLXpBLVrQsC3Rj9CQLdGPXStbXFwqXT8iLGU6Il4iLHI6MTB9LHtjTjoi +Y29tbWFuZCIsYjoiXFxcXFteYS16QS1a0LAt0Y/QkC3RjzAtOV0iLGU6Il4iLHI6 +MH0se2NOOiJjb21tZW50IixiOiIlIixlOiIkIixyOjB9LHtjTjoic3BlY2lhbCIs +YjoiW3t9XFxbXFxdXFwmI35dIixlOiJeIixyOjB9LHtjTjoiZm9ybXVsYSIsYjoi +XFwkXFwkIixlOiJcXCRcXCQiLGM6WyJjb21tYW5kIiwic3BlY2lhbCJdLHI6MH0s +e2NOOiJmb3JtdWxhIixiOiJcXCQiLGU6IlxcJCIsYzpbImNvbW1hbmQiLCJzcGVj +aWFsIl0scjowfSx7Y046Im51bWJlciIsYjoiICo9IixlOiItP1xcZCpcXC4/XFxk +KyhwdHxwY3xtbXxjbXxpbnxkZHxjY3xleHxlbSk/IixlQjp0cnVlfV19O2hsanMu +TEFOR1VBR0VTLnNxbD17Y0k6dHJ1ZSxkTTp7YzpbIm9wZXJhdG9yIiwiY29tbWVu +dCJdLGk6IlteXFxzXSJ9LG06W3tjTjoib3BlcmF0b3IiLGI6IihifHN0YXJ0fGNv +bW1pdHxyb2xsYmFja3xzYXZlcG9pbnR8bG9ja3xhbHRlcnxjcmVhdGV8ZHJvcHxy +ZW5hbWV8Y2FsbHxkZWxldGV8ZG98aGFuZGxlcnxpbnNlcnR8bG9hZHxyZXBsYWNl +fHNlbGVjdHx0cnVuY2F0ZXx1cGRhdGV8c2V0fHNob3d8cHJhZ21hKVxcYiIsZToi +O3wkIixjOlsic3RyaW5nIiwibnVtYmVyIiwibmV3bGluZSJdLGw6WyJbYS16QS1a +XVthLXpBLVowLTlfXFwuXSoiXSxrOntrZXl3b3JkOnthbGw6MSxwYXJ0aWFsOjEs +Z2xvYmFsOjEsbW9udGg6MSxjdXJyZW50X3RpbWVzdGFtcDoxLHVzaW5nOjEsZ286 +MSxyZXZva2U6MSxzbWFsbGludDoxLGluZGljYXRvcjoxLCJlbmQtZXhlYyI6MSxk +aXNjb25uZWN0OjEsem9uZToxLCJ3aXRoIjoxLGNoYXJhY3RlcjoxLGFzc2VydGlv +bjoxLHRvOjEsYWRkOjEsY3VycmVudF91c2VyOjEsdXNhZ2U6MSxpbnB1dDoxLGxv +Y2FsOjEsYWx0ZXI6MSxtYXRjaDoxLGNvbGxhdGU6MSxyZWFsOjEsdGhlbjoxLHJv +bGxiYWNrOjEsZ2V0OjEscmVhZDoxLHRpbWVzdGFtcDoxLHNlc3Npb25fdXNlcjox +LG5vdDoxLGludGVnZXI6MSxiaXQ6MSx1bmlxdWU6MSxkYXk6MSxtaW51dGU6MSxk +ZXNjOjEsaW5zZXJ0OjEsZXhlY3V0ZToxLGxpa2U6MSxpbGlrZToyLGxldmVsOjEs +ZGVjaW1hbDoxLGRyb3A6MSwiY29udGludWUiOjEsaXNvbGF0aW9uOjEsZm91bmQ6 +MSx3aGVyZToxLGNvbnN0cmFpbnRzOjEsZG9tYWluOjEscmlnaHQ6MSxuYXRpb25h +bDoxLHNvbWU6MSxtb2R1bGU6MSx0cmFuc2FjdGlvbjoxLHJlbGF0aXZlOjEsc2Vj +b25kOjEsY29ubmVjdDoxLGVzY2FwZToxLGNsb3NlOjEsc3lzdGVtX3VzZXI6MSwi +Zm9yIjoxLGRlZmVycmVkOjEsc2VjdGlvbjoxLGNhc3Q6MSxjdXJyZW50OjEsc3Fs +c3RhdGU6MSxhbGxvY2F0ZToxLGludGVyc2VjdDoxLGRlYWxsb2NhdGU6MSxudW1l +cmljOjEsInB1YmxpYyI6MSxwcmVzZXJ2ZToxLGZ1bGw6MSwiZ290byI6MSxpbml0 +aWFsbHk6MSxhc2M6MSxubzoxLGtleToxLG91dHB1dDoxLGNvbGxhdGlvbjoxLGdy +b3VwOjEsYnk6MSx1bmlvbjoxLHNlc3Npb246MSxib3RoOjEsbGFzdDoxLGxhbmd1 +YWdlOjEsY29uc3RyYWludDoxLGNvbHVtbjoxLG9mOjEsc3BhY2U6MSxmb3JlaWdu +OjEsZGVmZXJyYWJsZToxLHByaW9yOjEsY29ubmVjdGlvbjoxLHVua25vd246MSxh +Y3Rpb246MSxjb21taXQ6MSx2aWV3OjEsb3I6MSxmaXJzdDoxLGludG86MSwiZmxv +YXQiOjEseWVhcjoxLHByaW1hcnk6MSxjYXNjYWRlZDoxLGV4Y2VwdDoxLHJlc3Ry +aWN0OjEsc2V0OjEscmVmZXJlbmNlczoxLG5hbWVzOjEsdGFibGU6MSxvdXRlcjox +LG9wZW46MSxzZWxlY3Q6MSxzaXplOjEsYXJlOjEscm93czoxLGZyb206MSxwcmVw +YXJlOjEsZGlzdGluY3Q6MSxsZWFkaW5nOjEsY3JlYXRlOjEsb25seToxLG5leHQ6 +MSxpbm5lcjoxLGF1dGhvcml6YXRpb246MSxzY2hlbWE6MSxjb3JyZXNwb25kaW5n +OjEsb3B0aW9uOjEsZGVjbGFyZToxLHByZWNpc2lvbjoxLGltbWVkaWF0ZToxLCJl +bHNlIjoxLHRpbWV6b25lX21pbnV0ZToxLGV4dGVybmFsOjEsdmFyeWluZzoxLHRy +YW5zbGF0aW9uOjEsInRydWUiOjEsImNhc2UiOjEsZXhjZXB0aW9uOjEsam9pbjox +LGhvdXI6MSwiZGVmYXVsdCI6MSwiZG91YmxlIjoxLHNjcm9sbDoxLHZhbHVlOjEs +Y3Vyc29yOjEsZGVzY3JpcHRvcjoxLHZhbHVlczoxLGRlYzoxLGZldGNoOjEscHJv +Y2VkdXJlOjEsImRlbGV0ZSI6MSxhbmQ6MSwiZmFsc2UiOjEsImludCI6MSxpczox +LGRlc2NyaWJlOjEsImNoYXIiOjEsYXM6MSxhdDoxLCJpbiI6MSx2YXJjaGFyOjEs +Im51bGwiOjEsdHJhaWxpbmc6MSxhbnk6MSxhYnNvbHV0ZToxLGN1cnJlbnRfdGlt +ZToxLGVuZDoxLGdyYW50OjEscHJpdmlsZWdlczoxLHdoZW46MSxjcm9zczoxLGNo +ZWNrOjEsd3JpdGU6MSxjdXJyZW50X2RhdGU6MSxwYWQ6MSxiZWdpbjoxLHRlbXBv +cmFyeToxLGV4ZWM6MSx0aW1lOjEsdXBkYXRlOjEsY2F0YWxvZzoxLHVzZXI6MSxz +cWw6MSxkYXRlOjEsb246MSxpZGVudGl0eToxLHRpbWV6b25lX2hvdXI6MSxuYXR1 +cmFsOjEsd2hlbmV2ZXI6MSxpbnRlcnZhbDoxLHdvcms6MSxvcmRlcjoxLGNhc2Nh +ZGU6MSxkaWFnbm9zdGljczoxLG5jaGFyOjEsaGF2aW5nOjEsbGVmdDoxLGNhbGw6 +MSwiZG8iOjEsaGFuZGxlcjoxLGxvYWQ6MSxyZXBsYWNlOjEsdHJ1bmNhdGU6MSxz +dGFydDoxLGxvY2s6MSxzaG93OjEscHJhZ21hOjF9LGFnZ3JlZ2F0ZTp7Y291bnQ6 +MSxzdW06MSxtaW46MSxtYXg6MSxhdmc6MX19fSx7Y046Im5ld2xpbmUiLGI6Ilxc +biIsZToiXiIsbk06dHJ1ZX0saGxqcy5DTk0saGxqcy5DQkxDTE0se2NOOiJjb21t +ZW50IixiOiItLSIsZToiJCJ9LHtjTjoic3RyaW5nIixiOiInIixlOiInIixjOlsi +ZXNjYXBlIiwic3F1b3RlIl0scjowfSx7Y046InNxdW90ZSIsYjoiJyciLGU6Il4i +LG5NOnRydWV9LHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxjOlsiZXNjYXBlIiwi +ZHF1b3RlIl0scjowfSx7Y046ImRxdW90ZSIsYjonIiInLGU6Il4iLG5NOnRydWV9 +LHtjTjoic3RyaW5nIixiOiJgIixlOiJgIixjOlsiZXNjYXBlIl19LGhsanMuQkVd +fTtobGpzLkxBTkdVQUdFUy5wZXJsPWZ1bmN0aW9uKCl7dmFyIGI9WyJjb21tZW50 +Iiwic3RyaW5nIiwibnVtYmVyIiwicmVnZXhwIiwic3ViIiwidmFyaWFibGUiLCJv +cGVyYXRvciIsInBvZCJdO3ZhciBhPXtnZXRwd2VudDoxLGdldHNlcnZlbnQ6MSxx +dW90ZW1ldGE6MSxtc2dyY3Y6MSxzY2FsYXI6MSxraWxsOjEsZGJtY2xvc2U6MSx1 +bmRlZjoxLGxjOjEsbWE6MSxzeXN3cml0ZToxLHRyOjEsc2VuZDoxLHVtYXNrOjEs +c3lzb3BlbjoxLHNobXdyaXRlOjEsdmVjOjEscXg6MSx1dGltZToxLGxvY2FsOjEs +b2N0OjEsc2VtY3RsOjEsbG9jYWx0aW1lOjEscmVhZHBpcGU6MSwiZG8iOjEsInJl +dHVybiI6MSxmb3JtYXQ6MSxyZWFkOjEsc3ByaW50ZjoxLGRibW9wZW46MSxwb3A6 +MSxnZXRwZ3JwOjEsbm90OjEsZ2V0cHduYW06MSxyZXdpbmRkaXI6MSxxcToxLGZp +bGVubzoxLHF3OjEsZW5kcHJvdG9lbnQ6MSx3YWl0OjEsc2V0aG9zdGVudDoxLGJs +ZXNzOjEsczoxLG9wZW5kaXI6MSwiY29udGludWUiOjEsZWFjaDoxLHNsZWVwOjEs +ZW5kZ3JlbnQ6MSxzaHV0ZG93bjoxLGR1bXA6MSxjaG9tcDoxLGNvbm5lY3Q6MSxn +ZXRzb2NrbmFtZToxLGRpZToxLHNvY2tldHBhaXI6MSxjbG9zZToxLGZsb2NrOjEs +ZXhpc3RzOjEsaW5kZXg6MSxzaG1nZXQ6MSxzdWI6MSwiZm9yIjoxLGVuZHB3ZW50 +OjEscmVkbzoxLGxzdGF0OjEsbXNnY3RsOjEsc2V0cGdycDoxLGFiczoxLGV4aXQ6 +MSxzZWxlY3Q6MSxwcmludDoxLHJlZjoxLGdldGhvc3RieWFkZHI6MSx1bnNoaWZ0 +OjEsZmNudGw6MSxzeXNjYWxsOjEsImdvdG8iOjEsZ2V0bmV0YnlhZGRyOjEsam9p +bjoxLGdtdGltZToxLHN5bWxpbms6MSxzZW1nZXQ6MSxzcGxpY2U6MSx4OjEsZ2V0 +cGVlcm5hbWU6MSxyZWN2OjEsbG9nOjEsc2V0c29ja29wdDoxLGNvczoxLGxhc3Q6 +MSxyZXZlcnNlOjEsZ2V0aG9zdGJ5bmFtZToxLGdldGdybmFtOjEsc3R1ZHk6MSxm +b3JtbGluZToxLGVuZGhvc3RlbnQ6MSx0aW1lczoxLGNob3A6MSxsZW5ndGg6MSxn +ZXRob3N0ZW50OjEsZ2V0bmV0ZW50OjEscGFjazoxLGdldHByb3RvZW50OjEsZ2V0 +c2VydmJ5bmFtZToxLHJhbmQ6MSxta2RpcjoxLHBvczoxLGNobW9kOjEseToxLHN1 +YnN0cjoxLGVuZG5ldGVudDoxLHByaW50ZjoxLG5leHQ6MSxvcGVuOjEsbXNnc25k +OjEscmVhZGRpcjoxLHVzZToxLHVubGluazoxLGdldHNvY2tvcHQ6MSxnZXRwcmlv +cml0eToxLHJpbmRleDoxLHdhbnRhcnJheToxLGhleDoxLHN5c3RlbToxLGdldHNl +cnZieXBvcnQ6MSxlbmRzZXJ2ZW50OjEsImludCI6MSxjaHI6MSx1bnRpZToxLHJt +ZGlyOjEscHJvdG90eXBlOjEsdGVsbDoxLGxpc3RlbjoxLGZvcms6MSxzaG1yZWFk +OjEsdWNmaXJzdDoxLHNldHByb3RvZW50OjEsImVsc2UiOjEsc3lzc2VlazoxLGxp +bms6MSxnZXRncmdpZDoxLHNobWN0bDoxLHdhaXRwaWQ6MSx1bnBhY2s6MSxnZXRu +ZXRieW5hbWU6MSxyZXNldDoxLGNoZGlyOjEsZ3JlcDoxLHNwbGl0OjEscmVxdWly +ZToxLGNhbGxlcjoxLGxjZmlyc3Q6MSx1bnRpbDoxLHdhcm46MSwid2hpbGUiOjEs +dmFsdWVzOjEsc2hpZnQ6MSx0ZWxsZGlyOjEsZ2V0cHd1aWQ6MSxteToxLGdldHBy +b3RvYnludW1iZXI6MSwiZGVsZXRlIjoxLGFuZDoxLHNvcnQ6MSx1YzoxLGRlZmlu +ZWQ6MSxzcmFuZDoxLGFjY2VwdDoxLCJwYWNrYWdlIjoxLHNlZWtkaXI6MSxnZXRw +cm90b2J5bmFtZToxLHNlbW9wOjEsb3VyOjEscmVuYW1lOjEsc2VlazoxLCJpZiI6 +MSxxOjEsY2hyb290OjEsc3lzcmVhZDoxLHNldHB3ZW50OjEsbm86MSxjcnlwdDox +LGdldGM6MSxjaG93bjoxLHNxcnQ6MSx3cml0ZToxLHNldG5ldGVudDoxLHNldHBy +aW9yaXR5OjEsZm9yZWFjaDoxLHRpZToxLHNpbjoxLG1zZ2dldDoxLG1hcDoxLHN0 +YXQ6MSxnZXRsb2dpbjoxLHVubGVzczoxLGVsc2lmOjEsdHJ1bmNhdGU6MSxleGVj +OjEsa2V5czoxLGdsb2I6MSx0aWVkOjEsY2xvc2VkaXI6MSxpb2N0bDoxLHNvY2tl +dDoxLHJlYWRsaW5rOjEsImV2YWwiOjEseG9yOjEscmVhZGxpbmU6MSxiaW5tb2Rl +OjEsc2V0c2VydmVudDoxLGVvZjoxLG9yZDoxLGJpbmQ6MSxhbGFybToxLHBpcGU6 +MSxhdGFuMjoxLGdldGdyZW50OjEsZXhwOjEsdGltZToxLHB1c2g6MSxzZXRncmVu +dDoxLGd0OjEsbHQ6MSxvcjoxLG5lOjEsbToxfTtyZXR1cm57ZE06e2w6W2hsanMu +SVJdLGM6YixrOmF9LG06W3tjTjoidmFyaWFibGUiLGI6IlxcJFxcZCIsZToiXiJ9 +LHtjTjoidmFyaWFibGUiLGI6IltcXCRcXCVcXEBcXCpdKFxcXlxcd1xcYnwjXFx3 +KyhcXDpcXDpcXHcrKSp8W15cXHNcXHd7XXx7XFx3K318XFx3KyhcXDpcXDpcXHcq +KSopIixlOiJeIn0se2NOOiJzdWJzdCIsYjoiWyRAXVxceyIsZToifSIsbDpbaGxq +cy5JUl0sazphLGM6YixyOjEwfSx7Y046Im51bWJlciIsYjoiKFxcYjBbMC03X10r +KXwoXFxiMHhbMC05YS1mQS1GX10rKXwoXFxiWzEtOV1bMC05X10qKFxcLlswLTlf +XSspPyl8WzBfXVxcYiIsZToiXiIscjowfSx7Y046InN0cmluZyIsYjoicVtxd3hy +XT9cXHMqXFwoIixlOiJcXCkiLGM6WyJlc2NhcGUiLCJzdWJzdCIsInZhcmlhYmxl +Il0scjo1fSx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMqXFxbIixlOiJcXF0i +LGM6WyJlc2NhcGUiLCJzdWJzdCIsInZhcmlhYmxlIl0scjo1fSx7Y046InN0cmlu +ZyIsYjoicVtxd3hyXT9cXHMqXFx7IixlOiJcXH0iLGM6WyJlc2NhcGUiLCJzdWJz +dCIsInZhcmlhYmxlIl0scjo1fSx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMq +XFx8IixlOiJcXHwiLGM6WyJlc2NhcGUiLCJzdWJzdCIsInZhcmlhYmxlIl0scjo1 +fSx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMqXFw8IixlOiJcXD4iLGM6WyJl +c2NhcGUiLCJzdWJzdCIsInZhcmlhYmxlIl0scjo1fSx7Y046InN0cmluZyIsYjoi +cXdcXHMrcSIsZToicSIsYzpbImVzY2FwZSIsInN1YnN0IiwidmFyaWFibGUiXSxy +OjV9LHtjTjoic3RyaW5nIixiOiInIixlOiInIixjOlsiZXNjYXBlIl0scjowfSx7 +Y046InN0cmluZyIsYjonIicsZTonIicsYzpbImVzY2FwZSIsInN1YnN0IiwidmFy +aWFibGUiXSxyOjB9LGhsanMuQkUse2NOOiJzdHJpbmciLGI6ImAiLGU6ImAiLGM6 +WyJlc2NhcGUiXX0se2NOOiJyZWdleHAiLGI6IihzfHRyfHkpLyhcXFxcLnxbXi9d +KSovKFxcXFwufFteL10pKi9bYS16XSoiLGU6Il4iLHI6MTB9LHtjTjoicmVnZXhw +IixiOiIobXxxcik/LyIsZToiL1thLXpdKiIsYzpbImVzY2FwZSJdLHI6MH0se2NO +OiJzdHJpbmciLGI6IntcXHcrfSIsZToiXiIscjowfSx7Y046InN0cmluZyIsYjoi +LT9cXHcrXFxzKlxcPVxcPiIsZToiXiIscjowfSx7Y046InN1YiIsYjoiXFxic3Vi +XFxiIixlOiIoXFxzKlxcKC4qP1xcKSk/Wzt7XSIsbDpbaGxqcy5JUl0sazp7c3Vi +OjF9LHI6NX0se2NOOiJvcGVyYXRvciIsYjoiLVxcd1xcYiIsZToiXiIscjowfSxo +bGpzLkhDTSx7Y046ImNvbW1lbnQiLGI6Il4oX19FTkRfX3xfX0RBVEFfXykiLGU6 +IlxcbiQiLHI6NX0se2NOOiJwb2QiLGI6IlxcPVxcdyIsZToiXFw9Y3V0In1dfX0o +KTtobGpzLkxBTkdVQUdFUy5zY2FsYT17ZE06e2w6W2hsanMuVUlSXSxjOlsiamF2 +YWRvYyIsImNvbW1lbnQiLCJzdHJpbmciLCJjbGFzcyIsIm51bWJlciIsImFubm90 +YXRpb24iXSxrOnt0eXBlOjEseWllbGQ6MSxsYXp5OjEsb3ZlcnJpZGU6MSxkZWY6 +MSwid2l0aCI6MSx2YWw6MSwidmFyIjoxLCJmYWxzZSI6MSwidHJ1ZSI6MSxzZWFs +ZWQ6MSwiYWJzdHJhY3QiOjEsInByaXZhdGUiOjEsdHJhaXQ6MSxvYmplY3Q6MSwi +bnVsbCI6MSwiaWYiOjEsImZvciI6MSwid2hpbGUiOjEsInRocm93IjoxLCJmaW5h +bGx5IjoxLCJwcm90ZWN0ZWQiOjEsImV4dGVuZHMiOjEsImltcG9ydCI6MSwiZmlu +YWwiOjEsInJldHVybiI6MSwiZWxzZSI6MSwiYnJlYWsiOjEsIm5ldyI6MSwiY2F0 +Y2giOjEsInN1cGVyIjoxLCJjbGFzcyI6MSwiY2FzZSI6MSwicGFja2FnZSI6MSwi +ZGVmYXVsdCI6MSwidHJ5IjoxLCJ0aGlzIjoxLG1hdGNoOjEsImNvbnRpbnVlIjox +LCJ0aHJvd3MiOjF9fSxtOlt7Y046ImNsYXNzIixsOltobGpzLlVJUl0sYjoiKChj +YXNlICk/Y2xhc3MgfG9iamVjdCB8dHJhaXQgKSIsZToiKHt8JCkiLGk6IjoiLGs6 +eyJjYXNlIjoxLCJjbGFzcyI6MSx0cmFpdDoxLG9iamVjdDoxfSxjOlsiaW5oZXJp +dGFuY2UiLCJ0aXRsZSIsInBhcmFtcyJdfSx7Y046ImluaGVyaXRhbmNlIixiOiIo +ZXh0ZW5kc3x3aXRoKSIsZToiXiIsbk06dHJ1ZSxsOltobGpzLklSXSxrOnsiZXh0 +ZW5kcyI6MSwid2l0aCI6MX0scjoxMH0se2NOOiJ0aXRsZSIsYjpobGpzLlVJUixl +OiJeIn0se2NOOiJwYXJhbXMiLGI6IlxcKCIsZToiXFwpIixjOlsic3RyaW5nIiwi +YW5ub3RhdGlvbiJdfSxobGpzLkNOTSxobGpzLkFTTSxobGpzLlFTTSxobGpzLkJF +LGhsanMuQ0xDTSx7Y046ImphdmFkb2MiLGI6Ii9cXCpcXCoiLGU6IlxcKi8iLGM6 +WyJqYXZhZG9jdGFnIl0scjoxMH0se2NOOiJqYXZhZG9jdGFnIixiOiJAW0EtWmEt +el0rIixlOiJeIn0saGxqcy5DQkxDTE0se2NOOiJhbm5vdGF0aW9uIixiOiJAW0Et +WmEtel0rIixlOiJeIn0se2NOOiJzdHJpbmciLGI6J3U/cj8iIiInLGU6JyIiIics +cjoxMH1dfTtobGpzLkxBTkdVQUdFUy5jcHA9ZnVuY3Rpb24oKXt2YXIgYT17a2V5 +d29yZDp7ImZhbHNlIjoxLCJpbnQiOjEsImZsb2F0IjoxLCJ3aGlsZSI6MSwicHJp +dmF0ZSI6MSwiY2hhciI6MSwiY2F0Y2giOjEsImV4cG9ydCI6MSx2aXJ0dWFsOjEs +b3BlcmF0b3I6MixzaXplb2Y6MixkeW5hbWljX2Nhc3Q6Mix0eXBlZGVmOjIsY29u +c3RfY2FzdDoyLCJjb25zdCI6MSxzdHJ1Y3Q6MSwiZm9yIjoxLHN0YXRpY19jYXN0 +OjIsdW5pb246MSxuYW1lc3BhY2U6MSx1bnNpZ25lZDoxLCJsb25nIjoxLCJ0aHJv +dyI6MSwidm9sYXRpbGUiOjIsInN0YXRpYyI6MSwicHJvdGVjdGVkIjoxLGJvb2w6 +MSx0ZW1wbGF0ZToxLG11dGFibGU6MSwiaWYiOjEsInB1YmxpYyI6MSxmcmllbmQ6 +MiwiZG8iOjEsInJldHVybiI6MSwiZ290byI6MSxhdXRvOjEsInZvaWQiOjIsImVu +dW0iOjEsImVsc2UiOjEsImJyZWFrIjoxLCJuZXciOjEsZXh0ZXJuOjEsdXNpbmc6 +MSwidHJ1ZSI6MSwiY2xhc3MiOjEsYXNtOjEsImNhc2UiOjEsdHlwZWlkOjEsInNo +b3J0IjoxLHJlaW50ZXJwcmV0X2Nhc3Q6MiwiZGVmYXVsdCI6MSwiZG91YmxlIjox +LHJlZ2lzdGVyOjEsZXhwbGljaXQ6MSxzaWduZWQ6MSx0eXBlbmFtZToxLCJ0cnki +OjEsInRoaXMiOjEsInN3aXRjaCI6MSwiY29udGludWUiOjEsd2NoYXJfdDoxLGlu +bGluZToxLCJkZWxldGUiOjF9LGJ1aWx0X2luOntzdGQ6MSxzdHJpbmc6MSxjaW46 +MSxjb3V0OjEsY2VycjoxLGNsb2c6MSxzdHJpbmdzdHJlYW06MSxpc3RyaW5nc3Ry +ZWFtOjEsb3N0cmluZ3N0cmVhbToxLGF1dG9fcHRyOjEsZGVxdWU6MSxsaXN0OjEs +cXVldWU6MSxzdGFjazoxLHZlY3RvcjoxLG1hcDoxLHNldDoxLGJpdHNldDoxLG11 +bHRpc2V0OjEsbXVsdGltYXA6MX19O3JldHVybntkTTp7bDpbaGxqcy5VSVJdLGk6 +IjwvIixjOlsiY29tbWVudCIsInN0cmluZyIsIm51bWJlciIsInByZXByb2Nlc3Nv +ciIsInN0bF9jb250YWluZXIiXSxrOmF9LG06W2hsanMuQ0xDTSxobGpzLkNCTENM +TSxobGpzLkNOTSxobGpzLlFTTSxobGpzLkJFLHtjTjoic3RyaW5nIixiOiInIixl +OiJbXlxcXFxdJyIsaToiW15cXFxcXVteJ10ifSx7Y046InByZXByb2Nlc3NvciIs +YjoiIyIsZToiJCJ9LHtjTjoic3RsX2NvbnRhaW5lciIsYjoiXFxiKGRlcXVlfGxp +c3R8cXVldWV8c3RhY2t8dmVjdG9yfG1hcHxzZXR8Yml0c2V0fG11bHRpc2V0fG11 +bHRpbWFwKVxccyo8IixlOiI+IixjOlsic3RsX2NvbnRhaW5lciJdLGw6W2hsanMu +VUlSXSxrOmEscjoxMH1dfX0oKTs= + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline; filename=commentForm.js +Content-Type: application/x-javascript; charset=utf-8; name=commentForm.js +Content-Location: http://habrahabr.ru/js/1307631427/commentForm.js +Content-Transfer-Encoding: Base64 + +LyoNCgljb21tZW50Rm9ybUNsYXNzDQoJ0YDQsNCx0L7RgtCw0LXRgiDQv9C+INC/ +0YDQuNC90YbQuNC/0YMg0YHRgtCw0YLQuNGH0LXRgdC60L7Qs9C+INC60LvQsNGB +0YHQsDoNCgnQtNC70Y8g0YDQsNCx0L7RgtGLINGC0YDQtdCx0YPQtdGCINGB0L7Q +t9C00LDQvdC40Y8g0L7QtNC90L7Qs9C+INC+0LHRitC10LrRgtCwDQoJdmFyIGNv +bW1lbnRGb3JtDQoqLw0KDQp2YXIgY29tbWVudEZvcm1DbGFzcyA9IGZ1bmN0aW9u +KCl7DQoJY29tbWVudEZvcm1DbGFzcy5zdXBlckNsYXNzLmFwcGx5KHRoaXMsIGFy +Z3VtZW50cyk7DQoJDQoJJGV4dGVuZCh0aGlzLCB0bS5jdXN0b21FdmVudE1hbmFn +ZXIpOw0KCQ0KCXRoaXMubmV3X3JlcGxpZXNfaSA9IC0xOw0KCQ0KCU9iamVjdC5l +eHRlbmRPYmplY3QoDQoJCXRoaXMuYWpheFVybHMsIHsNCgkJCXNhdmU6ICh3aW5k +b3cuYmFzZVVSTCB8fCAnJykgKyAnL2FqYXgvY29tbWVudHMvYWRkLycsDQoJCQlw +cmV2aWV3OiAod2luZG93LmJhc2VVUkwgfHwgJycpICsgJy9hamF4L2NvbW1lbnRz +L3ByZXZpZXcvJywNCgkJCWZlZWRiYWNrOiAod2luZG93LmJhc2VVUkwgfHwgJycp +ICsgJy9hamF4L2NvbW1lbnRzL2FkZF9mZWVkYmFjay8nDQoJfSk7DQoJDQoJLy8g +0JjRgdC/0L7Qu9GM0LfRg9C10LzRi9C1INCyINGE0L7RgNC80LUgY2xhc3NOYW1l +cw0KCXRoaXMuY2xhc3NOYW1lcyA9IHsNCgkJZmllbGRIb2xkZXI6ICdqcy1maWVs +ZC1ob2xkZXInLCAvLyDQutC+0L3RgtC10LnQvdC10YAt0YDQvtC00LjRgtC10LvR +jCDQv9C+0LvRjyDRhNC+0YDQvNGLINC4INC+0YjQuNCx0LrQuA0KCQlmaWVsZERh +dGE6ICdqcy1maWVsZC1kYXRhJywgLy8g0L/QvtC70LUg0YTQvtGA0LzRiywg0LrQ +vtGC0L7RgNC+0LUg0L3Rg9C20L3QviDRgdC10YDQuNCw0LvQuNC30L7QstCw0YLR +jA0KCQlmaWVsZEVycm9yTXNnQm94OiAnanMtZmllbGQtZXJyb3ItbXNnJywgLy8g +0LrQvtC90YLQtdC50L3QtdGAINC00LvRjyDQstGL0LLQvtC00LAg0YHQvtC+0LHR +idC10L3QuNGPINC+0LEg0L7RiNC40LHQutC1DQoJCWZpZWxkTWFya2VkRXJyb3I6 +ICdqcy1tYXJrZWQtZXJyb3InLCAvLyDQv9C+0LzQtdGH0LDQtdC8INC60L7QvdGC +0LXQudC90LXRgCwg0LXRgdC70Lgg0LIg0L/QvtC70LUgLSDQvtGI0LjQsdC60LAN +CgkJZmllbGRNYXJrZWRDaGVja2VkOiAnanMtbWFya2VkLWNoZWNrZWQnLCAvLyDQ +v9C+0LzQtdGH0LDQtdC8INC60L7QvdGC0LXQudC90LXRgCwg0LXRgdC70Lgg0L/Q +vtC70LUg0L/RgNC+0YjQu9C+INC/0YDQvtCy0LXRgNC60YMNCgkJZmllbGRJc1Jl +cXVpcmVkOiAnanMtcmVxdWlyZWQnLCAvLyDQv9C+0LvQtSwg0L7QsdGP0LfQsNGC +0LXQu9GM0L3QvtC1INC00LvRjyDQt9Cw0L/QvtC70L3QtdC90LjRjyANCgkJZmll +bGRQYXNzXzE6ICdqcy1wYXNzLWZpZWxkLW1haW4nLCAvLyDQv9C+0LvQtSDRgSDQ +vtGB0L3QvtCy0L3Ri9C8INC/0LDRgNC+0LvQtdC8DQoJCWZpZWxkUGFzc18yOiAn +anMtcGFzcy1maWVsZC1yZXBlYXQnLCAvLyDQv9C+0LvQtSDRgSDQv9C+0LLRgtC+ +0YDQvtC8INC/0LDRgNC+0LvRjw0KCQlpc0xvYWRpbmc6ICdsb2FkaW5nJywgLy8g +0L/RgNC10LvQvtCw0LTQtdGADQoJCXVua25vd25FcnJvckhvbGRlcjogJ2pzLXVu +a25vd24tZXJyb3ItaG9sZGVyJywgLy8g0LTQtdGA0LbQsNGC0LXQu9GMINCy0YvQ +stC+0LTQsCDQvdC10L7Qv9C+0LfQvdCw0L3QvdC+0Lkg0L7RiNC40LHQutC4DQoJ +CXVua25vd25FcnJvck1zZzogJ2pzLXVua25vd24tZXJyb3ItbXNnJywgLy8g0YHQ +sNC80L4g0L/QvtC70LUg0L3QtdC+0L/QvtC30L3QsNC90L3QvtC5INC+0YjQuNCx +0LrQuA0KCQljb21tZW50c0NvdW50OiAnanMtY29tbWVudHMtY291bnQnLCAvL9C6 +0L7Qu9C40YfQtdGB0YLQstC+INC60L7QvNC80LXQvdGC0LDRgNC40LXQsg0KCQlw +cmV2aWV3SG9sZGVyOiAnY29tbWVudC1wcmV2aWV3JywgLy/Qv9GA0LXQtNC/0YDQ +vtGB0LzQvtGC0YANCgkJdGhyZWFkOiAnaGVudHJ5JywgLy8g0LLQtdGC0LrQsCDQ +utC+0LzQvNC10L3RgtCw0YDQuNC10LINCgkJY29tbWVudEl0ZW06ICdjb21tZW50 +X2hvbGRlciB2b3RlX2hvbGRlcicgLy/QutC+0LzQvNC10L3RgtCw0YDQuNC5DQoJ +fTsNCgkNCglPYmplY3QuZXh0ZW5kT2JqZWN0KA0KCQl0aGlzLnhtbFJlc3BvbnNl +LCB7DQoJCXRpbWVmaWVsZDogew0KCQkJbm9kZTogJ3RpbWVmaWVsZCcsDQoJCQlo +YW5kbGVyOiBudWxsDQoJCX0sDQoJCWNvbW1lbnQ6IHsNCgkJCW5vZGU6ICdjb21t +ZW50JywNCgkJCWhhbmRsZXI6ICd4bWxSZXNwb25zZUhhbmRsZXJfY29tbWVudCcN +CgkJfSwNCgkJY29tcGFueV9jb21tZW50OiB7DQoJCQlub2RlOiAnY29tcGFueV9j +b21tZW50JywNCgkJCWhhbmRsZXI6ICd4bWxSZXNwb25zZUhhbmRsZXJfY29tcGFu +eV9jb21tZW50Jw0KCQl9LA0KCQlwcmV2aWV3OiB7DQoJCQlub2RlOiAncHJldmll +dycsDQoJCQloYW5kbGVyOiAneG1sUmVzcG9uc2VIYW5kbGVyX3ByZXZpZXcnDQoJ +CX0sDQoJCWVycm9yOiB7DQoJCQlub2RlOiAnZXJyb3InLA0KCQkJaGFuZGxlcjog +J3htbFJlc3BvbnNlSGFuZGxlcl9lcnJvcicNCgkJfQ0KCX0pOw0KfTsNCmNvbW1l +bnRGb3JtQ2xhc3MuaW5oZXJpdHNGcm9tKGFqYXhGb3JtQ2xhc3MpOw0KDQpPYmpl +Y3QuZXh0ZW5kT2JqZWN0KA0KCWNvbW1lbnRGb3JtQ2xhc3MucHJvdG90eXBlLCB7 +DQoJDQoJYnVpbGQ6IHsNCgkJY29tbWVudDogZnVuY3Rpb24oaWQsIHRleHQpew0K +CQkJdmFyIGVudHJ5X3JlcGx5X2l0ZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50 +KCdsaScpOw0KCQkJZW50cnlfcmVwbHlfaXRlbS5pZCA9ICdjb21tZW50XycgKyBp +ZDsNCgkJCWVudHJ5X3JlcGx5X2l0ZW0uY2xhc3NOYW1lID0gY29tbWVudEZvcm0u +Y2xhc3NOYW1lcy5jb21tZW50SXRlbTsNCgkJCWVudHJ5X3JlcGx5X2l0ZW0uaW5u +ZXJIVE1MID0gdGV4dDsNCgkJCXRoaXMuX2hpZ2hsaWdodChlbnRyeV9yZXBseV9p +dGVtKTsNCgkJCXJldHVybiBlbnRyeV9yZXBseV9pdGVtOwkJCQ0KCQl9LA0KCQkN +CgkJdGhyZWFkOiBmdW5jdGlvbigpew0KCQkJdmFyIGVudHJ5X3JlcGx5X3RocmVh +ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3VsJyk7DQoJCQllbnRyeV9yZXBs +eV90aHJlYWQuY2xhc3NOYW1lID0gY29tbWVudEZvcm0uY2xhc3NOYW1lcy50aHJl +YWQ7DQoJCQlyZXR1cm4gZW50cnlfcmVwbHlfdGhyZWFkOw0KCQl9LA0KCQ0KCSAg +ICBfaGlnaGxpZ2h0OiBmdW5jdGlvbihub2RlKSB7DQoJICAgICAgICB2YXIgcHJl +cyA9IG5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3ByZScpOw0KCSAgICAgICAg +Zm9yICh2YXIgaSA9IDA7IGkgPCBwcmVzLmxlbmd0aDsgaSsrKSB7DQogICAgICAg +ICAgICAgIHZhciBjb2RlID0gcHJlc1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgn +Y29kZScpOw0KICAgICAgICAgICAgICBpZiAoY29kZS5sZW5ndGgpIGhsanMuaGln +aGxpZ2h0QmxvY2soY29kZVswXSwgaGxqcy50YWJSZXBsYWNlKTsNCiAgICAgICAg +ICAgIH0NCgkgICAgfQ0KCX0sDQoJDQoJX2FkZENvbW1lbnRzOiBmdW5jdGlvbih4 +bWxOb2RlcywgbWVzc19ib3gpew0KCQl2YXIgcmVwbGllcyA9IFtdOw0KCQl2YXIg +Y29tbWVudHNIb2xkZXIgPSAkKCdjb21tZW50cycpOw0KCQlmb3IodmFyIGk9MDsg +aTx4bWxOb2Rlcy5jb21tZW50Lmxlbmd0aDsgaSsrKSB7DQoJCQl2YXIgdGV4dCA9 +IHhtbE5vZGVzLmNvbW1lbnRbaV0uZmlyc3RDaGlsZC5kYXRhOw0KCQkJdmFyIGVu +dHJ5X3JlcGx5X2l0ZW0gPSB0aGlzLmJ1aWxkLmNvbW1lbnQoeG1sTm9kZXMuY29t +bWVudFtpXS5nZXRBdHRyaWJ1dGUoJ2NvbW1lbnRfaWQnKSwgdGV4dCk7DQoJCQly +ZXBsaWVzW3JlcGxpZXMubGVuZ3RoXSA9IGVudHJ5X3JlcGx5X2l0ZW07DQoJCQlp +Zih4bWxOb2Rlcy5jb21tZW50W2ldLmdldEF0dHJpYnV0ZSgncGFyZW50X2lkJykh +PTApIHsNCgkJCQl2YXIgZW50cnkgPSAkKCdjb21tZW50XycgKyB4bWxOb2Rlcy5j +b21tZW50W2ldLmdldEF0dHJpYnV0ZSgncGFyZW50X2lkJykpOw0KCQkJCXZhciBl +bnRyeV9yZXBseV90aHJlYWQgPSBlbnRyeS5nZXRFbGVtZW50KCcuJyArIHRoaXMu +Y2xhc3NOYW1lcy50aHJlYWQpOw0KCQkJCWlmKCFlbnRyeV9yZXBseV90aHJlYWQp +IHsNCgkJCQkJZW50cnlfcmVwbHlfdGhyZWFkID0gdGhpcy5idWlsZC50aHJlYWQo +KTsNCgkJCQkJZW50cnlfcmVwbHlfdGhyZWFkLmFwcGVuZENoaWxkKGVudHJ5X3Jl +cGx5X2l0ZW0pOw0KCQkJCQllbnRyeS5hcHBlbmRDaGlsZChlbnRyeV9yZXBseV90 +aHJlYWQpOw0KCQkJCX0NCgkJCQllbnRyeV9yZXBseV90aHJlYWQuYXBwZW5kQ2hp +bGQoZW50cnlfcmVwbHlfaXRlbSk7DQoJCQl9IGVsc2Ugew0KCQkJCXZhciByZXBs +eV9ob2xkZXIgPSAkKCdjb21tZW50cycpLmdldEVsZW1lbnQoJy4nICsgdGhpcy5j +bGFzc05hbWVzLnRocmVhZCkNCg0KCQkJCQ0KCQkJCQ0KCQkJCQ0KCQkJCQ0KCQkJ +CWlmKCFyZXBseV9ob2xkZXIpIHsNCgkJCQkJdmFyIHJlcGx5X2hvbGRlciA9IGRv +Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3VsJyk7DQoJCQkJCXJlcGx5X2hvbGRlci5j +bGFzc05hbWUgPSB0aGlzLmNsYXNzTmFtZXMudGhyZWFkOw0KCQkJCQljb21tZW50 +c0hvbGRlci5pbnNlcnRCZWZvcmUocmVwbHlfaG9sZGVyLCBjb21tZW50c0hvbGRl +ci5nZXRFbGVtZW50KCcuYWRkLWNvbW1lbnQnKSk7DQoJCQkJfQ0KCQkJCWlmICgh +bWVzc19ib3gpew0KCQkJCQlyZXBseV9ob2xkZXIuYXBwZW5kQ2hpbGQoZW50cnlf +cmVwbHlfaXRlbSk7DQoJCQkJfSBlbHNlew0KCQkJCQllbnRyeV9yZXBseV9pdGVt +LmdldEVsZW1lbnQoJ3AucmVwbHknKS5kaXNwb3NlKHRydWUpOw0KCQkJCQkkKHJl +cGx5X2hvbGRlcikuZ3JhYihlbnRyeV9yZXBseV9pdGVtLCAndG9wJykNCgkJCQl9 +DQoJCQkJDQoJCQl9DQoJCQlpZih4bWxOb2Rlcy5jb21tZW50W2ldLmdldEF0dHJp +YnV0ZSgndXNlcl9jb21tZW50Jyk9PTEpIHsgDQoJCQkJJCgnY29tbWVudF8nICsg +eG1sTm9kZXMuY29tbWVudFtpXS5nZXRBdHRyaWJ1dGUoJ2NvbW1lbnRfaWQnKSku +YWRkQ2xhc3MoJ2pzLW15LXJlcGx5Jyk7CQ0KCQkJfSBlbHNlIHsNCgkJCQkkKCdj +b21tZW50XycgKyB4bWxOb2Rlcy5jb21tZW50W2ldLmdldEF0dHJpYnV0ZSgnY29t +bWVudF9pZCcpKS5nZXRFbGVtZW50KCdkaXYubXNnLW1ldGEnKS5hZGRDbGFzcygn +bmV3LXJlcGx5Jyk7DQoJCQl9IA0KCQl9DQoJCWlmIChyZXBsaWVzLmxlbmd0aCA+ +IDApIHsNCgkJCXZhciBjb21tZW50c0hlYWRlciA9ICQoJ2NvbW1lbnRzJykuZ2V0 +RWxlbWVudCgnLmNvbW1lbnRzLWhlYWRlcicpOw0KCQkJaWYgKGNvbW1lbnRzSGVh +ZGVyICYmIGNvbW1lbnRzSGVhZGVyLmhhc0NsYXNzKCdoaWRkZW4nKSkgew0KCQkJ +CWNvbW1lbnRzSGVhZGVyLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTsNCgkJCX0NCgkJ +fQ0KDQoJCXJldHVybiByZXBsaWVzOw0KCX0sDQoJDQoJeG1sUmVzcG9uc2VIYW5k +bGVyX2NvbW1lbnQ6IGZ1bmN0aW9uKHhtbE5vZGVzLCBwYXJhbXMpew0KCQlpZih4 +bWxOb2Rlcy5tZXNzYWdlICYmIHhtbE5vZGVzLm1lc3NhZ2UubGVuZ3RoICYmIHht +bE5vZGVzLmNvbW1lbnQgJiYgeG1sTm9kZXMuY29tbWVudC5sZW5ndGgpIHsNCgkJ +CXBhcmFtcy5mb3JtLmVsZW1lbnRzWyd0aW1lZmllbGQnXS52YWx1ZSA9IHhtbE5v +ZGVzLnRpbWVmaWVsZFswXS5maXJzdENoaWxkLmRhdGE7DQoJCQl2YXIgY29tbWVu +dHNIb2xkZXIgPSAkKCdjb21tZW50cycpOw0KCQkJDQoJCQl2YXIganNmbGRobGQ7 +DQoJCQlqc2ZsZGhsZCA9ICQoJ2pzLWZpZWxkLWhvbGRlci13aXRoLWhlbHAnKTsN +CgkJCWlmICghanNmbGRobGQpIHsNCgkJCQlqc2ZsZGhsZCA9ICQoJ2pzLWZpZWxk +LWhvbGRlcicpOw0KCQkJfTsNCgkJCXZhciBwcmV2aWV3SG9sZGVyID0ganNmbGRo +bGQuZ2V0RWxlbWVudCgnLicgKyB0aGlzLmNsYXNzTmFtZXMucHJldmlld0hvbGRl +cik7DQoJCQlpZiAoIWpzZmxkaGxkLmNsYXNzTmFtZS5tYXRjaCgvbWVzc2FnZS1i +b3gtZm9ybS8pKXsNCgkJCQlqc2ZsZGhsZC5hZGRDbGFzcygnaGlkZGVuJyk7DQoJ +CQkJdGhpcy5fYWRkQ29tbWVudHMoeG1sTm9kZXMpOw0KCQkJfSBlbHNlew0KCQkJ +CXRoaXMuX2FkZENvbW1lbnRzKHhtbE5vZGVzLCB0cnVlKTsNCgkJCQkNCgkJCQlw +YXJhbXMuZm9ybVsnY29tbWVudFttZXNzYWdlXSddLnZhbHVlPSIiOw0KCQkJfQ0K +CQkJDQoJCQkkKHBhcmFtcy5mb3JtKS5yZW1vdmVDbGFzcyhwYXJhbXMubG9hZGlu +Z0NsYXNzTmFtZSk7DQoJCQl0aGlzLmFkZE5ld0NvbW1lbnRzVG9CYXIoKTsNCgkJ +CXZhciBjb21tZW50c19oZWFkZXIgPSAkKCdjb21tZW50cy1oZWFkZXInKTsNCgkJ +CWlmIChjb21tZW50c19oZWFkZXIpIHsNCgkJCQljb21tZW50c19oZWFkZXIuYWRk +Q2xhc3MoJ2NvbW1lbnRzLWhlYWRlci12aXNpYmxlJyk7DQoJCQl9DQoJCQlwYXJh +bXMuZm9ybS5sYXN0X3RleHQgPSBwYXJhbXMuZm9ybVsnY29tbWVudFttZXNzYWdl +XSddLnZhbHVlOw0KCQkJdmFyIGlucHV0c190b19ibHVyID0gJChwYXJhbXMuZm9y +bSkuZ2V0RWxlbWVudHMoJ2lucHV0Jyk7DQoJCQlmb3IgKHZhciBpPTAsIGwgPSBp +bnB1dHNfdG9fYmx1ci5sZW5ndGg7IGkgPCBsOyBpKyspIHsNCgkJCQlpbnB1dHNf +dG9fYmx1cltpXS5ibHVyKCk7DQoJCQl9Ow0KCQl9DQoJCWlmICh4bWxOb2Rlcy5j +b21tZW50ICYmIHhtbE5vZGVzLmNvbW1lbnQubGVuZ3RoKQ0KCQkJdGhpcy5maXJl +RXZlbnQoJ3RtOmxvYWRpbmctZmluaXNoZWQnKTsNCgkJdGhpcy51cGRhdGVBbGxD +b21tZW50c0NvdW50KCk7DQoJCSQocGFyYW1zLmZvcm0pLnJlbW92ZUNsYXNzKCds +b2FkaW5nJyk7DQoJCQ0KCX0sDQoNCgl4bWxSZXNwb25zZUhhbmRsZXJfY29tcGFu +eV9jb21tZW50OiBmdW5jdGlvbih4bWxOb2RlcywgcGFyYW1zKXsNCgkJaWYoeG1s +Tm9kZXMubWVzc2FnZSAmJiB4bWxOb2Rlcy5tZXNzYWdlLmxlbmd0aCAmJiB4bWxO +b2Rlcy5jb21wYW55X2NvbW1lbnQgJiYgeG1sTm9kZXMuY29tcGFueV9jb21tZW50 +Lmxlbmd0aCkgew0KCQkJcGFyYW1zLmZvcm0uZWxlbWVudHNbJ3RpbWVmaWVsZCdd +LnZhbHVlID0geG1sTm9kZXMudGltZWZpZWxkWzBdLmZpcnN0Q2hpbGQuZGF0YTsN +CgkJCXZhciBjb21tZW50c0hvbGRlciA9ICQoJ2NvbW1lbnRzJyk7DQoJCQl2YXIg +cmVwbHlfaG9sZGVyID0gY29tbWVudHNIb2xkZXIuZ2V0RWxlbWVudCgnLicgKyB0 +aGlzLmNsYXNzTmFtZXMudGhyZWFkKTsNCgkJCXZhciBlbnRyeV9yZXBsaWVzID0g +Y29tbWVudHNIb2xkZXIuZ2V0RWxlbWVudHMoJy4nICsgdGhpcy5jbGFzc05hbWVz +LmNvbW1lbnRJdGVtKTsNCgkJCWZvcih2YXIgaT0wLCB4bWxfbGVuZ3RoID0geG1s +Tm9kZXMuY29tcGFueV9jb21tZW50Lmxlbmd0aDsgaTx4bWxfbGVuZ3RoOyBpKysp +IHsNCgkJCQllbnRyeV9yZXBsaWVzLnNvcnQodGhpcy5zb3J0QXJyYXkpOw0KCQkJ +CXJlcGx5X2hvbGRlci5pbnNlcnRCZWZvcmUoZW50cnlfcmVwbHlfaXRlbSwgZW50 +cnlfcmVwbGllc1swXSk7DQoJCQkJdGhpcy5idWlsZC5jb21tZW50KHhtbE5vZGVz +LmNvbXBhbnlfY29tbWVudFtpXS5nZXRBdHRyaWJ1dGUoJ2NvbW1lbnRfaWQnKSwg +eG1sTm9kZXMuY29tcGFueV9jb21tZW50W2ldLmZpcnN0Q2hpbGQuZGF0YSk7DQoJ +CQkJIGlmKHhtbE5vZGVzLmNvbXBhbnlfY29tbWVudFtpXS5nZXRBdHRyaWJ1dGUo +J3VzZXJfY29tbWVudCcpPT0xKSB7IA0KCQkJCQkkKCdjb21tZW50XycgKyB4bWxO +b2Rlcy5jb21wYW55X2NvbW1lbnRbaV0uZ2V0QXR0cmlidXRlKCdjb21tZW50X2lk +JykpLmFkZENsYXNzKCdteS1yZXBseScpOw0KCQkJCX0gZWxzZSB7DQoJCQkJCSQo +J2NvbW1lbnRfJyArIHhtbE5vZGVzLmNvbXBhbnlfY29tbWVudFtpXS5nZXRBdHRy +aWJ1dGUoJ2NvbW1lbnRfaWQnKSkuYWRkQ2xhc3MoJ25ldy1yZXBseScpOw0KCQkJ +CX0NCgkJCX0NCgkJCXZhciBqc2ZsZGhsZCA9ICQoJ2pzLWZpZWxkLWhvbGRlcicp +Ow0KCQkJdmFyIHByZXZpZXdIb2xkZXIgPSBqc2ZsZGhsZC5nZXRFbGVtZW50KCcu +JyArIHRoaXMuY2xhc3NOYW1lcy5wcmV2aWV3SG9sZGVyKTsNCgkJCWpzZmxkaGxk +LmFkZENsYXNzKCdoaWRkZW4nKTsNCgkJCSQocGFyYW1zLmZvcm0pLnJlbW92ZUNs +YXNzKHBhcmFtcy5sb2FkaW5nQ2xhc3NOYW1lKTsNCgkJCXRoaXMuYWRkTmV3Q29t +bWVudHNUb0JhcigpOw0KCQl9DQoJCWlmICh4bWxOb2Rlcy5jb21wYW55X2NvbW1l +bnQgJiYgeG1sTm9kZXMuY29tcGFueV9jb21tZW50Lmxlbmd0aCkNCgkJCXRoaXMu +ZmlyZUV2ZW50KCd0bTpsb2FkaW5nLWZpbmlzaGVkJyk7DQoJCXRoaXMudXBkYXRl +QWxsQ29tbWVudHNDb3VudCgpOw0KCQkkKHBhcmFtcy5mb3JtKS5yZW1vdmVDbGFz +cygnbG9hZGluZycpOw0KCX0sDQoJDQoJeG1sUmVzcG9uc2VIYW5kbGVyX3ByZXZp +ZXc6IGZ1bmN0aW9uKHhtbE5vZGVzLCBwYXJhbXMpew0KCQlpZih4bWxOb2Rlcy5w +cmV2aWV3ICYmIHhtbE5vZGVzLnByZXZpZXcubGVuZ3RoKSB7DQoJCQl2YXIgcHJl +dmlld0hvbGRlciA9ICQoJ2pzLWZpZWxkLWhvbGRlcicpLmdldEVsZW1lbnQoJy4n +ICsgdGhpcy5jbGFzc05hbWVzLnByZXZpZXdIb2xkZXIpOw0KCQkJcHJldmlld0hv +bGRlci5yZW1vdmVDbGFzcygnaGlkZGVuJykNCgkJCXByZXZpZXdIb2xkZXIuaW5u +ZXJIVE1MID0geG1sTm9kZXMucHJldmlld1swXS5maXJzdENoaWxkLmRhdGE7DQoJ +CQkkKHBhcmFtcy5mb3JtKS5yZW1vdmVDbGFzcyhwYXJhbXMubG9hZGluZ0NsYXNz +TmFtZSk7DQoJCQkkKHBhcmFtcy5mb3JtKS5yZW1vdmVDbGFzcygnbG9hZGluZycp +Ow0KCQkJaWYgKHBhcmFtcy5mb3JtLmlucHV0X3ByZXZpZXcpew0KCQkJCSQocGFy +YW1zLmZvcm0uaW5wdXRfcHJldmlldykucmVtb3ZlQ2xhc3MoJ2xvYWRpbmcnKTsN +CgkJCX0NCgkJCXRoaXMuYnVpbGQuX2hpZ2hsaWdodChwcmV2aWV3SG9sZGVyKTsN +CgkJfQ0KCX0sDQoJDQoJeG1sUmVzcG9uc2VIYW5kbGVyX2Vycm9yOiBmdW5jdGlv +bih4bWxOb2RlcywgcGFyYW1zKXsNCgkJaWYoeG1sTm9kZXMuZXJyb3IgJiYgeG1s +Tm9kZXMuZXJyb3IubGVuZ3RoKSB7DQoJCQkkKHBhcmFtcy5mb3JtKS5yZW1vdmVD +bGFzcyhwYXJhbXMubG9hZGluZ0NsYXNzTmFtZSk7DQoJCQlmb3IgKHZhciBpPTA7 +IGk8eG1sTm9kZXMuZXJyb3IubGVuZ3RoOyBpKyspew0KCQkJCXZhciBlcnJvck1l +c3NhZ2UgPSB4bWxOb2Rlcy5lcnJvcltpXS5maXJzdENoaWxkID8geG1sTm9kZXMu +ZXJyb3JbaV0uZmlyc3RDaGlsZC5kYXRhIDogdGhpcy5lcnJvck1lc3NhZ2VzLnVu +a25vd25FcnJvcjsNCgkJCX0NCgkJCXRoaXMuc2hvd0Vycm9yKGVycm9yTWVzc2Fn +ZSk7DQoJCX0NCgkJJChwYXJhbXMuZm9ybSkucmVtb3ZlQ2xhc3MoJ2xvYWRpbmcn +KTsNCgkJaWYgKHBhcmFtcy5mb3JtLmlucHV0X3ByZXZpZXcpew0KCQkJJChwYXJh +bXMuZm9ybS5pbnB1dF9wcmV2aWV3KS5yZW1vdmVDbGFzcygnbG9hZGluZycpOw0K +CQl9DQoJfSwNCgkNCglzZW5kQ29tbWVudDogZnVuY3Rpb24oZm9ybSwgc3VibWl0 +VHlwZSwgbm9kZSkgew0KCQkkKCdqcy1maWVsZC1ob2xkZXInKS5yZW1vdmVDbGFz +cygnanMtbWFya2VkLWVycm9yJyk7DQoJCSQobm9kZSkuYWRkQ2xhc3MoJ2xvYWRp +bmcnKQ0KCQl0aGlzLnNlbmREYXRhKGZvcm0sIHN1Ym1pdFR5cGUpOw0KCQl0aGlz +LmZpcmVFdmVudCgndG06bG9hZGluZy1zdGFydGVkJyk7DQoJfSwNCgkNCglzZW5k +T25FbnRlcjogZnVuY3Rpb24odGV4dGFyZWEpIHsNCgkJdGV4dGFyZWEub25rZXl1 +cCA9IGZ1bmN0aW9uKGV2KSB7DQoJCQlpZighZXYpIHsNCgkJCQlldiA9IHdpbmRv +dy5ldmVudDsNCgkJCX0NCgkJCXZhciBrZXkgPSBnZXRDaGFyQ29kZShldik7DQoJ +CQlpZihrZXk9PTEzICYmIGV2LmN0cmxLZXkpIHsNCgkJCQljb21tZW50Rm9ybS5z +ZW5kQ29tbWVudCh0aGlzLmZvcm0sICdjb21tZW50JywgdGhpcy5mb3JtKTsNCgkJ +CX0NCgkJfQ0KCX0sDQoJDQoJbW92ZUZvcm06IGZ1bmN0aW9uKHJlcGx5X2Zvcm1f +aWQpIHsNCgkJdmFyIGZvcm1Ib2xkZXIgPSAkKHJlcGx5X2Zvcm1faWQpOw0KCQl2 +YXIgcGFyZW50X2lkID0gcmVwbHlfZm9ybV9pZC5tYXRjaCgvcmVwbHlfZm9ybV8o +LiopLylbMV07DQoJCXBhcmVudF9pZCA9IHBhcnNlSW50KHBhcmVudF9pZCk7DQoJ +CWlmICghYXJndW1lbnRzLmNhbGxlZS5hZGRjKSB7DQoJCQlhcmd1bWVudHMuY2Fs +bGVlLmFkZGMgPSAkKCd3cmFwcGVyJykuZ2V0RWxlbWVudCgnLmFkZC1jb21tZW50 +Jyk7DQoJCQkNCgkJfQ0KCQl2YXIgaW5mb2xpbmVIb2xkZXIgPSBhcmd1bWVudHMu +Y2FsbGVlLmFkZGM7DQoJCWlmIChpbmZvbGluZUhvbGRlcikgew0KCQkNCgkJCQ0K +CQkJaWYgKCFhcmd1bWVudHMuY2FsbGVlLmpzZmxkaGxkKSB7DQoJCQkJaWYgKCEo +YXJndW1lbnRzLmNhbGxlZS5qc2ZsZGhsZCA9ICQoJ2pzLWZpZWxkLWhvbGRlci13 +aXRoLWhlbHAnKSkpIHsNCgkJCQkJYXJndW1lbnRzLmNhbGxlZS5qc2ZsZGhsZCA9 +ICQoJ2pzLWZpZWxkLWhvbGRlcicpOw0KCQkJCX0gZWxzZXsNCgkJCQkJYXJndW1l +bnRzLmNhbGxlZS53aXRoaGVscCA9IHRydWU7DQoJCQkJfQ0KCQkJCWFyZ3VtZW50 +cy5jYWxsZWUuY29tbWhvbGRyID0gYXJndW1lbnRzLmNhbGxlZS5qc2ZsZGhsZC5n +ZXRFbGVtZW50KCcjanMtZmllbGQtY29tbWVudCcpOw0KCQkJCWFyZ3VtZW50cy5j +YWxsZWUucHJ3aGxkID0gYXJndW1lbnRzLmNhbGxlZS5qc2ZsZGhsZC5nZXRFbGVt +ZW50KCcuJyArIHRoaXMuY2xhc3NOYW1lcy5wcmV2aWV3SG9sZGVyKTsNCgkJCQlh +cmd1bWVudHMuY2FsbGVlLnRyZWVpbnB1dCA9ICBhcmd1bWVudHMuY2FsbGVlLmpz +ZmxkaGxkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdmb3JtJylbMF0uZWxlbWVudHNb +J2NvbW1lbnRbcGFyZW50X2lkXSddOw0KDQoJCQl9DQoJCQlpZiAoIWFyZ3VtZW50 +cy5jYWxsZWUud2l0aGhlbHApIHsNCgkJCQl2YXIgaW5mb2xpbmUgPSBpbmZvbGlu +ZUhvbGRlci5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGwnKVswXTsNCgkJCQlpZiAo +aW5mb2xpbmUpIHsNCgkJCQkJaWYocGFyZW50X2lkPT0wKSB7DQoJCQkJCQkkKGlu +Zm9saW5lKS5yZW1vdmVDbGFzcygnaGlkZGVuJyk7DQoJCQkJCX0NCgkJCQkJZWxz +ZSB7DQoJCQkJCQkkKGluZm9saW5lKS5hZGRDbGFzcygnaGlkZGVuJyk7DQoJCQkJ +CX0NCgkJCQl9DQoJCQl9DQoJCQkNCgkJCXZhciBqc2ZsZGhsZCA9IGFyZ3VtZW50 +cy5jYWxsZWUuanNmbGRobGQ7DQoJCQl2YXIgY29tbWVudEhvbGRlciA9IGFyZ3Vt +ZW50cy5jYWxsZWUuY29tbWhvbGRyOw0KCQkJdmFyIHByZXZpZXdIb2xkZXIgPSBh +cmd1bWVudHMuY2FsbGVlLnByd2hsZDsNCgkJCXZhciB0cmVlaW5wdXQgPSBhcmd1 +bWVudHMuY2FsbGVlLnRyZWVpbnB1dDsNCgkJCWlmKGpzZmxkaGxkKSB7DQoJCQkJ +Zm9ybUhvbGRlci5hcHBlbmRDaGlsZChqc2ZsZGhsZCk7DQoJCQkJdHJlZWlucHV0 +LnZhbHVlID0gcGFyZW50X2lkOw0KCQkJCSQocHJldmlld0hvbGRlcikuYWRkQ2xh +c3MoJ2hpZGRlbicpOw0KCQkJCXByZXZpZXdIb2xkZXIuaW5uZXJIVE1MID0gJyc7 +DQoJCQkJY29tbWVudEhvbGRlci52YWx1ZSA9ICcnOw0KCQkJCWpzZmxkaGxkLnJl +bW92ZUNsYXNzKCdoaWRkZW4nKTsNCgkJCQljb21tZW50SG9sZGVyLmZvY3VzKCk7 +DQoJCQl9DQoJCX0NCg0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0sDQoJDQoJc2Ny +b2xsVG9BbmNob3I6IGZ1bmN0aW9uKGFuY2hvcil7DQoJCXdpbmRvdy5sb2NhdGlv +bi5ocmVmID0gd2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoJyMnKVswXSArIGFu +Y2hvcjsgDQoJfSwNCgkNCglyZWxvYWRDb21tZW50czogZnVuY3Rpb24oKSB7DQoJ +CXZhciB1cmwgPSAnL2FqYXgvY29tbWVudHMvZ2V0X25ld19jb21tZW50cy8nOw0K +CQlpZihkb2N1bWVudC5mb3Jtc1snY29tbWVudF9mb3JtJ10pIHsNCgkJCXZhciB0 +aW1lZmllbGQgPSBkb2N1bWVudC5mb3Jtc1snY29tbWVudF9mb3JtJ10uZWxlbWVu +dHNbJ3RpbWVmaWVsZCddLnZhbHVlOw0KCQkJdmFyIGRhdGEgPSAndGFyZ2V0X2lk +PScrIHRoaXMudGFyZ2V0SWQgKycmdGFyZ2V0X3R5cGU9JyArIHRoaXMudGFyZ2V0 +VHlwZSArICcmdGltZWZpZWxkPScgKyB0aW1lZmllbGQ7DQoJCQlfdGhpcyA9IHRo +aXM7DQoJCQlhamF4UG9zdCgNCgkJCQkJdXJsLA0KCQkJCQlkYXRhLA0KCQkJCQl0 +aGlzLnJlbG9hZENvbW1lbnRzT25sb2FkLA0KCQkJCQlfdGhpcw0KCQkJCQkpOw0K +CQkJfQ0KCQl0aGlzLmZpcmVFdmVudCgndG06bG9hZGluZy1zdGFydGVkJyk7DQoJ +CXJldHVybiBmYWxzZTsNCgl9LA0KCQ0KCXJlbG9hZENvbW1lbnRzT25sb2FkOiBm +dW5jdGlvbihhamF4T2JqLCBfdGhpcykgew0KCQl2YXIgY29tbWVudHNIb2xkZXIg +PSAkKCdjb21tZW50cycpOw0KCQl2YXIgeG1sT2JqID0gYWpheE9iai5yZXNwb25z +ZVhNTDsNCgkJdmFyIHhtbE5vZGVzID0gX3RoaXMucGFyc2VYTUwoeG1sT2JqKTsN +CgkJY29tbWVudHNIb2xkZXIuZ2V0RWxlbWVudHMoJy5uZXctcmVwbHknKS5yZW1v +dmVDbGFzcygnbmV3LXJlcGx5Jyk7DQoJCWlmKHhtbE5vZGVzLm1lc3NhZ2UgJiYg +eG1sTm9kZXMubWVzc2FnZS5sZW5ndGggJiYgeG1sTm9kZXMuY29tbWVudCAmJiB4 +bWxOb2Rlcy5jb21tZW50Lmxlbmd0aCkgew0KCQkJZG9jdW1lbnQuZm9ybXNbJ2Nv +bW1lbnRfZm9ybSddLmVsZW1lbnRzWyd0aW1lZmllbGQnXS52YWx1ZSA9IHhtbE5v +ZGVzLnRpbWVmaWVsZFswXS5maXJzdENoaWxkLmRhdGE7DQoJCQlfdGhpcy5fYWRk +Q29tbWVudHMoeG1sTm9kZXMpOw0KCQl9DQoJCV90aGlzLmFkZE5ld0NvbW1lbnRz +VG9CYXIoKTsNCgkJY29tbWVudEZvcm0uZmlyZUV2ZW50KCd0bTpsb2FkaW5nLWZp +bmlzaGVkJyk7DQoJCV90aGlzLnVwZGF0ZUFsbENvbW1lbnRzQ291bnQoKTsNCgl9 +LA0KCQ0KCWFkZE5ld0NvbW1lbnRzVG9CYXI6IGZ1bmN0aW9uKCkgew0KCQl0aGlz +Lm5ld19yZXBsaWVzID0gJChkb2N1bWVudCkuZ2V0RWxlbWVudHMoJy5uZXctcmVw +bHknKTsNCgkJZm9yICh2YXIgaT10aGlzLm5ld19yZXBsaWVzLmxlbmd0aC0xO2k+ +PTA7aS0tKSB7DQoJCQlpZiAodGhpcy5uZXdfcmVwbGllc1tpXS5oYXNDbGFzcygn +bXktcmVwbHknKSkgew0KCQkJCXRoaXMubmV3X3JlcGxpZXMuc3BsaWNlKGksIDEp +Ow0KCQkJfSBlbHNlIGlmICh0aGlzLm5ld19yZXBsaWVzW2ldLmhhc0NsYXNzKCdz +ZWVuJykpIHsNCgkJCQl0aGlzLm5ld19yZXBsaWVzLnNwbGljZShpLCAxKTsNCgkJ +CX0NCgkJfQ0KCQl0aGlzLnVwZGF0ZU5ld0NvbW1lbnRzQ291bnQoKTsNCgl9LA0K +CQ0KCW5leHROZXdDb21tZW50OiBmdW5jdGlvbigpew0KCQlpZiAodGhpcy5uZXdf +cmVwbGllcyAmJiB0aGlzLm5ld19yZXBsaWVzLmxlbmd0aCkgew0KCQkJdmFyIGNv +bW1lbnQgPSB0aGlzLm5ld19yZXBsaWVzWzBdOw0KCQkJY29tbWVudC5hZGRDbGFz +cygnc2VlbicpOw0KCQkJdGhpcy5uZXdfcmVwbGllcy5zcGxpY2UoMCwgMSk7DQoJ +CQl0aGlzLmdvVG9Db21tZW50KGNvbW1lbnQpOw0KCQkJdGhpcy51cGRhdGVOZXdD +b21tZW50c0NvdW50KCk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0sDQoJDQoJ +dXBkYXRlQWxsQ29tbWVudHNDb3VudDogZnVuY3Rpb24oKSB7DQoJCWlmICgkKCdj +b21tZW50cycpLmdldEVsZW1lbnQoJy5jb21tZW50cy1oZWFkZXIgLmpzLWNvbW1l +bnRzLWNvdW50JykpDQoJCQkkKCdjb21tZW50cycpLmdldEVsZW1lbnQoJy5jb21t +ZW50cy1oZWFkZXIgLmpzLWNvbW1lbnRzLWNvdW50JykuaW5uZXJIVE1MID0gJCgn +Y29tbWVudHMnKS5nZXRFbGVtZW50cygnLm1zZy1tZXRhJykubGVuZ3RoLnRvU3Ry +aW5nKCk7DQoJfSwNCgkNCgl1cGRhdGVOZXdDb21tZW50c0NvdW50OiBmdW5jdGlv +bigpIHsNCgkJaWYgKHRoaXMubmV3X3JlcGxpZXMpIHsNCgkJCXZhciBjb3VudCA9 +IHRoaXMubmV3X3JlcGxpZXMubGVuZ3RoOw0KCQkJdGhpcy5maXJlRXZlbnQoJ3Rt +Om5ldy1jb21tZW50cy1jb3VudC1jaGFuZ2VkJywgdGhpcy5uZXdfcmVwbGllcy5s +ZW5ndGgpOw0KCQl9DQoJfSwNCgkNCglnb1RvQ29tbWVudDogZnVuY3Rpb24oY29t +bWVudCkgew0KCQl0aGlzLmZpcmVFdmVudCgidG06Z28tdG8tY29tbWVudCIsIGNv +bW1lbnQucGFyZW50Tm9kZSk7DQoJCXRoaXMuc2Nyb2xsZXIgPSAodGhpcy5zY3Jv +bGxlciB8fCBuZXcgRnguU2Nyb2xsKHdpbmRvdykpOw0KCQl0aGlzLnNjcm9sbGVy +LnRvRWxlbWVudChjb21tZW50KTsNCgkJcmV0dXJuIGZhbHNlOw0KCX0sDQoJDQoJ +cXVpY2tHb1RvQ29tbWVudDogZnVuY3Rpb24oY29tbWVudCkgew0KCQl0aGlzLmZp +cmVFdmVudCgidG06Z28tdG8tY29tbWVudCIsIGNvbW1lbnQucGFyZW50Tm9kZSk7 +DQoJCXdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIiMiICsgY29tbWVudC5wYXJlbnRO +b2RlLmlkOw0KCQlyZXR1cm4gZmFsc2U7DQoJfSwNCg0KCWdvVG9QYXJlbnRDb21t +ZW50OiBmdW5jdGlvbihsaW5rKSB7DQoJCXZhciBpZCA9IGxpbmsuaHJlZi5zdWJz +dHIobGluay5ocmVmLmluZGV4T2YoJyMnKSsxKTsNCgkJdmFyIGVsbSA9ICQoaWQp +Ow0KCQlsaW5rID0gJChsaW5rKTsNCgkJZWxtLmdldEVsZW1lbnQoJy5kb3duLXRv +LWNoaWxkJykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpOw0KCQllbG0uZ2V0RWxlbWVu +dCgnLmRvd24tdG8tY2hpbGQgYScpLmhyZWYgPSAnIycgKyBsaW5rLmdldFBhcmVu +dCgnLmNvbW1lbnRfaG9sZGVyJykuaWQ7DQoNCgkJdGhpcy5zY3JvbGxlciA9ICh0 +aGlzLnNjcm9sbGVyIHx8IG5ldyBGeC5TY3JvbGwod2luZG93KSk7DQoJCXRoaXMu +c2Nyb2xsZXIudG9FbGVtZW50KGVsbSk7DQoNCgkJcmV0dXJuIGZhbHNlOwkJDQoJ +fSwNCgkNCglnb1RvQ2hpbGRDb21tZW50OiBmdW5jdGlvbihsaW5rKSB7DQoJCXZh +ciBpZCA9IGxpbmsuaHJlZi5zdWJzdHIobGluay5ocmVmLmluZGV4T2YoJyMnKSsx +KTsNCgkJdmFyIGVsbSA9ICQoaWQpOw0KCQlsaW5rID0gJChsaW5rKTsNCgkJbGlu +ay5nZXRQYXJlbnQoJy5jb21tZW50X2hvbGRlcicpLmdldEVsZW1lbnQoJy5kb3du +LXRvLWNoaWxkJykuYWRkQ2xhc3MoJ2hpZGRlbicpOw0KDQoJCXRoaXMuc2Nyb2xs +ZXIgPSAodGhpcy5zY3JvbGxlciB8fCBuZXcgRnguU2Nyb2xsKHdpbmRvdykpOw0K +CQl0aGlzLnNjcm9sbGVyLnRvRWxlbWVudChlbG0pOw0KDQoJCXJldHVybiBmYWxz +ZTsJCQ0KCX0sDQoJCQ0KCWdvVG9JZDogZnVuY3Rpb24oaWQpIHsNCgkJdGhpcy5z +Y3JvbGxlciA9ICh0aGlzLnNjcm9sbGVyIHx8IG5ldyBGeC5TY3JvbGwod2luZG93 +KSk7DQoJCXRoaXMuc2Nyb2xsZXIudG9FbGVtZW50KCQoaWQpKTsNCgkJcmV0dXJu +IGZhbHNlOw0KCX0sDQoJDQoJc29ydEFycmF5OiBmdW5jdGlvbihhLCBiKSB7DQoJ +ICBpZiAoYS5vZmZzZXRUb3AgPCBiLm9mZnNldFRvcCkNCgkgICAgcmV0dXJuIC0x +Ow0KCSAgaWYgKGEub2Zmc2V0VG9wID4gYi5vZmZzZXRUb3ApDQoJICAgIHJldHVy +biAxOw0KCSAgcmV0dXJuIDA7CQkNCgl9LA0KCQ0KDQoJc2hvd0Vycm9yOiBmdW5j +dGlvbihlcnJvck1zZyl7DQoJCWlmICghZXJyb3JNc2cpIHsNCgkJCWVycm9yTXNn +ID0gRkFULnZvdGluZ3NfdW5rbm93bl9lcnJvcjsNCgkJfQ0KCQlmdXR1X2FsZXJ0 +KEZBVC52b3RpbmdzX2hlYWRlciwgZXJyb3JNc2csIHRydWUsICdlcnJvcicpOw0K +CX0NCgkNCn0pOw0KDQp2YXIgY29tbWVudEZvcm0gPSBuZXcgY29tbWVudEZvcm1D +bGFzcygpOw0KdG0uaW5pdC5hZGQoZnVuY3Rpb24oKXsNCgl2YXIgY19mb3JtX25v +ZGUgPSAkKCdjb21tZW50X2Zvcm0nKTsNCglpZiAoY19mb3JtX25vZGUpIHsNCgkJ +Y19mb3JtX25vZGUuaW5wdXRfcHJldmlldyA9IGNfZm9ybV9ub2RlLmdldEVsZW1l +bnQoJ2lucHV0LnByZXZpZXcnKTsNCgkJaWYgKGNfZm9ybV9ub2RlLmlucHV0X3By +ZXZpZXcpew0KCQkJDQoJCQljX2Zvcm1fbm9kZS5pbnB1dF9wcmV2aWV3LmFkZEV2 +ZW50KCdjbGljaycsZnVuY3Rpb24oKXsNCgkJCQljb21tZW50Rm9ybS5zZW5kQ29t +bWVudChjX2Zvcm1fbm9kZSwgJ3ByZXZpZXcnLCBjX2Zvcm1fbm9kZS5pbnB1dF9w +cmV2aWV3KQ0KCQkJfSk7DQoJCX0NCgkJDQoJCXZhciBjX2Zvcm1fc3VibWl0ID0g +ZnVuY3Rpb24oKXsNCgkJCWlmIChjX2Zvcm1fbm9kZS5sYXN0X3RleHQgPT0gY19m +b3JtX25vZGVbJ2NvbW1lbnRbbWVzc2FnZV0nXS52YWx1ZSl7DQoJCQkJDQoJCQl9 +IGVsc2Ugew0KCQkJCWNvbW1lbnRGb3JtLnNlbmRDb21tZW50KGNfZm9ybV9ub2Rl +LCBjb21tZW50X3R5cGUsIGNfZm9ybV9ub2RlKTsgDQoJCQkJDQoJCQl9DQoJCX0N +CgkJDQoJCXZhciBjb21tZW50X3R5cGUgPSBjX2Zvcm1fbm9kZS5nZXRFbGVtZW50 +KCcjY29tbWVudF90eXBlJykudGl0bGU7DQoJCWNfZm9ybV9ub2RlLmFkZEV2ZW50 +cyh7DQoJCQknc3VibWl0JzpmdW5jdGlvbigpew0KCQkJCWNfZm9ybV9zdWJtaXQo +KTsNCgkJCQlyZXR1cm4gZmFsc2U7CQ0KCQkJfSwNCgkJCSdrZXl1cCc6ZnVuY3Rp +b24oZSl7DQoJCQkJaWYoZS5jb250cm9sICYmIChlLmtleSA9PSAnZW50ZXInKSkg +ew0KCQkJCQljX2Zvcm1fc3VibWl0KCk7DQoJCQkJfQ0KCQkJfQ0KCQkJDQoJCX0p +DQoJCQ0KCQkNCgkJDQoJfQ0KfSkNCg== + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline; filename=voting.js +Content-Type: application/x-javascript; charset=utf-8; name=voting.js +Content-Location: http://habrahabr.ru/js/1307631427/voting.js +Content-Transfer-Encoding: Base64 + +LyoNCjxkaXYgaWQ9InVzZXJ7eyAkaWQgfX0iIGNsYXNzPSJ2b3RlX2hvbGRlciAo +bG9naW5faG9sZGVyKSI+DQoJCTxkaXYgY2xhc3M9InZvdGluZyAocG9zaXRpdmUg +fHwgbmVnYXRpdmUpIChtaW5lIHx8IHZvdGVkKSAocGx1cyB8fCBtaW51cykiPg0K +CQkJPHNwYW4gY2xhc3M9InZvdGVfdGl0bGUiPtCa0LDRgNC80LAg0L/QvtC70YzQ +t9C+0LLQsNGC0LXQu9GPPC9zcGFuPg0KCQkJPHNwYW4gY2xhc3M9InZvdGVfcG9p +bnRzIj4NCgkJCQk8ZW0+e3sgJHNjb3JlIH19PC9lbT4NCgkJCQk8c3Ryb25nPnt7 +ICRjb3VudCB9fSAgL3N0cm9uZz4NCgkJCTwvc3Bhbj4NCgkJCTxkaXYgY2xhc3M9 +InZvdGVfYnV0dG9ucyI+DQoJCQkJPGEgb25jbGljaz0icmV0dXJuIFZvdGVyLnZv +dGUoZXZlbnQsIHRoaXMsICd1c2VyIHx8IGNvbW1lbnQgfHwgcG9zdCcsICdwbHVz +Jyk7IiBjbGFzcz0idm90ZV9wbHVzIiBocmVmPSIiPjwvYT4NCgkJCQk8YSBvbmNs +aWNrPSJyZXR1cm4gVm90ZXIudm90ZShldmVudCwgdGhpcywgJ3VzZXIgfHwgY29t +bWVudCB8fCBwb3N0JywgJ21pbnVzJyk7IiBjbGFzcz0idm90ZV9taW51cyIgaHJl +Zj0iIj48L2E+DQoJCQk8L2Rpdj4NCgkJPC9kaXY+DQoJPC9kaXY+DQo8L2Rpdj4N +CiovDQoNCg0KDQpWb3RlciA9IHsNCgl2b3RlVHlwZTogew0KCQkJcG9zdDogew0K +CQkJCQl1cmw6ICh3aW5kb3cuYmFzZVVSTCB8fCAnJykgKyAnL2FqYXgvdm90aW5n +LycsDQoJCQkJCWREYXRhOiB7IC8vIGRlZmF1bHQgZGF0YQ0KCQkJCQkJYWN0aW9u +OiAndm90ZScsDQoJCQkJCQltb2RlOiAncG9zdHMnLA0KCQkJCQkJdGFyZ2V0X25h +bWU6ICdwb3N0JywNCgkJCQkJCWRibFZvdGU6IGZhbHNlIC8vIGRvdWJsZSB2b3Rp +bmcgaXMgYWxsb3dkZWQNCgkJCQkJfQ0KCQkJfSwNCg0KCQkJcG9zdF9jb21tZW50 +OiB7DQoJCQkJCXVybDogKHdpbmRvdy5iYXNlVVJMIHx8ICcnKSArICcvYWpheC92 +b3RpbmcvJywNCgkJCQkJZERhdGE6IHsNCgkJCQkJCWFjdGlvbjogJ3ZvdGUnLA0K +CQkJCQkJdGFyZ2V0X25hbWU6ICdwb3N0X2NvbW1lbnQnLA0KCQkJCQkJZGJsVm90 +ZTogZmFsc2UNCgkJCQkJfQ0KCQkJfSwNCg0KCQkJdXNlcjogew0KCQkJCQl1cmw6 +ICh3aW5kb3cuYmFzZVVSTCB8fCAnJykgKyAnL2FqYXgvdm90aW5nLycsDQoJCQkJ +CWREYXRhOiB7DQoJCQkJCQlhY3Rpb246ICd2b3RlJywNCgkJCQkJCW1vZGU6ICd1 +c2VycycsDQoJCQkJCQl0YXJnZXRfbmFtZTogJ3VzZXInLA0KCQkJCQkJZGJsVm90 +ZTogdHJ1ZQ0KCQkJCQl9DQoJCQl9LA0KDQoJCQljb21wYW55OiB7DQoJCQkJCXVy +bDogKHdpbmRvdy5iYXNlVVJMIHx8ICcnKSArICcvYWpheC92b3RpbmcvJywNCgkJ +CQkJZERhdGE6IHsNCgkJCQkJCWFjdGlvbjogJ3ZvdGUnLA0KCQkJCQkJbW9kZTog +J2NvbXBhbnknLA0KCQkJCQkJdGFyZ2V0X25hbWU6ICdjb21wYW55JywNCgkJCQkJ +CWRibFZvdGU6IHRydWUNCgkJCQkJfQ0KCQkJfSwNCg0KCQkJYmxvZzogew0KCQkJ +CQl1cmw6ICh3aW5kb3cuYmFzZVVSTCB8fCAnJykgKyAnL2FqYXgvdm90aW5nLycs +DQoJCQkJCWREYXRhOiB7DQoJCQkJCQlhY3Rpb246ICd2b3RlJywNCgkJCQkJCW1v +ZGU6ICdibG9nJywNCgkJCQkJCXRhcmdldF9uYW1lOiAnYmxvZycsDQoJCQkJCQlk +YmxWb3RlOiB0cnVlDQoJCQkJCX0NCgkJCX0sDQoNCgkJCWNvbXBhbnlfY29tbWVu +dDogew0KCQkJCQl1cmw6ICh3aW5kb3cuYmFzZVVSTCB8fCAnJykgKyAnL2FqYXgv +dm90aW5nLycsDQoJCQkJCWREYXRhOiB7DQoJCQkJCQlhY3Rpb246ICd2b3RlJywN +CgkJCQkJCXRhcmdldF9uYW1lOiAnY29tcGFueV9jb21tZW50JywNCgkJCQkJCWRi +bFZvdGU6IHRydWUNCgkJCQkJfQ0KCQkJfSwNCg0KCQkJcWFfcXVlc3Rpb246IHsN +CgkJCQkJdXJsOiAod2luZG93LmJhc2VVUkwgfHwgJycpICsgJy9hamF4L3ZvdGlu +Zy8nLA0KCQkJCQlkRGF0YTogeyAvLyBkZWZhdWx0IGRhdGENCgkJCQkJCWFjdGlv +bjogJ3ZvdGUnLA0KCQkJCQkJbW9kZTogJ3Bvc3RzJywNCgkJCQkJCXRhcmdldF9u +YW1lOiAncWFfcXVlc3Rpb24nLA0KCQkJCQkJZGJsVm90ZTogZmFsc2UgLy8gZG91 +YmxlIHZvdGluZyBpcyBhbGxvd2RlZA0KCQkJCQl9DQoJCQl9LA0KDQoJCQlxYV9h +bnN3ZXI6IHsNCgkJCQkJdXJsOiAod2luZG93LmJhc2VVUkwgfHwgJycpICsgJy9h +amF4L3ZvdGluZy8nLA0KCQkJCQlkRGF0YTogeyAvLyBkZWZhdWx0IGRhdGENCgkJ +CQkJCWFjdGlvbjogJ3ZvdGUnLA0KCQkJCQkJdGFyZ2V0X25hbWU6ICdxYV9hbnN3 +ZXInLA0KCQkJCQkJZGJsVm90ZTogZmFsc2UgLy8gZG91YmxlIHZvdGluZyBpcyBh +bGxvd2RlZA0KCQkJCQl9DQoJCQl9DQoJfSwNCg0KDQoJdm90ZU1hcms6IHsNCgkJ +CXBsdXM6IHsNCgkJCQkJc3RyaW5nOiAncGx1cycsDQoJCQkJCW51bWJlcjogMQ0K +CQkJfSwNCg0KCQkJbWludXM6IHsNCgkJCQkJc3RyaW5nOiAnbWludXMnLA0KCQkJ +CQludW1iZXI6IC0xDQoJCQl9LA0KDQoJCQlyZXN1bHRzOiB7DQoJCQkJCXN0cmlu +ZzogJ3Jlc3VsdHMnLA0KCQkJCQludW1iZXI6IDANCgkJCX0NCgl9LA0KDQoJaHRt +bE5vZGVOYW1lczogew0KCQkJc2NvcmU6ICdzcGFuJywNCgkJCWNvdW50OiAnZW0n +LA0KCQkJbWFyazogJ3N0cm9uZycNCgl9LA0KDQoJeG1sTm9kZU5hbWVzOiB7DQoJ +CQllcnJvcjogJ2Vycm9yJywNCgkJCXNjb3JlOiAnc2NvcmUnLA0KCQkJY291bnQ6 +ICdjb3VudCcsDQoJCQltYXJrOiAnbWFyaycsDQoJCQljaGFyZ2Vfc3RyaW5nOiAn +Y2hhcmdlX3N0cmluZycNCgl9LA0KDQoJY2xhc3NOYW1lczogew0KCQkJdm90ZUhv +bGRlcjogJ3ZvdGVfaG9sZGVyJywNCgkJCXZvdGluZ0Jsb2NrOiAndm90aW5nJywN +CgkJCXZvdGVQb2ludHM6ICdtYXJrJywNCgkJCXZvdGVDb3VudDogJ3RvdGFsJywN +CgkJCWxvZ2luSG9sZGVyOiAnbG9naW5faG9sZGVyJywNCg0KCQkJaW51c2U6ICdp +bnVzZScsIC8vIGRlcHJpY2F0ZWQgKG5vdCB1c2VkKQ0KCQkJc2hvd0Nob2ljZTog +J3Nob3dfY2hvaWNlJywNCg0KCQkJaXNNaW5lOiAnbWluZScsDQoJCQlpc0V4cGly +ZWQ6ICdleHBpcmVkJywNCgkJCW5vQWNjZXNzOiAnbm9fYXV0aCcsDQoJCQkvL25v +Vm90aW5nOiAnbm9fdm90aW5nJywNCg0KCQkJaXNQb3NpdGl2ZTogJ3Bvc2l0aXZl +JywNCgkJCWlzTmVnYXRpdmU6ICduZWdhdGl2ZScsDQoNCgkJCWlzVm90ZWQ6ICd2 +b3RlZCcsDQoJCQlpc1ZvdGVkUGx1czogJ3ZvdGVkX3BsdXMnLA0KCQkJaXNWb3Rl +ZE1pbnVzOiAndm90ZWRfbWludXMnLA0KDQoJCQlpc0xvYWRpbmc6ICdpc0xvYWRp +bmcnDQoJfSwNCg0KCWNob2ljZTogew0KCQkJc2hvdzogZnVuY3Rpb24obGluayl7 +DQoJCQkJCXZhciBsaW5rR2xvYmFsUGFyZW50ID0gJChsaW5rKS5nZXRQYXJlbnQo +Jy4nICsgVm90ZXIuY2xhc3NOYW1lcy52b3RlSG9sZGVyKTsNCgkJCQkJLy9hbGVy +dChsaW5rR2xvYmFsUGFyZW50KTsgcmV0dXJuOw0KCQkJCQl2YXIgbGlua0xvY2Fs +UGFyZW50ID0gbGluazsNCgkJCQkJaWYgKCEkKGxpbmtMb2NhbFBhcmVudCkuaGFz +Q2xhc3MoVm90ZXIuY2xhc3NOYW1lcy5pc01pbmUpICYmIC8vIGlmIG5vdCBtaW5l +DQoJCQkJCQkhJChsaW5rTG9jYWxQYXJlbnQpLmhhc0NsYXNzKFZvdGVyLmNsYXNz +TmFtZXMuaXNWb3RlZCkgJiYgLy8gaWYgbm90IHZvdGVkDQoJCQkJCQkhJChsaW5r +TG9jYWxQYXJlbnQpLmhhc0NsYXNzKFZvdGVyLmNsYXNzTmFtZXMuaXNFeHBpcmVk +KSkgeyAvLyDQstGA0LXQvNGPINCz0L7Qu9C+0YHQvtCy0LDQvdC40Y8g0L/RgNC+ +0YjQu9C+DQoJCQkJCQkkKGxpbmtHbG9iYWxQYXJlbnQpLmFkZENsYXNzKFZvdGVy +LmNsYXNzTmFtZXMuc2hvd0Nob2ljZSk7DQoJCQkJCX0NCgkJCX0sDQoNCgkJCWhp +ZGU6IGZ1bmN0aW9uKGV2ZW50LCBsaW5rKXsNCgkJCQkJaWYoIWV2ZW50KSBldmVu +dCA9IHdpbmRvdy5ldmVudDsNCgkJCQkJdmFyIGxpbmtDaGlsZHJlbiA9IGxpbmsu +Z2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKTsNCgkJCQkJdmFyIGxpbmtHbG9iYWxQ +YXJlbnQgPSAkKGxpbmspLmdldFBhcmVudCgnLicgKyBWb3Rlci5jbGFzc05hbWVz +LnZvdGVIb2xkZXIpOw0KDQoJCQkJCS8vINC10YHQu9C4INGN0LvQtdC80LXQvdGC +LCDQvdCwINC60L7RgtC+0YDRi9C5INC/0LXRgNC10LTQstC40LPQsNC10Lwg0LzR +i9GI0YwsINC70LXQttC40YIg0LLQvdGD0YLRgNC4INGH0L7QudGBINCx0LvQvtC6 +0LAsINCy0YvRhdC+0LTQuNC8DQoJCQkJCWlmIChldmVudC5yZWxhdGVkVGFyZ2V0 +KSB7DQoJCQkJCQl2YXIgd2hlcmUgPSBldmVudC5yZWxhdGVkVGFyZ2V0Ow0KCQkJ +CQkJaWYgKHdoZXJlID09IGxpbmspIHJldHVybjsNCgkJCQkJCWlmICh3aGVyZS5u +b2RlVHlwZSA9PSAzKSB3aGVyZSA9IHdoZXJlLnBhcmVudE5vZGU7DQoJCQkJCQlm +b3IodmFyIGk9MDsgaTxsaW5rQ2hpbGRyZW4ubGVuZ3RoOyBpKyspew0KCQkJCQkJ +CWlmICh3aGVyZSA9PSBsaW5rQ2hpbGRyZW5baV0pIHsNCgkJCQkJCQkJcmV0dXJu +Ow0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfSBlbHNlIGlmIChldmVudC50b0Vs +ZW1lbnQgJiYgbGluay5jb250YWlucyhldmVudC50b0VsZW1lbnQpKSB7DQoJCQkJ +CQlyZXR1cm47DQoJCQkJCX0NCg0KCQkJCQkkKGxpbmtHbG9iYWxQYXJlbnQpLnJl +bW92ZUNsYXNzKFZvdGVyLmNsYXNzTmFtZXMuc2hvd0Nob2ljZSk7DQoJCQl9DQoJ +fSwNCg0KCXZvdGU6IGZ1bmN0aW9uKGV2ZW50LCBsaW5rLCB2b3RlVHlwZSwgdm90 +ZU1hcmspew0KCQkJaWYoIShsaW5rICYmIHZvdGVUeXBlICYmIFZvdGVyLnZvdGVU +eXBlW3ZvdGVUeXBlXSAmJiB2b3RlTWFyaykpIHJldHVybiBmYWxzZTsgLy8gaWYg +cGFyYW1zIGFyZSBpbmNvbXBsZXRlZA0KDQoNCg0KCQkJdmFyIGxpbmtHbG9iYWxQ +YXJlbnQgPSAkKGxpbmspLmdldFBhcmVudCgnLicgKyBWb3Rlci5jbGFzc05hbWVz +LnZvdGVIb2xkZXIpOw0KCQkJdmFyIGxpbmtMb2NhbFBhcmVudCA9ICQobGluayku +Z2V0UGFyZW50KCcuJyArIFZvdGVyLmNsYXNzTmFtZXMudm90aW5nQmxvY2spOw0K +DQoJCQlpZiAoIWxpbmtHbG9iYWxQYXJlbnQgfHwgIWxpbmtMb2NhbFBhcmVudCB8 +fCAvLyBnbG9iYWwgb3IgbG9jYWwgcGFyZW50IHdhcyBub3QgZm91bmQNCgkJCQkk +KGxpbmtMb2NhbFBhcmVudCkuaGFzQ2xhc3MoVm90ZXIuY2xhc3NOYW1lcy5pc1Zv +dGVkKSAmJiAhVm90ZXIudm90ZVR5cGVbdm90ZVR5cGVdLmREYXRhLmRibFZvdGUg +fHwgLy8gd2FzIHZvdGVkIGFscmVhZHkgYW5kIGRvdWJsZSB2b3RlIGlzIG5vdCBh +bGxvd2RlZA0KCQkJCSQobGlua0xvY2FsUGFyZW50KS5oYXNDbGFzcyhWb3Rlci5j +bGFzc05hbWVzLmlzVm90ZWQpICYmIChWb3Rlci52b3RlVHlwZVt2b3RlVHlwZV0u +ZERhdGEuZGJsVm90ZSAmJiAkKGxpbmtMb2NhbFBhcmVudCkuaGFzQ2xhc3Modm90 +ZU1hcmspKSB8fCAvLyB3YXMgdm90ZWQgYWxyZWFkeSBhbmQgZG91YmxlIHZvdGUg +aXMgYWxsb3dkZWQgYW5kDQoJCQkJJChsaW5rTG9jYWxQYXJlbnQpLmhhc0NsYXNz +KFZvdGVyLmNsYXNzTmFtZXMuaXNMb2FkaW5nKSkgeyAvLyBpcyBsb2FkaW5nDQoJ +CQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0KCQkJaWYgKCQobGlua0xvY2FsUGFyZW50 +KS5oYXNDbGFzcyhWb3Rlci5jbGFzc05hbWVzLmlzTWluZSkpIHsNCgkJCQlmdXR1 +X2FsZXJ0KEZBVC52b3RpbmdzX2hlYWRlciwgRkFULnZvdGluZ3NfZXJyb3Jfc2Vs +ZiwgZmFsc2UsICdlcnJvcicpOw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0NCgkJ +CWlmICgkKGxpbmtMb2NhbFBhcmVudCkuaGFzQ2xhc3MoVm90ZXIuY2xhc3NOYW1l +cy5pc0V4cGlyZWQpKSB7DQoJCQkJZnV0dV9hbGVydChGQVQudm90aW5nc19oZWFk +ZXIsIEZBVC52b3RpbmdzX2Vycm9yX2lzX2V4cGlyZWQsIGZhbHNlLCAnZXJyb3In +KTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoNCg0KDQoJCQlpZiAoJChsaW5r +TG9jYWxQYXJlbnQpLmhhc0NsYXNzKFZvdGVyLmNsYXNzTmFtZXMubm9BY2Nlc3Mp +KSB7DQoJCQkJZnV0dV9hbGVydChGQVQudm90aW5nc19oZWFkZXIsIEZBVC52b3Rp +bmdzX2Vycm9yX25vX2FjY2VzcywgZmFsc2UsICdlcnJvcicpOw0KCQkJCXJldHVy +biBmYWxzZTsNCgkJCX0NCgkJCWlmICgkKGxpbmtMb2NhbFBhcmVudCkuaGFzQ2xh +c3MoVm90ZXIuY2xhc3NOYW1lcy5sb2dpbkhvbGRlcikgJiYgbG9naW5Gb3JtICYm +IGxvZ2luRm9ybS5zaG93KSB7IC8vIHRyeSB0byB2b3RlIGFzIGd1ZXN0DQoJCQkJ +aWYoIWxvZ2luRm9ybS5odG1sLmJsb2NrKXsgLy8gaWYgdGhlcmUgaXMgbm8gYW55 +IGh0bWwgb2YgbG9naW5fZm9ybSBvbiB0aGUgcGFnZSAodXNlciBpcyBub3QgYSBn +dWVzdCkNCgkJCQkJZnV0dV9hbGVydChGQVQudm90aW5nc19oZWFkZXIsIEZBVC52 +b3RpbmdzX2Vycm9yX3Byb2hpYml0ZWQsIHRydWUsICdlcnJvcicpOw0KCQkJCX0g +ZWxzZSB7DQoJCQkJCWxvZ2luRm9ybS5zaG93KGV2ZW50LCBsaW5rKTsNCgkJCQl9 +DQoNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoNCg0KDQoJCQlWb3Rlci5zZXJ2 +ZXIuc2VuZERhdGEobGlua0dsb2JhbFBhcmVudCwgbGlua0xvY2FsUGFyZW50LCB2 +b3RlVHlwZSwgdm90ZU1hcmspOw0KCQkJcmV0dXJuIGZhbHNlOw0KCX0sDQoNCglz +ZXJ2ZXI6IHsNCgkJCXNlbmREYXRhOiBmdW5jdGlvbihsaW5rR2xvYmFsUGFyZW50 +LCBsaW5rTG9jYWxQYXJlbnQsIHZvdGVUeXBlLCB2b3RlTWFyayl7DQoJCQkJCXZh +ciB1cmwgPSAgVm90ZXIudm90ZVR5cGVbdm90ZVR5cGVdLnVybDsNCg0KCQkJCQl2 +YXIgYWN0aW9uID0gVm90ZXIudm90ZVR5cGVbdm90ZVR5cGVdLmREYXRhLmFjdGlv +bjsNCgkJCQkJdmFyIHRhcmdldF9uYW1lID0gVm90ZXIudm90ZVR5cGVbdm90ZVR5 +cGVdLmREYXRhLnRhcmdldF9uYW1lOw0KCQkJCQl2YXIgbWFyayA9IFZvdGVyLnZv +dGVNYXJrW3ZvdGVNYXJrXSA/IFZvdGVyLnZvdGVNYXJrW3ZvdGVNYXJrXS5udW1i +ZXIgOiAnJzsNCgkJCQkJdmFyIHRhcmdldF9pZCA9IGxpbmtHbG9iYWxQYXJlbnQu +Z2V0QXR0cmlidXRlKCdpZCcpID8gbGlua0dsb2JhbFBhcmVudC5nZXRBdHRyaWJ1 +dGUoJ2lkJykubWF0Y2goL1xkKy9nKVswXSA6ICcnOw0KDQoJCQkJCXZhciBkYXRh +ID0gJ2FjdGlvbj0nICsgYWN0aW9uICsgJyZ0YXJnZXRfbmFtZT0nICsgdGFyZ2V0 +X25hbWUgKyAnJnRhcmdldF9pZD0nICsgdGFyZ2V0X2lkICsgJyZtYXJrPScgKyBt +YXJrOw0KCQkJCQl2YXIgcGFyYW1zID0gew0KCQkJCQkJbGlua0dsb2JhbFBhcmVu +dDogbGlua0dsb2JhbFBhcmVudCwNCgkJCQkJCWxpbmtMb2NhbFBhcmVudDogbGlu +a0xvY2FsUGFyZW50LA0KCQkJCQkJbWFyayA6IG1hcmssDQoJCQkJCQl2b3RlVHlw +ZSA6IHZvdGVUeXBlDQoJCQkJCX0NCgkJCQkJJChsaW5rTG9jYWxQYXJlbnQpLmFk +ZENsYXNzKFZvdGVyLmNsYXNzTmFtZXMuaXNMb2FkaW5nKTsNCgkJCQkJYWpheExv +YWRQb3N0KHVybCwgZGF0YSwgVm90ZXIuc2VydmVyLnNlbmREYXRhT25sb2FkLCB3 +aW5kb3csIHBhcmFtcyk7DQoJCQl9LA0KDQoJCQlzZW5kRGF0YU9ubG9hZDogZnVu +Y3Rpb24oYWpheE9iaiwgcGFyYW1zKXsNCgkJCQkJLyoNCgkJCQkJCXBhcmFtcyA9 +IHsNCgkJCQkJCQlsaW5rR2xvYmFsUGFyZW50DQoJCQkJCQkJbGlua0xvY2FsUGFy +ZW50DQoJCQkJCQkJbWFyaw0KCQkJCQkJCXZvdGVUeXBlDQoJCQkJCQl9DQoJCQkJ +CSovDQoJCQkJCWlmKGFqYXhPYmogJiYgYWpheE9iai5yZXNwb25zZVhNTCl7DQoJ +CQkJCQl2YXIgeG1sID0gYWpheE9iai5yZXNwb25zZVhNTDsNCgkJCQkJCXZhciBl +cnJvcnMgPSB4bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoVm90ZXIueG1sTm9kZU5h +bWVzLmVycm9yKTsNCgkJCQkJCWlmKGVycm9ycy5sZW5ndGggJiYgZXJyb3JzWzBd +ICYmIGVycm9yc1swXS5maXJzdENoaWxkLm5vZGVUeXBlID09IDMpIHsNCgkJCQkJ +CQlWb3Rlci5zaG93RXJyb3IoZXJyb3JzWzBdLmZpcnN0Q2hpbGQuZGF0YSk7DQoJ +CQkJCQkJJChwYXJhbXMubGlua0xvY2FsUGFyZW50KS5yZW1vdmVDbGFzcyhWb3Rl +ci5jbGFzc05hbWVzLmlzTG9hZGluZyk7DQoJCQkJCQkJcmV0dXJuOw0KCQkJCQkJ +fSBlbHNlIHsNCgkJCQkJCQl2YXIgc2NvcmVzID0geG1sLmdldEVsZW1lbnRzQnlU +YWdOYW1lKFZvdGVyLnhtbE5vZGVOYW1lcy5zY29yZSk7DQoJCQkJCQkJaWYoc2Nv +cmVzLmxlbmd0aCAmJiBzY29yZXNbMF0gJiYgc2NvcmVzWzBdLmZpcnN0Q2hpbGQu +bm9kZVR5cGUgPT0gMykgew0KCQkJCQkJCQlwYXJhbXMuc2NvcmUgPSBzY29yZXNb +MF0uZmlyc3RDaGlsZC5kYXRhOw0KCQkJCQkJCX0NCg0KCQkJCQkJCXZhciBjb3Vu +dCA9IHhtbC5nZXRFbGVtZW50c0J5VGFnTmFtZShWb3Rlci54bWxOb2RlTmFtZXMu +Y291bnQpOw0KCQkJCQkJCWlmKGNvdW50Lmxlbmd0aCAmJiBjb3VudFswXSAmJiBj +b3VudFswXS5maXJzdENoaWxkLm5vZGVUeXBlID09IDMpIHsNCgkJCQkJCQkJcGFy +YW1zLmNvdW50ID0gY291bnRbMF0uZmlyc3RDaGlsZC5kYXRhOw0KCQkJCQkJCX0N +Cg0KCQkJCQkJCXZhciBtYXJrID0geG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKFZv +dGVyLnhtbE5vZGVOYW1lcy5tYXJrKTsNCgkJCQkJCQlpZihtYXJrLmxlbmd0aCAm +JiBtYXJrWzBdICYmIG1hcmtbMF0uZmlyc3RDaGlsZC5ub2RlVHlwZSA9PSAzKSB7 +DQoJCQkJCQkJCXBhcmFtcy5tYXJrID0gbWFya1swXS5maXJzdENoaWxkLmRhdGE7 +DQoJCQkJCQkJfQ0KDQoJCQkJCQkJdmFyIGNoYXJnZV9zdHJpbmcgPSB4bWwuZ2V0 +RWxlbWVudHNCeVRhZ05hbWUoVm90ZXIueG1sTm9kZU5hbWVzLmNoYXJnZV9zdHJp +bmcpOw0KCQkJCQkJCWlmKGNoYXJnZV9zdHJpbmcubGVuZ3RoICYmIGNoYXJnZV9z +dHJpbmdbMF0pIHsNCgkJCQkJCQkJcGFyYW1zLmNoYXJnZV9zdHJpbmcgPSBjaGFy +Z2Vfc3RyaW5nWzBdLmZpcnN0Q2hpbGQuZGF0YTsNCgkJCQkJCQl9DQoNCgkJCQkJ +CQkkKHBhcmFtcy5saW5rTG9jYWxQYXJlbnQpLnJlbW92ZUNsYXNzKFZvdGVyLmNs +YXNzTmFtZXMuaXNMb2FkaW5nKTsNCgkJCQkJCQlWb3Rlci5zZXRTY29yZShwYXJh +bXMpOw0KCQkJCQkJfQ0KDQoNCgkJCQkJfQ0KDQoJCQl9DQoJfSwNCg0KCXNldFNj +b3JlOiBmdW5jdGlvbihwYXJhbXMpew0KCQkJLyoNCgkJCQlwYXJhbXN7DQoJCQkJ +CWxpbmtHbG9iYWxQYXJlbnQNCgkJCQkJbGlua0xvY2FsUGFyZW50DQoJCQkJCW1h +cmsNCgkJCQkJc2NvcmUNCgkJCQkJY291bnQNCgkJCQl9DQoJCQkqLw0KCQkJDQoJ +CQkkKHBhcmFtcy5saW5rTG9jYWxQYXJlbnQpLmFkZENsYXNzKFZvdGVyLmNsYXNz +TmFtZXMuaXNWb3RlZCk7DQoNCgkJCSQocGFyYW1zLmxpbmtMb2NhbFBhcmVudCku +cmVtb3ZlQ2xhc3MoVm90ZXIuY2xhc3NOYW1lcy5pc1ZvdGVkUGx1cyk7DQoJCQkk +KHBhcmFtcy5saW5rTG9jYWxQYXJlbnQpLnJlbW92ZUNsYXNzKFZvdGVyLmNsYXNz +TmFtZXMuaXNWb3RlZE1pbnVzKTsNCg0KCQkJJChwYXJhbXMubGlua0xvY2FsUGFy +ZW50KS5yZW1vdmVDbGFzcyhWb3Rlci5jbGFzc05hbWVzLmlzUG9zaXRpdmUpOw0K +CQkJJChwYXJhbXMubGlua0xvY2FsUGFyZW50KS5yZW1vdmVDbGFzcyhWb3Rlci5j +bGFzc05hbWVzLmlzTmVnYXRpdmUpOw0KDQoJCQkvL3JlbW92ZUNsYXNzKHBhcmFt +cy5saW5rR2xvYmFsUGFyZW50LCBWb3Rlci5jbGFzc05hbWVzLmludXNlKTsNCg0K +CQkJaWYocGFyYW1zLnNjb3JlICYmIHBhcmFtcy5zY29yZS5jaGFyQXQoMCkgPT0g +J+KAkycpIHsNCgkJCQkkKHBhcmFtcy5saW5rTG9jYWxQYXJlbnQpLmFkZENsYXNz +KFZvdGVyLmNsYXNzTmFtZXMuaXNOZWdhdGl2ZSk7DQoJCQl9IGVsc2UgaWYgKHBh +cmFtcy5zY29yZSAmJiBwYXJhbXMuc2NvcmUuY2hhckF0KDApICE9ICfigJMnKSB7 +DQoJCQkJJChwYXJhbXMubGlua0xvY2FsUGFyZW50KS5hZGRDbGFzcyhWb3Rlci5j +bGFzc05hbWVzLmlzUG9zaXRpdmUpOw0KCQkJfQ0KDQoJCQlpZihwYXJhbXMubWFy +ayAmJiBwYXJhbXMubWFyayA9PSAnKycpew0KCQkJCSQocGFyYW1zLmxpbmtMb2Nh +bFBhcmVudCkuYWRkQ2xhc3MoVm90ZXIuY2xhc3NOYW1lcy5pc1ZvdGVkUGx1cyk7 +DQoJCQl9IGVsc2UgaWYocGFyYW1zLm1hcmsgJiYgcGFyYW1zLm1hcmsgPT0gJ+KA +kycpIHsNCgkJCQkkKHBhcmFtcy5saW5rTG9jYWxQYXJlbnQpLmFkZENsYXNzKFZv +dGVyLmNsYXNzTmFtZXMuaXNWb3RlZE1pbnVzKTsNCgkJCX0NCg0KCQkJdmFyIHVz +ZXJjaGFyZ2UgPSAkKCd1c2VyY2hhcmdlJyk7DQoJCQl1c2VyY2hhcmdlICYmICh1 +c2VyY2hhcmdlLmlubmVySFRNTCA9IHBhcmFtcy5jaGFyZ2Vfc3RyaW5nKTsNCg0K +CQkJdHJ5IHsNCgkJCQl2YXIgdm90ZVBvaW50cyA9ICQocGFyYW1zLmxpbmtMb2Nh +bFBhcmVudCkuZ2V0RWxlbWVudCgnLicgKyBWb3Rlci5jbGFzc05hbWVzLnZvdGVQ +b2ludHMpOw0KDQoJCQkJdmFyIHNjb3JlQm94ID0gdm90ZVBvaW50cy5nZXRFbGVt +ZW50c0J5VGFnTmFtZShWb3Rlci5odG1sTm9kZU5hbWVzLnNjb3JlKVswXTsNCgkJ +CQl2YXIgbWFya0JveCA9IHZvdGVQb2ludHMuZ2V0RWxlbWVudHNCeVRhZ05hbWUo +Vm90ZXIuaHRtbE5vZGVOYW1lcy5tYXJrKVswXTsNCg0KCQkJCXNjb3JlQm94Lmlu +bmVySFRNTCA9IHBhcmFtcy5zY29yZTsNCgkJCQlzY29yZUJveC5zZXRBdHRyaWJ1 +dGUoJ3RpdGxlJywgcGFyYW1zLmNvdW50KTsNCgkJCQltYXJrQm94LmlubmVySFRN +TCA9ICcgKCcgKyBwYXJhbXMubWFyayArICcpJzsNCg0KLyoJCQkJdm90ZUNvdW50 +ID0gJChwYXJhbXMubGlua0xvY2FsUGFyZW50KS5nZXRFbGVtZW50cygnLicgKyBW +b3Rlci5jbGFzc05hbWVzLnZvdGVDb3VudClbMF07DQoJCQkJdmFyIGNvdW50Qm94 +ID0gdm90ZUNvdW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFZvdGVyLmh0bWxOb2Rl +TmFtZXMuY291bnQpWzBdOw0KCQkJCWNvdW50Qm94LmlubmVySFRNTCA9IHBhcmFt +cy5jb3VudDsqLw0KDQoJCQl9IGNhdGNoKGUpew0KCQkJCS8vYWxlcnQoZSk7DQoJ +CQl9DQoJfSwNCg0KCXNob3dFcnJvcjogZnVuY3Rpb24oZXJyb3JNc2cpew0KCQlp +ZiAoIWVycm9yTXNnKSB7DQoJCQllcnJvck1zZyA9IEZBVC52b3RpbmdzX3Vua25v +d25fZXJyb3I7DQoJCX0NCgkJZnV0dV9hbGVydChGQVQudm90aW5nc19oZWFkZXIs +IGVycm9yTXNnLCBmYWxzZSwgJ2Vycm9yJyk7DQoJfQ0KfTsNCnRtLmluaXQuYWRk +KGZ1bmN0aW9uKCl7DQoJdmFyIGNvbW1lbnRzQ29udGFpbmVyID0gJCgiY29tbWVu +dHMiKTsNCglpZiAoY29tbWVudHNDb250YWluZXIpIHsNCgkJdmFyIGluZm9wYW5l +bCA9ICQoY29tbWVudHNDb250YWluZXIucGFyZW50Tm9kZSkuZ2V0RWxlbWVudCgi +LmVudHJ5LWluZm8iKTsNCgkJaWYgKGluZm9wYW5lbCkgew0KCQkJdmFyIHBvc3RJ +ZCA9IHBhcnNlSW50KGluZm9wYW5lbC5pZC5yZXBsYWNlKCJpbmZvcGFuZWwiLCIi +KSksDQoJCQloYXNWb3RlTWFya05vZGUsc2NvcmVOb2RlOw0KDQoNCg0KCQkJdmFy +IHZvdGUgPSBmdW5jdGlvbihvKXsNCgkJCSAgDQoJCQkJCQ0KCQkJCWlmICh0ZW1w +LnVzZXIpIHsNCg0KCQkJCQlpZiAoby5pc19hbnN3ZXIgPT0gdHJ1ZSkNCgkJCQkJ +ew0KDQoJCQkJICAgICAgICAobmV3IFJlcXVlc3Qoew0KCQkJCSAgICAgICAgICAg +ICd1cmwnOiAnL2FqYXgvdm90aW5nLycsDQoJCQkJICAgICAgICAgICAgJ2RhdGEn +OiB7DQoJCQkJICAgICAgICAgICAgICAgICdhY3Rpb24nOiAndm90ZScsDQoJCQkJ +ICAgICAgICAgICAgICAgICdtYXJrJzogby50LA0KCQkJCSAgICAgICAgICAgICAg +ICAndGFyZ2V0X2lkJzogby50aWQsDQoJCQkJCQkJCSd0YXJnZXRfbmFtZScgOiAi +cWFfYW5zd2VyIg0KCQkJCSAgICAgICAgICAgIH0sDQoJCQkJCQkJIm9uUmVxdWVz +dCI6ZnVuY3Rpb24oKXsNCgkJCQkJCQkJZ2V0Tm9kZXNGb3JNYXJraW5nKG8udm90 +ZUJ1dHRvbikNCgkJCQkJCQl9LA0KCQkJCQkJCSJvbkNvbXBsZXRlIjogb25Db21w +bGV0ZQ0KCQkJCSAgICAgICAgfSkpLnNlbmQoKTsNCg0KCQkJCSAgICB9DQoJCQkg +ICAgICAgZWxzZQ0KCQkJICAgICAgIHsNCg0KCQkJICAgICAgIAkgKG5ldyBSZXF1 +ZXN0KHsNCgkJCQkgICAgICAgICAgICAndXJsJzogJy9hamF4L3ZvdGluZy8nLA0K +CQkJCSAgICAgICAgICAgICdkYXRhJzogew0KCQkJCSAgICAgICAgICAgICAgICAn +YWN0aW9uJzogJ3ZvdGUnLA0KCQkJCSAgICAgICAgICAgICAgICAnbWFyayc6IG8u +dCwNCgkJCQkgICAgICAgICAgICAgICAgJ3RhcmdldF9pZCc6IG8udGlkLA0KCQkJ +CQkJCQkndGFyZ2V0X25hbWUnIDogInBvc3RfY29tbWVudCIsDQoJCQkJCQkJCSdz +aWduZWRfaWQnIDogby5wb3N0aWQNCgkJCQkgICAgICAgICAgICB9LA0KCQkJCQkJ +CSJvblJlcXVlc3QiOmZ1bmN0aW9uKCl7DQoJCQkJCQkJCWdldE5vZGVzRm9yTWFy +a2luZyhvLnZvdGVCdXR0b24pDQoJCQkJCQkJfSwNCgkJCQkJCQkib25Db21wbGV0 +ZSI6IG9uQ29tcGxldGUNCgkJCQkgICAgICAgIH0pKS5zZW5kKCk7DQoNCgkJCSAg +ICAgICB9DQoNCgkJCQl9DQoJCQl9DQoJCQl2YXIgZ2V0Tm9kZXNGb3JNYXJraW5n +ID0gZnVuY3Rpb24odm90ZUJ1dHRvbikgew0KCQkJCWhhc1ZvdGVNYXJrTm9kZSA9 +ICQodm90ZUJ1dHRvbikuZ2V0UGFyZW50KCJ1bC52b3RlIik7DQoJCQkJc2NvcmVO +b2RlID0gaGFzVm90ZU1hcmtOb2RlLmdldEVsZW1lbnQoIi5tYXJrIHNwYW4iKTsN +CgkJCX0NCgkJCXZhciBvbkNvbXBsZXRlID0gZnVuY3Rpb24ocmVzcG9uc2VIVE1M +LCByZXNwb25zZVhNTCl7DQoNCgkJCQl2YXIgZXJyb3JzID0gcmVzcG9uc2VYTUwu +Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ2Vycm9yJyk7DQoJCQkJaWYgKGVycm9ycy5s +ZW5ndGgpIHsNCgkJCQkJdmFyIGVycm9ydGV4dCA9ICIiOw0KCQkJCQlmb3IgKHZh +ciBpPTAgLCBsID0gZXJyb3JzLmxlbmd0aDsgaSA8IGw7IGkrKykgew0KCQkJCQkJ +aWYgKGVycm9yc1tpXS50YWdOYW1lID09ICJlcnJvciIpew0KCQkJCQkJCWVycm9y +dGV4dCArPSBlcnJvcnNbaV0uZmlyc3RDaGlsZC5kYXRhICsgIjwvYnI+IjsNCgkJ +CQkJCX0NCgkJCQkJfTsNCgkJCQkJZnV0dV9hbGVydCgi0J/RgNC+0LjRgdGI0LXR +gdGC0LLQuNC1INCy0L4g0LLRgNC10LzRjyDQstGL0LHQvtGA0L7QsiIsIGVycm9y +dGV4dCwgZmFsc2UsICdlcnJvcicpOw0KCQkJCX0gZWxzZXsNCgkJCQkJdmFyIHNj +b3JlID0gcmVzcG9uc2VYTUwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3Njb3JlJylb +MF0uZmlyc3RDaGlsZC5kYXRhLA0KCQkJCQlzY29yZU51bSA9IHBhcnNlSW50KHNj +b3JlLnJlcGxhY2UoIuKAkyIsIi0iKSksDQoJCQkJCXZvdGVUeXBlID0gcmVzcG9u +c2VYTUwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ21hcmsnKVswXS5maXJzdENoaWxk +LmRhdGEgKyAiIjsNCgkJCQkJJCgndXNlcmNoYXJnZScpLmlubmVySFRNTCA9IHJl +c3BvbnNlWE1MLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjaGFyZ2Vfc3RyaW5nJylb +MF0uZmlyc3RDaGlsZC5kYXRhDQoJCQkJCXNjb3JlTm9kZS5zZXQoInRleHQiLHNj +b3JlKTsNCgkJCQkJaGFzVm90ZU1hcmtOb2RlLmFkZENsYXNzKCJ2b3RlZCIpLnJl +bW92ZUNsYXNzKCJ2b3RlZF9taW51cyIpLnJlbW92ZUNsYXNzKCJ2b3RlZF9wbHVz +IikucmVtb3ZlQ2xhc3MoInBvc2l0aXZlIikucmVtb3ZlQ2xhc3MoIm5lZ2F0aXZl +Iik7DQoJCQkJCQ0KCQkJCQlpZiAodm90ZVR5cGUgPT0gIuKAkyIpIHsNCgkJCQkJ +CWhhc1ZvdGVNYXJrTm9kZS5hZGRDbGFzcygidm90ZWRfbWludXMiKTsNCgkJCQkJ +fSBlbHNlIGlmICh2b3RlVHlwZSA9PSAiKyIpew0KCQkJCQkJaGFzVm90ZU1hcmtO +b2RlLmFkZENsYXNzKCJ2b3RlZF9wbHVzIik7DQoJCQkJCX0NCgkJCQkJaWYgKHNj +b3JlTnVtID4gMCkgew0KCQkJCQkJaGFzVm90ZU1hcmtOb2RlLmFkZENsYXNzKCJw +b3NpdGl2ZSIpDQoJCQkJCX0gZWxzZSBpZiAoc2NvcmVOdW0gPCAwKSB7DQoJCQkJ +CQloYXNWb3RlTWFya05vZGUuYWRkQ2xhc3MoIm5lZ2F0aXZlIikNCgkJCQkJfQ0K +DQoJCQkJfQ0KDQoJCQl9DQoJCQljb21tZW50c0NvbnRhaW5lci5hZGRFdmVudCgi +Y2xpY2siLGZ1bmN0aW9uKGUpew0KCQkJCXZhciBub2RlID0gZS50YXJnZXQsDQoJ +CQkJbm9kZUNsYXNzTmFtZSA9IG5vZGUuY2xhc3NOYW1lOw0KCQkJCS8vQ2hhbmdl +ZCBhdCAyMC8wNy8yMDEwDQoJCQkJaWYgKG5vZGVDbGFzc05hbWUuaW5kZXhPZigi +dm90ZS1mb3ItYW5zd2VyIikgIT0gLTEpIHsNCgkJCQkJLy9BbnN3ZXJzIHZvdGlu +Zw0KCQkJCQl2YXIgY29tbWVudElkID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlKCJy +ZXYiKS5yZXBsYWNlKCJ2b3Rlci1mb3ItYW5zd2VyOiIsIiIpLCB2b3RlVHlwZTsN +CgkJCQkJaWYgKG5vZGVDbGFzc05hbWUuaW5kZXhPZigidm90ZV9taW51cyIpICE9 +IC0xKSB7DQoJCQkJCQl2b3RlVHlwZSA9IC0xOw0KCQkJCQl9IGVsc2UgaWYgKG5v +ZGVDbGFzc05hbWUuaW5kZXhPZigidm90ZV9wbHVzIikgIT0gLTEpICB7DQoJCQkJ +CQl2b3RlVHlwZSA9IDE7DQoJCQkJCX0gZWxzZSB7DQoJCQkJCQlyZXR1cm4gZmFs +c2U7DQoJCQkJCX0NCg0KCQkJCQl2b3RlKHsNCgkJCQkJCSJ0aWQiOmNvbW1lbnRJ +ZCwNCgkJCQkJCSJ0Ijp2b3RlVHlwZSwNCgkJCQkJCSJwb3N0aWQiOnBvc3RJZCwN +CgkJCQkJCSJ2b3RlQnV0dG9uIjplLnRhcmdldCwNCgkJCQkJCSJpc19hbnN3ZXIi +OnRydWUNCgkJCQkJfSk7DQoJCQkJCXJldHVybiBmYWxzZQ0KCQkJCX0NCgkJCQlp +ZiAobm9kZUNsYXNzTmFtZS5pbmRleE9mKCJ2b3RlLWZvci1jb21tZW50IikgIT0g +LTEpIHsNCgkJCQkJdmFyIGNvbW1lbnRJZCA9IGUudGFyZ2V0LmdldEF0dHJpYnV0 +ZSgicmV2IikucmVwbGFjZSgidm90ZXItZm9yLWNvbW1lbnQ6IiwiIiksDQoJCQkJ +CXZvdGVUeXBlOw0KCQkJCQlpZiAobm9kZUNsYXNzTmFtZS5pbmRleE9mKCJ2b3Rl +X21pbnVzIikgIT0gLTEpIHsNCgkJCQkJCXZvdGVUeXBlID0gLTE7DQoJCQkJCX0g +ZWxzZSBpZiAobm9kZUNsYXNzTmFtZS5pbmRleE9mKCJ2b3RlX3BsdXMiKSAhPSAt +MSkgIHsNCgkJCQkJCXZvdGVUeXBlID0gMTsNCgkJCQkJfSBlbHNlIHsNCgkJCQkJ +CXJldHVybiBmYWxzZTsNCgkJCQkJfQ0KDQoJCQkJCXZvdGUoew0KCQkJCQkJInRp +ZCI6Y29tbWVudElkLA0KCQkJCQkJInQiOnZvdGVUeXBlLA0KCQkJCQkJInBvc3Rp +ZCI6cG9zdElkLA0KCQkJCQkJInZvdGVCdXR0b24iOmUudGFyZ2V0DQoJCQkJCX0p +Ow0KCQkJCQlyZXR1cm4gZmFsc2UNCgkJCQl9IGVsc2UgaWYgKG5vZGVDbGFzc05h +bWUuaW5kZXhPZignanMtc2luZ2xlLXRyZWUnKSAhPSAtMSkgew0KCQkJCQl2YXIg +bGFzdF9jb21tZW50X2xpID0gbm9kZS5wYXJlbnROb2RlLnBhcmVudE5vZGUucGFy +ZW50Tm9kZS5wYXJlbnROb2RlLA0KCQkJCQkJcGFyZW50X2xpOw0KCQkJCQlsYXN0 +X2NvbW1lbnRfbGkuc2luZ2xlX3RocmVhZF9ub2RlcyA9IFtdOw0KCQkJCQlmb3Ig +KHZhciBsaSA9IGxhc3RfY29tbWVudF9saS5wYXJlbnROb2RlLnBhcmVudE5vZGU7 +IGxpLm5vZGVOYW1lID09ICdMSSc7IGxpID0gbGkucGFyZW50Tm9kZS5wYXJlbnRO +b2RlKSB7DQoJCQkJCQkkKGxpKS5hZGRDbGFzcygnc2luZ2xlLXRyZWUtbm9kZScp +LnJlbW92ZUNsYXNzKCdzaW5nbGUtdHJlZS1ub2RlLWxhc3QnKTsNCgkJCQkJCWxh +c3RfY29tbWVudF9saS5zaW5nbGVfdGhyZWFkX25vZGVzLnB1c2gobGkpDQoJCQkJ +CQlsYXN0X2NvbW1lbnRfbGkuZmlyc3RfY29tbWVudF9saSA9IGxpOw0KCQkJCQl9 +Ow0KCQkJCQlpZiAobGFzdF9jb21tZW50X2xpLmZpcnN0X2NvbW1lbnRfbGkpIHsN +CgkJCQkJCWxhc3RfY29tbWVudF9saS5hZGRDbGFzcygnc2luZ2xlLXRyZWUtbm9k +ZS1sYXN0Jyk7DQoJCQkJCQlzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7DQoJCQkJCQkJ +bGFzdF9jb21tZW50X2xpLmZpcnN0X2NvbW1lbnRfbGkuc2Nyb2xsVG9NZSgpOw0K +CQkJCQkJfSwzMDApDQoJCQkJCQlzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7DQoJCQkJ +CQkJbGFzdF9jb21tZW50X2xpLmZpcnN0X2NvbW1lbnRfbGkucmVtb3ZlQ2xhc3Mo +J3NpbmdsZS10cmVlLW5vZGUnKS5hZGRDbGFzcygnc2luZ2xlLXRocmVhZGluZycp +Ow0KCQkJCQkJfSw3MDApDQoNCg0KDQoJCQkJCX0gZWxzZSB7DQoJCQkJCQlmb3Ig +KHZhciBpPTAsIGwgPSBsYXN0X2NvbW1lbnRfbGkuc2luZ2xlX3RocmVhZF9ub2Rl +cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsNCgkJCQkJCQlsYXN0X2NvbW1lbnRfbGku +c2luZ2xlX3RocmVhZF9ub2Rlc1tpXS5yZW1vdmVDbGFzcygnc2luZ2xlLXRyZWUt +bm9kZScpOw0KCQkJCQkJfTsNCgkJCQkJfTsNCgkJCQkJcmV0dXJuIGZhbHNlOw0K +CQkJCX0gZWxzZSBpZihub2RlQ2xhc3NOYW1lLmluZGV4T2YoJ2pzLW11bHRpcGxh +eS10cmVlJykgIT0gLTEpIHsNCgkJCQkJdmFyIGxhc3RfY29tbWVudF9saSA9IG5v +ZGUucGFyZW50Tm9kZS5wYXJlbnROb2RlLnBhcmVudE5vZGUucGFyZW50Tm9kZTsN +CgkJCQkJaWYgKGxhc3RfY29tbWVudF9saS5maXJzdF9jb21tZW50X2xpKSB7DQoN +CgkJCQkJCWxhc3RfY29tbWVudF9saS5maXJzdF9jb21tZW50X2xpLnJlbW92ZUNs +YXNzKCdzaW5nbGUtdGhyZWFkaW5nJyk7DQoNCgkJCQkJCWZvciAodmFyIGk9MCwg +bCA9IGxhc3RfY29tbWVudF9saS5zaW5nbGVfdGhyZWFkX25vZGVzLmxlbmd0aDsg +aSA8IGw7IGkrKykgew0KCQkJCQkJCWxhc3RfY29tbWVudF9saS5zaW5nbGVfdGhy +ZWFkX25vZGVzW2ldLnJlbW92ZUNsYXNzKCdzaW5nbGUtdHJlZS1ub2RlJyk7DQoJ +CQkJCQl9Ow0KDQoJCQkJCQkkKGxhc3RfY29tbWVudF9saSkuc2Nyb2xsVG9NZSgp +Ow0KCQkJCQkJc2V0VGltZW91dChmdW5jdGlvbigpew0KCQkJCQkJCWxhc3RfY29t +bWVudF9saS5yZW1vdmVDbGFzcygnc2luZ2xlLXRyZWUtbm9kZS1sYXN0Jyk7DQoJ +CQkJCQl9LDgwMCkNCgkJCQkJfQ0KDQoJCQkJfQ0KCQkJfSkNCgkJfQ0KDQoJfQ0K +fSk= + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline; filename=swfobject.js +Content-Type: application/x-javascript; charset=utf-8; name=swfobject.js +Content-Location: http://habrahabr.ru/js/1307631427/swfobject.js +Content-Transfer-Encoding: Base64 + +LyoqCiAqIFNXRk9iamVjdCB2MS40LjQ6IEZsYXNoIFBsYXllciBkZXRlY3Rpb24g +YW5kIGVtYmVkIC0gaHR0cDovL2Jsb2cuZGVjb25jZXB0LmNvbS9zd2ZvYmplY3Qv +CiAqCiAqIFNXRk9iamVjdCBpcyAoYykgMjAwNiBHZW9mZiBTdGVhcm5zIGFuZCBp +cyByZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2U6CiAqIGh0dHA6Ly93d3cu +b3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwCiAqCiAqICoq +U1dGT2JqZWN0IGlzIHRoZSBTV0YgZW1iZWQgc2NyaXB0IGZvcm1lcmx5IGtub3du +IGFzIEZsYXNoT2JqZWN0LiBUaGUgbmFtZSB3YXMgY2hhbmdlZCBmb3IKICogICBs +ZWdhbCByZWFzb25zLgogKi8KaWYodHlwZW9mIGRlY29uY2VwdD09InVuZGVmaW5l +ZCIpe3ZhciBkZWNvbmNlcHQ9bmV3IE9iamVjdCgpO30KaWYodHlwZW9mIGRlY29u +Y2VwdC51dGlsPT0idW5kZWZpbmVkIil7ZGVjb25jZXB0LnV0aWw9bmV3IE9iamVj +dCgpO30KaWYodHlwZW9mIGRlY29uY2VwdC5TV0ZPYmplY3RVdGlsPT0idW5kZWZp +bmVkIil7ZGVjb25jZXB0LlNXRk9iamVjdFV0aWw9bmV3IE9iamVjdCgpO30KZGVj +b25jZXB0LlNXRk9iamVjdD1mdW5jdGlvbihfMSxpZCx3LGgsXzUsYyxfNyxfOCxf +OSxfYSxfYil7aWYoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKXtyZXR1cm47fQp0 +aGlzLkRFVEVDVF9LRVk9X2I/X2I6ImRldGVjdGZsYXNoIjsKdGhpcy5za2lwRGV0 +ZWN0PWRlY29uY2VwdC51dGlsLmdldFJlcXVlc3RQYXJhbWV0ZXIodGhpcy5ERVRF +Q1RfS0VZKTsKdGhpcy5wYXJhbXM9bmV3IE9iamVjdCgpOwp0aGlzLnZhcmlhYmxl +cz1uZXcgT2JqZWN0KCk7CnRoaXMuYXR0cmlidXRlcz1uZXcgQXJyYXkoKTsKaWYo +XzEpe3RoaXMuc2V0QXR0cmlidXRlKCJzd2YiLF8xKTt9CmlmKGlkKXt0aGlzLnNl +dEF0dHJpYnV0ZSgiaWQiLGlkKTt9CmlmKHcpe3RoaXMuc2V0QXR0cmlidXRlKCJ3 +aWR0aCIsdyk7fQppZihoKXt0aGlzLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixoKTt9 +CmlmKF81KXt0aGlzLnNldEF0dHJpYnV0ZSgidmVyc2lvbiIsbmV3IGRlY29uY2Vw +dC5QbGF5ZXJWZXJzaW9uKF81LnRvU3RyaW5nKCkuc3BsaXQoIi4iKSkpO30KdGhp +cy5pbnN0YWxsZWRWZXI9ZGVjb25jZXB0LlNXRk9iamVjdFV0aWwuZ2V0UGxheWVy +VmVyc2lvbigpOwppZihjKXt0aGlzLmFkZFBhcmFtKCJiZ2NvbG9yIixjKTt9CnZh +ciBxPV84P184OiJoaWdoIjsKdGhpcy5hZGRQYXJhbSgicXVhbGl0eSIscSk7CnRo +aXMuc2V0QXR0cmlidXRlKCJ1c2VFeHByZXNzSW5zdGFsbCIsXzcpOwp0aGlzLnNl +dEF0dHJpYnV0ZSgiZG9FeHByZXNzSW5zdGFsbCIsZmFsc2UpOwp2YXIgX2Q9KF85 +KT9fOTp3aW5kb3cubG9jYXRpb247CnRoaXMuc2V0QXR0cmlidXRlKCJ4aVJlZGly +ZWN0VXJsIixfZCk7CnRoaXMuc2V0QXR0cmlidXRlKCJyZWRpcmVjdFVybCIsIiIp +OwppZihfYSl7dGhpcy5zZXRBdHRyaWJ1dGUoInJlZGlyZWN0VXJsIixfYSk7fX07 +CmRlY29uY2VwdC5TV0ZPYmplY3QucHJvdG90eXBlPXtzZXRBdHRyaWJ1dGU6ZnVu +Y3Rpb24oX2UsX2Ypewp0aGlzLmF0dHJpYnV0ZXNbX2VdPV9mOwp9LGdldEF0dHJp +YnV0ZTpmdW5jdGlvbihfMTApewpyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW18xMF07 +Cn0sYWRkUGFyYW06ZnVuY3Rpb24oXzExLF8xMil7CnRoaXMucGFyYW1zW18xMV09 +XzEyOwp9LGdldFBhcmFtczpmdW5jdGlvbigpewpyZXR1cm4gdGhpcy5wYXJhbXM7 +Cn0sYWRkVmFyaWFibGU6ZnVuY3Rpb24oXzEzLF8xNCl7CnRoaXMudmFyaWFibGVz +W18xM109XzE0Owp9LGdldFZhcmlhYmxlOmZ1bmN0aW9uKF8xNSl7CnJldHVybiB0 +aGlzLnZhcmlhYmxlc1tfMTVdOwp9LGdldFZhcmlhYmxlczpmdW5jdGlvbigpewpy +ZXR1cm4gdGhpcy52YXJpYWJsZXM7Cn0sZ2V0VmFyaWFibGVQYWlyczpmdW5jdGlv +bigpewp2YXIgXzE2PW5ldyBBcnJheSgpOwp2YXIga2V5Owp2YXIgXzE4PXRoaXMu +Z2V0VmFyaWFibGVzKCk7CmZvcihrZXkgaW4gXzE4KXtfMTYucHVzaChrZXkrIj0i +K18xOFtrZXldKTt9CnJldHVybiBfMTY7fSxnZXRTV0ZIVE1MOmZ1bmN0aW9uKCl7 +dmFyIF8xOT0iIjsKaWYobmF2aWdhdG9yLnBsdWdpbnMmJm5hdmlnYXRvci5taW1l +VHlwZXMmJm5hdmlnYXRvci5taW1lVHlwZXMubGVuZ3RoKXsKaWYodGhpcy5nZXRB +dHRyaWJ1dGUoImRvRXhwcmVzc0luc3RhbGwiKSl7CnRoaXMuYWRkVmFyaWFibGUo +Ik1NcGxheWVyVHlwZSIsIlBsdWdJbiIpO30KXzE5PSI8ZW1iZWQgdHlwZT1cImFw +cGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoXCIgc3JjPVwiIit0aGlzLmdldEF0 +dHJpYnV0ZSgic3dmIikrIlwiIHdpZHRoPVwiIit0aGlzLmdldEF0dHJpYnV0ZSgi +d2lkdGgiKSsiXCIgaGVpZ2h0PVwiIit0aGlzLmdldEF0dHJpYnV0ZSgiaGVpZ2h0 +IikrIlwiIjsKXzE5Kz0iIGlkPVwiIit0aGlzLmdldEF0dHJpYnV0ZSgiaWQiKSsi +XCIgbmFtZT1cIiIrdGhpcy5nZXRBdHRyaWJ1dGUoImlkIikrIlwiICI7CnZhciBf +MWE9dGhpcy5nZXRQYXJhbXMoKTsKZm9yKHZhciBrZXkgaW4gXzFhKXtfMTkrPVtr +ZXldKyI9XCIiK18xYVtrZXldKyJcIiAiO30KdmFyIF8xYz10aGlzLmdldFZhcmlh +YmxlUGFpcnMoKS5qb2luKCImIik7CmlmKF8xYy5sZW5ndGg+MCl7XzE5Kz0iZmxh +c2h2YXJzPVwiIitfMWMrIlwiIjt9XzE5Kz0iLz4iOwp9ZWxzZXtpZih0aGlzLmdl +dEF0dHJpYnV0ZSgiZG9FeHByZXNzSW5zdGFsbCIpKXt0aGlzLmFkZFZhcmlhYmxl +KCJNTXBsYXllclR5cGUiLCJBY3RpdmVYIik7fQpfMTk9IjxvYmplY3QgaWQ9XCIi +K3RoaXMuZ2V0QXR0cmlidXRlKCJpZCIpKyJcIiBjbGFzc2lkPVwiY2xzaWQ6RDI3 +Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwXCIgd2lkdGg9XCIiK3Ro +aXMuZ2V0QXR0cmlidXRlKCJ3aWR0aCIpKyJcIiBoZWlnaHQ9XCIiK3RoaXMuZ2V0 +QXR0cmlidXRlKCJoZWlnaHQiKSsiXCI+IjsKXzE5Kz0iPHBhcmFtIG5hbWU9XCJt +b3ZpZVwiIHZhbHVlPVwiIit0aGlzLmdldEF0dHJpYnV0ZSgic3dmIikrIlwiIC8+ +IjsKdmFyIF8xZD10aGlzLmdldFBhcmFtcygpOwpmb3IodmFyIGtleSBpbiBfMWQp +e18xOSs9IjxwYXJhbSBuYW1lPVwiIitrZXkrIlwiIHZhbHVlPVwiIitfMWRba2V5 +XSsiXCIgLz4iO30KdmFyIF8xZj10aGlzLmdldFZhcmlhYmxlUGFpcnMoKS5qb2lu +KCImIik7CmlmKF8xZi5sZW5ndGg+MCl7XzE5Kz0iPHBhcmFtIG5hbWU9XCJmbGFz +aHZhcnNcIiB2YWx1ZT1cIiIrXzFmKyJcIiAvPiI7fV8xOSs9Ijwvb2JqZWN0PiI7 +fQpyZXR1cm4gXzE5Owp9LHdyaXRlOmZ1bmN0aW9uKF8yMCl7CmlmKHRoaXMuZ2V0 +QXR0cmlidXRlKCJ1c2VFeHByZXNzSW5zdGFsbCIpKXsKdmFyIF8yMT1uZXcgZGVj +b25jZXB0LlBsYXllclZlcnNpb24oWzYsMCw2NV0pOwppZih0aGlzLmluc3RhbGxl +ZFZlci52ZXJzaW9uSXNWYWxpZChfMjEpJiYhdGhpcy5pbnN0YWxsZWRWZXIudmVy +c2lvbklzVmFsaWQodGhpcy5nZXRBdHRyaWJ1dGUoInZlcnNpb24iKSkpewp0aGlz +LnNldEF0dHJpYnV0ZSgiZG9FeHByZXNzSW5zdGFsbCIsdHJ1ZSk7CnRoaXMuYWRk +VmFyaWFibGUoIk1NcmVkaXJlY3RVUkwiLGVzY2FwZSh0aGlzLmdldEF0dHJpYnV0 +ZSgieGlSZWRpcmVjdFVybCIpKSk7CmRvY3VtZW50LnRpdGxlPWRvY3VtZW50LnRp +dGxlLnNsaWNlKDAsNDcpKyIgLSBGbGFzaCBQbGF5ZXIgSW5zdGFsbGF0aW9uIjsK +dGhpcy5hZGRWYXJpYWJsZSgiTU1kb2N0aXRsZSIsZG9jdW1lbnQudGl0bGUpO319 +CmlmKHRoaXMuc2tpcERldGVjdHx8dGhpcy5nZXRBdHRyaWJ1dGUoImRvRXhwcmVz +c0luc3RhbGwiKXx8dGhpcy5pbnN0YWxsZWRWZXIudmVyc2lvbklzVmFsaWQodGhp +cy5nZXRBdHRyaWJ1dGUoInZlcnNpb24iKSkpewp2YXIgbj0odHlwZW9mIF8yMD09 +InN0cmluZyIpP2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKF8yMCk6XzIwOwpuLmlu +bmVySFRNTD10aGlzLmdldFNXRkhUTUwoKTtyZXR1cm4gdHJ1ZTsKfWVsc2V7aWYo +dGhpcy5nZXRBdHRyaWJ1dGUoInJlZGlyZWN0VXJsIikhPSIiKXtkb2N1bWVudC5s +b2NhdGlvbi5yZXBsYWNlKHRoaXMuZ2V0QXR0cmlidXRlKCJyZWRpcmVjdFVybCIp +KTt9fQpyZXR1cm4gZmFsc2U7fX07CmRlY29uY2VwdC5TV0ZPYmplY3RVdGlsLmdl +dFBsYXllclZlcnNpb249ZnVuY3Rpb24oKXsKdmFyIF8yMz1uZXcgZGVjb25jZXB0 +LlBsYXllclZlcnNpb24oWzAsMCwwXSk7CmlmKG5hdmlnYXRvci5wbHVnaW5zJiZu +YXZpZ2F0b3IubWltZVR5cGVzLmxlbmd0aCl7CnZhciB4PW5hdmlnYXRvci5wbHVn +aW5zWyJTaG9ja3dhdmUgRmxhc2giXTsKaWYoeCYmeC5kZXNjcmlwdGlvbil7XzIz +PW5ldyBkZWNvbmNlcHQuUGxheWVyVmVyc2lvbih4LmRlc2NyaXB0aW9uLnJlcGxh +Y2UoLyhbYS16QS1aXXxccykrLywiIikucmVwbGFjZSgvKFxzK3J8XHMrYlswLTld +KykvLCIuIikuc3BsaXQoIi4iKSk7fQp9ZWxzZXt0cnl7dmFyIGF4bz1uZXcgQWN0 +aXZlWE9iamVjdCgiU2hvY2t3YXZlRmxhc2guU2hvY2t3YXZlRmxhc2guNyIpO30K +Y2F0Y2goZSl7dHJ5e3ZhciBheG89bmV3IEFjdGl2ZVhPYmplY3QoIlNob2Nrd2F2 +ZUZsYXNoLlNob2Nrd2F2ZUZsYXNoLjYiKTsKXzIzPW5ldyBkZWNvbmNlcHQuUGxh +eWVyVmVyc2lvbihbNiwwLDIxXSk7YXhvLkFsbG93U2NyaXB0QWNjZXNzPSJhbHdh +eXMiO30KY2F0Y2goZSl7aWYoXzIzLm1ham9yPT02KXtyZXR1cm4gXzIzO319dHJ5 +e2F4bz1uZXcgQWN0aXZlWE9iamVjdCgiU2hvY2t3YXZlRmxhc2guU2hvY2t3YXZl +Rmxhc2giKTt9CmNhdGNoKGUpe319aWYoYXhvIT1udWxsKXtfMjM9bmV3IGRlY29u +Y2VwdC5QbGF5ZXJWZXJzaW9uKGF4by5HZXRWYXJpYWJsZSgiJHZlcnNpb24iKS5z +cGxpdCgiICIpWzFdLnNwbGl0KCIsIikpO319CnJldHVybiBfMjM7fTsKZGVjb25j +ZXB0LlBsYXllclZlcnNpb249ZnVuY3Rpb24oXzI3KXsKdGhpcy5tYWpvcj1fMjdb +MF0hPW51bGw/cGFyc2VJbnQoXzI3WzBdKTowOwp0aGlzLm1pbm9yPV8yN1sxXSE9 +bnVsbD9wYXJzZUludChfMjdbMV0pOjA7CnRoaXMucmV2PV8yN1syXSE9bnVsbD9w +YXJzZUludChfMjdbMl0pOjA7Cn07CmRlY29uY2VwdC5QbGF5ZXJWZXJzaW9uLnBy +b3RvdHlwZS52ZXJzaW9uSXNWYWxpZD1mdW5jdGlvbihmdil7CmlmKHRoaXMubWFq +b3I8ZnYubWFqb3Ipe3JldHVybiBmYWxzZTt9CmlmKHRoaXMubWFqb3I+ZnYubWFq +b3Ipe3JldHVybiB0cnVlO30KaWYodGhpcy5taW5vcjxmdi5taW5vcil7cmV0dXJu +IGZhbHNlO30KaWYodGhpcy5taW5vcj5mdi5taW5vcil7cmV0dXJuIHRydWU7fQpp +Zih0aGlzLnJldjxmdi5yZXYpewpyZXR1cm4gZmFsc2U7Cn1yZXR1cm4gdHJ1ZTt9 +OwpkZWNvbmNlcHQudXRpbD17Z2V0UmVxdWVzdFBhcmFtZXRlcjpmdW5jdGlvbihf +Mjkpewp2YXIgcT1kb2N1bWVudC5sb2NhdGlvbi5zZWFyY2h8fGRvY3VtZW50Lmxv +Y2F0aW9uLmhhc2g7CmlmKHEpe3ZhciBfMmI9cS5zdWJzdHJpbmcoMSkuc3BsaXQo +IiYiKTsKZm9yKHZhciBpPTA7aTxfMmIubGVuZ3RoO2krKyl7CmlmKF8yYltpXS5z +dWJzdHJpbmcoMCxfMmJbaV0uaW5kZXhPZigiPSIpKT09XzI5KXsKcmV0dXJuIF8y +YltpXS5zdWJzdHJpbmcoKF8yYltpXS5pbmRleE9mKCI9IikrMSkpO319fQpyZXR1 +cm4gIiI7fX07CmRlY29uY2VwdC5TV0ZPYmplY3RVdGlsLmNsZWFudXBTV0ZzPWZ1 +bmN0aW9uKCl7aWYod2luZG93Lm9wZXJhfHwhZG9jdW1lbnQuYWxsKXtyZXR1cm47 +fQp2YXIgXzJkPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJPQkpFQ1Qi +KTsKZm9yKHZhciBpPTA7aTxfMmQubGVuZ3RoO2krKyl7XzJkW2ldLnN0eWxlLmRp +c3BsYXk9Im5vbmUiO2Zvcih2YXIgeCBpbiBfMmRbaV0pewppZih0eXBlb2YgXzJk +W2ldW3hdPT0iZnVuY3Rpb24iKXtfMmRbaV1beF09ZnVuY3Rpb24oKXt9O319fX07 +CmRlY29uY2VwdC5TV0ZPYmplY3RVdGlsLnByZXBVbmxvYWQ9ZnVuY3Rpb24oKXtf +X2ZsYXNoX3VubG9hZEhhbmRsZXI9ZnVuY3Rpb24oKXt9OwpfX2ZsYXNoX3NhdmVk +VW5sb2FkSGFuZGxlcj1mdW5jdGlvbigpe307CmlmKHR5cGVvZiB3aW5kb3cub251 +bmxvYWQ9PSJmdW5jdGlvbiIpewp2YXIgXzMwPXdpbmRvdy5vbnVubG9hZDsKd2lu +ZG93Lm9udW5sb2FkPWZ1bmN0aW9uKCl7CmRlY29uY2VwdC5TV0ZPYmplY3RVdGls +LmNsZWFudXBTV0ZzKCk7XzMwKCk7fTsKfWVsc2V7d2luZG93Lm9udW5sb2FkPWRl +Y29uY2VwdC5TV0ZPYmplY3RVdGlsLmNsZWFudXBTV0ZzO319OwppZih0eXBlb2Yg +d2luZG93Lm9uYmVmb3JldW5sb2FkPT0iZnVuY3Rpb24iKXsKdmFyIG9sZEJlZm9y +ZVVubG9hZD13aW5kb3cub25iZWZvcmV1bmxvYWQ7CndpbmRvdy5vbmJlZm9yZXVu +bG9hZD1mdW5jdGlvbigpewpkZWNvbmNlcHQuU1dGT2JqZWN0VXRpbC5wcmVwVW5s +b2FkKCk7Cm9sZEJlZm9yZVVubG9hZCgpO307Cn1lbHNle3dpbmRvdy5vbmJlZm9y +ZXVubG9hZD1kZWNvbmNlcHQuU1dGT2JqZWN0VXRpbC5wcmVwVW5sb2FkO30KaWYo +QXJyYXkucHJvdG90eXBlLnB1c2g9PW51bGwpewpBcnJheS5wcm90b3R5cGUucHVz +aD1mdW5jdGlvbihfMzEpewp0aGlzW3RoaXMubGVuZ3RoXT1fMzE7CnJldHVybiB0 +aGlzLmxlbmd0aDt9O30KdmFyIGdldFF1ZXJ5UGFyYW1WYWx1ZT1kZWNvbmNlcHQu +dXRpbC5nZXRSZXF1ZXN0UGFyYW1ldGVyOwp2YXIgRmxhc2hPYmplY3Q9ZGVjb25j +ZXB0LlNXRk9iamVjdDsKdmFyIFNXRk9iamVjdD1kZWNvbmNlcHQuU1dGT2JqZWN0 +Owo= + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline; filename=postsHandler.js +Content-Type: application/x-javascript; charset=utf-8; name=postsHandler.js +Content-Location: http://habrahabr.ru/js/1307631427/postsHandler.js +Content-Transfer-Encoding: Base64 + +dmFyIHBvc3RzSGFuZGxlciA9IGZ1bmN0aW9uKCkgew0KCXRoaXMucG9zdHNfaXQg +PSAtMTsNCgl0aGlzLnBvc3RzID0gW107DQoJdGhpcy5jdXJyZW50UGFnZSA9ICcn +Ow0KCXRoaXMuaXNQb3N0QmVpbmdSZWFkID0gZmFsc2U7DQp9DQoJDQpwb3N0c0hh +bmRsZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbigpIHsNCg0KCXZhciBfdGhp +cyA9IHRoaXM7DQoJDQoJdGhpcy5wb3N0cyA9ICQoJ3dyYXBwZXInKS5nZXRFbGVt +ZW50cygnLmhlbnRyeScpOw0KCXRoaXMucG9zdHMuc29ydChwb3N0c0hhbmRsZXIu +c29ydEFycmF5KTsNCgkNCglkb2N1bWVudC5vbmtleXVwID0gZnVuY3Rpb24oZXYp +IHsNCgkJDQoJCXZhciB0YXJnOw0KCQlpZighZXYpCWV2PXdpbmRvdy5ldmVudDsN +CgkJaWYgKCFkb2N1bWVudC5hbGwpIGV2LnByZXZlbnREZWZhdWx0KCk7IGVsc2Ug +ZXYucmV0dXJuVmFsdWUgPSBmYWxzZTsNCgkNCgkJaWYgKGV2LnRhcmdldCkgdGFy +ZyA9IGV2LnRhcmdldDsNCgkJZWxzZSBpZiAoZXYuc3JjRWxlbWVudCkgdGFyZyA9 +IGV2LnNyY0VsZW1lbnQ7DQoJCWlmICh0YXJnLm5vZGVUeXBlID09IDMpIHRhcmcg +PSB0YXJnLnBhcmVudE5vZGU7DQoJCQ0KCQl2YXIga2V5ID0gZ2V0Q2hhckNvZGUo +ZXYpOw0KCQkNCgkJaWYodGFyZy50YWdOYW1lICE9ICdURVhUQVJFQScgJiYgdGFy +Zy50YWdOYW1lICE9ICdJTlBVVCcpIHsNCgkJCWlmKGtleT09NzIpIHsNCgkJCQlf +dGhpcy50b3AoZXYpOw0KCQkJfQ0KCQkJZWxzZSBpZihrZXk9PTc1KSB7DQoJCQkJ +X3RoaXMucHJldihldik7DQoJCQl9DQoJCQllbHNlIGlmKGtleT09NzQpIHsNCgkJ +CQlfdGhpcy5uZXh0KGV2KTsNCgkJCX0NCgkJfQ0KCX0NCn07DQoNCnBvc3RzSGFu +ZGxlci5wcm90b3R5cGUuc29ydEFycmF5ID0gZnVuY3Rpb24oYSwgYikgew0KICBp +ZiAoYS5vZmZzZXRUb3AgPCBiLm9mZnNldFRvcCkNCiAgICByZXR1cm4gLTE7DQog +IGlmIChhLm9mZnNldFRvcCA+IGIub2Zmc2V0VG9wKQ0KICAgIHJldHVybiAxOw0K +ICByZXR1cm4gMDsJCQ0KfTsNCg0KLy/vv73vv73vv73vv73vv73vv73vv73vv73v +v73vv70g77+977+977+977+977+977+977+9IO+/ve+/ve+/ve+/vQ0KcG9zdHNI +YW5kbGVyLnByb3RvdHlwZS5kZXRlY3RDdXJyZW50UG9zdCA9IGZ1bmN0aW9uKCkg +ew0KCXRoaXMuaXNQb3N0QmVpbmdSZWFkID0gZmFsc2U7DQoJdmFyIGJvdW5kcyA9 +IHRoaXMuZ2V0V2luZG93Qm91bmRzKCk7DQoJdmFyIHBvc3QgPSAtMTsNCgl2YXIg +cG9zdHNfbGVuZ3RoID0gdGhpcy5wb3N0cy5sZW5ndGg7DQoJZm9yKHZhciBpPTA7 +IGk8cG9zdHNfbGVuZ3RoOyBpKyspIHsNCgkJaWYodGhpcy5wb3N0c1tpKzFdKSB7 +DQoJCQlpZigkKHRoaXMucG9zdHNbaV0pLmdldFBvc2l0aW9uKCkueTw9Ym91bmRz +LnkgJiYgJCh0aGlzLnBvc3RzW2ldKS5nZXRQb3NpdGlvbigpLnk+PWJvdW5kcy55 +KSB7DQoJCQkJdmFyIHBvc3QgPSBpOw0KCQkJfQ0KCQl9DQoJCWVsc2UgaWYgKCQo +dGhpcy5wb3N0c1tpXSkuZ2V0UG9zaXRpb24oKS55PD1ib3VuZHMueSkgew0KCQkJ +dmFyIHBvc3QgPSBpOw0KCQl9DQoJfQ0KCWlmKHBvc3Q+LTEgJiYgYm91bmRzLnkh +PSQodGhpcy5wb3N0c1twb3N0XSkuZ2V0UG9zaXRpb24oKS55KSB7DQoJCXRoaXMu +aXNQb3N0QmVpbmdSZWFkID0gdHJ1ZTsNCgl9DQoJcmV0dXJuIHBvc3Q7DQp9Ow0K +DQovL++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vSDvv73vv73vv73vv73vv73vv73v +v73vv73vv73vv70g77+977+977+977+977+977+977+9IO+/ve+/ve+/ve+/ve+/ +ve+/ve+/vQ0KcG9zdHNIYW5kbGVyLnByb3RvdHlwZS5nZXRXaW5kb3dCb3VuZHMg +PSBmdW5jdGlvbigpIHsNCiAgICB2YXIgdywgaCwgeCwgeTsNCg0KICAgIGlmICh3 +aW5kb3cuZ2Vja28pIHsNCiAgICAgICAgdmFyIGIgPSBkb2N1bWVudC5ib2R5Ow0K +ICAgICAgICB3ID0gYi5jbGllbnRXaWR0aDsNCiAgICAgICAgaCA9IGIuY2xpZW50 +SGVpZ2h0Ow0KICAgICAgICB4ID0gd2luZG93LnNjcm9sbFg7DQogICAgICAgIHkg +PSB3aW5kb3cuc2Nyb2xsWTsNCiAgICB9DQogICAgZWxzZSBpZiAod2luZG93Lndl +YmtpdCkgew0KICAgICAgICB3ID0gd2luZG93LmlubmVyV2lkdGg7DQogICAgICAg +IGggPSB3aW5kb3cuaW5uZXJIZWlnaHQ7DQogICAgICAgIHggPSB3aW5kb3cuc2Ny +b2xsWDsNCiAgICAgICAgeSA9IHdpbmRvdy5zY3JvbGxZOw0KICAgIH0NCiAgICBl +bHNlIGlmICh3aW5kb3cub3BlcmEpIHsNCiAgICAgICAgdyA9IHdpbmRvdy5pbm5l +cldpZHRoOw0KICAgICAgICBoID0gd2luZG93LmlubmVySGVpZ2h0Ow0KICAgICAg +ICB4ID0gd2luZG93LnBhZ2VYT2Zmc2V0Ow0KICAgICAgICB5ID0gd2luZG93LnBh +Z2VZT2Zmc2V0Ow0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICAgdmFyIGQgPSBk +b2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7DQogICAgICAgIHZhciBiID0gZG9jdW1l +bnQuYm9keTsNCiAgICAgICAgdyA9IGQuY2xpZW50V2lkdGggID8gZC5jbGllbnRX +aWR0aCAgOiBiLmNsaWVudFdpZHRoICA/IGIuY2xpZW50V2lkdGggIDogMDsNCiAg +ICAgICAgaCA9IGQuY2xpZW50SGVpZ2h0ID8gZC5jbGllbnRIZWlnaHQgOiBiLmNs +aWVudEhlaWdodCA/IGIuY2xpZW50SGVpZ2h0IDogMDsNCiAgICAgICAgeCA9IGQu +c2Nyb2xsTGVmdCAgID8gZC5zY3JvbGxMZWZ0ICAgOiBiLnNjcm9sbExlZnQgICA/ +IGIuc2Nyb2xsTGVmdCAgIDogMDsNCiAgICAgICAgeSA9IGQuc2Nyb2xsVG9wICAg +ID8gZC5zY3JvbGxUb3AgICAgOiBiLnNjcm9sbFRvcCAgICA/IGIuc2Nyb2xsVG9w +ICAgIDogMDsNCiAgICB9DQoNCiAgICByZXR1cm4gew0KICAgICAgICAndyc6IHcs +DQogICAgICAgICdoJzogaCwNCiAgICAgICAgJ3gnOiB4LA0KICAgICAgICAneSc6 +IHkNCiAgICB9Ow0KCQ0KfTsNCg0KcG9zdHNIYW5kbGVyLnByb3RvdHlwZS50b3Ag +PSBmdW5jdGlvbihldikgew0KCWlmKCFldikJZXY9d2luZG93LmV2ZW50Ow0KCWlm +ICghZG9jdW1lbnQuYWxsKSBldi5wcmV2ZW50RGVmYXVsdCgpOyBlbHNlIGV2LnJl +dHVyblZhbHVlID0gZmFsc2U7DQoJDQoJd2luZG93LnNjcm9sbFRvKDAsMCk7DQp9 +Ow0KDQpwb3N0c0hhbmRsZXIucHJvdG90eXBlLnByZXYgPSBmdW5jdGlvbihldikg +ew0KCWlmKCFldikJZXY9d2luZG93LmV2ZW50Ow0KCWlmICghZG9jdW1lbnQuYWxs +KSBldi5wcmV2ZW50RGVmYXVsdCgpOyBlbHNlIGV2LnJldHVyblZhbHVlID0gZmFs +c2U7CQ0KCQ0KCXRoaXMucG9zdHNfaXQgPSB0aGlzLmRldGVjdEN1cnJlbnRQb3N0 +KCk7DQoNCglpZih0aGlzLnBvc3RzICYmIHRoaXMucG9zdHMubGVuZ3RoKSB7DQoJ +CWlmKHRoaXMucG9zdHNfaXQ8PXRoaXMucG9zdHMubGVuZ3RoICYmIHRoaXMucG9z +dHNfaXQ+MCkgew0KCQkJaWYoIXRoaXMuaXNQb3N0QmVpbmdSZWFkKSB7DQoJCQkJ +dGhpcy5wb3N0c19pdC0tOw0KCQkJfQ0KCQkJd2luZG93LnNjcm9sbFRvKDAsJCh0 +aGlzLnBvc3RzW3RoaXMucG9zdHNfaXRdKS5nZXRQb3NpdGlvbigpLnkpOw0KCQl9 +DQoJCWVsc2UgaWYgKHRoaXMucG9zdHNfaXQ8PTApew0KCQkJdGhpcy5wcmV2UGFn +ZSgpOw0KCQl9DQoJCWVsc2UgaWYodGhpcy5wb3N0c19pdD50aGlzLnBvc3RzLmxl +bmd0aCkgew0KCQkJdGhpcy5wb3N0c19pdCA9IHRoaXMucG9zdHMubGVuZ3RoLTI7 +DQoJCQl3aW5kb3cuc2Nyb2xsVG8oMCwkKHRoaXMucG9zdHNbdGhpcy5wb3N0c19p +dF0pLmdldFBvc2l0aW9uKCkueSk7DQoJCX0NCgl9DQp9Ow0KDQpwb3N0c0hhbmRs +ZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihldikgew0KCWlmKCFldikgZXY9 +d2luZG93LmV2ZW50Ow0KCWlmICghZG9jdW1lbnQuYWxsKSBldi5wcmV2ZW50RGVm +YXVsdCgpOyBlbHNlIGV2LnJldHVyblZhbHVlID0gZmFsc2U7DQoJDQoJdGhpcy5w +b3N0c19pdCA9IHRoaXMuZGV0ZWN0Q3VycmVudFBvc3QoKTsNCg0KCWlmKHRoaXMu +cG9zdHMgJiYgdGhpcy5wb3N0cy5sZW5ndGgpIHsNCgkJdmFyIGJvdW5kcyA9IHRo +aXMuZ2V0V2luZG93Qm91bmRzKCk7DQoJCXZhciBkb2NIZWlnaHQgPSAkKCdoZWFk +ZXItd3JhcHBlcicpLm9mZnNldEhlaWdodCskKCd3cmFwcGVyJykub2Zmc2V0SGVp +Z2h0KyQoJ2Zvb3RlcicpLm9mZnNldEhlaWdodCs1MDsNCgkJaWYoKGJvdW5kcy55 +ICsgYm91bmRzLmgpID09IGRvY0hlaWdodCB8fCAoYm91bmRzLnkgKyBib3VuZHMu +aCkgPT0gZG9jSGVpZ2h0KzEwKXsNCgkJCXRoaXMubmV4dFBhZ2UoKTsNCgkJfQ0K +CQlpZih0aGlzLnBvc3RzX2l0PHRoaXMucG9zdHMubGVuZ3RoLTEgJiYgdGhpcy5w +b3N0c19pdD49LTEpIHsNCgkJCXRoaXMucG9zdHNfaXQrKzsNCgkJCXdpbmRvdy5z +Y3JvbGxUbygwLCQodGhpcy5wb3N0c1t0aGlzLnBvc3RzX2l0XSkuZ2V0UG9zaXRp +b24oKS55KTsNCgkJfQ0KCX0NCn07DQoNCnBvc3RzSGFuZGxlci5wcm90b3R5cGUu +bmV4dFBhZ2UgPSBmdW5jdGlvbigpIHsNCglpZih3aW5kb3cubG9jYXRpb24uaHJl +Zi5tYXRjaCgvXGQrL2cpKSB7DQoJCXRoaXMuY3VycmVudFBhZ2UgPSB3aW5kb3cu +bG9jYXRpb24uaHJlZi5tYXRjaCgvXGQrL2cpWzBdOw0KCQl0aGlzLmN1cnJlbnRQ +YWdlID0gcGFyc2VJbnQodGhpcy5jdXJyZW50UGFnZSk7DQoJCXRoaXMubmV4dFBh +Z2UgPSB0aGlzLmN1cnJlbnRQYWdlICsgMTsNCgkJd2luZG93LmxvY2F0aW9uLmhy +ZWYgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5yZXBsYWNlKHRoaXMuY3VycmVudFBh +Z2UsIHRoaXMubmV4dFBhZ2UpOw0KCX0NCgllbHNlIHsNCgkJdGhpcy5uZXh0UGFn +ZSA9IDI7DQoJCXdpbmRvdy5sb2NhdGlvbi5ocmVmID0gd2luZG93LmxvY2F0aW9u +LmhyZWYgKyAncGFnZScgKyB0aGlzLm5leHRQYWdlOw0KCX0NCn07DQoNCnBvc3Rz +SGFuZGxlci5wcm90b3R5cGUucHJldlBhZ2UgPSBmdW5jdGlvbigpIHsNCglpZih3 +aW5kb3cubG9jYXRpb24uaHJlZi5tYXRjaCgvXGQrL2cpKSB7DQoJCXRoaXMuY3Vy +cmVudFBhZ2UgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5tYXRjaCgvXGQrL2cpWzBd +Ow0KCQlpZih0aGlzLmN1cnJlbnRQYWdlIT0nMScpIHsNCgkJCXRoaXMuY3VycmVu +dFBhZ2UgPSBwYXJzZUludCh0aGlzLmN1cnJlbnRQYWdlKTsNCgkJCXRoaXMubmV4 +dFBhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlLTE7DQoJCQl3aW5kb3cubG9jYXRpb24u +aHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnJlcGxhY2UodGhpcy5jdXJyZW50 +UGFnZSwgdGhpcy5uZXh0UGFnZSk7DQoJCX0NCgkJZWxzZSB7DQoJCQl3aW5kb3cu +c2Nyb2xsVG8oMCwwKTsNCgkJfQ0KCX0NCgllbHNlIHsNCgkJd2luZG93LnNjcm9s +bFRvKDAsMCk7DQoJfQ0KCQ0KfTsNCg0KdmFyIHBvc3RzSGFuZGxlciA9IG5ldyBw +b3N0c0hhbmRsZXIoKTsNCg0Kd2luZG93LmFkZEV2ZW50KCdkb21yZWFkeScsIGZ1 +bmN0aW9uKCkgew0KCXBvc3RzSGFuZGxlci5pbml0KCk7DQp9KTs= + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline; filename=habraWYG.js +Content-Type: application/x-javascript; charset=utf-8; name=habraWYG.js +Content-Location: http://habrahabr.ru/js/1307631427/habraWYG.js +Content-Transfer-Encoding: Base64 + +LyoKCWhhYnJhV1lHIC0g0L/RgNC+0YHRgtC+0Lkg0LLQuNC30LjQstC40LMKKi8K +CmhhYnJhV1lHID0gewoKCWluc2VydFRhZ1dpdGhUZXh0OiBmdW5jdGlvbiAobGlu +aywgdGFnTmFtZSl7CgkJdmFyIHN0YXJ0VGFnID0gJzwnICsgdGFnTmFtZSArICc+ +JzsKCQl2YXIgZW5kVGFnID0gJzwvJyArIHRhZ05hbWUgKyAnPic7CgkJaGFicmFX +WUcuaW5zZXJ0VGFnKGxpbmssIHN0YXJ0VGFnLCBlbmRUYWcpOwoJCXJldHVybiBm +YWxzZTsKCX0sCgoJaW5zZXJ0SW1hZ2U6IGZ1bmN0aW9uKGxpbmspewoJCXZhciBz +cmMgPSBwcm9tcHQoJ9CS0LLQtdC00LjRgtC1IHNyYyDQutCw0YDRgtC40L3QutC4 +JywgJ2h0dHA6Ly8nKTsKCQlpZihzcmMpewoJCQloYWJyYVdZRy5pbnNlcnRUYWco +bGluaywgJzxpbWcgc3JjPSInICsgc3JjICsgJyIgYWx0PSJpbWFnZSIvPicsICcn +KTsKCQl9CgkJcmV0dXJuIGZhbHNlOwoJfSwKCglpbnNlcnRMaW5rOiBmdW5jdGlv +bihsaW5rKXsKCQl2YXIgaHJlZiA9IHByb21wdCgn0JLQstC10LTQuNGC0LUgVVJM +INGB0YHRi9C70LrQuCcsICdodHRwOi8vJyk7CgkJaWYoaHJlZil7CgkJCWhhYnJh +V1lHLmluc2VydFRhZyhsaW5rLCAnPGEgaHJlZj0iJyArIGhyZWYgKyAnIj4nLCAn +PC9hPicpOwoJCX0KCQlyZXR1cm4gZmFsc2U7Cgl9LAoKCWluc2VydFVzZXI6IGZ1 +bmN0aW9uKGxpbmspewoJCXZhciBsb2dpbiA9IHByb21wdCgn0JLQstC10LTQuNGC +0LUg0L3QuNC60L3QtdC50Lwg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPJywgJycp +OwoJCWlmKGxvZ2luKXsKCQkJaGFicmFXWUcuaW5zZXJ0VGFnKGxpbmssICc8aGgg +dXNlcj0iJyArIGxvZ2luICsgJyIvPicsICcnKTsKCQl9CgkJcmV0dXJuIGZhbHNl +OwoJfSwKCglpbnNlcnRIYWJyYWN1dDogZnVuY3Rpb24obGluayl7CgkJaGFicmFX +WUcuaW5zZXJ0VGFnKGxpbmssICc8aGFicmFjdXQgLz4nLCAnJyk7CgkJcmV0dXJu +IGZhbHNlOwoJfSwKCglpbnNlcnRUYWc6IGZ1bmN0aW9uKGxpbmssIHN0YXJ0VGFn +LCBlbmRUYWcsIHJlcE9iail7CgkJCXZhciB0ZXh0YXJlYVBhcmVudCA9ICQobGlu +aykuZ2V0UGFyZW50KCcuZWRpdG9yJyk7CgkJCXZhciB0ZXh0YXJlYSA9IHRleHRh +cmVhUGFyZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0ZXh0YXJlYScpWzBdOwoJ +CQl0ZXh0YXJlYS5mb2N1cygpOwoKCQkJdmFyIHNjcnRvcCA9IHRleHRhcmVhLnNj +cm9sbFRvcDsKCgkJCXZhciBjdXJzb3JQb3MgPSBoYWJyYVdZRy5nZXRDdXJzb3Io +dGV4dGFyZWEpOwoJCQl2YXIgdHh0X3ByZSA9IHRleHRhcmVhLnZhbHVlLnN1YnN0 +cmluZygwLCBjdXJzb3JQb3Muc3RhcnQpOwoJCQl2YXIgdHh0X3NlbCA9IHRleHRh +cmVhLnZhbHVlLnN1YnN0cmluZyhjdXJzb3JQb3Muc3RhcnQsIGN1cnNvclBvcy5l +bmQpOwoJCQl2YXIgdHh0X2FmdCA9IHRleHRhcmVhLnZhbHVlLnN1YnN0cmluZyhj +dXJzb3JQb3MuZW5kKTsKCgkJCWlmKHJlcE9iail7CgkJCQl0eHRfc2VsID0gdHh0 +X3NlbC5yZXBsYWNlKC9cci9nLCAnJyk7CgkJCQl0eHRfc2VsID0gdHh0X3NlbCAh +PSAnJyA/IHR4dF9zZWwgOiAnICc7CgkJCQl0eHRfc2VsID0gdHh0X3NlbC5yZXBs +YWNlKG5ldyBSZWdFeHAocmVwT2JqLmZpbmRTdHIsICdnbScpLCByZXBPYmoucmVw +U3RyKTsKCQkJfQoKCQkJaWYgKGN1cnNvclBvcy5zdGFydCA9PSBjdXJzb3JQb3Mu +ZW5kKXsKCQkJCXZhciBudUN1cnNvclBvcyA9IGN1cnNvclBvcy5zdGFydCArIHN0 +YXJ0VGFnLmxlbmd0aDsKCQkJfWVsc2V7CgkJCQl2YXIgbnVDdXJzb3JQb3M9U3Ry +aW5nKHR4dF9wcmUgKyBzdGFydFRhZyArIHR4dF9zZWwgKyBlbmRUYWcpLmxlbmd0 +aDsKCQkJfQoKCQkJdGV4dGFyZWEudmFsdWUgPSB0eHRfcHJlICsgc3RhcnRUYWcg +KyB0eHRfc2VsICsgZW5kVGFnICsgdHh0X2FmdDsKCgoJCQkvKgoJCQlpZih0ZXh0 +YXJlYS5zZXRTZWxlY3Rpb25SYW5nZSkgewoJCQkJdGV4dGFyZWEuc2V0U2VsZWN0 +aW9uUmFuZ2UobnVDdXJzb3JQb3MgLSA1LCBudUN1cnNvclBvcyk7CgkJCX0KCQkJ +Ki8KCQkJaGFicmFXWUcuc2V0Q3Vyc29yKHRleHRhcmVhLCBudUN1cnNvclBvcywg +bnVDdXJzb3JQb3MpOwoKCQkJaWYgKHNjcnRvcCkgdGV4dGFyZWEuc2Nyb2xsVG9w +ID0gc2NydG9wOwoKCQkJcmV0dXJuIGZhbHNlOwoJfSwKCglpbnNlcnRUYWdGcm9t +RHJvcEJveDogZnVuY3Rpb24obGluayl7CgkJCWhhYnJhV1lHLmluc2VydFRhZ1dp +dGhUZXh0KGxpbmssIGxpbmsudmFsdWUpOwoJCQlsaW5rLnNlbGVjdGVkSW5kZXgg +PSAwOwoJfSwKCglpbnNlcnRMaXN0OiBmdW5jdGlvbihsaW5rKXsKCgkJCXZhciBz +dGFydFRhZyA9ICc8JyArIGxpbmsudmFsdWUgKyAnPlxuJzsKCQkJdmFyIGVuZFRh +ZyA9ICdcbjwvJyArIGxpbmsudmFsdWUgKyAnPic7CgoJCQl2YXIgcmVwT2JqID0g +ewoJCQkJZmluZFN0cjogJ14oLispJywKCQkJCXJlcFN0cjogJ1x0PGxpPiQxPC9s +aT4nCgkJCX0KCgkJCWhhYnJhV1lHLmluc2VydFRhZyhsaW5rLCBzdGFydFRhZywg +ZW5kVGFnLCByZXBPYmopOwoKCQkJbGluay5zZWxlY3RlZEluZGV4ID0gMDsKCX0s +CgoJaW5zZXJ0VGFiOiBmdW5jdGlvbihlLCB0ZXh0YXJlYSl7CgkJCWlmKCFlKSBl +ID0gd2luZG93LmV2ZW50OwoJCQlpZiAoZS5rZXlDb2RlKSB2YXIga2V5Q29kZSA9 +IGUua2V5Q29kZTsKCQkJZWxzZSBpZiAoZS53aGljaCkgdmFyIGtleUNvZGUgPSBl +LndoaWNoOwoKCQkJLy9hbGVydChrZXlDb2RlKTsKCQkJc3dpdGNoKGUudHlwZSl7 +CgkJCQljYXNlICdrZXlkb3duJzoKCQkJCQlpZihrZXlDb2RlID09IDE2KXsKCQkJ +CQkJaGFicmFXWUcuc2hpZnQgPSB0cnVlOwoJCQkJCQkvL2FsZXJ0KCcxJyk7CgkJ +CQkJfQoJCQkJCWJyZWFrOwoKCQkJCWNhc2UgJ2tleXVwJzoKCQkJCQlpZihrZXlD +b2RlID09IDE2KSB7CgkJCQkJCWhhYnJhV1lHLnNoaWZ0ID0gZmFsc2U7CgkJCQkJ +CS8vYWxlcnQoJzInKTsKCQkJCQl9CgoJCQkJCWJyZWFrOwoJCQl9CgoJCQl0ZXh0 +YXJlYS5mb2N1cygpOwoJCQl2YXIgY3Vyc29yUG9zID0gaGFicmFXWUcuZ2V0Q3Vy +c29yKHRleHRhcmVhKTsKCgkJCWlmIChjdXJzb3JQb3Muc3RhcnQgPT0gY3Vyc29y +UG9zLmVuZCl7CgkJCQlyZXR1cm4gdHJ1ZTsKCgoJCQl9IGVsc2UgaWYoa2V5Q29k +ZSA9PSA5ICYmICFoYWJyYVdZRy5zaGlmdCl7CgkJCQl2YXIgcmVwT2JqID0gewoJ +CQkJCWZpbmRTdHI6ICdeKC4rKScsCgkJCQkJcmVwU3RyOiAnXHQkMScKCQkJCX0K +CQkJCWhhYnJhV1lHLmluc2VydFRhZyh0ZXh0YXJlYSwgJycsICcnLCByZXBPYmop +OwoJCQkJcmV0dXJuIGZhbHNlOwoKCQkJfSBlbHNlIGlmKGtleUNvZGUgPT0gOSAm +JiBoYWJyYVdZRy5zaGlmdCl7CgkJCQl2YXIgcmVwT2JqID0gewoJCQkJCWZpbmRT +dHI6ICdeXHQoLispJywKCQkJCQlyZXBTdHI6ICckMScKCQkJCX0KCQkJCWhhYnJh +V1lHLmluc2VydFRhZyh0ZXh0YXJlYSwgJycsICcnLCByZXBPYmopOwoJCQkJcmV0 +dXJuIGZhbHNlOwoJCQl9Cgl9LAoKCWdldEN1cnNvcjogZnVuY3Rpb24oaW5wdXQp +ewoJCQl2YXIgcmVzdWx0ID0ge3N0YXJ0OiAwLCBlbmQ6IDB9OwoJCQlpZiAoaW5w +dXQuc2V0U2VsZWN0aW9uUmFuZ2UpewoJCQkJcmVzdWx0LnN0YXJ0PSBpbnB1dC5z +ZWxlY3Rpb25TdGFydDsKCQkJCXJlc3VsdC5lbmQgPSBpbnB1dC5zZWxlY3Rpb25F +bmQ7CgkJCX0gZWxzZSBpZiAoIWRvY3VtZW50LnNlbGVjdGlvbikgewoJCQkJcmV0 +dXJuIGZhbHNlOwoJCQl9IGVsc2UgaWYgKGRvY3VtZW50LnNlbGVjdGlvbiAmJiBk +b2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UpIHsKCQkJCXZhciByYW5nZSA9 +IGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpOwoJCQkJdmFyIHN0b3Jl +ZF9yYW5nZSA9IHJhbmdlLmR1cGxpY2F0ZSgpOwoJCQkJc3RvcmVkX3JhbmdlLm1v +dmVUb0VsZW1lbnRUZXh0KGlucHV0KTsKCQkJCXN0b3JlZF9yYW5nZS5zZXRFbmRQ +b2ludCgnRW5kVG9FbmQnLCByYW5nZSk7CgkJCQlyZXN1bHQuc3RhcnQgPSBzdG9y +ZWRfcmFuZ2UudGV4dC5sZW5ndGggLSByYW5nZS50ZXh0Lmxlbmd0aDsKCQkJCXJl +c3VsdC5lbmQgPSByZXN1bHQuc3RhcnQgKyByYW5nZS50ZXh0Lmxlbmd0aDsKCQkJ +fQoJCQlyZXR1cm4gcmVzdWx0OwoJfSwKCglzZXRDdXJzb3I6IGZ1bmN0aW9uKHRl +eHRhcmVhLCBzdGFydCwgZW5kKXsKCQkJaWYodGV4dGFyZWEuY3JlYXRlVGV4dFJh +bmdlKSB7CgkJCQl2YXIgcmFuZ2UgPSB0ZXh0YXJlYS5jcmVhdGVUZXh0UmFuZ2Uo +KTsKCQkJCXJhbmdlLm1vdmUoImNoYXJhY3RlciIsIHN0YXJ0KTsKCQkJCXJhbmdl +LnNlbGVjdCgpOwoJCQl9IGVsc2UgaWYodGV4dGFyZWEuc2VsZWN0aW9uU3RhcnQp +IHsKCQkJCXRleHRhcmVhLnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpOwoJ +CQl9Cgl9Cgp9Cgo= + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline; filename=friending.js +Content-Type: application/x-javascript; charset=utf-8; name=friending.js +Content-Location: http://habrahabr.ru/js/1307631427/friending.js +Content-Transfer-Encoding: Base64 + +ZnJpZW5kaW5nSGFuZGxlciA9IHsNCgl1cmw6ICcvYWpheC91c2Vycy9mcmllbmRz +LycsDQoJeG1sOiB7DQoJCXJlc3BvbnNlTm9kZXM6IHsNCgkJCWVycm9yIDogJ2Vy +cm9yJywNCgkJCXJlc3VsdCA6ICdtZXNzYWdlJywNCgkJCXRleHQgOiAndGV4dCcN +CgkJfSwNCg0KCQlwYXJzZTogZnVuY3Rpb24oeG1sT2JqKXsNCgkJCXZhciB4bWxO +b2RlcyA9IHt9Ow0KCQkJZm9yIChwcm9wIGluIGZyaWVuZGluZ0hhbmRsZXIueG1s +LnJlc3BvbnNlTm9kZXMpIHsNCgkJCQl4bWxOb2Rlc1twcm9wXSA9IHhtbE9iai5n +ZXRFbGVtZW50c0J5VGFnTmFtZShmcmllbmRpbmdIYW5kbGVyLnhtbC5yZXNwb25z +ZU5vZGVzW3Byb3BdKTsNCgkJCX0NCgkJCXJldHVybiB4bWxOb2RlczsNCgkJfQ0K +CX0sDQoJDQoJZnJpZW5kVW5mcmllbmQgOiBmdW5jdGlvbihmcmllbmRJZCwgZnJp +ZW5kKSB7DQoJCXByb2ZpbGVGb3JtLmhpZGVQYW5lbHMoKTsNCgkJaWYgKGZyaWVu +ZCkgew0KCQkJJCgnanMtYWRkRnJpZW5kTWVzc2FnZScpLnJlbW92ZUNsYXNzKCdo +aWRkZW4nKTsNCgkJCSQoJ2pzLWFkZEZyaWVuZFNlbmRCdXR0b24nKS5yZW1vdmVD +bGFzcygnaGlkZGVuJyk7DQoJCX0gZWxzZSB7DQoJCQkkKCdqcy1hZGRGcmllbmRN +ZXNzYWdlJykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpOw0KCQkJJCgnanMtcmVtb3Zl +RnJpZW5kU2VuZEJ1dHRvbicpLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTsNCgkJfQ0K +CX0sDQoJDQoJYWRkRnJpZW5kU2VuZCA6IGZ1bmN0aW9uIChmcmllbmRJZCkgew0K +CQl2YXIgZGF0YSA9ICdhY3Rpb249ZnJpZW5kJmZyaWVuZElkPScgKyBmcmllbmRJ +ZCArICcmbXNnPScgKyAkKCdqcy1GcmllbmRVbmZyaWVuZE1lc3NhZ2UnKS52YWx1 +ZTsNCgkJYWpheExvYWRQb3N0KGZyaWVuZGluZ0hhbmRsZXIudXJsLCBkYXRhLCBm +dW5jdGlvbihhamF4T2JqKSB7DQogICAgICAgICAgICBmcmllbmRpbmdIYW5kbGVy +LmFkZEZyaWVuZE9ubG9hZChhamF4T2JqKQ0KICAgICAgICB9KTsNCgl9LA0KCQ0K +CXJlbW92ZUZyaWVuZFNlbmQgOiBmdW5jdGlvbiAoZnJpZW5kSWQpIHsNCgkJdmFy +IGRhdGEgPSAnYWN0aW9uPXVuZnJpZW5kJmZyaWVuZElkPScgKyBmcmllbmRJZCAr +ICcmbXNnPScgKyAkKCdqcy1GcmllbmRVbmZyaWVuZE1lc3NhZ2UnKS52YWx1ZTsN +CgkJYWpheExvYWRQb3N0KGZyaWVuZGluZ0hhbmRsZXIudXJsLCBkYXRhLCBmcmll +bmRpbmdIYW5kbGVyLnJlbW92ZUZyaWVuZE9ubG9hZCk7DQoJfSwNCgkNCglhZGRG +cmllbmRPbmxvYWQgOiBmdW5jdGlvbihhamF4T2JqKSB7DQoJCWlmKGFqYXhPYmog +JiYgYWpheE9iai5yZXNwb25zZVhNTCl7DQoJCQl2YXIgeG1sT2JqID0gYWpheE9i +ai5yZXNwb25zZVhNTDsNCgkJCXZhciB4bWxOb2RlcyA9IGZyaWVuZGluZ0hhbmRs +ZXIueG1sLnBhcnNlKHhtbE9iaik7DQoJCQlpZih4bWxOb2Rlcy5lcnJvciAmJiB4 +bWxOb2Rlcy5lcnJvci5sZW5ndGgpew0KCQkJCXZhciBlcnJvcnNfbGVuZ3RoID0g +eG1sTm9kZXMuZXJyb3IubGVuZ3RoOw0KCQkJCWZvciAodmFyIGkgPSAwOyBpIDwg +ZXJyb3JzX2xlbmd0aDsgaSsrKSB7DQoJCQkJCWZ1dHVfYWxlcnQoRkFULmZyaWVu +ZGxpZXJfaGVhZGVyLCB4bWxOb2Rlcy5lcnJvcltpXS5maXJzdENoaWxkLmRhdGEs +IHRydWUsICdlcnJvcicpOw0KCQkJCX0NCgkJCX0NCgkJCWlmKHhtbE5vZGVzLnJl +c3VsdCAmJiB4bWxOb2Rlcy5yZXN1bHQubGVuZ3RoKSB7DQoJCQkJaWYoeG1sTm9k +ZXMudGV4dCAmJiB4bWxOb2Rlcy50ZXh0Lmxlbmd0aCkgew0KCQkJCQlmdXR1X2Fs +ZXJ0KEZBVC5mcmllbmRsaWVyX2hlYWRlciwgeG1sTm9kZXMudGV4dFswXS5maXJz +dENoaWxkLmRhdGEsIGZhbHNlLCAnbWVzc2FnZScpOw0KCQkJCX0NCgkJCQkkKCdq +cy1GcmllbmRVbmZyaWVuZE1lc3NhZ2UnKS52YWx1ZSA9ICcnOw0KCQkJCSQoJ2pz +LWFkZEZyaWVuZE1lc3NhZ2UnKS5hZGRDbGFzcygnaGlkZGVuJyk7DQoJCQkJJCgn +anMtYWRkRnJpZW5kU2VuZEJ1dHRvbicpLmFkZENsYXNzKCdoaWRkZW4nKTsNCg0K +CQkJCS8vJCgnanMtYWRkRnJpZW5kQnV0dG9uJykuYWRkQ2xhc3MoJ2hpZGRlbicp +Ow0KCQkJCS8vJCgnanMtZGVsZXRlRnJpZW5kQnV0dG9uJykucmVtb3ZlQ2xhc3Mo +J2hpZGRlbicpOw0KICAgICAgICAgICAgICAgIA0KCSAgICAgICAgICAgICQkKCJw +cm9maWxlLWFjdGlvbnMtZnJpZW5kLWFkZCIpLnNldFN0eWxlKCdkaXNwbGF5Jywg +J25vbmUnKQ0KCSAgICAgICAgICAgICQkKCJwcm9maWxlLWFjdGlvbnMtZnJpZW5k +LWRlbCIpLnNldFN0eWxlKCdkaXNwbGF5JywgJ2lubGluZScpDQoJCQl9DQoJCX0N +Cgl9LA0KCQ0KCXJlbW92ZUZyaWVuZE9ubG9hZCA6IGZ1bmN0aW9uKGFqYXhPYmop +IHsNCgkJaWYoYWpheE9iaiAmJiBhamF4T2JqLnJlc3BvbnNlWE1MKXsNCgkJCXZh +ciB4bWxPYmogPSBhamF4T2JqLnJlc3BvbnNlWE1MOw0KCQkJdmFyIHhtbE5vZGVz +ID0gZnJpZW5kaW5nSGFuZGxlci54bWwucGFyc2UoeG1sT2JqKTsNCgkJCWlmKHht +bE5vZGVzLmVycm9yICYmIHhtbE5vZGVzLmVycm9yLmxlbmd0aCl7DQoJCQkJdmFy +IGVycm9yc19sZW5ndGggPSB4bWxOb2Rlcy5lcnJvci5sZW5ndGg7DQoJCQkJZm9y +ICh2YXIgaSA9IDA7IGkgPCBlcnJvcnNfbGVuZ3RoOyBpKyspIHsNCgkJCQkJZnV0 +dV9hbGVydChGQVQuZnJpZW5kbGllcl9oZWFkZXIsIHhtbE5vZGVzLmVycm9yW2ld +LmZpcnN0Q2hpbGQuZGF0YSwgdHJ1ZSwgJ2Vycm9yJyk7DQoJCQkJfQ0KCQkJfQ0K +CQkJaWYoeG1sTm9kZXMucmVzdWx0ICYmIHhtbE5vZGVzLnJlc3VsdC5sZW5ndGgp +IHsNCgkJCQlmdXR1X2FsZXJ0KEZBVC5mcmllbmRsaWVyX2hlYWRlciwgJ9CS0Ysg +0YPQtNCw0LvQuNC70Lgg0LTRgNGD0LPQsCA6KCcsIGZhbHNlLCAnbWVzc2FnZScp +Ow0KCQkJCSQoJ2pzLUZyaWVuZFVuZnJpZW5kTWVzc2FnZScpLnZhbHVlID0gJyc7 +DQoJCQkJJCgnanMtYWRkRnJpZW5kTWVzc2FnZScpLmFkZENsYXNzKCdoaWRkZW4n +KTsNCgkJCQkkKCdqcy1yZW1vdmVGcmllbmRTZW5kQnV0dG9uJykuYWRkQ2xhc3Mo +J2hpZGRlbicpOw0KDQoJCQkJLy8kKCdqcy1hZGRGcmllbmRCdXR0b24nKS5yZW1v +dmVDbGFzcygnaGlkZGVuJyk7DQoJCQkJLy8kKCdqcy1kZWxldGVGcmllbmRCdXR0 +b24nKS5hZGRDbGFzcygnaGlkZGVuJyk7DQoJCQl9DQoJCX0NCgl9LA0KCQ0KCWFu +c3dlciA6IGZ1bmN0aW9uKGFuc3dlciwgbWVzc2FnZV9pZCwgdXNlcl9pZCwgZnJp +ZW5kX2lkKSB7DQoJCXZhciBkYXRhID0gJ2FjdGlvbj1yZXBseSZhbnN3ZXI9JyAr +IGFuc3dlciArICcmbWVzc2FnZV9pZD0nICsgbWVzc2FnZV9pZCArICcmdXNlcl9p +ZD0nICsgdXNlcl9pZCArICcmZnJpZW5kX2lkPScgKyBmcmllbmRfaWQ7DQoJCWFq +YXhMb2FkUG9zdChmcmllbmRpbmdIYW5kbGVyLnVybCwgZGF0YSwgZnJpZW5kaW5n +SGFuZGxlci5hbnN3ZXJPbmxvYWQpOw0KCX0sDQoJYW5zd2VyT25sb2FkIDogZnVu +Y3Rpb24oYWpheE9iaikgew0KCQlpZihhamF4T2JqICYmIGFqYXhPYmoucmVzcG9u +c2VYTUwpew0KCQkJdmFyIHhtbE9iaiA9IGFqYXhPYmoucmVzcG9uc2VYTUw7DQoJ +CQl2YXIgeG1sTm9kZXMgPSBmcmllbmRpbmdIYW5kbGVyLnhtbC5wYXJzZSh4bWxP +YmopOw0KCQkJaWYoeG1sTm9kZXMuZXJyb3IgJiYgeG1sTm9kZXMuZXJyb3IubGVu +Z3RoKXsNCgkJCQl2YXIgZXJyb3JzX2xlbmd0aCA9IHhtbE5vZGVzLmVycm9yLmxl +bmd0aDsNCgkJCQlmb3IgKHZhciBpID0gMDsgaSA8IGVycm9yc19sZW5ndGg7IGkr +Kykgew0KCQkJCQlmdXR1X2FsZXJ0KEZBVC5mcmllbmRsaWVyX2hlYWRlciwgeG1s +Tm9kZXMuZXJyb3JbaV0uZmlyc3RDaGlsZC5kYXRhLCB0cnVlLCAnZXJyb3InKTsN +CgkJCQl9DQoJCQl9DQoJCQlpZih4bWxOb2Rlcy50ZXh0ICYmIHhtbE5vZGVzLnRl +eHQubGVuZ3RoKSB7DQoJCQkJJCgnZnJpZW5kLW1haWwtYWN0aW9uJykuaW5uZXJI +VE1MID0geG1sTm9kZXMudGV4dFswXS5maXJzdENoaWxkLmRhdGE7DQoJCQl9DQoJ +CX0JDQoJfQ0KfTsNCg0KY29tcGFuaWVzSGFuZGxlciA9IHsNCgl3b3JrZXJTZW5k +IDogZnVuY3Rpb24gKGNvbXBhbnlfaWQsIGFkZCwgZmF2KSB7DQoJCXZhciBwZW9w +bGVMaXN0LHBlb3BsZUNvdW50ZXIscGVvcGxlTWVudTsNCgkJKG5ldyBSZXF1ZXN0 +KHsNCiAgICAgICAgICAgICd1cmwnOiB0ZW1wLmJhc2UgKyAnYWpheC9jb21wYW55 +L3NldC8nLA0KICAgICAgICAgICAgJ2RhdGEnOiB7DQogICAgICAgICAgICAgICAg +J2FjdGlvbic6IGFkZCA/ICggZmF2ID8gJ2Zhbl9hZGQnIDogJ3dvcmtlcl9hZGQn +KSA6ICggZmF2ID8gJ2Zhbl9kZWwnIDogJ3dvcmtlcl9kZWwnKSwNCgkJCQknY29t +cGFueV9pZCcgOiBjb21wYW55X2lkDQogICAgICAgICAgICB9LA0KCQkJIm9uUmVx +dWVzdCI6ZnVuY3Rpb24oKXsNCgkJCQlwZW9wbGVMaXN0ID0gZmF2ID8gJCgnanMt +Y29tcGFueUZhbnNMaXN0JykgOiAkKCdqcy1jb21wYW55V29ya2Vyc0xpc3QnKTsN +CgkJCQlwZW9wbGVDb3VudGVyID0gZmF2ID8gJCgnanMtY29tcGFueUZhbnNDb3Vu +dCcpIDogJCgnanMtY29tcGFueVdvcmtlcnNDb3VudCcpOw0KCQkJCXBlb3BsZU1l +bnUgPSAkKGRvY3VtZW50KS5nZXRFbGVtZW50KCIucHJvZmlsZS1hY3Rpb25zLW1l +bnUgLmpzLXlvdXItd29yay1zdGF0ZSIpOw0KCQkJfSwNCgkJCSJvblN1Y2Nlc3Mi +OiBmdW5jdGlvbihyLHJ4bWwpew0KCQkJCXZhciBlcnJvcnMgPSByeG1sLmdldEVs +ZW1lbnRzQnlUYWdOYW1lKCJlcnJvciIpOw0KCQkJCWlmIChlcnJvcnMgJiYgZXJy +b3JzLmxlbmd0aCkgew0KCQkJCQl2YXIgZXJyb3JzdGV4dCA9ICIiOw0KCQkJCQlm +b3IgKHZhciBpPTAsbD1lcnJvcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7DQoJCQkJ +CQllcnJvcnN0ZXh0ICs9IGVycm9yc1tpXS5maXJzdENoaWxkLmRhdGEgKyAiPC9i +cj4iOw0KCQkJCQl9Ow0KCQkJCQlmdXR1X2FsZXJ0KCLQntC5LdC+0Lkt0L7QuSDR +gSDQutC+0LvQsdCw0YHQvtC5ISIsIGVycm9yc3RleHQsIGZhbHNlLCAnZXJyb3In +KTsNCgkJCQl9DQoJCQkJdmFyIG1lc3NhZ2UgPSByeG1sLmdldEVsZW1lbnRzQnlU +YWdOYW1lKCJtZXNzYWdlIilbMF07DQoJCQkJdmFyIGNvbXBhbnkgPSByeG1sLmdl +dEVsZW1lbnRzQnlUYWdOYW1lKCJjb21wYW55IilbMF07CQkJCQ0KCQkJCQ0KCQkJ +CWlmIChtZXNzYWdlKSB7DQoJCQkJCXZhciB1c2VyTm9kZSA9IHJ4bWwuZ2V0RWxl +bWVudHNCeVRhZ05hbWUoJ3VzZXInKVswXSwNCgkJCQkJCXVzZXJOYW1lID0gdXNl +ck5vZGUuZmlyc3RDaGlsZC5kYXRhLA0KCQkJCQkJdXNlclVybCAgPSB1c2VyTm9k +ZS5nZXRBdHRyaWJ1dGUoJ3VybCcpOw0KCQkJCQlpZiAoYWRkKSB7CQkJCQkJDQoJ +CQkJCQlwZW9wbGVNZW51ICYmIHBlb3BsZU1lbnUuYWRkQ2xhc3MoIGZhdiA/ICJq +cy15b3UtbG92ZS10aGlzLWNvcnAiIDogImpzLXlvdS13b3JrLWhlcmUiKTsNCgkJ +CQkJCXBlb3BsZUxpc3QgJiYgKCgobmV3IEVsZW1lbnQoJ2xpJykpLmFkb3B0KChu +ZXcgRWxlbWVudCgiYSIsIHsndGV4dCc6IHVzZXJOYW1lICwgJ2hyZWYnOiAiaHR0 +cDovLyIgKyB1c2VyVXJsICsnLyd9KSkpKS5pbmplY3QocGVvcGxlTGlzdCkpOw0K +CQkJCQkJcGVvcGxlQ291bnRlciAmJiAoKHBlb3BsZUNvdW50ZXIuaW5uZXJIVE1M +ID0gTnVtYmVyKHBlb3BsZUNvdW50ZXIuaW5uZXJIVE1MKSArIDEpKTsNCgkJCQkJ +fSBlbHNlIHsNCgkJCQkJCXBlb3BsZU1lbnUgJiYgcGVvcGxlTWVudS5yZW1vdmVD +bGFzcyggZmF2ID8gImpzLXlvdS1sb3ZlLXRoaXMtY29ycCIgOiAianMteW91LXdv +cmstaGVyZSIpOw0KCQkJCQkJcGVvcGxlQ291bnRlciAmJiAocGVvcGxlQ291bnRl +ci5pbm5lckhUTUwgPSBOdW1iZXIocGVvcGxlQ291bnRlci5pbm5lckhUTUwpIC0g +MSk7DQoJCQkJCQl2YXIgdXNlclF1ZXJ5ID0gJ2FbaHJlZj1odHRwOi8vJyt1c2Vy +VXJsKycvXSc7DQoJCQkJCQlwZW9wbGVMaXN0ICYmIHBlb3BsZUxpc3QuZ2V0RWxl +bWVudCh1c2VyUXVlcnkpLmdldFBhcmVudCgpLmRpc3Bvc2UoKTsNCgkJCQkJfQ0K +CQkJCQkkKCdmYW5zX2NvdW50Jykuc2V0KCdodG1sJyxjb21wYW55LmdldEF0dHJp +YnV0ZSgnZmFuc19jb3VudF9zdHInKSk7DQoJCQkJfQ0KCQkJCQ0KCQkJfQ0KICAg +ICAgICB9KSkuc2VuZCgpOw0KCX0sDQoJZmFuU2VuZCA6IGZ1bmN0aW9uIChjb21w +YW55X2lkLCBhZGRGYW4pIHsNCgkJdGhpcy53b3JrZXJTZW5kKGNvbXBhbnlfaWQs +IGFkZEZhbiwgdHJ1ZSk7DQoJfQ0KfTsNCg== + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline; filename=write-topic.webp +Content-Type: image/webp; name=write-topic.webp +Content-Location: http://habrahabr.ru/i/write-topic.png +Content-Transfer-Encoding: Base64 + +UklGRh4CAABXRUJQVlA4IBICAACQDACdASoiACMAA8cIhYWIhYSICQJPoF0+QHP9 +ALcB/oFksIVx/8B/FD8o+Td7NcQDT3+J+4DeAeYB/gPsB87z+A6gD6DnlD/tr8GX +7h/s17Q5gBZk3kVBdI/0ewt/XMrvHbi6zJXBFjLc4EtTAP7uO/8xfiD/1747frr4 +bwsL4NbcPwwe7///idrULNYx7f/U/bnug8zo547cf+uYz/eznMGlv9ORQBHMbkyo +vC9kr/nK9mQOi1VWYj4ZnTJZi+zmB3VfDsNbR7bWuqOHhSfyhIEoAIaerCIT8xfD +E5vGME0r8erPpsmt/bETk06lChQfi176E5GF/B/LZM5H+uxHRBjuHX5piVo/eT1/ +5yeU0GZ+XCwON/2qkf11ddzzOiyAfRhDBAnxhqoJg0WPFvbcvG6IsnRFmNnSbbh9 +LXAoBnxTkXeYKs75977vF8wfVubm17mb4P1qXV+LPkWmlOedHWeYCLxQZQ4cHwxr +8uLTG+Yi4hPGFEyI6lsp7SpL5AVZwYjo5HNKXNfeo81ssWK+xtqz5e6ePg6/haww +FHpc4vP3obSkw5L49H/cFsyP8wntdluGtwOUf0sLjzmazR/V1w3F4ecu8pXWMeCH +7+KOHpZ/531ZHSkD3BFNk9PjZP1cCv2O9F3Pzw9mSUxmRykX4ODf2jA3xpHPpd7U +3pqyfu/4utz9lbxw1uFyMKEAmnBgAA== + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline; filename=big.png +Content-Type: image/png; name=big.png +Content-Location: http://habrahabr.ru/i/special/bookmate/big.png +Content-Transfer-Encoding: Base64 + +iVBORw0KGgoAAAANSUhEUgAAABQAAAAcCAYAAABh2p9gAAAAGXRFWHRTb2Z0d2Fy +ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHxJREFUeNpi/PDhOQMxIDw84T8++ZUr +FzCCaCYGKgNGmAthLoDZhMtFMHlcLqe6C1nQbUa3kZCL0QHVXTj4DWQhVQOh2Kd9 +OiQE6J8OCeWQAU+HLOhhMvwT9sCnQ/qX2O7u7ljTIbmxT/vSBpfLiHX5aDokvhyk +mwsBAgwA8KdP9B+WVFkAAAAASUVORK5CYII= + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline; filename=bg_cicle_help.png +Content-Type: image/png; name=bg_cicle_help.png +Content-Location: http://habrahabr.ru/i/bg_cicle_help.png +Content-Transfer-Encoding: Base64 + +iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2Fy +ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXRJREFUeNqkUz1rg1AUvUpCgsQQkqFT +oFPAyVl/QLPkJxQczZCtc6f+hULI3ilzFjNkjKtOmYT+AR1CQUGQ3iPvhaeRLDlw +UN+95355n5YkCbXwxlwyXaYlzi7MMzNgHlVnTQnwytww/dlsNhoOh9Tv92tDWZZU +FAWlafrHnzvmN/MXtp4i/ppOp+/j8Zh0XW+UNBgMapqmObperx9Zlr3w8SeCSM8N +xJPJ5E6sAjb4wFdUW1eAnn1klgjDkPb7PeV5DmdyXZdWq9XNDl+uwsc8EGCJntuZ +IZjP5xRFER0OB7Jtu/6WlUDDM1kigIuBqXAc5/a+WCzodDpRHMe3AIDQuEhryWl3 +Aa0AqECF0Fg9eoDtdltn9jyvkb0xWCwJ/nMXIF6v142WJITmggBnLEkX0D8Pq9Mm +NGcECLBhVVU1HPisDmAYxp0YvmIrA13s9o437C4Afh+ebQhfrPRR3oWHq6xmhpiX +6Eeu8tOXSXv2Ov8LMADqM6TU3F3u5gAAAABJRU5ErkJggg== + +------------PpIBkhw2W6q3fLw1sbJ92q +Content-Disposition: inline; filename=favicon_1202.ico +Content-Type: image/x-icon; name=favicon_1202.ico +Content-Location: http://habrahabr.ru/media/company/favicon/12/favicon_1202.ico +Content-Transfer-Encoding: Base64 + +AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAABML +AAATCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAamRaGGZgVm1jXFO0YltT0WNd +VNJmYFe5amRadmpjWiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZmBWcGJc +Uu92b2f/in+B/5CAjv+IeYX/fHJy/3FrY/9vaWD2cmxignlyaAUAAAAAAAAAAAAA +AAAAAAAAYlxTm3VsaP+vnbP/yq/f/7GEzP+bX7n/klG3/41Jvv+NYKz/h3mB/3x2 +bv99d2yyf3lvCQAAAAAAAAAAYlxTf35xdv+pf87/om24/4VCfP94LWb/cyhf/3An +YP9xJ2v/eiWQ/4U1p/+Qeo3/h4J6/4aAdpgAAAAAZ2FYKnRrafSXZMH/j0um/34w +av9+MGj/fzJq/3wxZf95LmP/dClg/2wkWf9zJXP/gjOR/5aHjv+Qi4P/joh+P2tl +XIeKa5v/hC6z/4Ezgf+CM4T/gzWF/4M2gf+BNHj/gDNs/3swZf92K2P/bSVc/3Yk +dP+OXo3/n5qT/5qTiqF8dG3Hh0mq/4Amn/+EN5b/hTKf/4Ipm/+EM5b/hDaM/4I0 +gP+AM2//ezBl/3QqYf9wJWP/gTp8/6qfn/+kn5fchHd644tWnf+cipn/qJ+g/7Ch +sP+lhbj/jk6w/4Iqn/+ENI//gzZ//4Azbf95LmP/cSZi/340bv+xo6f/sKym6oqB +feSVjYz/opWh/6yas//Bub3/zMrJ/9bQ1/+rhsL/hDGf/4AsiP+BNHb/ezBl/3Ml +Xv+FR3P/xsC+/7y4suqNiILJk3mM/4g7p/+gZtH/roLS/8Oq1P/j3+P/5+bl/8y6 +0v+UW6D/gC57/3stYP97NGf/vKW0/9XU0v/Gwrzcko6IiY1mgv9/K4D/sYTU/97K +7//Eot//s4zS/+Td5f/u7ez/6+nr/8u3yf+6nbH/1crQ/+fm5f/e3Nn/zsrFo52Y +kSuZiY32dytj/4xKiv/NseL/yqrm/6l20/+jc8v/6+br//b08v/08/P/8O/v/+3s +6//p6Of/4uDe/9fUz0IAAAAAqaahg5N1jP92KWL/hUB5/7mTwv+dZb7/gyi0/6uC +vP/6+fb/+Pby//Lw7f/u7On/6ejm/+Tj4pwAAAAAAAAAALKspQK6uLWho4ik/5hp +nf+cbJr/dyhs/3cncv+EQ37/8Ovs//b18v/y8Oz/7evo/+nn5bbl5OMLAAAAAAAA +AAAAAAAAu7avAcnHxXbOx87ytZjB/6F3tf+cbLH/wKbL//Lx7//x7+v/7+3q9+vp +6Ifo5+UHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1dPPHOHf3nPo5+a06+rp0uzr +69Tt6+i57evpfOzq6CQAAAAAAAAAAAAAAAAAAAAA//8AAPgfAADwBwAA4AMAAMAD +AADAAQAAgAEAAIABAACAAQAAgAEAAMABAADAAwAA4AcAAPAPAAD4HwAA//8AAA== + +------------PpIBkhw2W6q3fLw1sbJ92q-- diff --git a/4-JffArticles/3-BlocksAndAnimations/BlocksAndAnimations.txt b/4-JffArticles/3-BlocksAndAnimations/BlocksAndAnimations.txt new file mode 100644 index 0000000..12ee0a2 --- /dev/null +++ b/4-JffArticles/3-BlocksAndAnimations/BlocksAndAnimations.txt @@ -0,0 +1,324 @@ +Так же как и в топике — О блоках и их использовании в Objective-C часть 2-ая, мы продолжим говорить о преимуществах +использования блоков на живых примерах. + + + Здесь мы рассмотрим удобства использования блоков при управлении последовательностью операций. + +5. UIView анимации, последовательность анимаций. + + Для начала напишем простенький пример, в котором мы будем двигать кнопку с помощью анимаций(без блоков). Затем поменяем порядок анимаций чтобы посмотреть, какие изменения потребуются в коде. + +Шаг 1-ый + + Создадим четыре анимации: «переместить кнопку вверх», "… вниз", "… вправо" и "… влево". Соответственно в методах: moveUpAnimation, moveDownAnimation, moveRightAnimation и moveLeftAnimation. + Вот пример одной из анимаций: +-(void)moveUpAnimation + { + [ UIView beginAnimations: nil context: nil ]; + + CGFloat new_y_ = self.animatedButton.frame.origin.y + - ( self.view.frame.size.height - button_offset_ * 2 ) + + self.animatedButton.frame.size.height; + self.animatedButton.frame = CGRectMake( self.animatedButton.frame.origin.x + , new_y_ + , self.animatedButton.frame.size.width + , self.animatedButton.frame.size.height ); + + [ UIView commitAnimations ]; + } + +* This source code was highlighted with Source Code Highlighter. + + Затем изменим код таким образом что бы эти четыре анимации передвинули кнопку по контуру экрана по часовой стрелке. Выполнение этих анимаций просто последовательно: +-(IBAction)animateButtonAction:( id )sender_ + { + [ self moveUpAnimation ]; + [ self moveRightAnimation ]; + [ self moveDownAnimation ]; + [ self moveLeftAnimation ]; + } + +* This source code was highlighted with Source Code Highlighter. + + ничего не даст, мы увидим только последнюю анимацию. Правильным решением будет запускать следующую анимацию по завершению предыдущей. Для реализации задуманного нам понадобится установить делегат анимации, и в контексте анимации передать информацию о следующей анимации, в делегате выполнить следующую анимацию из контекста, например так: +//интерфейс класса для хранения данных следующей анимации + @interface JFFNextAnimation : NSObject + + @property ( nonatomic, retain ) UIViewAnimationsExampleViewController* controller; + @property ( nonatomic, assign ) SEL nextAnimationSelector; + + @end + + -(void)moveUpAnimation + { + JFFNextAnimation* next_animation_ = [ JFFNextAnimation new ]; + //устанавливаем информацию о следующей анимации + next_animation_.controller = self; + next_animation_.nextAnimationSelector = @selector( moveRightAnimation ); + //передаем информацию о следующей анимации через контекст + [ UIView beginAnimations: nil context: next_animation_ ]; + + CGFloat new_y_ = self.animatedButton.frame.origin.y + - ( self.view.frame.size.height - button_offset_ * 2 ) + + self.animatedButton.frame.size.height; + self.animatedButton.frame = CGRectMake( self.animatedButton.frame.origin.x + , new_y_ + , self.animatedButton.frame.size.width + , self.animatedButton.frame.size.height ); + + //выставляем делегата анимации + [ UIView setAnimationDelegate: self ]; + + [ UIView commitAnimations ]; + } + +//методы moveDownAnimation, moveRightAnimation и moveLeftAnimation аналогичны + + -(void)animationDidStop:( NSString* )animation_id_ finished:( NSNumber* )finished_ context:( void* )context_ + { + //выполняем следующую анимацию + JFFNextAnimation* context_object_ = context_; + [ context_object_.controller performSelector: context_object_.nextAnimationSelector ]; + [ context_object_ release ]; + } + + -(IBAction)animateButtonAction:( id )sender_ + { + //теперь запускаем только первую анимацию + [ self moveUpAnimation ]; + } + +* This source code was highlighted with Source Code Highlighter. + + Теперь все работает правильно. Но допустим мы захотим анимацию перемещения кнопки не по часовой, а против часовой стрелке. Тогда нам понадобится изменить код каждого из методов moveUpAnimation, moveDownAnimation, moveRightAnimation и moveLeftAnimation. Это не очень удобно, поэтому перепишем наш код так чтобы эта задача решалась проще. + +Шаг 2-ый + + Меняем последовательность вызовов анимаций. Для начала сохраним в контексте не селектор следующей анимации, а все анимации которые нужно выполнить после текущей: +@interface JFFNextAnimation : NSObject + + @property ( nonatomic, retain ) UIViewAnimationsExampleViewController* controller; +//храним селекторы анимаций, которые нужно выполнить после текущей анимации в виде строк + @property ( nonatomic, retain ) NSMutableArray* nextAnimations; + + @end + +* This source code was highlighted with Source Code Highlighter. + + код методов moveUpAnimation, moveDownAnimation, moveRightAnimation и moveLeftAnimation тоже нужно изменить: +//теперь анимация принимает контекст как аргумент, так как он меняется на ходу +//и устанавливается отдельно от анимации + -(void)moveUpAnimationWithNextAnimation:( JFFNextAnimation* )next_animation_ + { + [ UIView beginAnimations: nil context: next_animation_ ]; + + CGFloat new_y_ = self.animatedButton.frame.origin.y + - ( self.view.frame.size.height - button_offset_ * 2 ) + + self.animatedButton.frame.size.height; + self.animatedButton.frame = CGRectMake( self.animatedButton.frame.origin.x + , new_y_ + , self.animatedButton.frame.size.width + , self.animatedButton.frame.size.height ); + + [ UIView setAnimationDelegate: self ]; + + [ UIView commitAnimations ]; + } + + //методы moveDownAnimation, moveRightAnimation и moveLeftAnimation аналогичны + +* This source code was highlighted with Source Code Highlighter. + + Делегат анимации так же нужно переделать: +-(void)animationDidStop:( NSString* )animation_id_ finished:( NSNumber* )finished_ context:( void* )context_ + { + //если контекст пуст - дальше ничего не делаем + if ( !context_ ) + return; + + JFFNextAnimation* context_object_ = context_; + + //получаем селектор следующей анимации + NSString* next_animation_string_ = [ context_object_.nextAnimations objectAtIndex: 0 ]; + next_animation_string_ = [ [ next_animation_string_ retain ] autorelease ]; + //и удаляем его из списка + [ context_object_.nextAnimations removeObjectAtIndex: 0 ]; + + SEL next_animation_sel_ = NSSelectorFromString( next_animation_string_ ); + + if ( [ context_object_.nextAnimations count ] == 0 ) + { + //если больше нет следующих анимаций + //передаем пустой контекст следующей анимации + [ context_object_.controller performSelector: next_animation_sel_ + withObject: nil ]; + //освобождаем память + [ context_object_ release ]; + } + else + { + //передаем измененный контекст следующей анимации + [ context_object_.controller performSelector: next_animation_sel_ + withObject: context_object_ ]; + } + } + +* This source code was highlighted with Source Code Highlighter. + + И конечно же результат на который мы работали, теперь последовательность анимаций менять легко: +-(IBAction)animateButtonAction:( id )sender_ + { + JFFNextAnimation* next_animation_ = [ JFFNextAnimation new ]; + next_animation_.controller = self; + //определяем список следующих анимаций в порядке вызова + next_animation_.nextAnimations = [ NSMutableArray arrayWithObjects: + @"moveUpAnimationWithNextAnimation:" + , @"moveLeftAnimationWithNextAnimation:" + , @"moveDownAnimationWithNextAnimation:" + , nil ]; + + //вызываем первую анимацию + [ self moveRightAnimationWithNextAnimation: next_animation_ ]; + } + +* This source code was highlighted with Source Code Highlighter. + + Весь код полученных результатов можно найти на gihub. + +Итоги: + + Поставленую задачу в начале топика мы конечно же решили. Но цена решения высока, код небезопасен(строки вместо селекторов), сложен(запутаная логика делегата селектора и управление памятью контекста), подвержен ошибкам. Постараемся частично исправить ситуацию с помощью (конечно же согласно названию топика) блоков. И так… + +Шаг 3-ий + + Переписываем анимации с использованием блокового апи. Первым же делом мы можем удалить класс контекст анимации — JFFNextAnimation и метод делегат анимации, они нам больше не пригодятся. Метод moveUpAnimation упрощается до такого вида: +-(JFFSimpleBlock)moveUpAnimationBlock + { + return [ [ ^ + { + CGFloat new_y_ = self.animatedButton.frame.origin.y + - ( self.view.frame.size.height - button_offset_ * 2 ) + + self.animatedButton.frame.size.height; + self.animatedButton.frame = CGRectMake( self.animatedButton.frame.origin.x + , new_y_ + , self.animatedButton.frame.size.width + , self.animatedButton.frame.size.height ); + } copy ] autorelease ]; + } + +* This source code was highlighted with Source Code Highlighter. + + Добавим вспомогательный метод создающий блок который выполняет анимацию: +//создаем блок который вызывает анимацию и имеет +//блок обратного вызова для оповещения об окончании анимации + -(JFFSimpleBlock)animationBlockWithAnimations:( JFFSimpleBlock )animations_ + completion:( JFFSimpleBlock )completion_ + { + //отложеный вызов, копируем блок в кучу + //так как на момент вызова этого блока текущий стек будет разрушен + completion_ = [ [ completion_ copy ] autorelease ]; + return [ [ ^ + { + [ UIView animateWithDuration: 0.2 + animations: animations_ + completion: ^( BOOL finished_ ) + { + if ( completion_ ) + completion_(); + } ]; + } copy ] autorelease ]; + } + +* This source code was highlighted with Source Code Highlighter. + + И определим последовательность самих анимаций: +-(IBAction)animateButtonAction:( id )sender_ + { + //определяем блоки анимаций с конца, то есть первый, тот который выполнится поледним + JFFSimpleBlock move_left_animation_block_ = [ self moveLeftAnimationBlock ]; + //completion: - следующая за этой анимация, в этом случае ее нет + move_left_animation_block_ = [ self animationBlockWithAnimations: move_left_animation_block_ + completion: nil ]; + + JFFSimpleBlock move_down_animation_block_ = [ self moveDownAnimationBlock ]; + //completion: - следующая за этой анимация - "move left" + move_down_animation_block_ = [ self animationBlockWithAnimations: move_down_animation_block_ + completion: move_left_animation_block_ ]; + + JFFSimpleBlock move_right_animation_block_ = [ self moveRightAnimationBlock ]; + //completion: - следующая за этой анимация - "move down" + move_right_animation_block_ = [ self animationBlockWithAnimations: move_right_animation_block_ + completion: move_down_animation_block_ ]; + + //определяем последним блок который должен выполнится первым + JFFSimpleBlock move_up_animation_block_ = [ self moveUpAnimationBlock ]; + //completion: - следующая за этой анимация - "move right" + move_up_animation_block_ = [ self animationBlockWithAnimations: [ self moveUpAnimationBlock ] + completion: move_right_animation_block_ ]; + + //выполняем блок с первой анимацией + move_up_animation_block_(); + } + +* This source code was highlighted with Source Code Highlighter. + + Теперь как и в предыдущем примере (анимаций без блоков), попытаемся поменять последовательность вызовов анимаций. Благо это уже не так сложно как было в нашем самом первом примере, но не будем останавливатся на достигнутом. + +Шаг 4-ый + + Забежим немножко наперед и посмотрим на функцию sequenceOfAsyncOperations. Эта функция принимает несколько блоков, абстрагирующих собой ассинхронные операции, ввиде аргументов, и возвращает новый блок, который при вызове будет выполнять блоки аргументы этой функции в заданом порядке. Сам блок асинхронной операции имеет тип JFFAsyncOperation, поэтому немножко изменим функцию animationBlockWithAnimations: согласно этому типу: +-(JFFAsyncOperation)animationBlockWithAnimations:( JFFSimpleBlock )animations_ + { + return [ [ ^( JFFAsyncOperationProgressHandler progress_callback_ + , JFFCancelHandler cancel_callback_ + , JFFDidFinishAsyncOperationHandler done_callback_ ) + { + //отложеный вызов, копируем done_callback_ блок в кучу + //так как на момент вызова этого блока текущий стек будет разрушен + done_callback_ = [ [ done_callback_ copy ] autorelease ]; + [ UIView animateWithDuration: 0.2 + animations: animations_ + completion: ^( BOOL finished_ ) + { + if ( done_callback_ ) + done_callback_( [ NSNull null ], nil ); + } ]; + return [ [ ^{} copy ] autorelease ]; + } copy ] autorelease ]; + } + +* This source code was highlighted with Source Code Highlighter. + + И получим результат: +-(IBAction)animateButtonAction:( id )sender_ + { + JFFSimpleBlock move_right_animation_block_ = [ self moveRightAnimationBlock ]; + JFFAsyncOperation move_right_async_block_ = [ self animationBlockWithAnimations: move_right_animation_block_ ]; + + JFFSimpleBlock move_up_animation_block_ = [ self moveUpAnimationBlock ]; + JFFAsyncOperation move_up_async_block_ = [ self animationBlockWithAnimations: move_up_animation_block_ ]; + + JFFSimpleBlock move_left_animation_block_ = [ self moveLeftAnimationBlock ]; + JFFAsyncOperation move_left_async_block_ = [ self animationBlockWithAnimations: move_left_animation_block_ ]; + + JFFSimpleBlock move_down_animation_block_ = [ self moveDownAnimationBlock ]; + JFFAsyncOperation move_down_async_block_ = [ self animationBlockWithAnimations: move_down_animation_block_ ]; + + //определяем порядок вызова анимаций последовательностью + //передачи аргументов функции - sequenceOfAsyncOperations + JFFAsyncOperation result_animation_block_ = sequenceOfAsyncOperations( + move_right_async_block_ + , move_up_async_block_ + , move_left_async_block_ + , move_down_async_block_ + , nil ); + + //вызываем блок, который в свою очередь вызовет все онимации в заданом порядке + result_animation_block_( nil, nil, nil ); + } + +* This source code was highlighted with Source Code Highlighter. + + На gihub можно посмотреть весь полученый код. + + На этом пока все. Спасибо за внимание. Если эта тема интересна, то в следующей статье постараюсь рассказать об управлении порядком вызова блоков на примере асинхронных операций. \ No newline at end of file diff --git a/4-JffArticles/4-Presentation/Presentation.pptx b/4-JffArticles/4-Presentation/Presentation.pptx new file mode 100644 index 0000000..97c7799 Binary files /dev/null and b/4-JffArticles/4-Presentation/Presentation.pptx differ diff --git a/AUTHORS.txt b/AUTHORS.txt old mode 100644 new mode 100755 index d9a7be7..76c7848 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -1 +1,9 @@ -Oleksandr Dodatko. \ No newline at end of file +1 - Oleksandr Dodatko. + mail/jabber : dodikk88.reg@gmail.com + skype : alexander.dodatko.work@skype.com +===================================================== +2 - Vladimir Gorbenko. + mail/jabber : gorbenko.vova@gmail.com + skype : N/A +===================================================== + diff --git a/CodeStyle/ObjectiveC_Coding_Standard.odt b/CodeStyle/ObjectiveC_Coding_Standard.odt deleted file mode 100644 index 3a53517..0000000 Binary files a/CodeStyle/ObjectiveC_Coding_Standard.odt and /dev/null differ diff --git a/CodeStyle/ObjectiveC_Coding_Standard.pdf b/CodeStyle/ObjectiveC_Coding_Standard.pdf deleted file mode 100644 index 197af2b..0000000 Binary files a/CodeStyle/ObjectiveC_Coding_Standard.pdf and /dev/null differ diff --git a/README b/README old mode 100644 new mode 100755 index 3da536f..37a0ac6 --- a/README +++ b/README @@ -1,3 +1,18 @@ -Sources of the Articles about iOS, xCode and other iPhone stuff. Written with the help of OpenOffice.org +Sources of the Articles about iOS, xCode, objectiveC and other iPhone development related stuff. +Written with the help of OpenOffice.org +License : AFL ( Academic Free License ). +===================================================================== + +Table of contents : +1-CodeStyle -- a description of the sytyle that we use. It is based on google objC code style. +2-xCode4_commandline -- it makes a parallel between xCode GUI and "man xcodebuild" options. +3-iContiniousIntegration -- a description of the hello-world style example project ( https://github.com/dodikk/iContiniousIntegration ). It describes a full development cycle : + * libraries creation and usage + * unit testing with GHUnit + * "universal binary" library creation and usage + * building and deploying the project +4-JffArticles -- articles about objectiveC blocks (by V.Gorbenko) +===================================================================== + diff --git a/bio/dodikk-en.txt b/bio/dodikk-en.txt new file mode 100644 index 0000000..f470ff6 --- /dev/null +++ b/bio/dodikk-en.txt @@ -0,0 +1 @@ +I am Oleksandr Dodatko from Dnipropetrovsk. I'm a software developer since 2008. I also have a master degree in computer science and machine learning. I have participated in the development of such well known projects as "Paraben's Device Seizure" and iOS versions of "Thomson Reuters Insider". I am interested in iOS TDD and continuous integration and do a bit of technical writing on them. My hobbies are volleyball and accoustic guitar. diff --git a/license.txt b/license.txt old mode 100644 new mode 100755