commit all files
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by tunm on 2023/1/25.
|
||||
//
|
||||
|
||||
@@ -253,3 +253,4 @@ HYPER_CAPI_EXPORT extern HREESULT HLPR_ReleaseContext(
|
||||
|
||||
|
||||
#endif //ZEPHYRLPR_HYPER_LPR_SDK_H
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by tunm on 2023/1/25.
|
||||
//
|
||||
|
||||
@@ -17,3 +17,4 @@ typedef struct HLPR_DataBuffer {
|
||||
} HLPR_DataBuffer;
|
||||
|
||||
#endif //ZEPHYRLPR_HYPER_LPR_SDK_INTERNAL_H
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by tunm on 2023/1/27.
|
||||
//
|
||||
|
||||
@@ -229,4 +229,4 @@ JNIEXPORT jobjectArray JNICALL HYPERLPR_API(core_HyperLPRCore_PlateRecognitionFr
|
||||
return jPlateArray;
|
||||
}
|
||||
|
||||
} // extern
|
||||
} // extern
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by tunm on 2023/1/26.
|
||||
//
|
||||
|
||||
@@ -61,3 +61,4 @@ inline std::string jstring2str(JNIEnv *env, jstring jstr) {
|
||||
} // namespace
|
||||
|
||||
#endif //ZEPHYRLPR_JNI_UTILS_H
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by tunm on 2023/1/26.
|
||||
//
|
||||
|
||||
@@ -72,4 +72,4 @@ int main(int argc, char **argv) {
|
||||
HLPR_ReleaseContext(ctx);
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by tunm on 2023/1/22.
|
||||
//
|
||||
#include <iostream>
|
||||
@@ -44,4 +44,4 @@ int main(int argc, char **argv) {
|
||||
cv::imshow("w", image);
|
||||
cv::waitKey(0);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by Tunm-Air13 on 2023/2/8.
|
||||
//
|
||||
|
||||
@@ -110,4 +110,4 @@ int main(int argc, char **argv) {
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
#ifndef _UNISTD_H
|
||||
|
||||
#define _UNISTD_H
|
||||
#include <io.h>
|
||||
#include <process.h>
|
||||
|
||||
#ifndef F_OK
|
||||
#define F_OK 0
|
||||
#endif
|
||||
|
||||
#endif /* _UNISTD_H */
|
||||
@@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
#ifndef ZEPHYRLPR_BASIC_TYPES_H
|
||||
#define ZEPHYRLPR_BASIC_TYPES_H
|
||||
#include "opencv2/opencv.hpp"
|
||||
@@ -15,3 +15,4 @@ typedef cv::Size InputSize;
|
||||
|
||||
|
||||
#endif // ZEPHYRLPR_BASIC_TYPES_H
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by tunm on 2023/1/25.
|
||||
//
|
||||
|
||||
@@ -8,3 +8,4 @@
|
||||
#include "camera_buffer.h"
|
||||
|
||||
#endif //ZEPHYRLPR_CAMERA_BUFFER_ALL_H
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by Tunm-Air13 on 2022/4/24.
|
||||
//
|
||||
|
||||
@@ -234,3 +234,4 @@ int CameraBuffer::GetRotationMode() const{
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by Tunm-Air13 on 2022/4/24.
|
||||
//
|
||||
|
||||
@@ -66,3 +66,4 @@ private:
|
||||
|
||||
}
|
||||
#endif //SOLEXCV_CAMERA_BUFFER_H
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by Tunm-Air13 on 2023/2/21.
|
||||
//
|
||||
#pragma once
|
||||
@@ -27,3 +27,4 @@ const int REC_CHAR_CLASS_NUM = 78;
|
||||
}
|
||||
|
||||
#endif //ZEPHYRLPR_CONFIGURATION_H
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by tunm on 2023/1/25.
|
||||
//
|
||||
|
||||
@@ -9,3 +9,4 @@
|
||||
#include "hyper_lpr_common.h"
|
||||
|
||||
#endif //ZEPHYRLPR_HYPER_LPR_CONTEXT_ALL_H
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by tunm on 2023/1/25.
|
||||
//
|
||||
#pragma once
|
||||
@@ -52,3 +52,4 @@ typedef std::vector<PlateResult> PlateResultList;
|
||||
}
|
||||
|
||||
#endif //ZEPHYRLPR_HYPER_LPR_COMMON_H
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by tunm on 2023/1/25.
|
||||
//
|
||||
#pragma once
|
||||
@@ -220,3 +220,4 @@ int32_t HyperLPRContext::getMInitStatus() const {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by tunm on 2023/1/25.
|
||||
//
|
||||
|
||||
@@ -74,3 +74,4 @@ private:
|
||||
|
||||
|
||||
#endif //ZEPHYRLPR_HYPER_LPR_CONTEXT_H
|
||||
|
||||
|
||||
+2
-1
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by Tunm-Air13 on 2022/12/29.
|
||||
//
|
||||
|
||||
@@ -6,3 +6,4 @@
|
||||
#define ZEPHYRLPR_DOC_H
|
||||
|
||||
#endif //ZEPHYRLPR_DOC_H
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright 2021 iwatake2222
|
||||
/* Copyright 2021 iwatake2222
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
@@ -428,3 +428,4 @@ template void InferenceHelper::PreProcessBlob<int32_t>(int32_t num_thread, const
|
||||
template void InferenceHelper::PreProcessBlob<int64_t>(int32_t num_thread, const InputTensorInfo& input_tensor_info, int64_t* dst);
|
||||
template void InferenceHelper::PreProcessBlob<uint8_t>(int32_t num_thread, const InputTensorInfo& input_tensor_info, uint8_t* dst);
|
||||
template void InferenceHelper::PreProcessBlob<int8_t>(int32_t num_thread, const InputTensorInfo& input_tensor_info, int8_t* dst);
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright 2021 iwatake2222
|
||||
/* Copyright 2021 iwatake2222
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
@@ -278,3 +278,4 @@ protected:
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright 2021 iwatake2222
|
||||
/* Copyright 2021 iwatake2222
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
@@ -43,3 +43,4 @@ limitations under the License.
|
||||
} while(0);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright 2021 iwatake2222
|
||||
/* Copyright 2021 iwatake2222
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
@@ -320,3 +320,4 @@ int32_t InferenceHelperMnn::Process(std::vector<OutputTensorInfo>& output_tensor
|
||||
|
||||
return kRetOk;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright 2021 iwatake2222
|
||||
/* Copyright 2021 iwatake2222
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
@@ -51,3 +51,4 @@ private:
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
+2
-1
@@ -1,4 +1,4 @@
|
||||
#ifndef _LOG_UTILS_H_
|
||||
#ifndef _LOG_UTILS_H_
|
||||
#define _LOG_UTILS_H_
|
||||
|
||||
#include <stdio.h>
|
||||
@@ -48,3 +48,4 @@
|
||||
//#endif
|
||||
|
||||
#endif // _LOG_UTILS_H_
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by tunm on 2023/1/25.
|
||||
//
|
||||
|
||||
@@ -10,3 +10,4 @@
|
||||
#include "classification/all.h"
|
||||
|
||||
#endif //ZEPHYRLPR_NN_IMPLEMENTATION_ALL_H
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by tunm on 2023/1/22.
|
||||
//
|
||||
#pragma once
|
||||
@@ -10,3 +10,4 @@
|
||||
#include "classification_engine.h"
|
||||
|
||||
#endif //ZEPHYRLPR_CLASSIFICATION_ALL_H
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by Tunm-Air13 on 2023/2/9.
|
||||
//
|
||||
|
||||
@@ -104,4 +104,4 @@ float ClassificationEngine::getMOutputMaxConfidence() const {
|
||||
}
|
||||
|
||||
|
||||
} // namespace
|
||||
} // namespace
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by Tunm-Air13 on 2023/2/9.
|
||||
//
|
||||
#pragma once
|
||||
@@ -52,3 +52,4 @@ private:
|
||||
} // namespace
|
||||
|
||||
#endif //ZEPHYRLPR_CLASSIFICATION_ENGINE_H
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by tunm on 2023/1/22.
|
||||
//
|
||||
|
||||
@@ -31,4 +31,4 @@ const cv::Size &PlateClassification::getMInputImageSize() const {
|
||||
return m_input_image_size_;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by tunm on 2023/1/22.
|
||||
//
|
||||
#pragma once
|
||||
@@ -37,3 +37,4 @@ private:
|
||||
|
||||
|
||||
#endif //ZEPHYRLPR_PLATE_CLASSIFICATION_H
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by tunm on 2023/1/22.
|
||||
//
|
||||
|
||||
@@ -12,3 +12,4 @@ typedef enum {
|
||||
} PlateColor;
|
||||
|
||||
#endif //ZEPHYRLPR_PLATE_CLS_COMMON_H
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by tunm on 2022/12/29.
|
||||
//
|
||||
#pragma once
|
||||
@@ -14,3 +14,4 @@
|
||||
|
||||
|
||||
#endif //ZEPHYRLPR_DETECT_ALL_H
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by tunm on 2023/2/8.
|
||||
//
|
||||
|
||||
@@ -138,4 +138,4 @@ void DetArch::Detection(const cv::Mat &bgr, bool is_resize, float scale) {
|
||||
}
|
||||
|
||||
|
||||
} // namespace
|
||||
} // namespace
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by tunm on 2023/2/8.
|
||||
//
|
||||
#pragma once
|
||||
@@ -52,3 +52,4 @@ private:
|
||||
|
||||
|
||||
#endif //ZEPHYRLPR_DET_ARCH_H
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by Tunm-Air13 on 2023/2/8.
|
||||
//
|
||||
|
||||
@@ -93,4 +93,4 @@ std::vector<OutputTensorInfo> &DetBackbone::getMOutputTensorInfoList() {
|
||||
}
|
||||
|
||||
|
||||
} // namespace;
|
||||
} // namespace;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by Tunm-Air13 on 2023/2/8.
|
||||
//
|
||||
#pragma once
|
||||
@@ -41,3 +41,4 @@ private:
|
||||
} // namespace;
|
||||
|
||||
#endif //ZEPHYRLPR_DET_BACKBONE_H
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by Tunm-Air13 on 2023/2/8.
|
||||
//
|
||||
|
||||
@@ -97,4 +97,4 @@ std::vector<OutputTensorInfo> &DetHeader::getMOutputTensorInfoList() {
|
||||
void DetHeader::setMOutputTensorInfoList(const std::vector<OutputTensorInfo> &mOutputTensorInfoList) {
|
||||
m_output_tensor_info_list_ = mOutputTensorInfoList;
|
||||
}
|
||||
} // namespace
|
||||
} // namespace
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by Tunm-Air13 on 2023/2/8.
|
||||
//
|
||||
|
||||
@@ -51,3 +51,4 @@ private:
|
||||
} // namespace
|
||||
|
||||
#endif //ZEPHYRLPR_DET_HEADER_H
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by tunm on 2022/12/29.
|
||||
//
|
||||
#pragma once
|
||||
@@ -65,3 +65,4 @@ inline std::vector<float> xywh2xyxy(float x, float y, float w, float h) {
|
||||
}
|
||||
|
||||
#endif //ZEPHYRLPR_PLATE_DET_COMMON_H
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by tunm on 2022/12/29.
|
||||
//
|
||||
|
||||
@@ -104,4 +104,4 @@ void PlateDetector::Detection(const cv::Mat &bgr, bool is_resize, float scale) {
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by tunm on 2022/12/29.
|
||||
//
|
||||
#pragma once
|
||||
@@ -44,3 +44,4 @@ private:
|
||||
}
|
||||
|
||||
#endif //ZEPHYRLPR_PLATE_DETECTOR_H
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by Tunm-Air13 on 2022/12/30.
|
||||
//
|
||||
|
||||
@@ -10,3 +10,4 @@
|
||||
#include "recognition_engine.h"
|
||||
|
||||
#endif //ZEPHYRLPR_RECOGNITION_ALL_H
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by Tunm-Air13 on 2022/12/30.
|
||||
//
|
||||
|
||||
@@ -79,4 +79,4 @@ float PlateRecognition::getMConfidenceThreshold() const {
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by Tunm-Air13 on 2022/12/30.
|
||||
//
|
||||
#pragma once
|
||||
@@ -49,3 +49,4 @@ private:
|
||||
}
|
||||
|
||||
#endif //ZEPHYRLPR_PLATE_RECOGNITION_H
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by tunm on 2023/1/25.
|
||||
//
|
||||
#pragma once
|
||||
@@ -15,3 +15,4 @@ static const std::vector<std::string> TOKENIZE = {
|
||||
"贵", "赣", "辽", "鄂", "闽", "陕", "青", "鲁", "黑", "领", "使", "澳"};
|
||||
|
||||
#endif //ZEPHYRLPR_PLATE_RECOGNITION_TOKENIZE_H
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by Tunm-Air13 on 2022/12/30.
|
||||
//
|
||||
|
||||
@@ -21,3 +21,4 @@ typedef std::vector<TextLine> TextLines; ///< 多行文本表达
|
||||
}
|
||||
|
||||
#endif //ZEPHYRLPR_RECOGNITION_COMMOM_H
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by tunm on 2023/2/6.
|
||||
//
|
||||
|
||||
@@ -148,4 +148,4 @@ RecognitionEngine::~RecognitionEngine() {
|
||||
m_nn_infer_.reset();
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by tunm on 2023/2/6.
|
||||
//
|
||||
#pragma once
|
||||
@@ -56,3 +56,4 @@ private:
|
||||
} // namespace
|
||||
|
||||
#endif //ZEPHYRLPR_RECOGNITION_ENGINE_H
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by tunm on 2023/1/25.
|
||||
//
|
||||
|
||||
@@ -8,3 +8,4 @@
|
||||
#include "mnn_adapter.h"
|
||||
|
||||
#endif //ZEPHYRLPR_MNN_ADAPTER_ALL_H
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by tunm on 2022/4/24.
|
||||
//
|
||||
|
||||
@@ -105,3 +105,4 @@ void MNNAdapterInference::setImageFormatDst(MNN::CV::ImageFormat imageFormatDst)
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by tunm on 2022/4/24.
|
||||
//
|
||||
|
||||
@@ -52,3 +52,4 @@ private:
|
||||
|
||||
}
|
||||
#endif //ZEPHYRLPR_MNN_ADAPTER_H
|
||||
|
||||
|
||||
+2
-1
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by Tunm-Air13 on 2022/12/30.
|
||||
//
|
||||
#pragma once
|
||||
@@ -146,3 +146,4 @@ inline float boundBoxOverlap(const cv::Rect_<T> &box1, const cv::Rect_<T> &box2)
|
||||
}
|
||||
|
||||
#endif //ZEPHYRLPR_UTILS_H
|
||||
|
||||
|
||||
+2
-1
@@ -1,6 +1,7 @@
|
||||
|
||||
|
||||
#pragma once
|
||||
|
||||
#define HYPERLPR_VER_MAJOR 3
|
||||
#define HYPERLPR_VER_MINOR 0
|
||||
#define HYPERLPR_VER_PATCH 1
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by tunm on 2023/2/11.
|
||||
//
|
||||
|
||||
@@ -51,4 +51,4 @@ TEST_CASE("test_Classification", "[nn_cls]") {
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by tunm on 2023/2/11.
|
||||
//
|
||||
#include "basic_types.h"
|
||||
@@ -44,3 +44,4 @@ TEST_CASE("test_Detection", "[nn_detect]") {
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by tunm on 2023/2/11.
|
||||
//
|
||||
#include "basic_types.h"
|
||||
@@ -48,4 +48,4 @@ TEST_CASE("test_Recognition", "[nn_rec]") {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by tunm on 2023/2/11.
|
||||
//
|
||||
#define CATCH_CONFIG_RUNNER
|
||||
@@ -7,4 +7,4 @@
|
||||
int main(int argc, char* argv[]) {
|
||||
|
||||
return Catch::Session().run(argc, argv);;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by tunm on 2023/2/11.
|
||||
//
|
||||
|
||||
@@ -18,4 +18,4 @@ std::string getTestSaveDir() {
|
||||
|
||||
std::string getTestSaveData(const std::string& name) {
|
||||
return getTestSaveDir() + "/" + name;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Created by tunm on 2023/2/11.
|
||||
//
|
||||
#pragma once
|
||||
@@ -39,3 +39,4 @@ struct test_case_line {
|
||||
};
|
||||
|
||||
#endif //ZEPHYRLPR_TEST_SETTINGS_H
|
||||
|
||||
|
||||
Reference in New Issue
Block a user