>>> print *current
$2 = {
parent = 0xc74c38948c08548,
directory_file = 9232115092866763080,
subdirectories = {
<boost::container::container_detail::tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, boost::container::container_detail::select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::container::new_allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory> >, boost::container::tree_opt<(boost::container::tree_type_enum)0, true> >> = {
<boost::container::container_detail::node_alloc_holder<boost::container::new_allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory> >, boost::intrusive::rbtree_impl<boost::intrusive::bhtraits<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, void*, (boost::container::tree_type_enum)0, true>, boost::intrusive::rbtree_node_traits<void*, true>, (boost::intrusive::link_mode_type)0, boost::intrusive::dft_tag, 3u>, boost::container::value_to_node_compare<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, void*, (boost::container::tree_type_enum)0, true>, boost::container::container_detail::tree_value_compare<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::container::container_detail::select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory> > > >, unsigned long, true, void> >> = {
members_ = {
<boost::container::new_allocator<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, void*, (boost::container::tree_type_enum)0, true> >> = {<No data fields>},
members of boost::container::container_detail::node_alloc_holder<boost::container::new_allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory> >, boost::intrusive::rbtree_impl<boost::intrusive::bhtraits<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, void*, (boost::container::tree_type_enum)0, true>, boost::intrusive::rbtree_node_traits<void*, true>, (boost::intrusive::link_mode_type)0, boost::intrusive::dft_tag, 3u>, boost::container::value_to_node_compare<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, void*, (boost::container::tree_type_enum)0, true>, boost::container::container_detail::tree_value_compare<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::container::container_detail::select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory> > > >, unsigned long, true, void> >::members_holder:
m_icont = {
<boost::intrusive::bstree_impl<boost::intrusive::bhtraits<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, void*, (boost::container::tree_type_enum)0, true>, boost::intrusive::rbtree_node_traits<void*, true>, (boost::intrusive::link_mode_type)0, boost::intrusive::dft_tag, 3u>, boost::container::value_to_node_compare<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, void*, (boost::container::tree_type_enum)0, true>, boost::container::container_detail::tree_value_compare<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::container::container_detail::select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory> > > >, unsigned long, true, (boost::intrusive::algo_types)5, void>> = {
<boost::intrusive::bstbase<boost::intrusive::bhtraits<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, void*, (boost::container::tree_type_enum)0, true>, boost::intrusive::rbtree_node_traits<void*, true>, (boost::intrusive::link_mode_type)0, boost::intrusive::dft_tag, 3u>, boost::container::value_to_node_compare<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, void*, (boost::container::tree_type_enum)0, true>, boost::container::container_detail::tree_value_compare<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::container::container_detail::select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory> > > >, true, unsigned long, (boost::intrusive::algo_types)5, void>> = {
<boost::intrusive::bstbase_hack<boost::intrusive::bhtraits<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, void*, (boost::container::tree_type_enum)0, true>, boost::intrusive::rbtree_node_traits<void*, true>, (boost::intrusive::link_mode_type)0, boost::intrusive::dft_tag, 3u>, boost::container::value_to_node_compare<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, void*, (boost::container::tree_type_enum)0, true>, boost::container::container_detail::tree_value_compare<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::container::container_detail::select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory> > > >, true, unsigned long, (boost::intrusive::algo_types)5, void>> = {
<boost::intrusive::detail::size_holder<true, unsigned long, void>> = {
static constant_time_size = <optimized out>,
size_ = 53592601919488
},
<boost::intrusive::bstbase2<boost::intrusive::bhtraits<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, void*, (boost::container::tree_type_enum)0, true>, boost::intrusive::rbtree_node_traits<void*, true>, (boost::intrusive::link_mode_type)0, boost::intrusive::dft_tag, 3u>, boost::container::value_to_node_compare<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, void*, (boost::container::tree_type_enum)0, true>, boost::container::container_detail::tree_value_compare<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::container::container_detail::select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory> > > >, (boost::intrusive::algo_types)5, void>> = {
<boost::intrusive::detail::ebo_functor_holder<boost::container::value_to_node_compare<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, void*, (boost::container::tree_type_enum)0, true>, boost::container::container_detail::tree_value_compare<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::container::container_detail::select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory> > > > >> = {
<boost::intrusive::detail::ebo_functor_holder_impl<boost::container::value_to_node_compare<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, void*, (boost::container::tree_type_enum)0, true>, boost::container::container_detail::tree_value_compare<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::container::container_detail::select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory> > > >, false>> = {
<boost::container::value_to_node_compare<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, void*, (boost::container::tree_type_enum)0, true>, boost::container::container_detail::tree_value_compare<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::container::container_detail::select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory> > > >> = {
<boost::container::container_detail::tree_value_compare<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::container::container_detail::select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory> > >> = {
<std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >> = {
<std::binary_function<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool>> = {<No data fields>}, <No data fields>}, <No data fields>}, <No data fields>}, <No data fields>}, <No data fields>},
<boost::intrusive::bstbase3<boost::intrusive::bhtraits<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, void*, (boost::container::tree_type_enum)0, true>, boost::intrusive::rbtree_node_traits<void*, true>, (boost::intrusive::link_mode_type)0, boost::intrusive::dft_tag, 3u>, (boost::intrusive::algo_types)5, void>> = {
static safemode_or_autounlink = <optimized out>,
static stateful_value_traits = <optimized out>,
static has_container_from_iterator = <optimized out>,
holder = {
<boost::intrusive::bhtraits<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, void*, (boost::container::tree_type_enum)0, true>, boost::intrusive::rbtree_node_traits<void*, true>, (boost::intrusive::link_mode_type)0, boost::intrusive::dft_tag, 3u>> = {
<boost::intrusive::bhtraits_base<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, void*, (boost::container::tree_type_enum)0, true>, boost::intrusive::compact_rbtree_node<void*>*, boost::intrusive::dft_tag, 3u>> = {<No data fields>},
members of boost::intrusive::bhtraits<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, void*, (boost::container::tree_type_enum)0, true>, boost::intrusive::rbtree_node_traits<void*, true>, (boost::intrusive::link_mode_type)0, boost::intrusive::dft_tag, 3u>:
static link_mode = <optimized out>
},
members of boost::intrusive::bstbase3<boost::intrusive::bhtraits<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, void*, (boost::container::tree_type_enum)0, true>, boost::intrusive::rbtree_node_traits<void*, true>, (boost::intrusive::link_mode_type)0, boost::intrusive::dft_tag, 3u>, (boost::intrusive::algo_types)5, void>::holder_t:
root = {
<boost::intrusive::compact_rbtree_node<void*>> = {
parent_ = 0x61e800000001bf00,
left_ = 0x8948c08548ffffd5,
right_ = 0x23392b3d8b1374c3
}, <No data fields>}
}
}, <No data fields>}, <No data fields>}, <No data fields>},
members of boost::intrusive::bstree_impl<boost::intrusive::bhtraits<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, void*, (boost::container::tree_type_enum)0, true>, boost::intrusive::rbtree_node_traits<void*, true>, (boost::intrusive::link_mode_type)0, boost::intrusive::dft_tag, 3u>, boost::container::value_to_node_compare<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, void*, (boost::container::tree_type_enum)0, true>, boost::container::container_detail::tree_value_compare<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::container::container_detail::select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory> > > >, unsigned long, true, (boost::intrusive::algo_types)5, void>:
static constant_time_size = true,
static stateful_value_traits = <optimized out>,
static safemode_or_autounlink = <optimized out>
},
members of boost::intrusive::rbtree_impl<boost::intrusive::bhtraits<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, void*, (boost::container::tree_type_enum)0, true>, boost::intrusive::rbtree_node_traits<void*, true>, (boost::intrusive::link_mode_type)0, boost::intrusive::dft_tag, 3u>, boost::container::value_to_node_compare<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, void*, (boost::container::tree_type_enum)0, true>, boost::container::container_detail::tree_value_compare<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::container::container_detail::select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, directory> > > >, unsigned long, true, void>:
static constant_time_size = true
}
}
}, <No data fields>}, <No data fields>},
files = {
<boost::container::container_detail::tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, boost::container::container_detail::select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::container::new_allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> >, boost::container::tree_opt<(boost::container::tree_type_enum)0, true> >> = {
<boost::container::container_detail::node_alloc_holder<boost::container::new_allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> >, boost::intrusive::rbtree_impl<boost::intrusive::bhtraits<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, void*, (boost::container::tree_type_enum)0, true>, boost::intrusive::rbtree_node_traits<void*, true>, (boost::intrusive::link_mode_type)0, boost::intrusive::dft_tag, 3u>, boost::container::value_to_node_compare<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, void*, (boost::container::tree_type_enum)0, true>, boost::container::container_detail::tree_value_compare<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::container::container_detail::select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> > > >, unsigned long, true, void> >> = {
members_ = {
<boost::container::new_allocator<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, void*, (boost::container::tree_type_enum)0, true> >> = {<No data fields>},
members of boost::container::container_detail::node_alloc_holder<boost::container::new_allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> >, boost::intrusive::rbtree_impl<boost::intrusive::bhtraits<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, void*, (boost::container::tree_type_enum)0, true>, boost::intrusive::rbtree_node_traits<void*, true>, (boost::intrusive::link_mode_type)0, boost::intrusive::dft_tag, 3u>, boost::container::value_to_node_compare<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, void*, (boost::container::tree_type_enum)0, true>, boost::container::container_detail::tree_value_compare<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::container::container_detail::select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> > > >, unsigned long, true, void> >::members_holder:
m_icont = {
<boost::intrusive::bstree_impl<boost::intrusive::bhtraits<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, void*, (boost::container::tree_type_enum)0, true>, boost::intrusive::rbtree_node_traits<void*, true>, (boost::intrusive::link_mode_type)0, boost::intrusive::dft_tag, 3u>, boost::container::value_to_node_compare<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, void*, (boost::container::tree_type_enum)0, true>, boost::container::container_detail::tree_value_compare<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::container::container_detail::select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> > > >, unsigned long, true, (boost::intrusive::algo_types)5, void>> = {
<boost::intrusive::bstbase<boost::intrusive::bhtraits<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, void*, (boost::container::tree_type_enum)0, true>, boost::intrusive::rbtree_node_traits<void*, true>, (boost::intrusive::link_mode_type)0, boost::intrusive::dft_tag, 3u>, boost::container::value_to_node_compare<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, void*, (boost::container::tree_type_enum)0, true>, boost::container::container_detail::tree_value_compare<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::container::container_detail::select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> > > >, true, unsigned long, (boost::intrusive::algo_types)5, void>> = {
<boost::intrusive::bstbase_hack<boost::intrusive::bhtraits<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, void*, (boost::container::tree_type_enum)0, true>, boost::intrusive::rbtree_node_traits<void*, true>, (boost::intrusive::link_mode_type)0, boost::intrusive::dft_tag, 3u>, boost::container::value_to_node_compare<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, void*, (boost::container::tree_type_enum)0, true>, boost::container::container_detail::tree_value_compare<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::container::container_detail::select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> > > >, true, unsigned long, (boost::intrusive::algo_types)5, void>> = {
<boost::intrusive::detail::size_holder<true, unsigned long, void>> = {
static constant_time_size = <optimized out>,
size_ = 18434284308195264512
},
<boost::intrusive::bstbase2<boost::intrusive::bhtraits<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, void*, (boost::container::tree_type_enum)0, true>, boost::intrusive::rbtree_node_traits<void*, true>, (boost::intrusive::link_mode_type)0, boost::intrusive::dft_tag, 3u>, boost::container::value_to_node_compare<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, void*, (boost::container::tree_type_enum)0, true>, boost::container::container_detail::tree_value_compare<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::container::container_detail::select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> > > >, (boost::intrusive::algo_types)5, void>> = {
<boost::intrusive::detail::ebo_functor_holder<boost::container::value_to_node_compare<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, void*, (boost::container::tree_type_enum)0, true>, boost::container::container_detail::tree_value_compare<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::container::container_detail::select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> > > > >> = {
<boost::intrusive::detail::ebo_functor_holder_impl<boost::container::value_to_node_compare<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, void*, (boost::container::tree_type_enum)0, true>, boost::container::container_detail::tree_value_compare<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::container::container_detail::select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> > > >, false>> = {
<boost::container::value_to_node_compare<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, void*, (boost::container::tree_type_enum)0, true>, boost::container::container_detail::tree_value_compare<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::container::container_detail::select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> > > >> = {
<boost::container::container_detail::tree_value_compare<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::container::container_detail::select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> > >> = {
<std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >> = {
<std::binary_function<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool>> = {<No data fields>}, <No data fields>}, <No data fields>}, <No data fields>}, <No data fields>}, <No data fields>},
<boost::intrusive::bstbase3<boost::intrusive::bhtraits<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, void*, (boost::container::tree_type_enum)0, true>, boost::intrusive::rbtree_node_traits<void*, true>, (boost::intrusive::link_mode_type)0, boost::intrusive::dft_tag, 3u>, (boost::intrusive::algo_types)5, void>> = {
static safemode_or_autounlink = <optimized out>,
static stateful_value_traits = <optimized out>,
static has_container_from_iterator = <optimized out>,
holder = {
<boost::intrusive::bhtraits<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, void*, (boost::container::tree_type_enum)0, true>, boost::intrusive::rbtree_node_traits<void*, true>, (boost::intrusive::link_mode_type)0, boost::intrusive::dft_tag, 3u>> = {
<boost::intrusive::bhtraits_base<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, void*, (boost::container::tree_type_enum)0, true>, boost::intrusive::compact_rbtree_node<void*>*, boost::intrusive::dft_tag, 3u>> = {<No data fields>},
members of boost::intrusive::bhtraits<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, void*, (boost::container::tree_type_enum)0, true>, boost::intrusive::rbtree_node_traits<void*, true>, (boost::intrusive::link_mode_type)0, boost::intrusive::dft_tag, 3u>:
static link_mode = <optimized out>
},
members of boost::intrusive::bstbase3<boost::intrusive::bhtraits<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, void*, (boost::container::tree_type_enum)0, true>, boost::intrusive::rbtree_node_traits<void*, true>, (boost::intrusive::link_mode_type)0, boost::intrusive::dft_tag, 3u>, (boost::intrusive::algo_types)5, void>::holder_t:
root = {
<boost::intrusive::compact_rbtree_node<void*>> = {
parent_ = 0x8b48c35bd88948ff,
left_ = 0x3d8d480023280f05,
right_ = 0x2eba00016750
}, <No data fields>}
}
}, <No data fields>}, <No data fields>}, <No data fields>},
members of boost::intrusive::bstree_impl<boost::intrusive::bhtraits<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, void*, (boost::container::tree_type_enum)0, true>, boost::intrusive::rbtree_node_traits<void*, true>, (boost::intrusive::link_mode_type)0, boost::intrusive::dft_tag, 3u>, boost::container::value_to_node_compare<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, void*, (boost::container::tree_type_enum)0, true>, boost::container::container_detail::tree_value_compare<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::container::container_detail::select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> > > >, unsigned long, true, (boost::intrusive::algo_types)5, void>:
static constant_time_size = true,
static stateful_value_traits = <optimized out>,
static safemode_or_autounlink = <optimized out>
},
members of boost::intrusive::rbtree_impl<boost::intrusive::bhtraits<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, void*, (boost::container::tree_type_enum)0, true>, boost::intrusive::rbtree_node_traits<void*, true>, (boost::intrusive::link_mode_type)0, boost::intrusive::dft_tag, 3u>, boost::container::value_to_node_compare<boost::container::container_detail::tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, void*, (boost::container::tree_type_enum)0, true>, boost::container::container_detail::tree_value_compare<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::container::container_detail::select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> > > >, unsigned long, true, void>:
static constant_time_size = true
}
}
}, <No data fields>}, <No data fields>}
}
Pj4+IHByaW50ICpjdXJyZW50CiQyID0gewogIHBhcmVudCA9IDB4Yzc0YzM4OTQ4YzA4NTQ4LCAKICBkaXJlY3RvcnlfZmlsZSA9IDkyMzIxMTUwOTI4NjY3NjMwODAsIAogIHN1YmRpcmVjdG9yaWVzID0gewogICAgPGJvb3N0Ojpjb250YWluZXI6OmNvbnRhaW5lcl9kZXRhaWw6OnRyZWU8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiwgc3RkOjpwYWlyPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QsIGRpcmVjdG9yeT4sIGJvb3N0Ojpjb250YWluZXI6OmNvbnRhaW5lcl9kZXRhaWw6OnNlbGVjdDFzdDxzdGQ6OnBhaXI8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiBjb25zdCwgZGlyZWN0b3J5PiA+LCBzdGQ6Omxlc3M8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiA+LCBib29zdDo6Y29udGFpbmVyOjpuZXdfYWxsb2NhdG9yPHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCBkaXJlY3Rvcnk+ID4sIGJvb3N0Ojpjb250YWluZXI6OnRyZWVfb3B0PChib29zdDo6Y29udGFpbmVyOjp0cmVlX3R5cGVfZW51bSkwLCB0cnVlPiA+PiA9IHsKICAgICAgPGJvb3N0Ojpjb250YWluZXI6OmNvbnRhaW5lcl9kZXRhaWw6Om5vZGVfYWxsb2NfaG9sZGVyPGJvb3N0Ojpjb250YWluZXI6Om5ld19hbGxvY2F0b3I8c3RkOjpwYWlyPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QsIGRpcmVjdG9yeT4gPiwgYm9vc3Q6OmludHJ1c2l2ZTo6cmJ0cmVlX2ltcGw8Ym9vc3Q6OmludHJ1c2l2ZTo6Ymh0cmFpdHM8Ym9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6dHJlZV9ub2RlPHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCBkaXJlY3Rvcnk+LCB2b2lkKiwgKGJvb3N0Ojpjb250YWluZXI6OnRyZWVfdHlwZV9lbnVtKTAsIHRydWU+LCBib29zdDo6aW50cnVzaXZlOjpyYnRyZWVfbm9kZV90cmFpdHM8dm9pZCosIHRydWU+LCAoYm9vc3Q6OmludHJ1c2l2ZTo6bGlua19tb2RlX3R5cGUpMCwgYm9vc3Q6OmludHJ1c2l2ZTo6ZGZ0X3RhZywgM3U+LCBib29zdDo6Y29udGFpbmVyOjp2YWx1ZV90b19ub2RlX2NvbXBhcmU8Ym9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6dHJlZV9ub2RlPHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCBkaXJlY3Rvcnk+LCB2b2lkKiwgKGJvb3N0Ojpjb250YWluZXI6OnRyZWVfdHlwZV9lbnVtKTAsIHRydWU+LCBib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjp0cmVlX3ZhbHVlX2NvbXBhcmU8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiwgc3RkOjpwYWlyPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QsIGRpcmVjdG9yeT4sIHN0ZDo6bGVzczxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+ID4sIGJvb3N0Ojpjb250YWluZXI6OmNvbnRhaW5lcl9kZXRhaWw6OnNlbGVjdDFzdDxzdGQ6OnBhaXI8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiBjb25zdCwgZGlyZWN0b3J5PiA+ID4gPiwgdW5zaWduZWQgbG9uZywgdHJ1ZSwgdm9pZD4gPj4gPSB7CiAgICAgICAgbWVtYmVyc18gPSB7CiAgICAgICAgICA8Ym9vc3Q6OmNvbnRhaW5lcjo6bmV3X2FsbG9jYXRvcjxib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjp0cmVlX25vZGU8c3RkOjpwYWlyPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QsIGRpcmVjdG9yeT4sIHZvaWQqLCAoYm9vc3Q6OmNvbnRhaW5lcjo6dHJlZV90eXBlX2VudW0pMCwgdHJ1ZT4gPj4gPSB7PE5vIGRhdGEgZmllbGRzPn0sIAogICAgICAgICAgbWVtYmVycyBvZiBib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjpub2RlX2FsbG9jX2hvbGRlcjxib29zdDo6Y29udGFpbmVyOjpuZXdfYWxsb2NhdG9yPHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCBkaXJlY3Rvcnk+ID4sIGJvb3N0OjppbnRydXNpdmU6OnJidHJlZV9pbXBsPGJvb3N0OjppbnRydXNpdmU6OmJodHJhaXRzPGJvb3N0Ojpjb250YWluZXI6OmNvbnRhaW5lcl9kZXRhaWw6OnRyZWVfbm9kZTxzdGQ6OnBhaXI8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiBjb25zdCwgZGlyZWN0b3J5Piwgdm9pZCosIChib29zdDo6Y29udGFpbmVyOjp0cmVlX3R5cGVfZW51bSkwLCB0cnVlPiwgYm9vc3Q6OmludHJ1c2l2ZTo6cmJ0cmVlX25vZGVfdHJhaXRzPHZvaWQqLCB0cnVlPiwgKGJvb3N0OjppbnRydXNpdmU6OmxpbmtfbW9kZV90eXBlKTAsIGJvb3N0OjppbnRydXNpdmU6OmRmdF90YWcsIDN1PiwgYm9vc3Q6OmNvbnRhaW5lcjo6dmFsdWVfdG9fbm9kZV9jb21wYXJlPGJvb3N0Ojpjb250YWluZXI6OmNvbnRhaW5lcl9kZXRhaWw6OnRyZWVfbm9kZTxzdGQ6OnBhaXI8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiBjb25zdCwgZGlyZWN0b3J5Piwgdm9pZCosIChib29zdDo6Y29udGFpbmVyOjp0cmVlX3R5cGVfZW51bSkwLCB0cnVlPiwgYm9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6dHJlZV92YWx1ZV9jb21wYXJlPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4sIHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCBkaXJlY3Rvcnk+LCBzdGQ6Omxlc3M8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiA+LCBib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjpzZWxlY3Qxc3Q8c3RkOjpwYWlyPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QsIGRpcmVjdG9yeT4gPiA+ID4sIHVuc2lnbmVkIGxvbmcsIHRydWUsIHZvaWQ+ID46Om1lbWJlcnNfaG9sZGVyOiAKICAgICAgICAgIG1faWNvbnQgPSB7CiAgICAgICAgICAgIDxib29zdDo6aW50cnVzaXZlOjpic3RyZWVfaW1wbDxib29zdDo6aW50cnVzaXZlOjpiaHRyYWl0czxib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjp0cmVlX25vZGU8c3RkOjpwYWlyPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QsIGRpcmVjdG9yeT4sIHZvaWQqLCAoYm9vc3Q6OmNvbnRhaW5lcjo6dHJlZV90eXBlX2VudW0pMCwgdHJ1ZT4sIGJvb3N0OjppbnRydXNpdmU6OnJidHJlZV9ub2RlX3RyYWl0czx2b2lkKiwgdHJ1ZT4sIChib29zdDo6aW50cnVzaXZlOjpsaW5rX21vZGVfdHlwZSkwLCBib29zdDo6aW50cnVzaXZlOjpkZnRfdGFnLCAzdT4sIGJvb3N0Ojpjb250YWluZXI6OnZhbHVlX3RvX25vZGVfY29tcGFyZTxib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjp0cmVlX25vZGU8c3RkOjpwYWlyPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QsIGRpcmVjdG9yeT4sIHZvaWQqLCAoYm9vc3Q6OmNvbnRhaW5lcjo6dHJlZV90eXBlX2VudW0pMCwgdHJ1ZT4sIGJvb3N0Ojpjb250YWluZXI6OmNvbnRhaW5lcl9kZXRhaWw6OnRyZWVfdmFsdWVfY29tcGFyZTxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+LCBzdGQ6OnBhaXI8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiBjb25zdCwgZGlyZWN0b3J5Piwgc3RkOjpsZXNzPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gPiwgYm9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6c2VsZWN0MXN0PHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCBkaXJlY3Rvcnk+ID4gPiA+LCB1bnNpZ25lZCBsb25nLCB0cnVlLCAoYm9vc3Q6OmludHJ1c2l2ZTo6YWxnb190eXBlcyk1LCB2b2lkPj4gPSB7CiAgICAgICAgICAgICAgPGJvb3N0OjppbnRydXNpdmU6OmJzdGJhc2U8Ym9vc3Q6OmludHJ1c2l2ZTo6Ymh0cmFpdHM8Ym9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6dHJlZV9ub2RlPHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCBkaXJlY3Rvcnk+LCB2b2lkKiwgKGJvb3N0Ojpjb250YWluZXI6OnRyZWVfdHlwZV9lbnVtKTAsIHRydWU+LCBib29zdDo6aW50cnVzaXZlOjpyYnRyZWVfbm9kZV90cmFpdHM8dm9pZCosIHRydWU+LCAoYm9vc3Q6OmludHJ1c2l2ZTo6bGlua19tb2RlX3R5cGUpMCwgYm9vc3Q6OmludHJ1c2l2ZTo6ZGZ0X3RhZywgM3U+LCBib29zdDo6Y29udGFpbmVyOjp2YWx1ZV90b19ub2RlX2NvbXBhcmU8Ym9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6dHJlZV9ub2RlPHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCBkaXJlY3Rvcnk+LCB2b2lkKiwgKGJvb3N0Ojpjb250YWluZXI6OnRyZWVfdHlwZV9lbnVtKTAsIHRydWU+LCBib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjp0cmVlX3ZhbHVlX2NvbXBhcmU8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiwgc3RkOjpwYWlyPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QsIGRpcmVjdG9yeT4sIHN0ZDo6bGVzczxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+ID4sIGJvb3N0Ojpjb250YWluZXI6OmNvbnRhaW5lcl9kZXRhaWw6OnNlbGVjdDFzdDxzdGQ6OnBhaXI8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiBjb25zdCwgZGlyZWN0b3J5PiA+ID4gPiwgdHJ1ZSwgdW5zaWduZWQgbG9uZywgKGJvb3N0OjppbnRydXNpdmU6OmFsZ29fdHlwZXMpNSwgdm9pZD4+ID0gewogICAgICAgICAgICAgICAgPGJvb3N0OjppbnRydXNpdmU6OmJzdGJhc2VfaGFjazxib29zdDo6aW50cnVzaXZlOjpiaHRyYWl0czxib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjp0cmVlX25vZGU8c3RkOjpwYWlyPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QsIGRpcmVjdG9yeT4sIHZvaWQqLCAoYm9vc3Q6OmNvbnRhaW5lcjo6dHJlZV90eXBlX2VudW0pMCwgdHJ1ZT4sIGJvb3N0OjppbnRydXNpdmU6OnJidHJlZV9ub2RlX3RyYWl0czx2b2lkKiwgdHJ1ZT4sIChib29zdDo6aW50cnVzaXZlOjpsaW5rX21vZGVfdHlwZSkwLCBib29zdDo6aW50cnVzaXZlOjpkZnRfdGFnLCAzdT4sIGJvb3N0Ojpjb250YWluZXI6OnZhbHVlX3RvX25vZGVfY29tcGFyZTxib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjp0cmVlX25vZGU8c3RkOjpwYWlyPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QsIGRpcmVjdG9yeT4sIHZvaWQqLCAoYm9vc3Q6OmNvbnRhaW5lcjo6dHJlZV90eXBlX2VudW0pMCwgdHJ1ZT4sIGJvb3N0Ojpjb250YWluZXI6OmNvbnRhaW5lcl9kZXRhaWw6OnRyZWVfdmFsdWVfY29tcGFyZTxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+LCBzdGQ6OnBhaXI8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiBjb25zdCwgZGlyZWN0b3J5Piwgc3RkOjpsZXNzPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gPiwgYm9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6c2VsZWN0MXN0PHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCBkaXJlY3Rvcnk+ID4gPiA+LCB0cnVlLCB1bnNpZ25lZCBsb25nLCAoYm9vc3Q6OmludHJ1c2l2ZTo6YWxnb190eXBlcyk1LCB2b2lkPj4gPSB7CiAgICAgICAgICAgICAgICAgIDxib29zdDo6aW50cnVzaXZlOjpkZXRhaWw6OnNpemVfaG9sZGVyPHRydWUsIHVuc2lnbmVkIGxvbmcsIHZvaWQ+PiA9IHsKICAgICAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3RhbnRfdGltZV9zaXplID0gPG9wdGltaXplZCBvdXQ+LCAKICAgICAgICAgICAgICAgICAgICBzaXplXyA9IDUzNTkyNjAxOTE5NDg4CiAgICAgICAgICAgICAgICAgIH0sIAogICAgICAgICAgICAgICAgICA8Ym9vc3Q6OmludHJ1c2l2ZTo6YnN0YmFzZTI8Ym9vc3Q6OmludHJ1c2l2ZTo6Ymh0cmFpdHM8Ym9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6dHJlZV9ub2RlPHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCBkaXJlY3Rvcnk+LCB2b2lkKiwgKGJvb3N0Ojpjb250YWluZXI6OnRyZWVfdHlwZV9lbnVtKTAsIHRydWU+LCBib29zdDo6aW50cnVzaXZlOjpyYnRyZWVfbm9kZV90cmFpdHM8dm9pZCosIHRydWU+LCAoYm9vc3Q6OmludHJ1c2l2ZTo6bGlua19tb2RlX3R5cGUpMCwgYm9vc3Q6OmludHJ1c2l2ZTo6ZGZ0X3RhZywgM3U+LCBib29zdDo6Y29udGFpbmVyOjp2YWx1ZV90b19ub2RlX2NvbXBhcmU8Ym9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6dHJlZV9ub2RlPHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCBkaXJlY3Rvcnk+LCB2b2lkKiwgKGJvb3N0Ojpjb250YWluZXI6OnRyZWVfdHlwZV9lbnVtKTAsIHRydWU+LCBib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjp0cmVlX3ZhbHVlX2NvbXBhcmU8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiwgc3RkOjpwYWlyPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QsIGRpcmVjdG9yeT4sIHN0ZDo6bGVzczxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+ID4sIGJvb3N0Ojpjb250YWluZXI6OmNvbnRhaW5lcl9kZXRhaWw6OnNlbGVjdDFzdDxzdGQ6OnBhaXI8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiBjb25zdCwgZGlyZWN0b3J5PiA+ID4gPiwgKGJvb3N0OjppbnRydXNpdmU6OmFsZ29fdHlwZXMpNSwgdm9pZD4+ID0gewogICAgICAgICAgICAgICAgICAgIDxib29zdDo6aW50cnVzaXZlOjpkZXRhaWw6OmVib19mdW5jdG9yX2hvbGRlcjxib29zdDo6Y29udGFpbmVyOjp2YWx1ZV90b19ub2RlX2NvbXBhcmU8Ym9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6dHJlZV9ub2RlPHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCBkaXJlY3Rvcnk+LCB2b2lkKiwgKGJvb3N0Ojpjb250YWluZXI6OnRyZWVfdHlwZV9lbnVtKTAsIHRydWU+LCBib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjp0cmVlX3ZhbHVlX2NvbXBhcmU8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiwgc3RkOjpwYWlyPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QsIGRpcmVjdG9yeT4sIHN0ZDo6bGVzczxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+ID4sIGJvb3N0Ojpjb250YWluZXI6OmNvbnRhaW5lcl9kZXRhaWw6OnNlbGVjdDFzdDxzdGQ6OnBhaXI8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiBjb25zdCwgZGlyZWN0b3J5PiA+ID4gPiA+PiA9IHsKICAgICAgICAgICAgICAgICAgICAgIDxib29zdDo6aW50cnVzaXZlOjpkZXRhaWw6OmVib19mdW5jdG9yX2hvbGRlcl9pbXBsPGJvb3N0Ojpjb250YWluZXI6OnZhbHVlX3RvX25vZGVfY29tcGFyZTxib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjp0cmVlX25vZGU8c3RkOjpwYWlyPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QsIGRpcmVjdG9yeT4sIHZvaWQqLCAoYm9vc3Q6OmNvbnRhaW5lcjo6dHJlZV90eXBlX2VudW0pMCwgdHJ1ZT4sIGJvb3N0Ojpjb250YWluZXI6OmNvbnRhaW5lcl9kZXRhaWw6OnRyZWVfdmFsdWVfY29tcGFyZTxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+LCBzdGQ6OnBhaXI8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiBjb25zdCwgZGlyZWN0b3J5Piwgc3RkOjpsZXNzPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gPiwgYm9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6c2VsZWN0MXN0PHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCBkaXJlY3Rvcnk+ID4gPiA+LCBmYWxzZT4+ID0gewogICAgICAgICAgICAgICAgICAgICAgICA8Ym9vc3Q6OmNvbnRhaW5lcjo6dmFsdWVfdG9fbm9kZV9jb21wYXJlPGJvb3N0Ojpjb250YWluZXI6OmNvbnRhaW5lcl9kZXRhaWw6OnRyZWVfbm9kZTxzdGQ6OnBhaXI8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiBjb25zdCwgZGlyZWN0b3J5Piwgdm9pZCosIChib29zdDo6Y29udGFpbmVyOjp0cmVlX3R5cGVfZW51bSkwLCB0cnVlPiwgYm9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6dHJlZV92YWx1ZV9jb21wYXJlPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4sIHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCBkaXJlY3Rvcnk+LCBzdGQ6Omxlc3M8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiA+LCBib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjpzZWxlY3Qxc3Q8c3RkOjpwYWlyPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QsIGRpcmVjdG9yeT4gPiA+ID4+ID0gewogICAgICAgICAgICAgICAgICAgICAgICAgIDxib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjp0cmVlX3ZhbHVlX2NvbXBhcmU8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiwgc3RkOjpwYWlyPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QsIGRpcmVjdG9yeT4sIHN0ZDo6bGVzczxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+ID4sIGJvb3N0Ojpjb250YWluZXI6OmNvbnRhaW5lcl9kZXRhaWw6OnNlbGVjdDFzdDxzdGQ6OnBhaXI8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiBjb25zdCwgZGlyZWN0b3J5PiA+ID4+ID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0ZDo6bGVzczxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+ID4+ID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RkOjpiaW5hcnlfZnVuY3Rpb248c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiwgc3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiwgYm9vbD4+ID0gezxObyBkYXRhIGZpZWxkcz59LCA8Tm8gZGF0YSBmaWVsZHM+fSwgPE5vIGRhdGEgZmllbGRzPn0sIDxObyBkYXRhIGZpZWxkcz59LCA8Tm8gZGF0YSBmaWVsZHM+fSwgPE5vIGRhdGEgZmllbGRzPn0sIAogICAgICAgICAgICAgICAgICAgIDxib29zdDo6aW50cnVzaXZlOjpic3RiYXNlMzxib29zdDo6aW50cnVzaXZlOjpiaHRyYWl0czxib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjp0cmVlX25vZGU8c3RkOjpwYWlyPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QsIGRpcmVjdG9yeT4sIHZvaWQqLCAoYm9vc3Q6OmNvbnRhaW5lcjo6dHJlZV90eXBlX2VudW0pMCwgdHJ1ZT4sIGJvb3N0OjppbnRydXNpdmU6OnJidHJlZV9ub2RlX3RyYWl0czx2b2lkKiwgdHJ1ZT4sIChib29zdDo6aW50cnVzaXZlOjpsaW5rX21vZGVfdHlwZSkwLCBib29zdDo6aW50cnVzaXZlOjpkZnRfdGFnLCAzdT4sIChib29zdDo6aW50cnVzaXZlOjphbGdvX3R5cGVzKTUsIHZvaWQ+PiA9IHsKICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyBzYWZlbW9kZV9vcl9hdXRvdW5saW5rID0gPG9wdGltaXplZCBvdXQ+LCAKICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyBzdGF0ZWZ1bF92YWx1ZV90cmFpdHMgPSA8b3B0aW1pemVkIG91dD4sIAogICAgICAgICAgICAgICAgICAgICAgc3RhdGljIGhhc19jb250YWluZXJfZnJvbV9pdGVyYXRvciA9IDxvcHRpbWl6ZWQgb3V0PiwgCiAgICAgICAgICAgICAgICAgICAgICBob2xkZXIgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgIDxib29zdDo6aW50cnVzaXZlOjpiaHRyYWl0czxib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjp0cmVlX25vZGU8c3RkOjpwYWlyPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QsIGRpcmVjdG9yeT4sIHZvaWQqLCAoYm9vc3Q6OmNvbnRhaW5lcjo6dHJlZV90eXBlX2VudW0pMCwgdHJ1ZT4sIGJvb3N0OjppbnRydXNpdmU6OnJidHJlZV9ub2RlX3RyYWl0czx2b2lkKiwgdHJ1ZT4sIChib29zdDo6aW50cnVzaXZlOjpsaW5rX21vZGVfdHlwZSkwLCBib29zdDo6aW50cnVzaXZlOjpkZnRfdGFnLCAzdT4+ID0gewogICAgICAgICAgICAgICAgICAgICAgICAgIDxib29zdDo6aW50cnVzaXZlOjpiaHRyYWl0c19iYXNlPGJvb3N0Ojpjb250YWluZXI6OmNvbnRhaW5lcl9kZXRhaWw6OnRyZWVfbm9kZTxzdGQ6OnBhaXI8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiBjb25zdCwgZGlyZWN0b3J5Piwgdm9pZCosIChib29zdDo6Y29udGFpbmVyOjp0cmVlX3R5cGVfZW51bSkwLCB0cnVlPiwgYm9vc3Q6OmludHJ1c2l2ZTo6Y29tcGFjdF9yYnRyZWVfbm9kZTx2b2lkKj4qLCBib29zdDo6aW50cnVzaXZlOjpkZnRfdGFnLCAzdT4+ID0gezxObyBkYXRhIGZpZWxkcz59LCAKICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1iZXJzIG9mIGJvb3N0OjppbnRydXNpdmU6OmJodHJhaXRzPGJvb3N0Ojpjb250YWluZXI6OmNvbnRhaW5lcl9kZXRhaWw6OnRyZWVfbm9kZTxzdGQ6OnBhaXI8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiBjb25zdCwgZGlyZWN0b3J5Piwgdm9pZCosIChib29zdDo6Y29udGFpbmVyOjp0cmVlX3R5cGVfZW51bSkwLCB0cnVlPiwgYm9vc3Q6OmludHJ1c2l2ZTo6cmJ0cmVlX25vZGVfdHJhaXRzPHZvaWQqLCB0cnVlPiwgKGJvb3N0OjppbnRydXNpdmU6OmxpbmtfbW9kZV90eXBlKTAsIGJvb3N0OjppbnRydXNpdmU6OmRmdF90YWcsIDN1PjogCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljIGxpbmtfbW9kZSA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgICAgICAgICAgICAgICAgICB9LCAKICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmVycyBvZiBib29zdDo6aW50cnVzaXZlOjpic3RiYXNlMzxib29zdDo6aW50cnVzaXZlOjpiaHRyYWl0czxib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjp0cmVlX25vZGU8c3RkOjpwYWlyPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QsIGRpcmVjdG9yeT4sIHZvaWQqLCAoYm9vc3Q6OmNvbnRhaW5lcjo6dHJlZV90eXBlX2VudW0pMCwgdHJ1ZT4sIGJvb3N0OjppbnRydXNpdmU6OnJidHJlZV9ub2RlX3RyYWl0czx2b2lkKiwgdHJ1ZT4sIChib29zdDo6aW50cnVzaXZlOjpsaW5rX21vZGVfdHlwZSkwLCBib29zdDo6aW50cnVzaXZlOjpkZnRfdGFnLCAzdT4sIChib29zdDo6aW50cnVzaXZlOjphbGdvX3R5cGVzKTUsIHZvaWQ+Ojpob2xkZXJfdDogCiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJvb3N0OjppbnRydXNpdmU6OmNvbXBhY3RfcmJ0cmVlX25vZGU8dm9pZCo+PiA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudF8gPSAweDYxZTgwMDAwMDAwMWJmMDAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdF8gPSAweDg5NDhjMDg1NDhmZmZmZDUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRfID0gMHgyMzM5MmIzZDhiMTM3NGMzCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgPE5vIGRhdGEgZmllbGRzPn0KICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9LCA8Tm8gZGF0YSBmaWVsZHM+fSwgPE5vIGRhdGEgZmllbGRzPn0sIDxObyBkYXRhIGZpZWxkcz59LCAKICAgICAgICAgICAgICBtZW1iZXJzIG9mIGJvb3N0OjppbnRydXNpdmU6OmJzdHJlZV9pbXBsPGJvb3N0OjppbnRydXNpdmU6OmJodHJhaXRzPGJvb3N0Ojpjb250YWluZXI6OmNvbnRhaW5lcl9kZXRhaWw6OnRyZWVfbm9kZTxzdGQ6OnBhaXI8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiBjb25zdCwgZGlyZWN0b3J5Piwgdm9pZCosIChib29zdDo6Y29udGFpbmVyOjp0cmVlX3R5cGVfZW51bSkwLCB0cnVlPiwgYm9vc3Q6OmludHJ1c2l2ZTo6cmJ0cmVlX25vZGVfdHJhaXRzPHZvaWQqLCB0cnVlPiwgKGJvb3N0OjppbnRydXNpdmU6OmxpbmtfbW9kZV90eXBlKTAsIGJvb3N0OjppbnRydXNpdmU6OmRmdF90YWcsIDN1PiwgYm9vc3Q6OmNvbnRhaW5lcjo6dmFsdWVfdG9fbm9kZV9jb21wYXJlPGJvb3N0Ojpjb250YWluZXI6OmNvbnRhaW5lcl9kZXRhaWw6OnRyZWVfbm9kZTxzdGQ6OnBhaXI8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiBjb25zdCwgZGlyZWN0b3J5Piwgdm9pZCosIChib29zdDo6Y29udGFpbmVyOjp0cmVlX3R5cGVfZW51bSkwLCB0cnVlPiwgYm9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6dHJlZV92YWx1ZV9jb21wYXJlPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4sIHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCBkaXJlY3Rvcnk+LCBzdGQ6Omxlc3M8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiA+LCBib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjpzZWxlY3Qxc3Q8c3RkOjpwYWlyPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QsIGRpcmVjdG9yeT4gPiA+ID4sIHVuc2lnbmVkIGxvbmcsIHRydWUsIChib29zdDo6aW50cnVzaXZlOjphbGdvX3R5cGVzKTUsIHZvaWQ+OiAKICAgICAgICAgICAgICBzdGF0aWMgY29uc3RhbnRfdGltZV9zaXplID0gdHJ1ZSwgCiAgICAgICAgICAgICAgc3RhdGljIHN0YXRlZnVsX3ZhbHVlX3RyYWl0cyA9IDxvcHRpbWl6ZWQgb3V0PiwgCiAgICAgICAgICAgICAgc3RhdGljIHNhZmVtb2RlX29yX2F1dG91bmxpbmsgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICAgICAgfSwgCiAgICAgICAgICAgIG1lbWJlcnMgb2YgYm9vc3Q6OmludHJ1c2l2ZTo6cmJ0cmVlX2ltcGw8Ym9vc3Q6OmludHJ1c2l2ZTo6Ymh0cmFpdHM8Ym9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6dHJlZV9ub2RlPHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCBkaXJlY3Rvcnk+LCB2b2lkKiwgKGJvb3N0Ojpjb250YWluZXI6OnRyZWVfdHlwZV9lbnVtKTAsIHRydWU+LCBib29zdDo6aW50cnVzaXZlOjpyYnRyZWVfbm9kZV90cmFpdHM8dm9pZCosIHRydWU+LCAoYm9vc3Q6OmludHJ1c2l2ZTo6bGlua19tb2RlX3R5cGUpMCwgYm9vc3Q6OmludHJ1c2l2ZTo6ZGZ0X3RhZywgM3U+LCBib29zdDo6Y29udGFpbmVyOjp2YWx1ZV90b19ub2RlX2NvbXBhcmU8Ym9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6dHJlZV9ub2RlPHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCBkaXJlY3Rvcnk+LCB2b2lkKiwgKGJvb3N0Ojpjb250YWluZXI6OnRyZWVfdHlwZV9lbnVtKTAsIHRydWU+LCBib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjp0cmVlX3ZhbHVlX2NvbXBhcmU8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiwgc3RkOjpwYWlyPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QsIGRpcmVjdG9yeT4sIHN0ZDo6bGVzczxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+ID4sIGJvb3N0Ojpjb250YWluZXI6OmNvbnRhaW5lcl9kZXRhaWw6OnNlbGVjdDFzdDxzdGQ6OnBhaXI8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiBjb25zdCwgZGlyZWN0b3J5PiA+ID4gPiwgdW5zaWduZWQgbG9uZywgdHJ1ZSwgdm9pZD46IAogICAgICAgICAgICBzdGF0aWMgY29uc3RhbnRfdGltZV9zaXplID0gdHJ1ZQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwgPE5vIGRhdGEgZmllbGRzPn0sIDxObyBkYXRhIGZpZWxkcz59LCAKICBmaWxlcyA9IHsKICAgIDxib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjp0cmVlPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4sIHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCB1bnNpZ25lZCBsb25nPiwgYm9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6c2VsZWN0MXN0PHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCB1bnNpZ25lZCBsb25nPiA+LCBzdGQ6Omxlc3M8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiA+LCBib29zdDo6Y29udGFpbmVyOjpuZXdfYWxsb2NhdG9yPHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCB1bnNpZ25lZCBsb25nPiA+LCBib29zdDo6Y29udGFpbmVyOjp0cmVlX29wdDwoYm9vc3Q6OmNvbnRhaW5lcjo6dHJlZV90eXBlX2VudW0pMCwgdHJ1ZT4gPj4gPSB7CiAgICAgIDxib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjpub2RlX2FsbG9jX2hvbGRlcjxib29zdDo6Y29udGFpbmVyOjpuZXdfYWxsb2NhdG9yPHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCB1bnNpZ25lZCBsb25nPiA+LCBib29zdDo6aW50cnVzaXZlOjpyYnRyZWVfaW1wbDxib29zdDo6aW50cnVzaXZlOjpiaHRyYWl0czxib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjp0cmVlX25vZGU8c3RkOjpwYWlyPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QsIHVuc2lnbmVkIGxvbmc+LCB2b2lkKiwgKGJvb3N0Ojpjb250YWluZXI6OnRyZWVfdHlwZV9lbnVtKTAsIHRydWU+LCBib29zdDo6aW50cnVzaXZlOjpyYnRyZWVfbm9kZV90cmFpdHM8dm9pZCosIHRydWU+LCAoYm9vc3Q6OmludHJ1c2l2ZTo6bGlua19tb2RlX3R5cGUpMCwgYm9vc3Q6OmludHJ1c2l2ZTo6ZGZ0X3RhZywgM3U+LCBib29zdDo6Y29udGFpbmVyOjp2YWx1ZV90b19ub2RlX2NvbXBhcmU8Ym9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6dHJlZV9ub2RlPHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCB1bnNpZ25lZCBsb25nPiwgdm9pZCosIChib29zdDo6Y29udGFpbmVyOjp0cmVlX3R5cGVfZW51bSkwLCB0cnVlPiwgYm9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6dHJlZV92YWx1ZV9jb21wYXJlPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4sIHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCB1bnNpZ25lZCBsb25nPiwgc3RkOjpsZXNzPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gPiwgYm9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6c2VsZWN0MXN0PHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCB1bnNpZ25lZCBsb25nPiA+ID4gPiwgdW5zaWduZWQgbG9uZywgdHJ1ZSwgdm9pZD4gPj4gPSB7CiAgICAgICAgbWVtYmVyc18gPSB7CiAgICAgICAgICA8Ym9vc3Q6OmNvbnRhaW5lcjo6bmV3X2FsbG9jYXRvcjxib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjp0cmVlX25vZGU8c3RkOjpwYWlyPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QsIHVuc2lnbmVkIGxvbmc+LCB2b2lkKiwgKGJvb3N0Ojpjb250YWluZXI6OnRyZWVfdHlwZV9lbnVtKTAsIHRydWU+ID4+ID0gezxObyBkYXRhIGZpZWxkcz59LCAKICAgICAgICAgIG1lbWJlcnMgb2YgYm9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6bm9kZV9hbGxvY19ob2xkZXI8Ym9vc3Q6OmNvbnRhaW5lcjo6bmV3X2FsbG9jYXRvcjxzdGQ6OnBhaXI8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiBjb25zdCwgdW5zaWduZWQgbG9uZz4gPiwgYm9vc3Q6OmludHJ1c2l2ZTo6cmJ0cmVlX2ltcGw8Ym9vc3Q6OmludHJ1c2l2ZTo6Ymh0cmFpdHM8Ym9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6dHJlZV9ub2RlPHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCB1bnNpZ25lZCBsb25nPiwgdm9pZCosIChib29zdDo6Y29udGFpbmVyOjp0cmVlX3R5cGVfZW51bSkwLCB0cnVlPiwgYm9vc3Q6OmludHJ1c2l2ZTo6cmJ0cmVlX25vZGVfdHJhaXRzPHZvaWQqLCB0cnVlPiwgKGJvb3N0OjppbnRydXNpdmU6OmxpbmtfbW9kZV90eXBlKTAsIGJvb3N0OjppbnRydXNpdmU6OmRmdF90YWcsIDN1PiwgYm9vc3Q6OmNvbnRhaW5lcjo6dmFsdWVfdG9fbm9kZV9jb21wYXJlPGJvb3N0Ojpjb250YWluZXI6OmNvbnRhaW5lcl9kZXRhaWw6OnRyZWVfbm9kZTxzdGQ6OnBhaXI8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiBjb25zdCwgdW5zaWduZWQgbG9uZz4sIHZvaWQqLCAoYm9vc3Q6OmNvbnRhaW5lcjo6dHJlZV90eXBlX2VudW0pMCwgdHJ1ZT4sIGJvb3N0Ojpjb250YWluZXI6OmNvbnRhaW5lcl9kZXRhaWw6OnRyZWVfdmFsdWVfY29tcGFyZTxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+LCBzdGQ6OnBhaXI8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiBjb25zdCwgdW5zaWduZWQgbG9uZz4sIHN0ZDo6bGVzczxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+ID4sIGJvb3N0Ojpjb250YWluZXI6OmNvbnRhaW5lcl9kZXRhaWw6OnNlbGVjdDFzdDxzdGQ6OnBhaXI8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiBjb25zdCwgdW5zaWduZWQgbG9uZz4gPiA+ID4sIHVuc2lnbmVkIGxvbmcsIHRydWUsIHZvaWQ+ID46Om1lbWJlcnNfaG9sZGVyOiAKICAgICAgICAgIG1faWNvbnQgPSB7CiAgICAgICAgICAgIDxib29zdDo6aW50cnVzaXZlOjpic3RyZWVfaW1wbDxib29zdDo6aW50cnVzaXZlOjpiaHRyYWl0czxib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjp0cmVlX25vZGU8c3RkOjpwYWlyPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QsIHVuc2lnbmVkIGxvbmc+LCB2b2lkKiwgKGJvb3N0Ojpjb250YWluZXI6OnRyZWVfdHlwZV9lbnVtKTAsIHRydWU+LCBib29zdDo6aW50cnVzaXZlOjpyYnRyZWVfbm9kZV90cmFpdHM8dm9pZCosIHRydWU+LCAoYm9vc3Q6OmludHJ1c2l2ZTo6bGlua19tb2RlX3R5cGUpMCwgYm9vc3Q6OmludHJ1c2l2ZTo6ZGZ0X3RhZywgM3U+LCBib29zdDo6Y29udGFpbmVyOjp2YWx1ZV90b19ub2RlX2NvbXBhcmU8Ym9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6dHJlZV9ub2RlPHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCB1bnNpZ25lZCBsb25nPiwgdm9pZCosIChib29zdDo6Y29udGFpbmVyOjp0cmVlX3R5cGVfZW51bSkwLCB0cnVlPiwgYm9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6dHJlZV92YWx1ZV9jb21wYXJlPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4sIHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCB1bnNpZ25lZCBsb25nPiwgc3RkOjpsZXNzPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gPiwgYm9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6c2VsZWN0MXN0PHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCB1bnNpZ25lZCBsb25nPiA+ID4gPiwgdW5zaWduZWQgbG9uZywgdHJ1ZSwgKGJvb3N0OjppbnRydXNpdmU6OmFsZ29fdHlwZXMpNSwgdm9pZD4+ID0gewogICAgICAgICAgICAgIDxib29zdDo6aW50cnVzaXZlOjpic3RiYXNlPGJvb3N0OjppbnRydXNpdmU6OmJodHJhaXRzPGJvb3N0Ojpjb250YWluZXI6OmNvbnRhaW5lcl9kZXRhaWw6OnRyZWVfbm9kZTxzdGQ6OnBhaXI8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiBjb25zdCwgdW5zaWduZWQgbG9uZz4sIHZvaWQqLCAoYm9vc3Q6OmNvbnRhaW5lcjo6dHJlZV90eXBlX2VudW0pMCwgdHJ1ZT4sIGJvb3N0OjppbnRydXNpdmU6OnJidHJlZV9ub2RlX3RyYWl0czx2b2lkKiwgdHJ1ZT4sIChib29zdDo6aW50cnVzaXZlOjpsaW5rX21vZGVfdHlwZSkwLCBib29zdDo6aW50cnVzaXZlOjpkZnRfdGFnLCAzdT4sIGJvb3N0Ojpjb250YWluZXI6OnZhbHVlX3RvX25vZGVfY29tcGFyZTxib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjp0cmVlX25vZGU8c3RkOjpwYWlyPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QsIHVuc2lnbmVkIGxvbmc+LCB2b2lkKiwgKGJvb3N0Ojpjb250YWluZXI6OnRyZWVfdHlwZV9lbnVtKTAsIHRydWU+LCBib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjp0cmVlX3ZhbHVlX2NvbXBhcmU8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiwgc3RkOjpwYWlyPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QsIHVuc2lnbmVkIGxvbmc+LCBzdGQ6Omxlc3M8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiA+LCBib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjpzZWxlY3Qxc3Q8c3RkOjpwYWlyPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QsIHVuc2lnbmVkIGxvbmc+ID4gPiA+LCB0cnVlLCB1bnNpZ25lZCBsb25nLCAoYm9vc3Q6OmludHJ1c2l2ZTo6YWxnb190eXBlcyk1LCB2b2lkPj4gPSB7CiAgICAgICAgICAgICAgICA8Ym9vc3Q6OmludHJ1c2l2ZTo6YnN0YmFzZV9oYWNrPGJvb3N0OjppbnRydXNpdmU6OmJodHJhaXRzPGJvb3N0Ojpjb250YWluZXI6OmNvbnRhaW5lcl9kZXRhaWw6OnRyZWVfbm9kZTxzdGQ6OnBhaXI8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiBjb25zdCwgdW5zaWduZWQgbG9uZz4sIHZvaWQqLCAoYm9vc3Q6OmNvbnRhaW5lcjo6dHJlZV90eXBlX2VudW0pMCwgdHJ1ZT4sIGJvb3N0OjppbnRydXNpdmU6OnJidHJlZV9ub2RlX3RyYWl0czx2b2lkKiwgdHJ1ZT4sIChib29zdDo6aW50cnVzaXZlOjpsaW5rX21vZGVfdHlwZSkwLCBib29zdDo6aW50cnVzaXZlOjpkZnRfdGFnLCAzdT4sIGJvb3N0Ojpjb250YWluZXI6OnZhbHVlX3RvX25vZGVfY29tcGFyZTxib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjp0cmVlX25vZGU8c3RkOjpwYWlyPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QsIHVuc2lnbmVkIGxvbmc+LCB2b2lkKiwgKGJvb3N0Ojpjb250YWluZXI6OnRyZWVfdHlwZV9lbnVtKTAsIHRydWU+LCBib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjp0cmVlX3ZhbHVlX2NvbXBhcmU8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiwgc3RkOjpwYWlyPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QsIHVuc2lnbmVkIGxvbmc+LCBzdGQ6Omxlc3M8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiA+LCBib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjpzZWxlY3Qxc3Q8c3RkOjpwYWlyPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QsIHVuc2lnbmVkIGxvbmc+ID4gPiA+LCB0cnVlLCB1bnNpZ25lZCBsb25nLCAoYm9vc3Q6OmludHJ1c2l2ZTo6YWxnb190eXBlcyk1LCB2b2lkPj4gPSB7CiAgICAgICAgICAgICAgICAgIDxib29zdDo6aW50cnVzaXZlOjpkZXRhaWw6OnNpemVfaG9sZGVyPHRydWUsIHVuc2lnbmVkIGxvbmcsIHZvaWQ+PiA9IHsKICAgICAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3RhbnRfdGltZV9zaXplID0gPG9wdGltaXplZCBvdXQ+LCAKICAgICAgICAgICAgICAgICAgICBzaXplXyA9IDE4NDM0Mjg0MzA4MTk1MjY0NTEyCiAgICAgICAgICAgICAgICAgIH0sIAogICAgICAgICAgICAgICAgICA8Ym9vc3Q6OmludHJ1c2l2ZTo6YnN0YmFzZTI8Ym9vc3Q6OmludHJ1c2l2ZTo6Ymh0cmFpdHM8Ym9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6dHJlZV9ub2RlPHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCB1bnNpZ25lZCBsb25nPiwgdm9pZCosIChib29zdDo6Y29udGFpbmVyOjp0cmVlX3R5cGVfZW51bSkwLCB0cnVlPiwgYm9vc3Q6OmludHJ1c2l2ZTo6cmJ0cmVlX25vZGVfdHJhaXRzPHZvaWQqLCB0cnVlPiwgKGJvb3N0OjppbnRydXNpdmU6OmxpbmtfbW9kZV90eXBlKTAsIGJvb3N0OjppbnRydXNpdmU6OmRmdF90YWcsIDN1PiwgYm9vc3Q6OmNvbnRhaW5lcjo6dmFsdWVfdG9fbm9kZV9jb21wYXJlPGJvb3N0Ojpjb250YWluZXI6OmNvbnRhaW5lcl9kZXRhaWw6OnRyZWVfbm9kZTxzdGQ6OnBhaXI8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiBjb25zdCwgdW5zaWduZWQgbG9uZz4sIHZvaWQqLCAoYm9vc3Q6OmNvbnRhaW5lcjo6dHJlZV90eXBlX2VudW0pMCwgdHJ1ZT4sIGJvb3N0Ojpjb250YWluZXI6OmNvbnRhaW5lcl9kZXRhaWw6OnRyZWVfdmFsdWVfY29tcGFyZTxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+LCBzdGQ6OnBhaXI8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiBjb25zdCwgdW5zaWduZWQgbG9uZz4sIHN0ZDo6bGVzczxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+ID4sIGJvb3N0Ojpjb250YWluZXI6OmNvbnRhaW5lcl9kZXRhaWw6OnNlbGVjdDFzdDxzdGQ6OnBhaXI8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiBjb25zdCwgdW5zaWduZWQgbG9uZz4gPiA+ID4sIChib29zdDo6aW50cnVzaXZlOjphbGdvX3R5cGVzKTUsIHZvaWQ+PiA9IHsKICAgICAgICAgICAgICAgICAgICA8Ym9vc3Q6OmludHJ1c2l2ZTo6ZGV0YWlsOjplYm9fZnVuY3Rvcl9ob2xkZXI8Ym9vc3Q6OmNvbnRhaW5lcjo6dmFsdWVfdG9fbm9kZV9jb21wYXJlPGJvb3N0Ojpjb250YWluZXI6OmNvbnRhaW5lcl9kZXRhaWw6OnRyZWVfbm9kZTxzdGQ6OnBhaXI8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiBjb25zdCwgdW5zaWduZWQgbG9uZz4sIHZvaWQqLCAoYm9vc3Q6OmNvbnRhaW5lcjo6dHJlZV90eXBlX2VudW0pMCwgdHJ1ZT4sIGJvb3N0Ojpjb250YWluZXI6OmNvbnRhaW5lcl9kZXRhaWw6OnRyZWVfdmFsdWVfY29tcGFyZTxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+LCBzdGQ6OnBhaXI8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiBjb25zdCwgdW5zaWduZWQgbG9uZz4sIHN0ZDo6bGVzczxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+ID4sIGJvb3N0Ojpjb250YWluZXI6OmNvbnRhaW5lcl9kZXRhaWw6OnNlbGVjdDFzdDxzdGQ6OnBhaXI8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiBjb25zdCwgdW5zaWduZWQgbG9uZz4gPiA+ID4gPj4gPSB7CiAgICAgICAgICAgICAgICAgICAgICA8Ym9vc3Q6OmludHJ1c2l2ZTo6ZGV0YWlsOjplYm9fZnVuY3Rvcl9ob2xkZXJfaW1wbDxib29zdDo6Y29udGFpbmVyOjp2YWx1ZV90b19ub2RlX2NvbXBhcmU8Ym9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6dHJlZV9ub2RlPHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCB1bnNpZ25lZCBsb25nPiwgdm9pZCosIChib29zdDo6Y29udGFpbmVyOjp0cmVlX3R5cGVfZW51bSkwLCB0cnVlPiwgYm9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6dHJlZV92YWx1ZV9jb21wYXJlPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4sIHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCB1bnNpZ25lZCBsb25nPiwgc3RkOjpsZXNzPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gPiwgYm9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6c2VsZWN0MXN0PHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCB1bnNpZ25lZCBsb25nPiA+ID4gPiwgZmFsc2U+PiA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgPGJvb3N0Ojpjb250YWluZXI6OnZhbHVlX3RvX25vZGVfY29tcGFyZTxib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjp0cmVlX25vZGU8c3RkOjpwYWlyPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QsIHVuc2lnbmVkIGxvbmc+LCB2b2lkKiwgKGJvb3N0Ojpjb250YWluZXI6OnRyZWVfdHlwZV9lbnVtKTAsIHRydWU+LCBib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjp0cmVlX3ZhbHVlX2NvbXBhcmU8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiwgc3RkOjpwYWlyPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QsIHVuc2lnbmVkIGxvbmc+LCBzdGQ6Omxlc3M8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiA+LCBib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjpzZWxlY3Qxc3Q8c3RkOjpwYWlyPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QsIHVuc2lnbmVkIGxvbmc+ID4gPiA+PiA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICA8Ym9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6dHJlZV92YWx1ZV9jb21wYXJlPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4sIHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCB1bnNpZ25lZCBsb25nPiwgc3RkOjpsZXNzPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gPiwgYm9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6c2VsZWN0MXN0PHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCB1bnNpZ25lZCBsb25nPiA+ID4+ID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0ZDo6bGVzczxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+ID4+ID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RkOjpiaW5hcnlfZnVuY3Rpb248c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiwgc3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiwgYm9vbD4+ID0gezxObyBkYXRhIGZpZWxkcz59LCA8Tm8gZGF0YSBmaWVsZHM+fSwgPE5vIGRhdGEgZmllbGRzPn0sIDxObyBkYXRhIGZpZWxkcz59LCA8Tm8gZGF0YSBmaWVsZHM+fSwgPE5vIGRhdGEgZmllbGRzPn0sIAogICAgICAgICAgICAgICAgICAgIDxib29zdDo6aW50cnVzaXZlOjpic3RiYXNlMzxib29zdDo6aW50cnVzaXZlOjpiaHRyYWl0czxib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjp0cmVlX25vZGU8c3RkOjpwYWlyPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QsIHVuc2lnbmVkIGxvbmc+LCB2b2lkKiwgKGJvb3N0Ojpjb250YWluZXI6OnRyZWVfdHlwZV9lbnVtKTAsIHRydWU+LCBib29zdDo6aW50cnVzaXZlOjpyYnRyZWVfbm9kZV90cmFpdHM8dm9pZCosIHRydWU+LCAoYm9vc3Q6OmludHJ1c2l2ZTo6bGlua19tb2RlX3R5cGUpMCwgYm9vc3Q6OmludHJ1c2l2ZTo6ZGZ0X3RhZywgM3U+LCAoYm9vc3Q6OmludHJ1c2l2ZTo6YWxnb190eXBlcyk1LCB2b2lkPj4gPSB7CiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgc2FmZW1vZGVfb3JfYXV0b3VubGluayA9IDxvcHRpbWl6ZWQgb3V0PiwgCiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgc3RhdGVmdWxfdmFsdWVfdHJhaXRzID0gPG9wdGltaXplZCBvdXQ+LCAKICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyBoYXNfY29udGFpbmVyX2Zyb21faXRlcmF0b3IgPSA8b3B0aW1pemVkIG91dD4sIAogICAgICAgICAgICAgICAgICAgICAgaG9sZGVyID0gewogICAgICAgICAgICAgICAgICAgICAgICA8Ym9vc3Q6OmludHJ1c2l2ZTo6Ymh0cmFpdHM8Ym9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6dHJlZV9ub2RlPHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCB1bnNpZ25lZCBsb25nPiwgdm9pZCosIChib29zdDo6Y29udGFpbmVyOjp0cmVlX3R5cGVfZW51bSkwLCB0cnVlPiwgYm9vc3Q6OmludHJ1c2l2ZTo6cmJ0cmVlX25vZGVfdHJhaXRzPHZvaWQqLCB0cnVlPiwgKGJvb3N0OjppbnRydXNpdmU6OmxpbmtfbW9kZV90eXBlKTAsIGJvb3N0OjppbnRydXNpdmU6OmRmdF90YWcsIDN1Pj4gPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJvb3N0OjppbnRydXNpdmU6OmJodHJhaXRzX2Jhc2U8Ym9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6dHJlZV9ub2RlPHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCB1bnNpZ25lZCBsb25nPiwgdm9pZCosIChib29zdDo6Y29udGFpbmVyOjp0cmVlX3R5cGVfZW51bSkwLCB0cnVlPiwgYm9vc3Q6OmludHJ1c2l2ZTo6Y29tcGFjdF9yYnRyZWVfbm9kZTx2b2lkKj4qLCBib29zdDo6aW50cnVzaXZlOjpkZnRfdGFnLCAzdT4+ID0gezxObyBkYXRhIGZpZWxkcz59LCAKICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1iZXJzIG9mIGJvb3N0OjppbnRydXNpdmU6OmJodHJhaXRzPGJvb3N0Ojpjb250YWluZXI6OmNvbnRhaW5lcl9kZXRhaWw6OnRyZWVfbm9kZTxzdGQ6OnBhaXI8c3RkOjpfX2N4eDExOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPiBjb25zdCwgdW5zaWduZWQgbG9uZz4sIHZvaWQqLCAoYm9vc3Q6OmNvbnRhaW5lcjo6dHJlZV90eXBlX2VudW0pMCwgdHJ1ZT4sIGJvb3N0OjppbnRydXNpdmU6OnJidHJlZV9ub2RlX3RyYWl0czx2b2lkKiwgdHJ1ZT4sIChib29zdDo6aW50cnVzaXZlOjpsaW5rX21vZGVfdHlwZSkwLCBib29zdDo6aW50cnVzaXZlOjpkZnRfdGFnLCAzdT46IAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyBsaW5rX21vZGUgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICAgICAgICAgICAgICAgICAgfSwgCiAgICAgICAgICAgICAgICAgICAgICAgIG1lbWJlcnMgb2YgYm9vc3Q6OmludHJ1c2l2ZTo6YnN0YmFzZTM8Ym9vc3Q6OmludHJ1c2l2ZTo6Ymh0cmFpdHM8Ym9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6dHJlZV9ub2RlPHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCB1bnNpZ25lZCBsb25nPiwgdm9pZCosIChib29zdDo6Y29udGFpbmVyOjp0cmVlX3R5cGVfZW51bSkwLCB0cnVlPiwgYm9vc3Q6OmludHJ1c2l2ZTo6cmJ0cmVlX25vZGVfdHJhaXRzPHZvaWQqLCB0cnVlPiwgKGJvb3N0OjppbnRydXNpdmU6OmxpbmtfbW9kZV90eXBlKTAsIGJvb3N0OjppbnRydXNpdmU6OmRmdF90YWcsIDN1PiwgKGJvb3N0OjppbnRydXNpdmU6OmFsZ29fdHlwZXMpNSwgdm9pZD46OmhvbGRlcl90OiAKICAgICAgICAgICAgICAgICAgICAgICAgcm9vdCA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICA8Ym9vc3Q6OmludHJ1c2l2ZTo6Y29tcGFjdF9yYnRyZWVfbm9kZTx2b2lkKj4+ID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50XyA9IDB4OGI0OGMzNWJkODg5NDhmZiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0XyA9IDB4M2Q4ZDQ4MDAyMzI4MGYwNSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodF8gPSAweDJlYmEwMDAxNjc1MAogICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDxObyBkYXRhIGZpZWxkcz59CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSwgPE5vIGRhdGEgZmllbGRzPn0sIDxObyBkYXRhIGZpZWxkcz59LCA8Tm8gZGF0YSBmaWVsZHM+fSwgCiAgICAgICAgICAgICAgbWVtYmVycyBvZiBib29zdDo6aW50cnVzaXZlOjpic3RyZWVfaW1wbDxib29zdDo6aW50cnVzaXZlOjpiaHRyYWl0czxib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjp0cmVlX25vZGU8c3RkOjpwYWlyPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QsIHVuc2lnbmVkIGxvbmc+LCB2b2lkKiwgKGJvb3N0Ojpjb250YWluZXI6OnRyZWVfdHlwZV9lbnVtKTAsIHRydWU+LCBib29zdDo6aW50cnVzaXZlOjpyYnRyZWVfbm9kZV90cmFpdHM8dm9pZCosIHRydWU+LCAoYm9vc3Q6OmludHJ1c2l2ZTo6bGlua19tb2RlX3R5cGUpMCwgYm9vc3Q6OmludHJ1c2l2ZTo6ZGZ0X3RhZywgM3U+LCBib29zdDo6Y29udGFpbmVyOjp2YWx1ZV90b19ub2RlX2NvbXBhcmU8Ym9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6dHJlZV9ub2RlPHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCB1bnNpZ25lZCBsb25nPiwgdm9pZCosIChib29zdDo6Y29udGFpbmVyOjp0cmVlX3R5cGVfZW51bSkwLCB0cnVlPiwgYm9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6dHJlZV92YWx1ZV9jb21wYXJlPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4sIHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCB1bnNpZ25lZCBsb25nPiwgc3RkOjpsZXNzPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gPiwgYm9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6c2VsZWN0MXN0PHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCB1bnNpZ25lZCBsb25nPiA+ID4gPiwgdW5zaWduZWQgbG9uZywgdHJ1ZSwgKGJvb3N0OjppbnRydXNpdmU6OmFsZ29fdHlwZXMpNSwgdm9pZD46IAogICAgICAgICAgICAgIHN0YXRpYyBjb25zdGFudF90aW1lX3NpemUgPSB0cnVlLCAKICAgICAgICAgICAgICBzdGF0aWMgc3RhdGVmdWxfdmFsdWVfdHJhaXRzID0gPG9wdGltaXplZCBvdXQ+LCAKICAgICAgICAgICAgICBzdGF0aWMgc2FmZW1vZGVfb3JfYXV0b3VubGluayA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgICAgICB9LCAKICAgICAgICAgICAgbWVtYmVycyBvZiBib29zdDo6aW50cnVzaXZlOjpyYnRyZWVfaW1wbDxib29zdDo6aW50cnVzaXZlOjpiaHRyYWl0czxib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWlsOjp0cmVlX25vZGU8c3RkOjpwYWlyPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QsIHVuc2lnbmVkIGxvbmc+LCB2b2lkKiwgKGJvb3N0Ojpjb250YWluZXI6OnRyZWVfdHlwZV9lbnVtKTAsIHRydWU+LCBib29zdDo6aW50cnVzaXZlOjpyYnRyZWVfbm9kZV90cmFpdHM8dm9pZCosIHRydWU+LCAoYm9vc3Q6OmludHJ1c2l2ZTo6bGlua19tb2RlX3R5cGUpMCwgYm9vc3Q6OmludHJ1c2l2ZTo6ZGZ0X3RhZywgM3U+LCBib29zdDo6Y29udGFpbmVyOjp2YWx1ZV90b19ub2RlX2NvbXBhcmU8Ym9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6dHJlZV9ub2RlPHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCB1bnNpZ25lZCBsb25nPiwgdm9pZCosIChib29zdDo6Y29udGFpbmVyOjp0cmVlX3R5cGVfZW51bSkwLCB0cnVlPiwgYm9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6dHJlZV92YWx1ZV9jb21wYXJlPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4sIHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCB1bnNpZ25lZCBsb25nPiwgc3RkOjpsZXNzPHN0ZDo6X19jeHgxMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4gPiwgYm9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFpbDo6c2VsZWN0MXN0PHN0ZDo6cGFpcjxzdGQ6Ol9fY3h4MTE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0LCB1bnNpZ25lZCBsb25nPiA+ID4gPiwgdW5zaWduZWQgbG9uZywgdHJ1ZSwgdm9pZD46IAogICAgICAgICAgICBzdGF0aWMgY29uc3RhbnRfdGltZV9zaXplID0gdHJ1ZQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwgPE5vIGRhdGEgZmllbGRzPn0sIDxObyBkYXRhIGZpZWxkcz59Cn0K