<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/78132>78132</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            clang-tidy reports use-after-move in `std::ranges::sort`
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang-tidy
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          vogelsgesang
      </td>
    </tr>
</table>

<pre>
    When running the clang-tidy pass `clang-analyzer-cplusplus.Move` against the following program, it reports a move-after-free within `std::ranges::sort`.

clang-tidy version 17.0.6
libc++ version 17.0.6

Program:

```cplusplus
#include <algorithm>
#include <string>
#include <vector>

using namespace std;

static bool lessSize(const string& a, const string& b) {
 return a.length() < b.length();
}

int main(int, char**) {
 vector<string> files;
   ranges::sort(files, lessSize);
}
```

clang-tidy output:

```
example.cpp:8:24: warning: Method called on moved-from object of type 'std::basic_string' [clang-analyzer-cplusplus.Move]
    8 | return a.length() < b.length();
      | ^
example.cpp:13:4: note: Calling '__fn::operator()'
   13 | ranges::sort(files, lessSize);
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__algorithm/ranges_sort.h:64:12: note: Calling '__fn::__sort_fn_impl'
   64 |     return __sort_fn_impl(ranges::begin(__r), ranges::end(__r), __comp, __proj);
 | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__algorithm/ranges_sort.h:48:5: note: Calling '__sort_impl<std::_RangeAlgPolicy, std::__wrap_iter<std::string *>, bool (*)(const std::string &, const std::string &)>'
   48 | std::__sort_impl<_RangeAlgPolicy>(std::move(__first), __last_iter, __projected_comp);
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__algorithm/sort.h:942:7: note: Assuming the condition is false
  942 |   if (__libcpp_is_constant_evaluated()) {
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__algorithm/sort.h:942:3: note: Taking false branch
  942 |   if (__libcpp_is_constant_evaluated()) {
      | ^
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__algorithm/sort.h:946:5: note: Calling '__sort_dispatch<std::_RangeAlgPolicy, std::string *, bool (*)(const std::string &, const std::string &)>'
  946 | std::__sort_dispatch<_AlgPolicy>(std::__unwrap_iter(__first), std::__unwrap_iter(__last), __comp);
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__algorithm/sort.h:878:3: note: Calling '__introsort<std::_RangeAlgPolicy, bool (*&)(const std::string &, const std::string &), std::string *, false>'
  878 | std::__introsort<_AlgPolicy,
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
 879 |                    _Comp&,
      |                    ~~~~~~~
 880 |                    _RandomAccessIterator,
      | ~~~~~~~~~~~~~~~~~~~~~~
  881 | __use_branchless_sort<_Comp, _RandomAccessIterator>::value>(
      | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 882 |       __first, __last, __comp, __depth_limit);
      | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__algorithm/sort.h:731:3: note: Loop condition is true.  Entering loop body
  731 |   while (true) {
      | ^
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__algorithm/sort.h:733:5: note: 'Default' branch taken. Execution continues on line 755
  733 | switch (__len) {
      | ^
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__algorithm/sort.h:755:9: note: Assuming '__len' is >= '__limit'
  755 |     if (__len < __limit) {
      | ^~~~~~~~~~~~~~~
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__algorithm/sort.h:755:5: note: Taking false branch
  755 |     if (__len < __limit) {
      | ^
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__algorithm/sort.h:763:9: note: Assuming '__depth' is not equal to 0
  763 |     if (__depth == 0) {
      | ^~~~~~~~~~~~
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__algorithm/sort.h:763:5: note: Taking false branch
  763 |     if (__depth == 0) {
      | ^
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__algorithm/sort.h:773:11: note: Assuming '__len' is <= '__ninther_threshold'
  773 |       if (__len > __ninther_threshold) {
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__algorithm/sort.h:773:7: note: Taking false branch
  773 |       if (__len > __ninther_threshold) {
      | ^
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__algorithm/sort.h:794:10: note: '__leftmost' is true
  794 |     if (!__leftmost && !__comp(*(__first - difference_type(1)), *__first)) {
      | ^~~~~~~~~~
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__algorithm/sort.h:794:21: note: Left side of '&&' is false
  794 |     if (!__leftmost && !__comp(*(__first - difference_type(1)), *__first)) {
      | ^
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__algorithm/sort.h:801:9: note: '?' condition is false
  801 |         _UseBitSetPartition
 | ^
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__algorithm/sort.h:803:15: note: Calling '__partition_with_equals_on_right<std::_RangeAlgPolicy, std::string *, bool (*&)(const std::string &, const std::string &)>'
  803 |             : std::__partition_with_equals_on_right<_AlgPolicy, _RandomAccessIterator, _Compare>(__first, __last, __comp);
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__algorithm/sort.h:594:3: note: '?' condition is true
  594 |   _LIBCPP_ASSERT_UNCATEGORIZED(__last - __first >= difference_type(3), "");
      | ^
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__config:314:75: note: expanded from macro '_LIBCPP_ASSERT_UNCATEGORIZED'
  314 | # define _LIBCPP_ASSERT_UNCATEGORIZED(expression, message) _LIBCPP_ASSERT(expression, message)
      | ^
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__assert:21:4: note: expanded from macro '_LIBCPP_ASSERT'
   21 | (__builtin_expect(static_cast<bool>(expression), 1) \
      | ^
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__algorithm/sort.h:597:14: note: Object of type 'std::basic_string' is left in a valid but unspecified state after move
  597 |   value_type __pivot(_Ops::__iter_move(__first));
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__algorithm/sort.h:603:5: note: Assuming the condition is true
  603 | _LIBCPP_ASSERT_UNCATEGORIZED(
      | ^
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__config:314:75: note: expanded from macro '_LIBCPP_ASSERT_UNCATEGORIZED'
  314 | # define _LIBCPP_ASSERT_UNCATEGORIZED(expression, message) _LIBCPP_ASSERT(expression, message)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__assert:21:4: note: expanded from macro '_LIBCPP_ASSERT'
   21 | (__builtin_expect(static_cast<bool>(expression), 1) \
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__algorithm/sort.h:603:5: note: '?' condition is true
  603 |     _LIBCPP_ASSERT_UNCATEGORIZED(
 | ^
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__config:314:75: note: expanded from macro '_LIBCPP_ASSERT_UNCATEGORIZED'
  314 | # define _LIBCPP_ASSERT_UNCATEGORIZED(expression, message) _LIBCPP_ASSERT(expression, message)
      | ^
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__assert:21:4: note: expanded from macro '_LIBCPP_ASSERT'
   21 | (__builtin_expect(static_cast<bool>(expression), 1) \
      | ^
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__algorithm/sort.h:601:3: note: Loop condition is false.  Exiting loop
  601 |   do {
      | ^
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__algorithm/sort.h:609:3: note: Taking true branch
  609 |   if (__begin == __first - difference_type(1)) {
      | ^
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__algorithm/sort.h:610:12: note: Assuming '__first' is >= '__last'
  610 |     while (__first < __last && !__comp(*--__last, __pivot))
      | ^~~~~~~~~~~~~~~~
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__algorithm/sort.h:610:29: note: Left side of '&&' is false
  610 |     while (__first < __last && !__comp(*--__last, __pivot))
      | ^
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__algorithm/sort.h:629:3: note: Loop condition is false. Execution continues on line 645
  629 | while (__first < __last) {
      | ^
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__algorithm/sort.h:646:7: note: '__begin' is equal to '__pivot_pos'
  646 |   if (__begin != __pivot_pos) {
      | ^~~~~~~
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__algorithm/sort.h:646:3: note: Taking false branch
  646 |   if (__begin != __pivot_pos) {
 | ^
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__algorithm/sort.h:803:15: note: Returning from '__partition_with_equals_on_right<std::_RangeAlgPolicy, std::string *, bool (*&)(const std::string &, const std::string &)>'
  803 |             : std::__partition_with_equals_on_right<_AlgPolicy, _RandomAccessIterator, _Compare>(__first, __last, __comp);
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__algorithm/sort.h:807:9: note: Assuming field 'second' is true
  807 |     if (__ret.second) {
 | ^~~~~~~~~~~~
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__algorithm/sort.h:807:5: note: Taking true branch
  807 |     if (__ret.second) {
      | ^
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__algorithm/sort.h:808:19: note: Calling '__insertion_sort_incomplete<std::_RangeAlgPolicy, bool (*&)(const std::string &, const std::string &), std::string *>'
  808 | bool __fs = std::__insertion_sort_incomplete<_AlgPolicy, _Compare>(__first, __i, __comp);
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__algorithm/sort.h:314:3: note: Control jumps to 'case 2:'  at line 318
  314 |   switch (__last - __first) {
      | ^
/Users/avogelsgesang/bazel-cache/bazel/bazel_user_root/0a6b6ee4727d75e1dd322c74e148faf8/execroot/__main__/external/clang_darwin/include/c++/v1/__algorithm/sort.h:319:9: note: Calling 'lessSize'
  319 |     if (__comp(*--__last, *__first))
 |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~
example.cpp:8:24: note: Method called on moved-from object of type 'std::basic_string'
    8 |    return a.length() < b.length();
      | ^~~~~~~~~~
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsXFtv47by_zTMC2FDoqyLH_LgOMkfBdp_F7stDnBeCFoa2WxlUoekctmH89kPSF0s-RZnt91ulBW89kYiJfI3Mz8Oh0MxrflaAFyj8AaFt1esMhuprh_kGgq9Bs3E-mols-frf21AYFUJwcUamw3gtGBiPTE8e8Yl0xqjyKtPMcGK58-gJmlZVNr-m_4iHwBFHmZrxoU2rn4ui0I-2ruVSq4V2yKyxNxgBaVURmOGt_IBJiw3oCa5AsCP3Gy4sA_SJkPBAgULxcQadP1_LZVBkTdF3i3yFvV3r5EPoDSXAvvx1JtG9eWCr1JEbhC5OXq5_v7QNC9Y9M-iyKs_XS-b8yTgIi2qDDAKlqxYS8XNZouCu2PXtVFcrE9cfIDUSLW76L4rbSETbAu6ZClgB8VNv4Q2zPAUr6QscAFaf-KfAZEklRb55oEkwszivX9yhcgco7i5H1ZgKiUwmxYg1maDSOKuB0u8GpzatSC-7TeFC4O3jAtEEi6Me-CGKUQW7tN_UtvXHSI454UVbVsC4wNhk6QuQ5a9jh5rTCurE6ohK1NW5pSA6z_hiW3LAqZpWaJgkaBgQWYoWOBHpoRr8AL_AmYjM5yyooAMS-EUOJvkSm6xXP0BqcEyx-a5BIxI3Onwimme0lYGMUbhzXlDCm87SHCCUbx8vZywO2xVFN4d66AfoGDhOiikAfu7ZEVhVQ-RmNJc1G2XJShmBVffnsTd7f2gbtkrZTZo2H_PHK3B3P-uQWlE7lmfsxC5X7HPUExSlm6g_av9pZUGRZWUBpF7j0WrCGAWkziLQ_CzLCAkjWfgz5Kc5Qki9_AEaVOaUqvPlLqzBpRg9q5OXjRj6tHq-n1jw_ZCzS6I3D_4rvaOEMh9jQ21sEw3KFhEFm-fvAg6dVVoLijflkUf9GjmoLNHoxL7ZZO-QFawdrZJqXLSG4oLRDa4Rmkqt2X9v1LJPwZiu0BiFx4jFOzM0kV4Uq5OQk48lv4aVqAf7U0WxfqDLHj6bGHfXaOPipWUG1D9KjWFYMutwZ2t4IYAZ5oLJ8NuDNivEPXHgiMX5-6GOz2b1bTTa1C_D_tNt3WTrqwlRadXOVfadLpVMG3qHnUKBqmBrFG6L2CI96t_neLNZ5ZN4r7mLbSutp0PJ0XGjXV7uMY5KzS0GM9npKESnmMnLusrlSXlmjpFYcJQeGBFxQxkLf33R_RXiGl8kAd9yH9jf1rAHb54pZhIN38PzOPCMXqZNDOuS2bSzaXE2WPIv5Ee57PoKD32WktPsSOlldiR-z5Nnilm-XNvoP52nDlaa07iZN-aB1rIhVHS-bXnNXCgatHXattpla45fKCNSXwwWPdbTfvt3NcW_IK-NOWTeN75nXsHXTpVjI7e_ODYu23inbztRyYyuV2kKWj9k2knIQfPONtsnCS-K0Wt2tGame2khLbYLFuH9-jjgrsaUEvPNejJZc9_jR3hJCE9FDo-aH2mfc88g9JsaMG33BxngFc9fRxWHAf-vhX_LGU5dH-MqmCK8Z0w4CyqsCVWMntuAYwDvxHE44YXdg6f2DrvYziOg2B_OEYkvoWcVYVBJG78GmzYnyCm-O4J0sohm0phuKhAYylwwQXgOAx3kNZRAv3ITbppHCAQ7wTS0MI5P-qcu8HFIRFb3XRUc9ucrU274_c4DDt-6JxIEC7605W-zDEfH7rhhX74V4E4Ktii4LxSuvGlUUshDYb_VKzARmKvwzIKDrB0tTAKbq0aexfp4_hQvVgZvwLAUaEWW9R8_zKGXHYMKbgwG1DUbBTojSyyPlvGQc-bGpr6HT5a9_VBjfEJIb5Udf86eEcF4tyF9r0998kik5ut1KbRYudPtlDOZ3ssgIi_q1HPBSPsTtbufz27bEMGeIIznuegQKRAzXMJiCR-HT-yUwVEFv3gwotaPj55kAGz_Ay5wZpngKVFO67xbQQziI1-J5IZk0ASz993O6wIgnuL_-kodeL5gwgB_V3DDTefwHxgyrg6w_WpcWHmhsfTIdKyxYA-crOhzlPTVAqq-HrzUsTqkpjpVweyhoEqLzgI99g-9QJXL_ZoEM06GSWqo1JMNUGbszGVfyiIOk5nInS8G1xg5v2RMOz4lv78083ywwe6-PTp7uNv9Pf_Xy5-u_u_Xz_-9O-72y4KjidtlKydNx-ybdBRLXGfs5kRbw77VIqcry3S_sxNhfuAw1PJRAYZdnkpW5Yq6ejiLLSdkQZ-LQtEApxBzgW8JBR4KhVobamYLPEWtGZrFzQb1jtTcjyCYVqDMq3rMXu1WPpr8MRvBJFQuqp4Ybig8FRCatx6EjM8pakls2BpSbumuj7EzgB851-EB4HzN4zxceKxMxh_gPivl6dkcY2td4e5wAw_sIJneFUZXAldQspzDhm2iAN22You72tHXnFDXm6ZwBEQprTkD7a3Cf211N2yjAFFj6RHfPEQNCYJRt5BCOV0KkN_9Igat-IFmhqPAYyf_cer-W9pfHjXnuwROrrAk416U5zL-OgHFX3fVPRGBfOmiOatYnycNy5IRXAxrinGd0_ctKkIOwppQ16ZfAeBwcibn0intLy6t_oQefO9bEqX4d4um10Qfn0PiLpliOE2g-GqWjPzOMw8cKGxzvAjf5ee1WXE7CIvbTDtRDh8MunH2prp0Pwif2980iDzL1uJ-HYiGBXm5IBTTnLwuUSmaNYlMkWkZp4zQngn7OLStuODhc5mq5FT4S5lpF6lsHpHS6n71NJkUB8QuXVXbvGg0vmFy_Fhe-nWgi_FcIRKeWyl7KPbH-fAs37ujwWzHwtm36XmxifT8XIORebC1mBHriMpJIkXHySSKTDTtsIRsx81jscS8I5MI14D21jH8cRLLGXOz-x80aAcs9RbP4W1_gJsyX9-J8weTdYbYNyTKc3tpOZ2uB3mdFf2-PE0DfJvy4Fj0rU6ODjcZCWFUbLAf1TbUjeuYso0YDtttUyHmamd8MBP9kOCeLifYJAS8D6sN3CGe8p4d-9d6EVT5weUd3yiuJ-c1hs-Oh_k5dzYU2_TaFv717xKYyflpG3g170pY9_82leEXGXXQTYP5uwKrv3YCwPfi0L_anMdxuHci2dBxlJvnkDir1KWRUmcMC8JCMyu-DXxyMzz_dCbk5nvT_PEI0nszZN5GELu-2jmwZbxYloUD9upVOsrrnUF13HiB-SqYCsotHt5DyG7N5ogQlB4e6WubaXJqlprNPMKro3e3cZwU8B17y0o7Yt3Kt2-dceCjl9-485VpYrrjTH1Sja5R-R-zc2mWk1TadXSPrL5mTT7-q1O225YO3M9-V8AAAD__-Tn3vY">