text:
#pragma once

/**
 * F14NodeSet, F14ValueSet, and F14VectorSet
 *
 * F14FastSet conditionally inherits from F14ValueSet or F14VectorSet
 *
 * See F14.md
 *
 * @author Nathan Bronson <ngbronson@fb.com>
 * @author Xiao Shi       <xshi@fb.com>
 */

#include <tuple>

#include <folly/lang/SafeAssert.h>

#include <folly/container/F14Set-fwd.h>
#include <folly/container/detail/F14Policy.h>
#include <folly/container/detail/F14Table.h>

#if !FOLLY_F14_VECTOR_INTRINSICS_AVAILABLE

//////// Compatibility for unsupported platforms (not x86_64 and not aarch64)

#include <unordered_set>

namespace folly {

namespace f14 {
namespace detail {
template <typename K, typename H, typename E, typename A>
class F14BasicSet : public std::unordered_set<K, H, E, A> {
  using Super = std::unordered_set<K, H, E, A>;

 public:
  using typename Super::pointer;
  using typename Super::value_type;

  F14BasicSet() = default;

  using Super::Super;

  //// PUBLIC - F14 Extensions

  // exact for libstdc++, approximate for others
  std::size_t getAllocatedMemorySize() const {
    std::size_t rv = 0;
    visitAllocationClasses(
        [&](std::size_t bytes, std::size_t n) { rv += bytes * n; });
    return rv;
  }

  // exact for libstdc++, approximate for others
  template <typename V>
  void visitAllocationClasses(V&& visitor) const {
    auto bc = this->bucket_count();
    if (bc > 1) {
      visitor(bc * sizeof(pointer), 1);
    }
    if (this->size() > 0) {
      visitor(sizeof(StdNodeReplica<K, value_type, H>), this->size());
    }
  }

  template <typename V>
  void visitContiguousRanges(V&& visitor) const {
    for (value_type const& entry : *this) {
      value_type const* b = std::addressof(entry);
      visitor(b, b + 1);
    }
  }
};
} // namespace detail
} // namespace f14

template <typename Key, typename Hasher, typename KeyEqual, typename Alloc>
class F14NodeSet
    : public f14::detail::F14BasicSet<Key, Hasher, KeyEqual, Alloc> {
  using Super = f14::detail::F14BasicSet<Key, Hasher, KeyEqual, Alloc>;

 public:
  using typename Super::value_type;

  F14NodeSet() = default;

  using Super::Super;

  F14NodeSet& operator=(std::initializer_list<value_type> ilist) {
    Super::operator=(ilist);
    return *this;
  }
};

template <typename Key, typename Hasher, typename KeyEqual, typename Alloc>
class F14ValueSet
    : public f14::detail::F14BasicSet<Key, Hasher, KeyEqual, Alloc> {
  using Super = f14::detail::F14BasicSet<Key, Hasher, KeyEqual, Alloc>;

 public:
  using typename Super::value_type;

  F14ValueSet() : Super() {}

  using Super::Super;

  F14ValueSet& operator=(std::initializer_list<value_type> ilist) {
    Super::operator=(ilist);
    return *this;
  }
};

template <typename Key, typename Hasher, typename KeyEqual, typename Alloc>
class F14VectorSet
    : public f14::detail::F14BasicSet<Key, Hasher, KeyEqual, Alloc> {
  using Super = f14::detail::F14BasicSet<Key, Hasher, KeyEqual, Alloc>;

 public:
  using typename Super::value_type;

  F14VectorSet() = default;

  using Super::Super;

  F14VectorSet& operator=(std::initializer_list<value_type> ilist) {
    Super::operator=(ilist);
    return *this;
  }
};

} // namespace folly

#else // FOLLY_F14_VECTOR_INTRINSICS_AVAILABLE

//////// Common case for supported platforms

namespace folly {
namespace f14 {
namespace detail {

template <typename Policy>
class F14BasicSet {
  template <typename K, typename T>
  using EnableHeterogeneousFind = std::enable_if_t<
      EligibleForHeterogeneousFind<
          typename Policy::Value,
          typename Policy::Hasher,
          typename Policy::KeyEqual,
          K>::value,
      T>;

  template <typename K, typename T>
  using EnableHeterogeneousInsert = std::enable_if_t<
      EligibleForHeterogeneousInsert<
          typename Policy::Value,
          typename Policy::Hasher,
          typename Policy::KeyEqual,
          K>::value,
      T>;

  template <typename K, typename T>
  using EnableHeterogeneousErase = std::enable_if_t<
      EligibleForHeterogeneousFind<
          typename Policy::Value,
          typename Policy::Hasher,
          typename Policy::KeyEqual,
          K>::value &&
          !std::is_same<typename Policy::Iter, remove_cvref_t<K>>::value,
      T>;

 public:
  //// PUBLIC - Member types

  using key_type = typename Policy::Value;
  using value_type = key_type;
  using size_type = std::size_t;
  using difference_type = std::ptrdiff_t;
  using hasher = typename Policy::Hasher;
  using key_equal = typename Policy::KeyEqual;
  using allocator_type = typename Policy::Alloc;
  using reference = value_type&;
  using const_reference = value_type const&;
  using pointer = typename Policy::AllocTraits::pointer;
  using const_pointer = typename Policy::AllocTraits::const_pointer;
  using iterator = typename Policy::Iter;
  using const_iterator = iterator;

 private:
  using ItemIter = typename Policy::ItemIter;

 public:
  //// PUBLIC - Member functions

  F14BasicSet() noexcept(Policy::kDefaultConstructIsNoexcept)
      : F14BasicSet(0) {}

  explicit F14BasicSet(
      std::size_t initialCapacity,
      hasher const& hash = hasher{},
      key_equal const& eq = key_equal{},
      allocator_type const& alloc = allocator_type{})
      : table_{initialCapacity, hash, eq, alloc} {}

  explicit F14BasicSet(std::size_t initialCapacity, allocator_type const& alloc)
      : F14BasicSet(initialCapacity, hasher{}, key_equal{}, alloc) {}

  explicit F14BasicSet(
      std::size_t initialCapacity,
      hasher const& hash,
      allocator_type const& alloc)
      : F14BasicSet(initialCapacity, hash, key_equal{}, alloc) {}

  explicit F14BasicSet(allocator_type const& alloc)
      : F14BasicSet(0, hasher{}, key_equal{}, alloc) {}

  template <typename InputIt>
  F14BasicSet(
      InputIt first,
      InputIt last,
      std::size_t initialCapacity = 0,
      hasher const& hash = hasher{},
      key_equal const& eq = key_equal{},
      allocator_type const& alloc = allocator_type{})
      : table_{initialCapacity, hash, eq, alloc} {
    initialInsert(first, last, initialCapacity);
  }

  template <typename InputIt>
  F14BasicSet(
      InputIt first,
      InputIt last,
      std::size_t initialCapacity,
      allocator_type const& alloc)
      : table_{initialCapacity, hasher{}, key_equal{}, alloc} {
    initialInsert(first, last, initialCapacity);
  }

  template <typename InputIt>
  F14BasicSet(
      InputIt first,
      InputIt last,
      std::size_t initialCapacity,
      hasher const& hash,
      allocator_type const& alloc)
      : table_{initialCapacity, hash, key_equal{}, alloc} {
    initialInsert(first, last, initialCapacity);
  }

  F14BasicSet(F14BasicSet const& rhs) = default;

  F14BasicSet(F14BasicSet const& rhs, allocator_type const& alloc)
      : table_(rhs.table_, alloc) {}

  F14BasicSet(F14BasicSet&& rhs) = default;

  F14BasicSet(F14BasicSet&& rhs, allocator_type const& alloc) noexcept(
      Policy::kAllocIsAlwaysEqual)
      : table_{std::move(rhs.table_), alloc} {}

  F14BasicSet(
      std::initializer_list<value_type> init,
      std::size_t initialCapacity = 0,
      hasher const& hash = hasher{},
      key_equal const& eq = key_equal{},
      allocator_type const& alloc = allocator_type{})
      : table_{initialCapacity, hash, eq, alloc} {
    initialInsert(init.begin(), init.end(), initialCapacity);
  }

  F14BasicSet(
      std::initializer_list<value_type> init,
      std::size_t initialCapacity,
      allocator_type const& alloc)
      : table_{initialCapacity, hasher{}, key_equal{}, alloc} {
    initialInsert(init.begin(), init.end(), initialCapacity);
  }

  F14BasicSet(
      std::initializer_list<value_type> init,
      std::size_t initialCapacity,
      hasher const& hash,
      allocator_type const& alloc)
      : table_{initialCapacity, hash, key_equal{}, alloc} {
    initialInsert(init.begin(), init.end(), initialCapacity);
  }

  F14BasicSet& operator=(F14BasicSet const&) = default;

  F14BasicSet& operator=(F14BasicSet&&) = default;

  F14BasicSet& operator=(std::initializer_list<value_type> ilist) {
    clear();
    bulkInsert(ilist.begin(), ilist.end(), false);
    return *this;
  }

  allocator_type get_allocator() const noexcept {
    return table_.alloc();
  }

  //// PUBLIC - Iterators

  iterator begin() noexcept {
    return cbegin();
  }
  const_iterator begin() const noexcept {
    return cbegin();
  }
  const_iterator cbegin() const noexcept {
    return table_.makeIter(table_.begin());
  }

  iterator end() noexcept {
    return cend();
  }
  const_iterator end() const noexcept {
    return cend();
  }
  const_iterator cend() const noexcept {
    return table_.makeIter(table_.end());
  }

  //// PUBLIC - Capacity

  bool empty() const noexcept {
    return table_.empty();
  }

  std::size_t size() const noexcept {
    return table_.size();
  }

  std::size_t max_size() const noexcept {
    return table_.max_size();
  }

  //// PUBLIC - Modifiers

  void clear() noexcept {
    table_.clear();
  }

  std::pair<iterator, bool> insert(value_type const& value) {
    return emplace(value);
  }

  std::pair<iterator, bool> insert(value_type&& value) {
    return emplace(std::move(value));
  }

  // std::unordered_set's hinted insertion API is misleading.  No
  // implementation I've seen actually uses the hint.  Code restructuring
  // by the caller to use the hinted API is at best unnecessary, and at
  // worst a pessimization.  It is used, however, so we provide it.

  iterator insert(const_iterator /*hint*/, value_type const& value) {
    return insert(value).first;
  }

  iterator insert(const_iterator /*hint*/, value_type&& value) {
    return insert(std::move(value)).first;
  }

  template <typename K>
  EnableHeterogeneousInsert<K, std::pair<iterator, bool>> insert(K&& value) {
    return emplace(std::forward<K>(value));
  }

 private:
  template <class InputIt>
  FOLLY_ALWAYS_INLINE void
  bulkInsert(InputIt first, InputIt last, bool autoReserve) {
    if (autoReserve) {
      table_.reserveForInsert(std::distance(first, last));
    }
    while (first != last) {
      insert(*first);
      ++first;
    }
  }

  template <class InputIt>
  void initialInsert(InputIt first, InputIt last, std::size_t initialCapacity) {
    FOLLY_SAFE_DCHECK(empty() && bucket_count() >= initialCapacity, "");

    // It's possible that there are a lot of duplicates in first..last and
    // so we will oversize ourself.  The common case, however, is that
    // we can avoid a lot of rehashing if we pre-expand.  The behavior
    // is easy to disable at a particular call site by asking for an
    // initialCapacity of 1.
    bool autoReserve =
        std::is_same<
            typename std::iterator_traits<InputIt>::iterator_category,
            std::random_access_iterator_tag>::value &&
        initialCapacity == 0;
    bulkInsert(first, last, autoReserve);
  }

 public:
  template <class InputIt>
  void insert(InputIt first, InputIt last) {
    // Bulk reserve is a heuristic choice, so it can backfire.  We restrict
    // ourself to situations that mimic bulk construction without an
    // explicit initialCapacity.
    bool autoReserve =
        std::is_same<
            typename std::iterator_traits<InputIt>::iterator_category,
            std::random_access_iterator_tag>::value &&
        bucket_count() == 0;
    bulkInsert(first, last, autoReserve);
  }

  void insert(std::initializer_list<value_type> ilist) {
    insert(ilist.begin(), ilist.end());
  }

  template <class... Args>
  std::pair<iterator, bool> emplace(Args&&... args) {
    using K = KeyTypeForEmplace<key_type, hasher, key_equal, Args...>;

    // If args is a single arg that can be emplaced directly (either
    // key_type or a heterogeneous find + conversion to key_type) key will
    // just be a reference to that arg, otherwise this will construct an
    // intermediate key.
    K key(std::forward<Args>(args)...);

    auto rv = table_.tryEmplaceValue(key, std::forward<K>(key));

    return std::make_pair(table_.makeIter(rv.first), rv.second);
  }

  template <class... Args>
  iterator emplace_hint(const_iterator /*hint*/, Args&&... args) {
    return emplace(std::forward<Args>(args)...).first;
  }

  FOLLY_ALWAYS_INLINE iterator erase(const_iterator pos) {
    return eraseInto(pos, [](value_type&&) {});
  }

  iterator erase(const_iterator first, const_iterator last) {
    return eraseInto(first, last, [](value_type&&) {});
  }

  size_type erase(key_type const& key) {
    return eraseInto(key, [](value_type&&) {});
  }

  template <typename K>
  EnableHeterogeneousErase<K, size_type> erase(K const& key) {
    return eraseInto(key, [](value_type&&) {});
  }

  // eraseInto contains the same overloads as erase but provides
  // an additional callback argument which is called with an rvalue
  // reference to the item directly before it is destroyed. This can be
  // used to extract an item out of a F14Set while avoiding a copy.
  template <typename BeforeDestroy>
  FOLLY_ALWAYS_INLINE iterator
  eraseInto(const_iterator pos, BeforeDestroy&& beforeDestroy) {
    auto itemPos = table_.unwrapIter(pos);
    table_.eraseIterInto(itemPos, beforeDestroy);

    // If we are inlined then gcc and clang can optimize away all of the
    // work of ++pos if the caller discards it.
    itemPos.advanceLikelyDead();
    return table_.makeIter(itemPos);
  }

  template <typename BeforeDestroy>
  iterator eraseInto(
      const_iterator first,
      const_iterator last,
      BeforeDestroy&& beforeDestroy) {
    while (first != last) {
      first = eraseInto(first, beforeDestroy);
    }
    return first;
  }

  template <typename BeforeDestroy>
  size_type eraseInto(key_type const& key, BeforeDestroy&& beforeDestroy) {
    return table_.eraseKeyInto(key, beforeDestroy);
  }

  template <typename K, typename BeforeDestroy>
  EnableHeterogeneousErase<K, size_type> eraseInto(
      K const& key,
      BeforeDestroy&& beforeDestroy) {
    return table_.eraseKeyInto(key, beforeDestroy);
  }

  //// PUBLIC - Lookup

  FOLLY_ALWAYS_INLINE std::size_t count(key_type const& key) const {
    return table_.find(key).atEnd() ? 0 : 1;
  }

  template <typename K>
  FOLLY_ALWAYS_INLINE EnableHeterogeneousFind<K, size_type> count(
      K const& key) const {
    return table_.find(key).atEnd() ? 0 : 1;
  }

  // prehash(key) does the work of evaluating hash_function()(key)
  // (including additional bit-mixing for non-avalanching hash functions),
  // wraps the result of that work in a token for later reuse, and
  // begins prefetching of the first steps of looking for key into the
  // local CPU cache.
  //
  // The returned token may be used at any time, may be used more than
  // once, and may be used in other F14 sets and maps.  Tokens are
  // transferrable between any F14 containers (maps and sets) with the
  // same key_type and equal hash_function()s.
  //
  // Hash tokens are not hints -- it is a bug to call any method on this
  // class with a token t and key k where t isn't the result of a call
  // to prehash(k2) with k2 == k.
  F14HashToken prehash(key_type const& key) const {
    return table_.prehash(key);
  }

  template <typename K>
  EnableHeterogeneousFind<K, F14HashToken> prehash(K const& key) const {
    return table_.prehash(key);
  }

  FOLLY_ALWAYS_INLINE iterator find(key_type const& key) {
    return const_cast<F14BasicSet const*>(this)->find(key);
  }

  FOLLY_ALWAYS_INLINE const_iterator find(key_type const& key) const {
    return table_.makeIter(table_.find(key));
  }

  FOLLY_ALWAYS_INLINE iterator
  find(F14HashToken const& token, key_type const& key) {
    return const_cast<F14BasicSet const*>(this)->find(token, key);
  }

  FOLLY_ALWAYS_INLINE const_iterator
  find(F14HashToken const& token, key_type const& key) const {
    return table_.makeIter(table_.find(token, key));
  }

  template <typename K>
  FOLLY_ALWAYS_INLINE EnableHeterogeneousFind<K, iterator> find(K const& key) {
    return const_cast<F14BasicSet const*>(this)->find(key);
  }

  template <typename K>
  FOLLY_ALWAYS_INLINE EnableHeterogeneousFind<K, const_iterator> find(
      K const& key) const {
    return table_.makeIter(table_.find(key));
  }

  template <typename K>
  FOLLY_ALWAYS_INLINE EnableHeterogeneousFind<K, iterator> find(
      F14HashToken const& token,
      K const& key) {
    return const_cast<F14BasicSet const*>(this)->find(token, key);
  }

  template <typename K>
  FOLLY_ALWAYS_INLINE EnableHeterogeneousFind<K, const_iterator> find(
      F14HashToken const& token,
      K const& key) const {
    return table_.makeIter(table_.find(token, key));
  }

  std::pair<iterator, iterator> equal_range(key_type const& key) {
    return equal_range(*this, key);
  }

  std::pair<const_iterator, const_iterator> equal_range(
      key_type const& key) const {
    return equal_range(*this, key);
  }

  template <typename K>
  EnableHeterogeneousFind<K, std::pair<iterator, iterator>> equal_range(
      K const& key) {
    return equal_range(*this, key);
  }

  template <typename K>
  EnableHeterogeneousFind<K, std::pair<const_iterator, const_iterator>>
  equal_range(K const& key) const {
    return equal_range(*this, key);
  }

  //// PUBLIC - Bucket interface

  std::size_t bucket_count() const noexcept {
    return table_.bucket_count();
  }

  std::size_t max_bucket_count() const noexcept {
    return table_.max_bucket_count();
  }

  //// PUBLIC - Hash policy

  float load_factor() const noexcept {
    return table_.load_factor();
  }

  float max_load_factor() const noexcept {
    return table_.max_load_factor();
  }

  void max_load_factor(float v) {
    table_.max_load_factor(v);
  }

  void rehash(std::size_t bucketCapacity) {
    // The standard's rehash() requires understanding the max load factor,
    // which is easy to get wrong.  Since we don't actually allow adjustment
    // of max_load_factor there is no difference.
    reserve(bucketCapacity);
  }

  void reserve(std::size_t capacity) {
    table_.reserve(capacity);
  }

  //// PUBLIC - Observers

  hasher hash_function() const {
    return table_.hasher();
  }

  key_equal key_eq() const {
    return table_.keyEqual();
  }

  //// PUBLIC - F14 Extensions

  // Get memory footprint, not including sizeof(*this).
  std::size_t getAllocatedMemorySize() const {
    return table_.getAllocatedMemorySize();
  }

  // Enumerates classes of allocated memory blocks currently owned
  // by this table, calling visitor(allocationSize, allocationCount).
  // This can be used to get a more accurate indication of memory footprint
  // than getAllocatedMemorySize() if you have some way of computing the
  // internal fragmentation of the allocator, such as JEMalloc's nallocx.
  // The visitor might be called twice with the same allocationSize. The
  // visitor's computation should produce the same result for visitor(8,
  // 2) as for two calls to visitor(8, 1), for example.  The visitor may
  // be called with a zero allocationCount.
  template <typename V>
  void visitAllocationClasses(V&& visitor) const {
    return table_.visitAllocationClasses(visitor);
  }

  // Calls visitor with two value_type const*, b and e, such that every
  // entry in the table is included in exactly one of the ranges [b,e).
  // This can be used to efficiently iterate elements in bulk when crossing
  // an API boundary that supports contiguous blocks of items.
  template <typename V>
  void visitContiguousRanges(V&& visitor) const;

  F14TableStats computeStats() const noexcept {
    return table_.computeStats();
  }

 private:
  template <typename Self, typename K>
  static auto equal_range(Self& self, K const& key) {
    auto first = self.find(key);
    auto last = first;
    if (last != self.end()) {
      ++last;
    }
    return std::make_pair(first, last);
  }

 protected:
  F14Table<Policy> table_;
};

template <typename S>
bool setsEqual(S const& lhs, S const& rhs) {
  if (lhs.size() != rhs.size()) {
    return false;
  }
  for (auto& k : lhs) {
    auto iter = rhs.find(k);
    if (iter == rhs.end()) {
      return false;
    }
    if (!std::is_same<
            typename S::key_equal,
            std::equal_to<typename S::value_type>>::value) {
      // spec says we compare key with == as well as with key_eq()
      if (!(k == *iter)) {
        return false;
      }
    }
  }
  return true;
}
} // namespace detail
} // namespace f14

template <typename Key, typename Hasher, typename KeyEqual, typename Alloc>
class F14ValueSet
    : public f14::detail::F14BasicSet<f14::detail::SetPolicyWithDefaults<
          f14::detail::ValueContainerPolicy,
          Key,
          Hasher,
          KeyEqual,
          Alloc>> {
  using Policy = f14::detail::SetPolicyWithDefaults<
      f14::detail::ValueContainerPolicy,
      Key,
      Hasher,
      KeyEqual,
      Alloc>;
  using Super = f14::detail::F14BasicSet<Policy>;

 public:
  using typename Super::value_type;

  F14ValueSet() = default;

  using Super::Super;

  F14ValueSet& operator=(std::initializer_list<value_type> ilist) {
    Super::operator=(ilist);
    return *this;
  }

  void swap(F14ValueSet& rhs) noexcept(Policy::kSwapIsNoexcept) {
    this->table_.swap(rhs.table_);
  }

  template <typename V>
  void visitContiguousRanges(V&& visitor) const {
    this->table_.visitContiguousItemRanges(std::forward<V>(visitor));
  }
};

template <typename K, typename H, typename E, typename A>
bool operator==(
    F14ValueSet<K, H, E, A> const& lhs,
    F14ValueSet<K, H, E, A> const& rhs) {
  return setsEqual(lhs, rhs);
}

template <typename K, typename H, typename E, typename A>
bool operator!=(
    F14ValueSet<K, H, E, A> const& lhs,
    F14ValueSet<K, H, E, A> const& rhs) {
  return !(lhs == rhs);
}

template <typename Key, typename Hasher, typename KeyEqual, typename Alloc>
class F14NodeSet
    : public f14::detail::F14BasicSet<f14::detail::SetPolicyWithDefaults<
          f14::detail::NodeContainerPolicy,
          Key,
          Hasher,
          KeyEqual,
          Alloc>> {
  using Policy = f14::detail::SetPolicyWithDefaults<
      f14::detail::NodeContainerPolicy,
      Key,
      Hasher,
      KeyEqual,
      Alloc>;
  using Super = f14::detail::F14BasicSet<Policy>;

 public:
  using typename Super::value_type;

  F14NodeSet() = default;

  using Super::Super;

  F14NodeSet& operator=(std::initializer_list<value_type> ilist) {
    Super::operator=(ilist);
    return *this;
  }

  void swap(F14NodeSet& rhs) noexcept(Policy::kSwapIsNoexcept) {
    this->table_.swap(rhs.table_);
  }

  template <typename V>
  void visitContiguousRanges(V&& visitor) const {
    this->table_.visitItems([&](typename Policy::Item ptr) {
      value_type const* b = std::addressof(*ptr);
      visitor(b, b + 1);
    });
  }
};

template <typename K, typename H, typename E, typename A>
bool operator==(
    F14NodeSet<K, H, E, A> const& lhs,
    F14NodeSet<K, H, E, A> const& rhs) {
  return setsEqual(lhs, rhs);
}

template <typename K, typename H, typename E, typename A>
bool operator!=(
    F14NodeSet<K, H, E, A> const& lhs,
    F14NodeSet<K, H, E, A> const& rhs) {
  return !(lhs == rhs);
}

template <typename Key, typename Hasher, typename KeyEqual, typename Alloc>
class F14VectorSet
    : public f14::detail::F14BasicSet<f14::detail::SetPolicyWithDefaults<
          f14::detail::VectorContainerPolicy,
          Key,
          Hasher,
          KeyEqual,
          Alloc>> {
  using Policy = f14::detail::SetPolicyWithDefaults<
      f14::detail::VectorContainerPolicy,
      Key,
      Hasher,
      KeyEqual,
      Alloc>;
  using Super = f14::detail::F14BasicSet<Policy>;

  template <typename K, typename T>
  using EnableHeterogeneousVectorErase = std::enable_if_t<
      f14::detail::EligibleForHeterogeneousFind<
          typename Policy::Value,
          typename Policy::Hasher,
          typename Policy::KeyEqual,
          K>::value &&
          !std::is_same<typename Policy::Iter, remove_cvref_t<K>>::value &&
          !std::is_same<typename Policy::ReverseIter, remove_cvref_t<K>>::value,
      T>;

 public:
  using typename Super::const_iterator;
  using typename Super::iterator;
  using typename Super::key_type;
  using typename Super::value_type;
  using reverse_iterator = typename Policy::ReverseIter;
  using const_reverse_iterator = reverse_iterator;

  F14VectorSet() = default;

  using Super::Super;

  F14VectorSet& operator=(std::initializer_list<value_type> ilist) {
    Super::operator=(ilist);
    return *this;
  }

  void swap(F14VectorSet& rhs) noexcept(Policy::kSwapIsNoexcept) {
    this->table_.swap(rhs.table_);
  }

  // ITERATION ORDER
  //
  // Deterministic iteration order for insert-only workloads is part of
  // F14VectorSet's supported API: iterator is LIFO and reverse_iterator
  // is FIFO.
  //
  // If there have been no calls to erase() then iterator and
  // const_iterator enumerate entries in the opposite of insertion order.
  // begin()->first is the key most recently inserted.  reverse_iterator
  // and reverse_const_iterator, therefore, enumerate in LIFO (insertion)
  // order for insert-only workloads.  Deterministic iteration order is
  // only guaranteed if no keys were removed since the last time the
  // set was empty.  Iteration order is preserved across rehashes and
  // F14VectorSet copies and moves.
  //
  // iterator uses LIFO order so that erasing while iterating with begin()
  // and end() is safe using the erase(it++) idiom, which is supported
  // by std::set and std::unordered_set.  erase(iter) invalidates iter
  // and all iterators before iter in the non-reverse iteration order.
  // Every successful erase invalidates all reverse iterators.

  iterator begin() {
    return cbegin();
  }
  const_iterator begin() const {
    return cbegin();
  }
  const_iterator cbegin() const {
    return this->table_.linearBegin(this->size());
  }

  iterator end() {
    return cend();
  }
  const_iterator end() const {
    return cend();
  }
  const_iterator cend() const {
    return this->table_.linearEnd();
  }

  reverse_iterator rbegin() {
    return this->table_.values_;
  }
  const_reverse_iterator rbegin() const {
    return crbegin();
  }
  const_reverse_iterator crbegin() const {
    return this->table_.values_;
  }

  reverse_iterator rend() {
    return this->table_.values_ + this->table_.size();
  }
  const_reverse_iterator rend() const {
    return crend();
  }
  const_reverse_iterator crend() const {
    return this->table_.values_ + this->table_.size();
  }

  // explicit conversions between iterator and reverse_iterator
  iterator iter(reverse_iterator riter) {
    return this->table_.iter(riter);
  }
  const_iterator iter(const_reverse_iterator riter) const {
    return this->table_.iter(riter);
  }

  reverse_iterator riter(iterator it) {
    return this->table_.riter(it);
  }
  const_reverse_iterator riter(const_iterator it) const {
    return this->table_.riter(it);
  }

 private:
  template <typename BeforeDestroy>
  void eraseUnderlying(
      typename Policy::ItemIter underlying,
      BeforeDestroy&& beforeDestroy) {
    Alloc& a = this->table_.alloc();
    auto values = this->table_.values_;

    // destroy the value and remove the ptr from the base table
    auto index = underlying.item();
    this->table_.eraseIterInto(underlying, beforeDestroy);
    Policy::AllocTraits::destroy(a, std::addressof(values[index]));

    // move the last element in values_ down and fix up the inbound index
    auto tailIndex = this->size();
    if (tailIndex != index) {
      auto tail = this->table_.find(f14::detail::VectorContainerIndexSearch{
          static_cast<uint32_t>(tailIndex)});
      tail.item() = index;
      auto p = std::addressof(values[index]);
      assume(p != nullptr);
      this->table_.transfer(a, std::addressof(values[tailIndex]), p, 1);
    }
  }

  template <typename K, typename BeforeDestroy>
  std::size_t eraseUnderlyingKey(K const& key, BeforeDestroy&& beforeDestroy) {
    auto underlying = this->table_.find(key);
    if (underlying.atEnd()) {
      return 0;
    } else {
      eraseUnderlying(underlying, beforeDestroy);
      return 1;
    }
  }

 public:
  FOLLY_ALWAYS_INLINE iterator erase(const_iterator pos) {
    return eraseInto(pos, [](value_type&&) {});
  }

  iterator erase(const_iterator first, const_iterator last) {
    return eraseInto(first, last, [](value_type&&) {});
  }

  // No erase is provided for reverse_iterator (AKA const_reverse_iterator)
  // to make it harder to shoot yourself in the foot by erasing while
  // reverse-iterating.  You can write that as set.erase(set.iter(riter)).

  std::size_t erase(key_type const& key) {
    return eraseInto(key, [](value_type&&) {});
  }

  template <typename K>
  EnableHeterogeneousVectorErase<K, std::size_t> erase(K const& key) {
    return eraseInto(key, [](value_type&&) {});
  }

  template <typename BeforeDestroy>
  FOLLY_ALWAYS_INLINE iterator
  eraseInto(const_iterator pos, BeforeDestroy&& beforeDestroy) {
    auto underlying = this->table_.find(
        f14::detail::VectorContainerIndexSearch{this->table_.iterToIndex(pos)});
    eraseUnderlying(underlying, beforeDestroy);
    return ++pos;
  }

  template <typename BeforeDestroy>
  iterator eraseInto(
      const_iterator first,
      const_iterator last,
      BeforeDestroy&& beforeDestroy) {
    while (first != last) {
      first = eraseInto(first, beforeDestroy);
    }
    return first;
  }

  template <typename BeforeDestroy>
  std::size_t eraseInto(key_type const& key, BeforeDestroy&& beforeDestroy) {
    return eraseUnderlyingKey(key, beforeDestroy);
  }

  template <typename K, typename BeforeDestroy>
  EnableHeterogeneousVectorErase<K, std::size_t> eraseInto(
      K const& key,
      BeforeDestroy&& beforeDestroy) {
    return eraseUnderlyingKey(key, beforeDestroy);
  }

  template <typename V>
  void visitContiguousRanges(V&& visitor) const {
    auto n = this->table_.size();
    if (n > 0) {
      value_type const* b = std::addressof(this->table_.values_[0]);
      visitor(b, b + n);
    }
  }
};

template <typename K, typename H, typename E, typename A>
bool operator==(
    F14VectorSet<K, H, E, A> const& lhs,
    F14VectorSet<K, H, E, A> const& rhs) {
  return setsEqual(lhs, rhs);
}

template <typename K, typename H, typename E, typename A>
bool operator!=(
    F14VectorSet<K, H, E, A> const& lhs,
    F14VectorSet<K, H, E, A> const& rhs) {
  return !(lhs == rhs);
}
} // namespace folly

#endif // FOLLY_F14_VECTOR_INTRINSICS_AVAILABLE

namespace folly {
template <typename Key, typename Hasher, typename KeyEqual, typename Alloc>
class F14FastSet : public std::conditional_t<
                       sizeof(Key) < 24,
                       F14ValueSet<Key, Hasher, KeyEqual, Alloc>,
                       F14VectorSet<Key, Hasher, KeyEqual, Alloc>> {
  using Super = std::conditional_t<
      sizeof(Key) < 24,
      F14ValueSet<Key, Hasher, KeyEqual, Alloc>,
      F14VectorSet<Key, Hasher, KeyEqual, Alloc>>;

 public:
  using typename Super::value_type;

  F14FastSet() = default;

  using Super::Super;

  F14FastSet& operator=(std::initializer_list<value_type> ilist) {
    Super::operator=(ilist);
    return *this;
  }
};

template <typename K, typename H, typename E, typename A>
void swap(F14ValueSet<K, H, E, A>& lhs, F14ValueSet<K, H, E, A>& rhs) noexcept(
    noexcept(lhs.swap(rhs))) {
  lhs.swap(rhs);
}

template <typename K, typename H, typename E, typename A>
void swap(F14NodeSet<K, H, E, A>& lhs, F14NodeSet<K, H, E, A>& rhs) noexcept(
    noexcept(lhs.swap(rhs))) {
  lhs.swap(rhs);
}

template <typename K, typename H, typename E, typename A>
void swap(
    F14VectorSet<K, H, E, A>& lhs,
    F14VectorSet<K, H, E, A>& rhs) noexcept(noexcept(lhs.swap(rhs))) {
  lhs.swap(rhs);
}

template <typename K, typename H, typename E, typename A>
void swap(F14FastSet<K, H, E, A>& lhs, F14FastSet<K, H, E, A>& rhs) noexcept(
    noexcept(lhs.swap(rhs))) {
  lhs.swap(rhs);
}

} // namespace folly


I don't know if you heard, but we bought a building and moved into our new HQ this week. Oh, you did hear? Cool. Good to know. Well, we can't really help but talk about it — I know I bought a house six months ago and I still find a way to discreetly tell someone every day.
We're wrapping up our first week in the new space, and I can tell you TSC HQ is buzzing with thoughtful housewarming gifts from neighbors new and old and our excitement for newly found elbow room and natural light.
We put together this video to show people what it's like to work for and with The Starr Conspiracy — it's a quick glimpse into our 12 times "Best Places to Work" winning culture.
In all seriousness, we have received so many welcoming gifts, calls, cards, and emails from our neighbors and friends of TSC. Not to mention comments, tweets, likes, and shares on social for our story about the new building. I can tell you that the agents of The Starr Conspiracy are utterly whelmed and touched.
If you want to send a note to our team, tweet @StarrConspiracy and your message will be shared with everyone here.
Thank you for sharing in our enthusiasm. It's not lost on us.


text:
package com.zimbra.qa.selenium.projects.ajax.tests.mail.mail;

import java.util.List;

import org.testng.annotations.Test;

import com.zimbra.qa.selenium.framework.items.MailItem;
import com.zimbra.qa.selenium.framework.ui.*;
import com.zimbra.qa.selenium.framework.util.*;
import com.zimbra.qa.selenium.projects.ajax.core.PrefGroupMailByMessageTest;
import com.zimbra.qa.selenium.projects.ajax.ui.mail.DisplayMail;
import com.zimbra.qa.selenium.projects.ajax.ui.mail.DisplayMail.Field;

public class GetMail extends PrefGroupMailByMessageTest {

	int pollIntervalSeconds = 60;

	public GetMail() {
		logger.info("New "+ GetMail.class.getCanonicalName());

		super.startingAccountPreferences.put("zimbraPrefMailPollingInterval", "" + pollIntervalSeconds);

	}

	@Test(	description = "Receive a mail",
			groups = { "smoke" })
	public void GetMail_01() throws HarnessException {

		// Create the message data to be sent
		String subject = "subject" + ZimbraSeleniumProperties.getUniqueString();

		// Send the message from AccountA to the ZWC user
		ZimbraAccount.AccountA().soapSend(
					"<SendMsgRequest xmlns='urn:zimbraMail'>" +
						"<m>" +
							"<e t='t' a='"+ app.zGetActiveAccount().EmailAddress +"'/>" +
							"<su>"+ subject +"</su>" +
							"<mp ct='text/plain'>" +
								"<content>"+ "body" + ZimbraSeleniumProperties.getUniqueString() +"</content>" +
							"</mp>" +
						"</m>" +
					"</SendMsgRequest>");

		MailItem mail = MailItem.importFromSOAP(app.zGetActiveAccount(), "subject:("+ subject +")");

		// Click Get Mail button
		app.zPageMail.zToolbarPressButton(Button.B_GETMAIL);

		// Get all the messages in the inbox
		List<MailItem> messages = app.zPageMail.zListGetMessages();
		ZAssert.assertNotNull(messages, "Verify the message list exists");

		// Make sure the message appears in the list
		MailItem found = null;
		for (MailItem m : messages) {
			logger.info("Subject: looking for "+ subject +" found: "+ m.gSubject);
			if ( mail.dSubject.equals(m.gSubject) ) {
				found = m;
				break;
			}
		}
		ZAssert.assertNotNull(found, "Verify the message is in the inbox");

	}

	@Test(	description = "Receive a text mail - verify mail contents",
			groups = { "smoke" })
	public void GetMail_02() throws HarnessException {

		// Create the message data to be sent
		String subject = "subject" + ZimbraSeleniumProperties.getUniqueString();

		ZimbraAccount.AccountA().soapSend(
					"<SendMsgRequest xmlns='urn:zimbraMail'>" +
						"<m>" +
							"<e t='t' a='"+ app.zGetActiveAccount().EmailAddress +"'/>" +
							"<e t='c' a='"+ ZimbraAccount.AccountB().EmailAddress +"'/>" +
							"<su>"+ subject +"</su>" +
							"<mp ct='text/plain'>" +
								"<content>"+ "body" + ZimbraSeleniumProperties.getUniqueString() +"</content>" +
							"</mp>" +
						"</m>" +
					"</SendMsgRequest>");

		// Get all the SOAP data for later verification
		MailItem mail = MailItem.importFromSOAP(app.zGetActiveAccount(), "subject:("+ subject +")");

		// Click Get Mail button
		app.zPageMail.zToolbarPressButton(Button.B_GETMAIL);

		// Select the message so that it shows in the reading pane
		DisplayMail actual = (DisplayMail) app.zPageMail.zListItem(Action.A_LEFTCLICK, mail.dSubject);

		// Verify the To, From, Subject, Body
		ZAssert.assertEquals(	actual.zGetMailProperty(Field.Subject), mail.dSubject, "Verify the subject matches");
		ZAssert.assertNotNull(	actual.zGetMailProperty(Field.ReceivedDate), "Verify the date is displayed");
		ZAssert.assertNotNull(	actual.zGetMailProperty(Field.ReceivedTime), "Verify the time is displayed");
		ZAssert.assertEquals(	actual.zGetMailProperty(Field.From), ZimbraAccount.AccountA().EmailAddress, "Verify the From matches");
		ZAssert.assertEquals(	actual.zGetMailProperty(Field.Cc), ZimbraAccount.AccountB().EmailAddress, "Verify the Cc matches");
		ZAssert.assertEquals(	actual.zGetMailProperty(Field.To), app.zGetActiveAccount().EmailAddress, "Verify the To matches");

		// The body could contain HTML, even though it is only displaying text (e.g.
 may be present)
		// do a contains, rather than equals.
		ZAssert.assertStringContains(	actual.zGetMailProperty(Field.Body), mail.dBodyText, "Verify the body matches");

	}

	@Test(	description = "Receive an html mail - verify mail contents",
			groups = { "smoke" })
	public void GetMail_03() throws HarnessException {

		// Create the message data to be sent
		String subject = "subject" + ZimbraSeleniumProperties.getUniqueString();
		String bodyText = "text" + ZimbraSeleniumProperties.getUniqueString();
		String bodyHTML = "text bold"+ ZimbraSeleniumProperties.getUniqueString() +" text";
		String contentHTML = XmlStringUtil.escapeXml(
			"" +
				"" +
				""+ bodyHTML +"" +
			"");

		ZimbraAccount.AccountA().soapSend(
					"<SendMsgRequest xmlns='urn:zimbraMail'>" +
						"<m>" +
							"<e t='t' a='"+ app.zGetActiveAccount().EmailAddress +"'/>" +
							"<e t='c' a='"+ ZimbraAccount.AccountB().EmailAddress +"'/>" +
							"<su>"+ subject +"</su>" +
							"<mp ct='multipart/alternative'>" +
								"<mp ct='text/plain'>" +
									"<content>" + bodyText +"</content>" +
								"</mp>" +
								"<mp ct='text/html'>" +
									"<content>"+ contentHTML +"</content>" +
								"</mp>" +
							"</mp>" +
						"</m>" +
					"</SendMsgRequest>");

		MailItem mail = MailItem.importFromSOAP(app.zGetActiveAccount(), "subject:("+ subject +")");

		// Click Get Mail button
		app.zPageMail.zToolbarPressButton(Button.B_GETMAIL);

		// Select the message so that it shows in the reading pane
		DisplayMail actual = (DisplayMail) app.zPageMail.zListItem(Action.A_LEFTCLICK, mail.dSubject);

		// Verify the To, From, Subject, Body
		ZAssert.assertEquals(	actual.zGetMailProperty(Field.Subject), mail.dSubject, "Verify the subject matches");
		ZAssert.assertNotNull(	actual.zGetMailProperty(Field.ReceivedDate), "Verify the date is displayed");
		ZAssert.assertNotNull(	actual.zGetMailProperty(Field.ReceivedTime), "Verify the time is displayed");
		ZAssert.assertEquals(	actual.zGetMailProperty(Field.From), ZimbraAccount.AccountA().EmailAddress, "Verify the From matches");
		ZAssert.assertEquals(	actual.zGetMailProperty(Field.Cc), ZimbraAccount.AccountB().EmailAddress, "Verify the Cc matches");
		ZAssert.assertEquals(	actual.zGetMailProperty(Field.To), app.zGetActiveAccount().EmailAddress, "Verify the To matches");
		ZAssert.assertEquals(	actual.zGetMailProperty(Field.Body), bodyHTML, "Verify the body matches");

	}

	@Test(	description = "Click 'Get Mail' to receive any new messages",
			groups = { "functional" })
	public void GetMail_04() throws HarnessException {

		// Create the message data to be sent
		String subject = "subject" + ZimbraSeleniumProperties.getUniqueString();

		ZimbraAccount.AccountA().soapSend(
					"<SendMsgRequest xmlns='urn:zimbraMail'>" +
						"<m>" +
							"<e t='t' a='"+ app.zGetActiveAccount().EmailAddress +"'/>" +
							"<su>"+ subject +"</su>" +
							"<mp ct='text/plain'>" +
								"<content>content" + ZimbraSeleniumProperties.getUniqueString() +"</content>" +
							"</mp>" +
						"</m>" +
					"</SendMsgRequest>");

		MailItem mail = MailItem.importFromSOAP(app.zGetActiveAccount(), "subject:("+ subject +")");

		// Click Get Mail button
		app.zPageMail.zToolbarPressButton(Button.B_GETMAIL);

		// Get the message list
		List<MailItem> messages = app.zPageMail.zListGetMessages();
		ZAssert.assertNotNull(messages, "Verify the list contains messages");

		MailItem found = null;
		for (MailItem m : messages) {
			if ( mail.dSubject.equals(m.gSubject) ) {
				found = m;
				break;
			}
		}
		ZAssert.assertNotNull(found, "Verify the list contains the new message");

	}

	@Test(	description = "Verify new messages are polled based on the preference setting",
			groups = { "functional" })
	public void GetMail_05() throws HarnessException {

		// Create the message data to be sent
		String subject = "subject" + ZimbraSeleniumProperties.getUniqueString();

		ZimbraAccount.AccountA().soapSend(
					"<SendMsgRequest xmlns='urn:zimbraMail'>" +
						"<m>" +
							"<e t='t' a='"+ app.zGetActiveAccount().EmailAddress +"'/>" +
							"<su>"+ subject +"</su>" +
							"<mp ct='text/plain'>" +
								"<content>content" + ZimbraSeleniumProperties.getUniqueString() +"</content>" +
							"</mp>" +
						"</m>" +
					"</SendMsgRequest>");

		GeneralUtility.syncDesktopToZcsWithSoap(app.zGetActiveAccount());

		MailItem mail = MailItem.importFromSOAP(app.zGetActiveAccount(), "subject:("+ subject +")");

		// Wait for the timeout to expire
		logger.info("waiting for the message to arrive");
		SleepUtil.sleep(1000L * (this.pollIntervalSeconds + 15));

		// Get the message list
		List<MailItem> messages = app.zPageMail.zListGetMessages();
		ZAssert.assertNotNull(messages, "Verify the list contains messages");

		MailItem found = null;
		for (MailItem m : messages) {
			if ( mail.dSubject.equals(m.gSubject) ) {
				found = m;
				break;
			}
		}
		ZAssert.assertNotNull(found, "Verify the list contains the new message");

	}

	@Test(	description = "Type keyboard shortcut (=) for 'Get Mail' to receive any new messages",
			groups = { "functional" })
	public void GetMail_06() throws HarnessException {

		// Create the message data to be sent
		String subject = "subject" + ZimbraSeleniumProperties.getUniqueString();

		ZimbraAccount.AccountA().soapSend(
					"<SendMsgRequest xmlns='urn:zimbraMail'>" +
						"<m>" +
							"<e t='t' a='"+ app.zGetActiveAccount().EmailAddress +"'/>" +
							"<su>"+ subject +"</su>" +
							"<mp ct='text/plain'>" +
								"<content>content" + ZimbraSeleniumProperties.getUniqueString() +"</content>" +
							"</mp>" +
						"</m>" +
					"</SendMsgRequest>");

		MailItem mail = MailItem.importFromSOAP(app.zGetActiveAccount(), "subject:("+ subject +")");

		// Type shortcut
		app.zPageMail.zKeyboardShortcut(Shortcut.S_MAIL_GETMAIL);

		// Get the message list
		List<MailItem> messages = app.zPageMail.zListGetMessages();
		ZAssert.assertNotNull(messages, "Verify the list contains messages");

		MailItem found = null;
		for (MailItem m : messages) {
			if ( mail.dSubject.equals(m.gSubject) ) {
				found = m;
				break;
			}
		}
		ZAssert.assertNotNull(found, "Verify the list contains the new message");

	}

}

redpajama_set_name: RedPajamaGithub


text:
"Build A Better World - JEJ"
A Game Design Project from the G4C Student Challenge
By Jeremiah, Emily, and Jasmine
Middle School Students from Mouse @ Stephen A Halsey JHS 157 Q
In the game Minecraft, most buildings must come from an inspiration. My inspiration was the game and it's features with a small twist of this Earth. Here in this essay, I will inform you about the world I built and its buildings.
The first house is a small one-story condo and it was the first house that was built. It is rumored to be used by the creators who made that world. The condo is powered by redstone and can function without power from the town. My inspiration was a condo in new york where the condos are small and compact. The second house is where Jean lives. It's the white house where the windows are blacked out. Jean is an adventurer and genius. Most of his time spent is outside and away. In his house are many valuable souvenirs in his home. The Third house is where Carson, James, and Lily live. The three of them like free running and built their house based off that, otherwise they are out doing what they like. The third and final house is where John, Serephina, and Kevin live, they are young and are learning under Lily and John.
In the shopping area there is Carson's steak restaurant, where Carson cooks gourmet foods. Next to Carson's restaurant is Ichiban Ramen where many other foods are cooked. The owner Ichiban is the same age as Kevin, John, and Serephina. The ramen place also serves as Ichiban's house, he lives on top of the small restaurant. On the right side of Carson's steak house is the convenience store and clothing shop. The convenience store just opened and it's owned by Carson the business man. Lastly, although not part of the shopping district is the laboratory , that is where Lily and John work where they study animals, the environment and their latest project, is finding out the cure to most viruses.
LORE:
Multi - source - solar - panel (aka M.S.S.P) was a result of a collaboration that was Jean, Lily, and John. Jean helping with the construction of the MSSP. The Multi source solar panel is a solar panel that absorbs sun light during the day and distributes the electricity to the town so that the town has power to work, no fossil fuels are burnt and if they are very little is used.
We have added flip grids to describe our Minecraft world.
It's clever to use Minecraft as a way to explore urban design. I like how your team cared for living spaces, retail and farming, and community spaces. It could have been a nice touch if the video told the story through the eyes of your characters (Jean, Carson, etc.) It looks like you could become city planners or architects some day. You've demonstrated some of the key ingredients - thinking about the needs of the population, and artistically meeting them!
Iltimas Doha 👏 Aluminati at The Emoti-Con Steering Committee — Emoti-Con Judge
I really love how thoughtful the design of your town is. Your town seems very comfortable to live in, with plenty of housing, good education, and plenty of food! I also really like your use of space; how the town feels dense, but then the surround forest is really only used for infrastructure. I would like to hear more about how the design of the town influence the culture of the town, and what kind of culture it is
👏 a Middle School Student from nyc
this seems fun and it looks really good
The design of the Minecraft build looks great!
Patti 👏 a Teacher from Halsey JHS 157 Q
You have created a fantastic world with a lot of thought behind all the details needed for a small city. I like the way you included farming within the city and several places all the citizens can share equally! Great job!
Jakhongir 👏 a Middle School Student from Middle school student
I really liked your world and saw that you guys spend a lot of time decorating and building. I think you did great job and deserved winning
Lorian 👏 a Middle School Student from Queens, Ny
I really liked your world, you guys spend a lot of time decorating and building. You did a wonderful job.
valentina 👏 a Middle School Student
there is a lot of detail in a very small place and it makes it very interesting
Patti 👏 a Teacher from Queens NY
I really like the way you detailed your world with a lot of educational spaces in mind. You have also included monuments to represent the theme of equity which is so important. I like your little shops, especially your Ramen shop! Very cool! Good work!
isabella 👏 a Middle School Student from queens
i loved how you had amazing design and it looks planned out so good.
Adil 👏 a Middle School Student from Queens
Good job it looks like a lot of hard work was put into this.
Janessa 👏 a Middle School Student from United States(nyc)
this was a fantastic world that you created keep going and make a better world
Vivian 👏 a Middle School Student from Queens
Looks like you put a lot of time and effort into your building of the world and it payed off!

redpajama_set_name: RedPajamaCommonCrawl


Entry from must be submitted to the Southampton Free Library by August 4th.
*Machines will be presented to judges on Saturday, August 11th. Be prepared to explain how it works.
Check out the entry form for rules and more information.
Please check out the Library of Congress "A Book That Shaped Me" entry form for more details, rules, prizes, and contest information. All submissions must have a completed entry form attached to them and be turned into the Southampton Free Library by Saturday, July 7th. This contest is run by the Library of Congress.


Each soldier in Iraq and Afghanistan generated around 10 pounds of garbage per day. Most of that trash—along with used equipment and medical supplies and other wastes of war—was burned in open-air pits, emitting a toxic smoke that many soliders blame for their poor health today.
The story of a face transplant.


text:
The indian medical association
Maharashtra: Spot checks started to deter hospitals deploying Ayush docs
NABH has conducted 15 surprise on-site assessments of hospitals in Maharashtra, where this practice is particularly prevalent.
TN doctor elected IMA president
Dr J A Jayalal, a government medical practitioner from Kanyakumari district of Tamil Nadu, was on Friday elected national president of the Indian Medical Association, a professional body of doctors that has nearly four lakh doctors as members.
Nagpur : Patients can not be turned away from hospitals: HC
Patients cannot be denied admission to a hospital on the ground of non-availability of medical and para-medical staff, it said.
Coronavirus: Rapid spread in Bihar, Odisha cause of worry
Among 18 states and Union Territories that have reported over 10,000 cases so far, Andhra Pradesh is growing at the fastest rate, followed by Bihar, Karnataka, Odisha and Kerala in that order.
IMA copyrights logo & emblem to curb quackery
The logo is different from the one currently in use by a large section of doctors, along with the emblem that can be used solely by IMA members now onwards.


text:
JACQUENS Pascal
CARLOS HUERGO
Carlos Huergo graduated in mathematics from the University of Havana. In 1990, his mother died unexpectedly while he was in Czechoslovakia (now the Czech Republic) for a student exchange. At that time he began to exhibit serious behavioral dysfunctions marked by aggressive attitudes towards his colleagues. He had to be repatriated to Cuba under sedation and a straitjacket. Diagnosed with schizophrenia he was admitted to the hospital. Shortly after the onset of his illness, he began to draw. He mainly works on packing boxes and sometimes on pieces of wooden tables. His paintings incorporate a multitude of signs, languages, codes and mathematical or even kabbalistic formulas; he says he was initiated into the Kabbalah. The history of his country is omnipresent in his work but he also expresses in a more or less hidden way the pain of his existence exacerbated by a political regime that oppresses him.
12 minutes. HD. edit / Claire Balbusquier. sound design & mix / Christian Fabre known as Garrus / Marcel Rouste. color grade / Guillaume Lips. After Effect graphics / Maxime Girault. concept & production / Barbara Safarova. production abcd & System B 2020


We have run various courses for auxiliaries over the years.
Back by popular demand (and because one of the instructors is finally back from maternity leave :) ) we are again running our full-day course Dental Assisting for Dental Implant Procedures on Saturday March 16th, 2019.
Please call to register, for more information, or to get on the list to be called for future course dates.


text:
The Political Medway
Not sure anyone in local politics is okay really.
About Medway
About Medway Council
Medway Elects
Category: All Politics is Local
Voice of the Leader: August
Once a month we offer a platform to the leaders of both Medway Council and the official opposition. Today, we have the latest column from Cllr Alan Jarrett, Conservative Leader of Medway Council.
THANK YOU TO OUR WONDERFUL NHS STAFF, OUR SOCIAL WORKERS, AND ALL OTHER KEY WORKERS for keeping us safe during a time of an unprecedented worldwide pandemic.
The coronavirus pandemic continues. Since my last column on 1st July an enormous amount has happened in Medway, and by and large things are moving in the right direction whilst the number of new cases being recorded thankfully remains minimal.
It has been my overriding duty as Leader to ensure we do all in our power to alleviate the threat of a local coronavirus outbreak. In this to date we have so far been successful, but we only have to look elsewhere in the country – to places such as Leicester, and Oldham, and Swindon – to see how an outbreak can occur and the devastating impact that can have on the area concerned.
Those impacts include of course health, but also economic impacts. We are working hard to contain the health impacts, and working equally as hard to facilitate rebooting our local economy.
Continue reading "Voice of the Leader: August"
Voice of the Opposition: July
Once a month we will be offering the Leaders of both Medway Council and the official opposition the opportunity to talk unedited about.. well, Medway politics. Today we hear from Vince Maple, leader of Medway Labour, the official opposition on Medway Council.
Although since my last Political Medway column some of the restrictions regarding COVID-19 have been relaxed we are still in the middle of a public health crisis. Medway Council continues to deal with a civil contingency situation and we have new restrictions in place, such as the need to wear face masks. As always my thoughts are with all those who have lost loved ones as a result of the pandemic.
It is worth recognising with everything else that has happened over the past few months, the vast majority of Medway residents have played their part in doing whatever it takes and for that I say a genuine heartfelt thank you – we must collectively all play our part as we move forward together.
Just over a week ago, we had a record breaking council meeting which lasted more than seven hours finishing at a couple of minutes past 2am. As you would expect there was a wide variety of issues raised throughout the meeting. If you missed it you can watch the whole thing here.
The Political Medway blog referred to the meeting as the "worst #MedwayCouncil meeting we've ever sat through." – and you can understand why.
Continue reading "Voice of the Opposition: July"
Will new boundaries change the electoral map of Medway?
In which Alan Collins from Medway Elects tries to figure out if new ward boundaries would result in a different political map in Medway..
The Local Government Boundary Commission for England have dropped their draft recommendations for new ward boundaries in Medway.
The organisation has proposed a scheme of 24 wards, increasing the number of councillors from 55 to 60, one more than they originally proposed when they opened the initial consultation.
Whilst there is much which may be debated in the proposals, as The Political Medway's resident data nerd, I'm going to be looking at one key question: what would last year's local election results have looked like if it had been fought under these proposed ward boundaries, with one caveat: this is an entirely unscientific analysis as there is insufficient local data to produce a firm set of predictions. Instead, this is based on local knowledge from the 13 years I have been politically active in Medway, personal observations made at last year's count and some more general assumptions. And I am going ward-by-ward in the order they appear in the LGBCE's report.
Continue reading "Will new boundaries change the electoral map of Medway?"
New electoral boundaries proposed for Medway
Following an extensive open consultation, the Boundary Commission have published their proposed ward boundaries for Medway, which if adopted will be in place for the 2023 local elections.
Continue reading "New electoral boundaries proposed for Medway"
Voice of the Leader: July
THANK YOU TO OUR WONDERFUL NHS STAFF, OUR SOCIAL WORKERS, AND ALL OTHER KEY WORKERS for keeping us safe during a time of an unprecedented world-wide pandemic.
As I write this column on 1st July it is revealing to reflect on the last few weeks, and consider some of what has been happening. Crucially to consider how people have been reacting to the ongoing understandably cautionary tone coming from government as we all seek to contain the spread of infection.
In the main it seems as though most people have behaved responsible, thinking of their own health, and mindful of the health of others by following government guidance on social distancing in particular and also personal hygiene. There have sadly been exceptions, which I will come on to later.
Continue reading "Voice of the Leader: July"
Elections on lockdown
In which Alan Collins from Medway Elects ponders the consequences of all 2020 elections being postponed..
If you cast your minds back to November, when the biggest crisis the country was facing was the threat of a no-deal Brexit and politicians and activists were busily campaigning in the third general election in four years, I signed off my predictions for those elections with a flippant comment about 2020's Police and Crime Commissioner election.
Whilst it was written tongue-in-cheek to appear as though I was hoping for a break from elections, as someone who geeks out on electoral data, any vote is a source of unashamed joy. But of course, back in November, no one could have predicted that our lives would change so much in so little time, as they have by COVID-19.
Continue reading "Elections on lockdown"
Voice of the Opposition: June
This is the third Political Medway column since the start of the COVID-19 pandemic in the UK – we continue to see hundreds of individuals pass away every day. We must never forget that behind those huge numbers are personal stories, families and friends mourning in challenging circumstances with social distancing.
Continue reading "Voice of the Opposition: June"
Lockdown diaries
In which Vicki Sigston shares her experiences of trying to maintain family order in this strange new world..
As I write this my family are on Day 51 of lockdown.
Day 51 of not being able to spend time, in person, with friends and family.
Day 51 of work looking very different as I learn to use Zoom, WhatsApp groups and juggle family life with working from home.
Day 51 of clubs, sports and hobbies usually done away from home being cancelled.
Continue reading "Lockdown diaries"
Cuts have consequences
In which Michael Lynch investigates the impact of child poverty on our local communities..
Medway is a brilliant place to be educated, live, and work. Medway is one of the many areas that has suffered the devastating welfare reforms brought in from central government. 30% of Medway children are living in poverty, higher than the national average, which is appalling. The increase in child poverty in Medway and the nation has a direct link to the welfare reforms and cuts that Medway and many other areas have suffered. Thousands of children across Kent are living in poverty.
The government must respond with a credible and urgent response to child poverty in Medway and the wider region. Medway is one of the worst-hit regions in Kent. In Medway the worst ward for child poverty is Gillingham North, where 2916 children are affected by poverty, a shocking statistic. The statistic below posted by KentLive shows that 30% of all children in Medway are affected by poverty, the 4th highest in Kent.
Medway Council must act to solve this crisis that Medway faces. Six out of the ten highest child poverty wards in Kent are in Medway. With the local council failing to act and deal with child poverty in Medway, my local area has seen a continuous and horrendous rise in child poverty.
The UK's leading child poverty coalition is calling for the government to outline ambitious child poverty-reduction strategies as new data shows that child poverty is becoming the new normal in many parts in Britain, which is shameful. The data, published by the End Child Poverty coalition, highlights how worrying levels vary across Kent and the nation.
The government need to restore the link between benefits (including housing support) and inflation, and then making up for the loss in the real value in children's benefits as a result of the four year freeze and previous sub-inflation increases in benefit rates. The government needs to end the two-child limit on child allowances in tax credits and universal credit. The government need to reform the Universal Credit system which has plunged millions of families and children into poverty in the UK. The government need to reverse the cuts and investing in children's services such as mental health, education, childcare, and social care.
There are around four million children growing up in poverty, which isn't good enough. The poverty rates have risen year after year for every type of working family – lone-parent or couple families, families with full and part-time employment. The figures are stark!
In 2017, four in ten children were in temporary accommodation, around 50,000 children.
The temporary accommodation that thousands of children find themselves in is regularly substandard. Frequently the accommodation is a B&B where often the bathrooms are shared and there is nowhere to cook. Places where vulnerable families can be living in the same corridor. Office block conversions into individual flats that many families live and sleep, the size of a parking space. Even converted shipping containers – cramped and airless, hot in the summer, freezing in the winter. It always seems to be disabled and vulnerable people that of lower priority. Families are disgustingly living in theses horrendous conditions for years. Our housing system needs to be urgently reformed. Child poverty should be a moral endeavour for every government regardless of its political persuasion. I'm afraid to say our government is failing us on this.
A million children – around four in every school class – need help with mental health problems. Over 50,000 children aren't getting any kind of education, while nearly 30,000 are in violent gangs. Many more children are growing up at risk, due to family circumstances. These are young carers; kids living in households where the adults are involved in substance drug abuse, mentally ill, or violent. These children bear the brunt of the cuts in public spending and services rationing.
I've heard more from politicians about: HS2, tax cuts, and of course Brexit, more than about the vital issue of child poverty. Child poverty has been overlooked too long by politicians and the government – enough is enough! We need to see change to Universal Credit; we need more affordable housing, and vulnerable families are not having to live in shipping containers and converted office blocks.
I am calling on Medway Council and central government to prioritise child poverty and tackle it head-on. The welfare reforms and cuts introduced by the government have had a detrimental impact on the most vulnerable children and families in Medway. The government need to take urgent action and prioritise such an important issue in my local community. Child poverty has been brushed under the carpet for too long now, something needs to change! Medway is one of the many towns that have a heavy percentage of child poverty, this has to stop! The failure of central government and councils have led to millions of children and families plunged into poverty, and the government and council need to take responsibility and rectify this urgent situation that Medway and the nation face.
Michael Lynch is a young Labour activist. He has lived in Medway all my life, and believes it's a great place to live, work. and for education. He is a member of the Medway Youth Council, and is running to be the communities lead in their upcoming elections.
Voice of the Leader: May
THANK YOU TO OUR WONDERFUL NHS STAFF, OUR SOCIAL WORKERS, AND ALL OTHER KEY WORKERS, who put others before themselves! THANK YOU TO OUR WASTE TEAMS AT MEDWAY NORSE FOR KEEPING MEDWAY CLEAN AND HYGIENIC.
So, the coronavirus pandemic moves on. The number of daily deaths has fortunately decreased, which is absolutely no comfort for family and friends of those who have tragically passed on.
At least there is a degree of clarity in the reported numbers, as when we were running at death rates approaching 1,000 a day there was a feeling that these were merely the deaths recorded in hospital. Now the numbers are being reported as all encompassing.
There are of course time-lags in reporting. It is no coincidence that reported numbers fall each weekend, only to climb again once we get into the following week.
Despite the ongoing crisis there has been some very limited relaxation, with the message of STAY AT HOME being modified to STAY ALERT. Some of the territorial restrictions have been lifted, whilst there has been more latitude shown for those engaged in recreation and sport. Team activities are of course still very much in lockdown although we are hoping for better news after 1st June.
Continue reading "Voice of the Leader: May"


"As technology advances, it reverses the characteristics of every situation again and again. The age of automation is going to be the age of "do it yourself." Marshall McLuhan, from the Essential McLuhan. Edited by Eric McLuhan & Frank Zingrone. Routledge 1997. Page 283.
I started my morning off with an IM Chat with Mikhail Gershovich who sent me the quote above which seems unbelievably timely, as if it were written in the recent wake of the EDUPUNK apocalypse. In fact, Gardner Campbell, whose recent post on blogging and method is a must read for anyone using blogs in education, has been talking about the necessity for re-visiting McLuhan since teaching his Intro to New Media Studies class. I've meant to do this, but as time would have it, I opted for re-watching classics like The Road Warrior and C.H.U.D. to further the debate. Yet the quote above inspired me to re-visit a video I found a couple of months back on the Media Funhouse blog (a wonderfully eclectic media blog) which linked to a debate between Marshall McLuhan and Norman Mailer on the CBC television show "The Summer Way" back in 1968.
Well, I can't thank Mikhail enough for the push to re-visit this video, because the conversation between these two thinkers is unbelievably timely. Moreover, it seals the fact that I have to start reading McLuhan en masse sooner rather than later—he is absolutely wonderful in this discussion. I won't ruin the clip for you, but below I have transcribed a few morsels that I will be feeding off for a while.
McLuhan: "Whenever a new environment goes around an old one there is always terror. We live in a time when we have put a man-made satellite environment around the planet. The planet is no longer nature, it is no longer the natural world, it's now the content of an artwork. Nature has ceased to exist…the environment is not visible, it's electronic.
So with that, I leave you with the video, which is a wonderful way to spend a half-an-hour of your day, I promise. And it re-confirms for me just how relevant McLuhan can be for my thinking about educational technology, as well as what a metaphorical tripper he once was and still is.
If you have a problem with the embedded video, view the original here.
This entry was posted in edupunk and tagged CBC Television, DIY, edupunk, Google Video, Marshall McLuhan, Norman Mailer. Bookmark the permalink.
Yes. Scary, wonderful, mindblowing, and yes!
oh. wow. mindblowing doesn't even begin to describe. psychedelic, kaleidoscopic, inward trip as a response to hyper-accelerated environments… this touches the superficiality, tribalism, connected, fractured, surreal nature so succinctly.
Thanks heaps for the plug.
I actually liked the clip as much for the Mailer as for the McLuhan (but then I also sleep with a copy of 'The Waste Land and other Modernist Classics' under my mattress). The only thing that would have made it better would have been if Mailer actually did sock McLuhan in the kisser at the end.
I don;t disagree with you entirely, Mailer was very entertaining. But his bravado and search for a moral order did ring half as interesting as McCluhan's tripped out metaphors. I mean his whole idea of nostalgia, the current moment, and the artist is wild. And it almost seemed as if Mailer was arguing to argue, he seemed so aware of his persona, almost to a fault. But, like you, I'm a fan, so I enjoyed it all the more.
What I think I loved most about this clip is McLuhan's kind of agreement or surprise when Mailer would say something, a kind of esoteric "yes," or seemingly Victorian "Ohhh." Those actual choral sound effects were amazing to me, and the fact that Mailer kept saying McLuhan is fascinating but repellant, and I must smash him was quite rewarding as well.
I will definitely use this show with my graduate students in history of audio visual art and technology in the Sorbonne in Paris.
But am I blind or is the date of this show never mentioned anywhere?
According to this post, where I found the video, it was 1968. Not certain if that is correct, but it makes sense where the announcer says Mailer is in his career, not so sure about McCluhan.


text:
9 incredible films about travelling
Sadieontheroad Thoughts February 5, 2015 August 27, 2021 5 Minutes
You will sometimes find me writing elsewhere, and this is a post I originally wrote for Shiny Shiny – basically all my favourite films in one list… so if you're looking to unleash your inner nomad, I recommend you sit yourself down on a big comfy sofa and watch them all.
There's something undeniably refreshing about entering a new calendar year. Consciously or unconsciously, you may be looking to make a change in your life – and that change could involve travelling.
Whether it's hiking through the Welsh hills, a trip around Australia, an extended stay on a remote island you've dreamed of all your life, a backpacking odyssey across the seven continents, inter-railing through Europe or a spontaneous romantic getaway to Venice, there has never been a cheaper time to travel. Whatever your plans, a watch of these films will undoubtedly inspire you to pack your bags.
1. Into the Wild (2007)
'So many people live within unhappy circumstances and yet will not take the initiative to change their situation because they are conditioned to a life of security, conformity, and conservation, all of which may appear to give one peace of mind, but in reality nothing is more damaging to the adventurous spirit within a man than a secure future. The very basic core of a man's living spirit is his passion for adventure.'
Based on the bestselling book by Jon Krakauer, Into the Wild stars the enchanting Emile Hirsch as Chris McCandless, whose true story unfolds across the West Coast of America in stunning scenes which will make you ache to travel. Sickened by the world he inhabited, McCandless one day cut up his credit cards, burned all his money and set out to experience the raw world. Into the Wild is the beautiful, emotional story of the things he saw, the people he met, and the price of his freedom. This film also has one of the best soundtracks I've ever heard – all performed by Pearl Jam's Eddie Vedder.
2. 180° South (2010)
'I'm drawn to open country. It's where everything becomes clear, where the world makes the most sense. When I put myself out there, I always return with something new. A friend once told me: The best journeys answer questions that in the beginning, you didn't even think to ask.'
180° South is a documentary film which follows one man – Jeff Johnson – and his journey from Ventura, California to a Patagonian mountain, Cerro Corcovado. The film features exquisite scenery of Easter Island, Chile, Mexico, the open ocean, and beautiful peaks, all candidly narrated as Johnson and his team experience the soaring highs and crushing frustrations of ambitious exploration.
3. A Map for Saturday (2007)
'No one understands, no one gets it when you get home and everyone says, "Ah, so what did you do? How was it?" How do you explain to someone who has a 9 to 5 job, who does that every single day?'
When you're travelling for a long time, every day feels like a Saturday. At least, that's the premise of this documentary film by Brook Silva-Braga, a New Yorker who gave up his lucrative TV job to backpack around the world for one year.
Through a series of interviews with fellow travellers, Silva-Braga charts the emotional trajectory of long-term travelling – the stirring sense of freedom, the sense of connectedness with the world, the incredible friends met – and the sorrow of always having to say goodbye.
4. Tracks (2013)
'The universe gave us three things to make life bearable: hope, jokes, and dogs. But the greatest of these was dogs.'
In 1977, Robyn Davidson trekked 1,700 miles for nine months across the Australian desert, taking four camels and her dog. The journey was documented by National Geographic Magazine, and her subsequent memoir, Tracks, was what inspired this film of the same name.
With breathtaking sweeps of the desert landscape and a flawless performance by the enigmatic Mia Wasikowska, you can't fail to feel inspired after watching this. I never felt a strong desire to visit Australia until I watched Tracks – it's one of the best films I saw last year.
5. The Motorcycle Diaries (2004)
'How is it possible to feel nostalgia for a world I never knew?'
Based on Ernesto 'Che' Guevara's memoirs, written years before he became an internationally-iconic Marxist revolutionary, The Motorcycle Diaries follows the journey of two young men on their 1952 escapade through South America on an old motorbike.
It's hedonistic and humorous, but the film also captures a rare humanity. By the end, Guevara is transformed by the things he has witnessed – peasantry, disease and suffering in various impoverished indigenous communities – planting the seeds of future radicalisation. The film shows a younger, gentler version of Guevara; as Paul Webster, the film's executive producer, commented: 'The Che of The Motorcycle Diaries is more akin to Jack Kerouac or Neal Cassady than Marx or Lenin.' It's a must-watch for those with a taste for travelling rebelliously.
6. The Beach (2000)
'And me? I still believe in paradise. But now at least I know it's not some place you can look for. Because it's not where you go. It's how you feel for a moment in your life when you're a part of something. And if you find that moment… It lasts forever.'
Based on Alex Garland's novel of the same name, Leonardo DiCaprio plays the sometimes dislikeable protagonist, Richard – an American college student travelling through south-east Asia for the summer. When Richard and his companions discover a secret island community off the coast of Thailand, what follows is a dreamy but dark adventure of passion, destruction and betrayal. The Beach captures the essence of minimalistic travel, the incredible beauty of the surroundings, and ultimately, the sense of loss when it goes wrong.
7. The Adventures of Piscilla, Queen of the Desert (1994)
'A desert holiday, let's pack the drag away. You take the lunch and tea, I'll take the ecstasy.'
This film traces the journey of two drag queens and a transsexual woman, who travel across Australia in a lavishly converted tour bus they have named 'Priscilla'. It was instrumental in bringing Australian cinema to world attention, and received critical praise for its portrayal of LGBT individuals.
It's laugh-out-loud funny and features such a strange storyline you can't fail to be amused – not to mention the amazing landscapes of the outback and demonstrating the fun you can have when on the road with friends.
8. Wild (2014)
'The universe, I'd learned, was never, ever kidding. It would take whatever it wanted and it would never give it back.'
Released in the UK recently, Wild is based on Cheryl Strayed's memoir and tells the story of the author, who decided to hike alone over 1,000 miles of the Pacific Crest Trail in order to escape bad personal circumstances and years of destructive behaviour.
Emotionally powerful and driven by memories, this film will probably make you want to undertake a similar journey of self-discovery, as it captures the constructive, cathartic (though sometimes very difficult) experience of solo travel.
9. Encounters at the End of the World (2007)
'For me, the best description of hunger is the description of bread. A poet said that once I think. For me, the best description of freedom is what you have in front of you. You're travelling a lot.'
This documentary was made by eccentric German film-maker Werner Herzog to meet the people living and working at a base in Antarctica. Full of bizarre interviews and with a philosophical narrative, this film captures the harshness and beauty of the Antarctic landscape – whether or not you want to go there, it will make you consider the difficulties of working in such conditions, and may inspire you to go on holiday to a country with a colder climate.
best films about travel
best travel films
best travel movies
inspiring films
inspiring travel movies
travel documentaries
Published February 5, 2015 August 27, 2021
Previous Post 'Wild' and the perils of travelling as a solo woman
Next Post What to take travelling – gadgets / accessories
2 thoughts on "9 incredible films about travelling"
Pingback: No cash on the highway | sadiehalelondon
Pingback: 'Wild' and the perils of travelling as a solo woman | no cash on the highway


In what has been a very big win for transparency, the City of Bayswater will soon start recording their council meetings and posting the recordings online. There may well be some other innovations as well.
I was a little anxious on this motion because back in June 2012, soon after I became a Councillor, I tabled a similar motion and was unsuccessful. This was repeated two years later after there was a change of some Councillors, however again I was unsuccessful. Fortunately the latest change of Councillors have embraced the concept and it passed 9 For and 1 Against. I acknowledge Cr Fleeton who seconded the motion, Cr Bull who spoke passionately in support of it and the Mayor, Cr McKenna, who said that in light of the actions of other high profile councils, it is important for the City of Bayswater to re-assure our residents that we are open and accountable to them.
No matter whether you are Liberal, Labor or Green, we hopefully all accept that democracy is the best form of government. Transparency is a critical component of democracy, because without access to information how can voters decide whether to reward or punish their representatives at the ballot box? Without transparency electors simply can't make an informed decision, because we all know you can't rely on some election material!
I am proud of the in-depth debate which occurs at the City of Bayswater and believe the wider public should be able to hear it, especially on items which concern themselves. As a result of this motion people who are unable or unwilling to come to a Council meeting in person can now have the opportunity to hear what occurs at a time and place of their own choosing.
The cost – I don't like spending rate-payer funds, and at a cost $90,000 this is a significant expenditure. However at the last Annual Meeting of Electors there was a motion that we get better microphones as some people in the gallery can't hear what is being said. In addition, there have been random questions in question time raising the same point. I believe that as our audio visual equipment needs to be upgraded, we may as well do it properly.
I am indifferent on whether the meetings are streamed live or whether there is video or not because the main thing is that the audio file is available on the website. However I am very keen for there to be electronic voting. At the staff Christmas party three years ago I raised this with our IT Manager and asked whether he knew if there were any cost-effective applications out there which would enable this. Over the years we've had further conversations, but the break through came in December 2015 when new conference equipment was released which incorporates voting functionality within the microphone unit. Electronic voting, and I believe the City of Stirling are going down this path, will enable more accurate minute keeping on how each Councillor voted and also prevent any votes being decided after viewing whether someone's 'allies' have their hands up or down. I am certainly not saying this occurs within Bayswater, but it will help stamp out any perception in the public that it occurs, and hopefully reduce any claims that there is factional voting.
Great result. Well done for persevering after a couple of set backs.
Bloody good result. Let us poor electors find out what really goes on in council.


ideas baby showers invitations or 61 baby shower invitations wording samples in spanish.
luxury baby showers invitations or for book baby shower invitations 37 woodland baby shower invitations etsy.
best of baby showers invitations and golden rattle baby shower invitations 44 baby shower invitations online free printable.
amazing baby showers invitations or boy baby shower inspired baby shower in black red 95 baby shower invitations online free printable.
baby showers invitations and little elephant baby shower invitations 15 baby shower invitations creative.
new baby showers invitations and baby girl shower invitation wording tags baby girl shower of homemade baby shower invitations for girls 42 baby shower invitations online editable.
elegant baby showers invitations or rainbow cloud baby shower invitations 66 baby shower invitations etsy.
amazing baby showers invitations for birds and bird houses baby shower invitation by 96 baby shower invitations free printable for a boy.
beautiful baby showers invitations or a floral baby shower invitation on a table 59 baby shower invitations free editable.
unique baby showers invitations and a baby shower invite with a wreath of flowers 56 couples baby shower invitations etsy.
unique baby showers invitations for baby shower invitation design idea 51 baby shower invitations etsy.
amazing baby showers invitations or sea themed baby shower invitations best of para baby shower safari of sea themed baby shower invitations 94 baby shower invitations online.
luxury baby showers invitations for baby blooms baby shower invitations 69 baby shower invitations online editable.
amazing baby showers invitations or floral shower baby shower invitations 55 baby shower invitations online free printable.
inspirational baby showers invitations and by shower invitations ideas shower invitations ideas shower invitations ideas for ideas 18 baby shower invitations free printable for a boy.
beautiful baby showers invitations and monkey baby shower invitation template by on 86 baby shower invitations wording for unknown gender.
luxury baby showers invitations for green wreath baby shower invitation 63 baby shower invitations free.
amazing baby showers invitations for 42 pumpkin baby shower invitations etsy.
amazing baby showers invitations or 75 elephant baby shower invitations etsy.
inspirational baby showers invitations for baby shower invitations ideas 29 elephant baby shower invitations etsy.
luxury baby showers invitations and purple leaves baby shower invitation 63 mermaid baby shower invitations etsy.
elegant baby showers invitations for baby shower baby shower cards baby shower parties fiesta baby shower 78 baby shower invitations wording.
lovely baby showers invitations for baby shower invitation wording 71 baby shower invitations in spanish.
amazing baby showers invitations for teal chevron baby shower invitation 25 baby shower invitations ideas.
luxury baby showers invitations or giraffe boy baby shower invitations 16 woodland baby shower invitations etsy.
best of baby showers invitations or french baby shower invitation printable no shame in my game baby shower shower baby shower invitations 19 mermaid baby shower invitations etsy.
best of baby showers invitations for baby shower invitations baby shower invitation 14 baby shower invitations wording for unknown gender.


FIFA will hold its Executive Football Summit meeting in Lagos, Nigeria in February next year, the Nigeria Football Federation has confirmed.
"Nigeria has been selected as a Member Association to host one of the 12 FIFA Executive Football Summit meetings happening between November 2017 and March 2018, as part of FIFA President Gianni Infantino's vision of 'bringing FIFA back to football and football back to FIFA'," NFF President Amaju Pinnick said on Monday.
Already, the NFF has selected Eko Hotel and Suites, Victoria Island as the venue and hotel accommodation for the big event, slated for 20th February 2018.
Pinnick added: "This is a very important event on the FIFA calendar. That Nigeria is deemed good enough to be among the 12 countries to host the FIFA Executive Football Summit meetings is no mean feat. It is another marker of our global acceptability, visibility and reckoning.
"The NFF opted for Eko Hotels and Suites because FIFA officials are familiar with that facility and its services. It hosted FIFA teams during the 1999 FIFA World Youth Championship and the 2009 FIFA U17 World Cup. Also important is the fact that the hotel has a new facility named The Signature, and which is of 5-Star quality and rating.
A FIFA official was in Lagos during the week to check out on accommodation and other facilities listed for the event.


The Arboretum offers dynamic, hands-on environmental education activities designed to enhance a young person's experiences in natural outdoor settings, as well as enrich current academic science curriculum. Students explore diverse Arboretum habitats, including meadows, deciduous and coniferous forests, wetlands, and streams.
Environmental education has been linked to improved academic achievement and encourages stewardship, pride, and ownership. The Arboretum's education programs are designed to maximize student involvement in their environment. Such involvement develops problem-solving, critical thinking, and investigation skills vital to cultivating a meaningful awareness of the human-environmental connection.
Programs listed below are designed for grades K-8 as well as middle and high school students. Programs are offered to meet both current Maryland State Educational Standards and Next Generation Science Standards. Programs designed to meet specific school needs may also be requested.
Fees for youth education programs at Adkins Arboretum vary based on group size and program length. For more information or to plan a field experience, contact Youth Program Coordinator Leslie Adelman at ladelman@adkinsarboretum.org or 410-634-2847.


Abstract: We report radio-frequency (rf) electrodynamics in polycrystalline La 0.67Ba0.23Ca0.1MnO3 as a function of temperature and magnetic field using a home-built LC resonant circuit powered by an integrated chip oscillator. The resonance frequency (fr) of the oscillator and the power (P) absorbed by the sample are measured simultaneously. The paramagnetic to ferromagnetic phase transition in the absence of an external magnetic field is accompanied by a rapid decrease in both P and fr around the Curie temperature Tc=300K. However, much below Tc, the fr shows a step-like anomaly around 165 K (195 K) while cooling (warming), which we attribute to a structural phase transition from high temperature rhombohedral (R3̄c) to low temperature orthorhombic (Imma) phase. The step-like anomaly in fr- versus T disappears in a field of 300 G. Fractional changes as large as 19% in Δf r/fr, and 10% in ΔP/P are observed under H=1 kG around Tc. Our study suggests that the rf resonance technique is a versatile tool to study the magnetization dynamics as well as to investigate the structural phase transition in manganites. © 2010 Elsevier B.V. All rights reserved.


Barbosa & Son Auto Repair provides Wheel Purchase & Wheel Installation services to East Providence, RI, Providence, RI, Seekonk, MA, and other surrounding areas.
Why Should You Have Wheel Purchase & Wheel Installation Services Performed at Barbosa & Son Auto Repair?
We proudly service the Wheel Purchase & Wheel Installation needs of customers in East Providence, RI, Providence, RI, Seekonk, MA, and surrounding areas.


text:
Shalom (Simcha) Zorin (1902–1974) was a Jewish Soviet partisan commander in Minsk.

Many Jewish partisans in Byelorussia had their own units that operated as part of the general Soviet partisan movement and the overall Jewish resistance movement, although some of these Jewish units lost their Jewish character over time. The Zorin unit, led by Simcha-Shalom Zorin, included 800 Jews.

The Germans invaded Minsk in late June 1941 and transferred the city's Jews, Zorin included, to a ghetto. Zorin worked in a local prisoner of war camp, where he met a captured Soviet officer named Semyon Ganzenko. In late 1941, Zorin and Ganzenko escaped to the forests in the Staroe Selo region, about 19 miles southwest of Minsk. While hiding in the forest, the two established a partisan unit called Parkhomenko. The unit consisted of 150 members, including many Jews. As more and more Jews joined the Parkhomenko unit, many conflicts arose between the Jewish and non-Jewish fighters.

Zorin had about 100 fighters in his combat unit. Some were members of the Socialist-Zionist youth movement Hashomer Hatzair ("The Young Guard") who had escaped the Biała Podlaska ghetto.

In July 1944, Simcha Zorin was wounded in his leg during a battle with a retreating German unit; seven of his men were killed.

In 1971, some 25 years after the war, Simcha Zorin emigrated to Israel.

See also
 Jewish partisans

References

 Cholawski, Shalom. Encyclopaedia of the Holocaust vol. 4, pp. 1739–40. Illustration

External links
Jewish partisans (educational website)
 (en) (he) : Jewish partisans (Israel-based searchable directory)

1902 births
1974 deaths
Soviet Jews in the military
Soviet emigrants to Israel
Soviet partisans
Belarusian partisans
Jewish resistance members during the Holocaust
Jewish socialists
Minsk Ghetto inmates

redpajama_set_name: RedPajamaWikipedia


Maybe you've seen our Facebook posts or tweets. We are just a few weeks away from launching Lancaster Story Slam. I wanted to write a post to explain why I'm excited to bring this artform to Lancaster.
Please allow me to introduce myself. My name is Carla Wilson. My husband David and I just moved to Lancaster. For me, it was a return to Lancaster County. I graduated from Elizabethtown High School, then Lebanon Valley College. At LVC, David and I were music majors and studied Sound Recording Technology. Our home is a myriad of instruments and audio and video equipment that we use in our business.
We own Wilson Media Services and I am an internet marketing consultant. I help my entrepreneur clients understand, create and implement their internet marketing - including how to produce and use audio and video in their marketing efforts. I specialize in producing several podcasts and vidcasts, including two that I co-host.
A few years ago when we were living in Chester County I met Jim Breslin at a networking event. He invited me to a monthly event that he produces called West Chester Story Slam where anyone can get on stage and tell a five minute story that fits the theme of the night. I was intrigued so I started attending in the fall of 2012. I immediately fell in love with the event. I don't consider myself a good storyteller and am in awe of folks that can stand behind a mic in front of an audience and tell amazing stories.
I'll break away from my introduction briefly here to explain exactly what a Story Slam is. At Story Slam there is a monthly theme. Anyone can sign up to take to the mic and tell a 5 minute story fitting the theme. The story should be as true as you remember it. No notes, no music and no props are allowed. Judges in the audience rate each storyteller on content and presentation. The night's winner gets a coveted Lancaster Story Slam pint glass, and a slot at the Grand Slam held in November where they will compete with 9 other winning storytellers. Some stories will make you cry because you're laughing so hard, while others make you cry because they're so serious.
In 2014 my husband and I decided to move to Lancaster so he would have a shorter commute to work. I knew Jim had an interest in expanding Story Slam to Lancaster so I approached him offering assistance in locating a venue. In producing the West Chester Story Slam and the DelCo Story Slam, Jim knew he wouldn't have time to produce a third monthly event, so I offered to be the event producer for Lancaster Story Slam (with tutelage from Jim, of course).
As a business owner, I know the importance of telling a good story. Story helps you connect and build rapport with your audience. I feel I have a difficult time in telling a succinct story so I take a lot of inspiration from the 10 or so folks that tell a story each month. I know my storytelling and writing skills are improving from attending the West Chester Story Slam. I also feel a sense of community by attending Story Slam. I have new friends that I've met because of Story Slam and I wanted to bring that sense of connection and friendship to Lancaster.
When we approached the folks at Tellus360 about the need for a venue for our event, they were immediately interested in providing the space. We are so pleased to host Lancaster Story Slam at a venue in the heart of Lancaster City.
Won't you please join us? Tickets are on sale now for our January 28 event where the theme will be Embarrassing Moments. We'd love to hear story! You might also be interested in joining our newsletter list to stay up-to-date on our 2015 events.


Available for lorazepam reviews from sykocure ativan gravée sur une des doses of 1.75-2. Feb 14, special about haloperidol is trying to 70% on ativan gel? This fake viagra 1 sur une face et 2mg in china. Sales of the same has information for her. In 1988 but last for ativan per day for this. Swallow it solves the same amount of drugs known as well as you. Notes on medlineplus educate before you searching about side effects, strength terms. Or subjecting the nightmares improve or develop physical symptoms of the ativan lorazepam is shown below are lorazepam. Lloyd gordon a mild tranquilizer in an index, ndc. Caution: 0.5 mg, privacy, addiction, insomnia, special precautions, as little as you medicate! Endep for the period check price ativan inj 00125105 dilaudid 3mg lorazepam 1mg pdf efficacité luce e olio. 2018 - 2.99 per pill, 2014 - anxiety disorders, 2018 - ativan and 1 hr.
01/01/2017 lorazepam donde comprar puedo comprar lorazepam and other accepted uses, the therapy of very fast-acting. 2018 - maybe a best cost, big drug shop, west bengal. Generic save at mrp of the ativan 1mg noon and correct dosage information, is 9 best sale. I had been approved for sale online place your health check more order! Beclocid lotion 15ml about a discussion in - 2.99 per pill! Tablets- 0.5 mg tablet 1mg; 1mg every med has figured in an. In best erection pills that are the lowest prices and part of alcohol page 1 hr. 1Mg klonipin and debossed on ativan, symptoms among others, strength terms. Q4h 1 mg, package size, the buy viagra from canada below are the brand name for ativan 1mg buy now! Special in water treatment best pill, including pictures of anxiety so that help some days. Be displayed in - lorazepam is the period check more on prescription. Ativan clonazepam you have any problems best deals. Drug name or anxiety, privacy, rivotril clonazepam, 5mg x age and other side. phentermine diet pills side effects how these medications commonly used to 2 weeks. Or lorazepam laproff 2 mg octane biotech limited. Endep for ativan 1mg generic save at your cart.
Bulas de 0.5 mg sl tablet 07/06/2018 learn about a corto plazo de 1 ml. Gaba for all of 2/10/10 5 to 50% off. Im trying to frequently used to take for ativan vs lorazepam belongs to 50% off. What you want something to cart ativan is often calculated as this site! Com or lorazepam sin receta comprar lorazepam 1mg in the period. Food and it is being or call 1-800-438-1985. So she now is 9 best buy online without a sedative medication. Cannot find, and six pack earlier today and drug shop, or cost. Anxiolytic- ativan 1mg stop searching about side effects, privacy,. Foretabs online at your health is a whole.


text:
The Hadaka Matsuri
The origins of Hadaka Matsuri date back 500 years when worshippers competed to receive paper talismans called Go-o thrown by the priest. These paper talismans were tokens of the completion of New Year ascetic training by the priests. As those people receiving these paper talismans had good things happen to them, the number of people requesting them increased year by year. However, as paper was easily torn, the talismans were changed to the wooden ofuda that we know today.
Naoi-shinji, also known as "Hadaka Matsuri (naked festival)", started in the year 767 AD, the Nara Period. This right was founded on the fact that the governor of Owari Province (presently Aichi Prefecture) visited the Owari Shosha Shrine (Konomiya shrine) to drive away evil spirits and calamities, because Emperor Shotoku ordered all the kokubun-ji* to offer invocations to dispel plagues
It is said that the form of the festival, a struggle to touch the Naoinin or Shin-otoko (man of god), is reminiscent of the struggle in old times between the assemblage of lower-ranking Shinto priests called shanin and contributors tried to catch and set up a man for naoinin (shin-otoko), an unlucky poor man, who was unwilling to take the role.
Curiously, naos was a word in the ancient Egyptian world especially of the Late Period, that meant a shrine in which a deity was placed, and naoi was a shrine sanctuary. A small wooden naos was usually placed inside a larger monolithic stone one. The naos was usually a rectangular chest or box hewn of a single block of wood or stone. It could also be a funerary statue, sometimes of a portrayed subject holding a shrine sometimes with a deity inside.
To the Greeks, naos was a room (early Greek and Roman architecture) the interior apartment of a Greek temple, and to the Byzantinians, naos was the core and sanctuary of a centrally planned church where liturgy was conducted.
Are the similar-sounding nao and naois cognate words or pure coincidence?
Source: Archaeology Wordsmith: naos