Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

属性占位符替换时增加判断 #70

Open
wants to merge 95 commits into
base: property-placeholder-configurer
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
95 commits
Select commit Hold shift + click to select a range
8107811
instantiation-strategy
DerekYRC Nov 24, 2020
bf88d6a
instantiation-strategy
DerekYRC Nov 24, 2020
aa3ec5a
包扫描
DerekYRC Dec 26, 2020
ad87fc0
update readme.md
DerekYRC Dec 26, 2020
be7526f
update changelog.md
DerekYRC Dec 26, 2020
07d5ed0
@Value注解
DerekYRC Dec 27, 2020
b59d219
update readme.md
DerekYRC Dec 27, 2020
fb9077b
update readme.md
DerekYRC Dec 27, 2020
0806b4e
update readme.md
DerekYRC Dec 27, 2020
408a37a
update changelog.md
DerekYRC Dec 27, 2020
f90b1d2
@Autowired注解
DerekYRC Dec 27, 2020
9e2b1e4
为AOP代理对象注入属性
Dec 30, 2020
8c1e6fe
Merge pull request #3 from kerwin89/populate-proxy-bean-with-property…
DerekYRC Dec 30, 2020
e12a210
修复没有为代理bean设置属性的问题
DerekYRC Dec 30, 2020
44f6498
update readme.md
DerekYRC Dec 30, 2020
ff04402
update readme.md
DerekYRC Dec 30, 2020
fc7de06
类型转换(一)
DerekYRC Jan 16, 2021
433a1c6
类型转换(一)
DerekYRC Jan 16, 2021
07b54b2
update change.log
DerekYRC Jan 16, 2021
838821e
update readme.md
DerekYRC Jan 16, 2021
21b831a
类型转换二
DerekYRC Jan 17, 2021
e0ddf60
update readme.md
DerekYRC Jan 17, 2021
7a3c32d
解决循环依赖问题
DerekYRC Jan 25, 2021
b2cdbb2
没有代理对象的循环依赖
DerekYRC Jan 30, 2021
389c721
没有代理对象的循环依赖
DerekYRC Jan 30, 2021
6eba0ad
没有代理对象的循环依赖
DerekYRC Jan 30, 2021
bfd342b
有代理对象的循环依赖
DerekYRC Jan 30, 2021
26306ec
有代理对象时的循环依赖问题
DerekYRC Jan 30, 2021
c380a8b
有代理对象时的循环依赖问题
DerekYRC Jan 30, 2021
fc5e5dc
Update README_CN.md
DerekYRC Jan 30, 2021
d66a48f
Update README_CN.md
DerekYRC Jan 30, 2021
2697e29
update readme.md
DerekYRC Jan 30, 2021
1a50a46
update readme.md
DerekYRC Jan 30, 2021
b29bc9b
update readme.md
DerekYRC Jan 30, 2021
a2dd472
update readme.md
DerekYRC Jan 30, 2021
385492e
update readme.md
DerekYRC Jan 30, 2021
2086a0c
update readme.md
DerekYRC Jan 30, 2021
a41ad3e
update changelog.md
DerekYRC Jan 30, 2021
75e8309
update changelog.md
DerekYRC Jan 30, 2021
cf3d98b
解决有代理对象时的循环依赖问题
DerekYRC Jan 31, 2021
22e329b
提前实例化单例bean时对beanDefinition的scope添加判断
DerekYRC Feb 27, 2021
3b79ca8
修复文档书写问题
DerekYRC Apr 7, 2021
bd59c50
修复文档书写问题
DerekYRC Apr 7, 2021
c280322
Update README_CN.md
DerekYRC Mar 15, 2022
db08891
添加mini-spring-cloud链接
DerekYRC Mar 19, 2022
8b5b311
添加mini-spring-cloud链接
DerekYRC Mar 19, 2022
ba969c8
添加mini-spring-cloud链接
DerekYRC Mar 19, 2022
9847004
添加mini-spring-cloud链接
DerekYRC Mar 19, 2022
00ec699
update readme
DerekYRC Mar 26, 2022
83ecf3d
update readme
DerekYRC Apr 1, 2022
7b03bee
Update README_CN.md
DerekYRC Apr 2, 2022
ac470cb
Update README_CN.md
DerekYRC Apr 2, 2022
17ee282
update readme
DerekYRC Apr 6, 2022
2efb823
update changelog
DerekYRC Apr 7, 2022
4cd9cd8
implement cglib instantiation strategy
FreeSlaver Jun 14, 2022
26c48e5
update typos in changelog.md
Jun 23, 2022
4fe95f4
Merge pull request #27 from zhenglinhui/patch-1
DerekYRC Jun 23, 2022
be8f86f
Merge pull request #26 from FreeSlaver/instantiation-strategy
DerekYRC Jun 23, 2022
d1c291f
Merge branch 'main' into instantiation-strategy
DerekYRC Jun 23, 2022
8ed8a83
Merge pull request #28 from DerekYRC/instantiation-strategy
DerekYRC Jun 23, 2022
df3bb7c
update changelog
DerekYRC Jul 5, 2022
0164b61
Merge branch 'main' of github.com:DerekYRC/mini-spring
DerekYRC Jul 5, 2022
dcbcc74
update changelog
DerekYRC Jul 5, 2022
69055f4
bean初始化和销毁方法
DerekYRC Aug 23, 2022
fe144dc
bean初始化和销毁方法
DerekYRC Aug 23, 2022
a632e4c
update readme
DerekYRC Aug 23, 2022
187aebc
update readme
DerekYRC Aug 23, 2022
39e3747
update readme
DerekYRC Aug 23, 2022
8b500d5
Update README.md
DerekYRC Nov 23, 2022
c91c533
Update README.md
DerekYRC Nov 23, 2022
4d013a6
Update changelog.md
DerekYRC Nov 25, 2022
5dfe53b
Update changelog.md
DerekYRC Nov 25, 2022
9d9ed15
Update README.md
DerekYRC Dec 5, 2022
bf1f13d
增加懒加载,重写了AOP的实现。
zqczgl Dec 21, 2022
e142da1
修改changelog
zqczgl Dec 22, 2022
f1cf4fb
Merge pull request #40 from zqczgl/main
DerekYRC Dec 23, 2022
e771a6e
修改了DynamicProxyTest
zqczgl Dec 23, 2022
15f0b25
Merge pull request #41 from zqczgl/main
DerekYRC Dec 23, 2022
277afdc
支持懒加载和多切面增强
DerekYRC Dec 26, 2022
ffc451c
update readme
DerekYRC Dec 26, 2022
db1ba10
update readme
DerekYRC Dec 26, 2022
d204fd6
Update changelog.md
zqczgl Dec 28, 2022
b2020c2
Merge pull request #42 from zqczgl/patch-1
DerekYRC Dec 29, 2022
060de4f
Update README.md
DerekYRC Jan 31, 2023
00b8237
Update changelog.md
DerekYRC Feb 17, 2023
5cafaa0
将BeanDefinition 的Map 修改成为并发Map ,并设置初始化大小
1713612859 Oct 8, 2023
246442b
Merge pull request #61 from 1713612859/main
DerekYRC Oct 8, 2023
727abca
避免继承自InitializingBean,且自定义方法与InitializingBean方法同名,初始化方法执行两次的情况
Whale-lyi Nov 30, 2023
bb71305
Merge pull request #64 from Whale-lyi/init-and-destroy-method
DerekYRC Nov 30, 2023
9a0d36c
Merge remote-tracking branch 'origin/init-and-destroy-method'
DerekYRC Nov 30, 2023
b9f4673
Update README.md
wangflyzihao Feb 20, 2024
faf9f5f
Merge pull request #67 from wangflyzihao/main
DerekYRC Feb 21, 2024
1b93838
在README.md的使用方法章节添加了视频教程链接
rice666 Mar 5, 2024
ef07ca1
Merge pull request #68 from rice666/main
DerekYRC Mar 5, 2024
2b4079e
属性占位符替换时增加判断
zzziCode Mar 11, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
118 changes: 75 additions & 43 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,54 +1,86 @@
# <img src="assets/spring-framework.png" width="80" height="80"> mini-spring
[![Build Status](https://img.shields.io/badge/build-passing-brightgreen)](https://github.com/DerekYRC/mini-spring)
[![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg)](https://www.apache.org/licenses/LICENSE-2.0.html)
[![Stars](https://img.shields.io/github/stars/DerekYRC/mini-spring)](https://img.shields.io/github/stars/DerekYRC/mini-spring)
[![Forks](https://img.shields.io/github/forks/DerekYRC/mini-spring)](https://img.shields.io/github/forks/DerekYRC/mini-spring)

## About
* [中文版](./README_CN.md)

The **mini-spring** is a simplified version of the Spring framework that will help you quickly get familiar with the Spring source code and grasp the core principles of Spring. The core logic of Spring is extracted, the code is extremely simplified, and the core functions of Spring, such as IoC and AOP, resource loaders, event listeners, type conversion, container extension points, bean life cycle and scope, and application context, are retained.

If this project can help you, please give a **STAR, thank you!!!**

## Contents
#### Basics
* [IoC](#Ioc)
* [Implement a simple container](#实现一个简单的容器)
* [BeanDefinition and BeanDefinitionRegistry](#BeanDefinition和BeanDefinitionRegistry)
* [Bean Instantiation Strategy](#Bean实例化策略InstantiationStrategy)
* [Populate bean with property values](#为bean填充属性)
* [Populate bean with bean](#为bean注入bean)
* [Resource and ResourceLoader](#资源和资源加载器)
* [Define the bean in the XML file](#在xml文件中定义bean)
* [Container extension mechanism:BeanFactoryPostProcess and BeanPostProcessor](#容器扩展机制BeanFactoryPostProcess和BeanPostProcessor)
* [ApplicationContext](#应用上下文ApplicationContext)
* [Init method and destroy method of bean](#bean的初始化和销毁方法)
* [Aware interface](#Aware接口)
* [Bean scope, added prototype support](#bean作用域,增加prototype的支持)
* [FactoryBean](#FactoryBean)
* [Event and event listener](#容器事件和事件监听器)
* [AOP](#AOP)
* [Pointcut expression](#切点表达式)
* [JDK-based dynamic proxy](#基于JDK的动态代理)
* [CGLIB-based dynamic proxy](#基于CGLIB的动态代理)
* [AOP ProxyFactory](#AOP代理工厂ProxyFactory)
* [Common Advice: BeforeAdvice/AfterAdvice/AfterReturningAdvice/ThrowsAdvice](#几种常用的Advice)
* [PointcutAdvisor:A combination of Pointcut and Advice](#PointcutAdvisor:Pointcut和Advice的组合)
* [Dynamic proxies are integrated into the bean lifecycle](#动态代理融入bean生命周期)
**[English](./README_en.md) | 简体中文**

**姊妹版:**[**mini-spring-cloud**](https://github.com/DerekYRC/mini-spring-cloud) **(简化版的spring cloud框架)**

## 关于

**mini-spring**是简化版的spring框架,能帮助你快速熟悉spring源码和掌握spring的核心原理。抽取了spring的核心逻辑,**代码极度简化,保留spring的核心功能**,如IoC和AOP、资源加载器、事件监听器、类型转换、容器扩展点、bean生命周期和作用域、应用上下文等核心功能。

如果本项目能帮助到你,请给个**STAR,谢谢!!!**

## 功能
#### 基础篇
* [IoC](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#基础篇IoC)
* [实现一个简单的容器](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#最简单的bean容器)
* [BeanDefinition和BeanDefinitionRegistry](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#BeanDefinition和BeanDefinitionRegistry)
* [Bean实例化策略InstantiationStrategy](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#Bean实例化策略InstantiationStrategy)
* [为bean填充属性](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#为bean填充属性)
* [为bean注入bean](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#为bean注入bean)
* [资源和资源加载器](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#资源和资源加载器)
* [在xml文件中定义bean](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#在xml文件中定义bean)
* [容器扩展机制BeanFactoryPostProcess和BeanPostProcessor](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#BeanFactoryPostProcess和BeanPostProcessor)
* [应用上下文ApplicationContext](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#应用上下文ApplicationContext)
* [bean的初始化和销毁方法](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#bean的初始化和销毁方法)
* [Aware接口](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#Aware接口)
* [bean作用域,增加prototype的支持](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#bean作用域增加prototype的支持)
* [FactoryBean](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#FactoryBean)
* [容器事件和事件监听器](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#容器事件和事件监听器)
* [AOP](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#基础篇AOP)
* [切点表达式](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#切点表达式)
* [基于JDK的动态代理](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#基于JDK的动态代理)
* [基于CGLIB的动态代理](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#基于CGLIB的动态代理)
* [AOP代理工厂ProxyFactory](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#AOP代理工厂)
* [几种常用的Advice: BeforeAdvice/AfterAdvice/AfterReturningAdvice/ThrowsAdvice](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#几种常用的AdviceBeforeAdviceAfterAdviceAfterReturningAdviceThrowsAdvice)
* [PointcutAdvisor:Pointcut和Advice的组合](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#pointcutadvisorpointcut和advice的组合)
* [动态代理融入bean生命周期](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#动态代理融入bean生命周期)

#### 扩展篇
* [PropertyPlaceholderConfigurer](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#propertyplaceholderconfigurer)
* [包扫描](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#包扫描)
* [@Value注解](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#value注解)
* [基于注解@Autowired的依赖注入](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#autowired注解)
* [类型转换(一)](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#类型转换一)
* [类型转换(二)](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#类型转换二)

#### 高级篇
* [解决循环依赖问题(一):没有代理对象](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#解决循环依赖问题一没有代理对象)
* [解决循环依赖问题(二):有代理对象](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#解决循环依赖问题二有代理对象)

#### 其他
* [没有为代理bean设置属性(discovered and fixed by kerwin89)](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#bug-fix没有为代理bean设置属性discovered-and-fixed-by-kerwin89)
* [支持懒加载和多切面增强(by zqczgl)](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md#支持懒加载和多切面增强by-zqczgl)

## 使用方法
阅读[changelog.md](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md)

[视频教程(完整版)](https://www.bilibili.com/video/BV1nb4y1A7YJ)

## 提问
[**点此提问**](https://github.com/DerekYRC/mini-spring/issues/4)

## 贡献
欢迎Pull Request

## 关于我
[**点此了解**](https://github.com/DerekYRC)

手机/微信:**15521077528** 邮箱:**[email protected]**

#### Expanding
* [PropertyPlaceholderConfigurer](#PropertyPlaceholderConfigurer)
* [Type conversion](#类型转换)
* [Package scan](#包扫描)
* [Autowired annotation](#基于注解的依赖注入Autowired)
## Star History

#### Advanced
* [Solve the problem of circular dependencies](#解决循环依赖问题)
[![Star History Chart](https://api.star-history.com/svg?repos=DerekYRC/mini-spring&type=Date)](https://star-history.com/#DerekYRC/mini-spring&Date)

## Usage
Each function point corresponds to a branch. Switch to the branch corresponding to the function point to see the new function. The incremental change point is described in the [changelog.md](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md) file.
## 版权说明
未取得本人书面许可,不得将该项目用于商业用途

## Reference
## 参考
- [《Spring源码深度解析》](https://book.douban.com/subject/25866350/)
- [《Spring 源码解析》](http://svip.iocoder.cn/categories/Spring)
- [《精通Spring 4.x》](https://book.douban.com/subject/26952826/)
- [tiny-spring](https://github.com/code4craft/tiny-spring)
- [tiny-spring](https://github.com/code4craft/tiny-spring)
54 changes: 0 additions & 54 deletions README_CN.md

This file was deleted.

71 changes: 71 additions & 0 deletions README_en.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# <img src="assets/spring-framework.png" width="80" height="80"> mini-spring
[![Build Status](https://img.shields.io/badge/build-passing-brightgreen)](https://github.com/DerekYRC/mini-spring)
[![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg)](https://www.apache.org/licenses/LICENSE-2.0.html)
[![Stars](https://img.shields.io/github/stars/DerekYRC/mini-spring)](https://img.shields.io/github/stars/DerekYRC/mini-spring)
[![Forks](https://img.shields.io/github/forks/DerekYRC/mini-spring)](https://img.shields.io/github/forks/DerekYRC/mini-spring)

**English | [简体中文](./README.md)**

[**mini-spring-cloud**](https://github.com/DerekYRC/mini-spring-cloud) **(simplified version of the Spring Cloud framework)**

## About

The **mini-spring** is a simplified version of the Spring framework that will help you quickly get familiar with the Spring source code and grasp the core principles of Spring. The core logic of Spring is extracted, the code is extremely simplified, and the core functions of Spring, such as IoC and AOP, resource loaders, event listeners, type conversion, container extension points, bean life cycle and scope, and application context, are retained.

If this project can help you, please **STAR the project, thank you!!!**

## Contents
#### Basics
* [IoC](#Ioc)
* [Implement a simple container](#实现一个简单的容器)
* [BeanDefinition and BeanDefinitionRegistry](#BeanDefinition和BeanDefinitionRegistry)
* [Bean Instantiation Strategy](#Bean实例化策略InstantiationStrategy)
* [Populate bean with property values](#为bean填充属性)
* [Populate bean with bean](#为bean注入bean)
* [Resource and ResourceLoader](#资源和资源加载器)
* [Define the bean in the XML file](#在xml文件中定义bean)
* [Container extension mechanism:BeanFactoryPostProcess and BeanPostProcessor](#容器扩展机制BeanFactoryPostProcess和BeanPostProcessor)
* [ApplicationContext](#应用上下文ApplicationContext)
* [Init method and destroy method of bean](#bean的初始化和销毁方法)
* [Aware interface](#Aware接口)
* [Bean scope, added prototype support](#bean作用域,增加prototype的支持)
* [FactoryBean](#FactoryBean)
* [Event and event listener](#容器事件和事件监听器)
* [AOP](#AOP)
* [Pointcut expression](#切点表达式)
* [JDK-based dynamic proxy](#基于JDK的动态代理)
* [CGLIB-based dynamic proxy](#基于CGLIB的动态代理)
* [AOP ProxyFactory](#AOP代理工厂ProxyFactory)
* [Common Advice: BeforeAdvice/AfterAdvice/AfterReturningAdvice/ThrowsAdvice](#几种常用的Advice)
* [PointcutAdvisor:A combination of Pointcut and Advice](#PointcutAdvisor:Pointcut和Advice的组合)
* [Dynamic proxies are integrated into the bean lifecycle](#动态代理融入bean生命周期)


#### Expanding
* [PropertyPlaceholderConfigurer](#PropertyPlaceholderConfigurer)
* [Package scan](#包扫描)
* [Value annotation](#Value)
* [Autowired annotation](#Autowired)
* [Type conversion(first part)](#类型转换一)
* [Type conversion(second part)](#类型转换二)

#### Advanced
* [Solve the problem of circular dependencies(first part): without proxy bean](#解决循环依赖问题一)
* [Solve the problem of circular dependencies(second part): with proxy bean](#解决循环依赖问题二)

#### Bug fix
* [populate proxy bean with property values(discovered and fixed by kerwin89)](#没有为代理bean设置属性)

## Usage
Each function point corresponds to a branch. Switch to the branch corresponding to the function point to see the new function. The incremental change point is described in the [changelog.md](https://github.com/DerekYRC/mini-spring/blob/main/changelog.md) file.

## Contributing
Any contributions you make are greatly appreciated.

## Contact
Please feel free to ask me any questions related to mini-spring and other technologies. My email is **[email protected]**.

## Reference
- [《Spring源码深度解析》](https://book.douban.com/subject/25866350/)
- [《精通Spring 4.x》](https://book.douban.com/subject/26952826/)
- [tiny-spring](https://github.com/code4craft/tiny-spring)
1 change: 1 addition & 0 deletions assets/application-context-life-cycle.drawio
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<mxfile host="Electron" modified="2020-11-29T03:24:01.190Z" agent="5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/13.9.9 Chrome/85.0.4183.121 Electron/10.1.5 Safari/537.36" etag="m01E5M53RLUkah0iz8SN" version="13.9.9" type="device"><diagram id="XCup01_M196d-NdNm2gF" name="第 1 页">7ZnbcpswEIafRpfpmJMQl2CTtDPJTDqetkluOopRgBYjV8ixnaevJCQDPiRup3Zd11dGv1Yg7e4nwRo4/fH8iuFJdkMTUgC7l8yBMwC2bfegLX6ksqgVy0JaSVmeaK0RhvkL0WJPq9M8IVXHkFNa8HzSFUe0LMmIdzTMGJ11zZ5o0X3qBKdkTRiOcLGufskTntUqsv1Gf0/yNDNPtmBQ94yxMdYrqTKc0FlLcmLg9BmlvL4az/ukkN4zfqnHXW7pXU6MkZLvMuDl68tt+uFj+HmYk/wxCL2H5NMF0nPjC7Ngkoj16yZlPKMpLXERN2rE6LRMiLxrT7Qam2tKJ0K0hPiNcL7QwcRTToWU8XGhe8k853dy+DtPt+5bPYO5vrNqLEyj5GzRGiSb9+2+ZphqmXHrXtKOq+iUjcgrrjHZhllK+Ct2Op+l31oP0DG4InRMxHyEASMF5vlzN6+wTs90addEUFzoIP5CQPV9n3Ex1U8CNizE/KMnKjzQDjX8MaWm46JSwQqFgYUm86ZTXKX6V92lmuDSaHc31yCGIIAA+SB2QRSBCBpDMfu2bUuuJ2LklfRrkkvmwyzLORlOsArUTGwx3USqOKPfSZ8WlKnRDrIfHQjlmvKiaOmJR1Di6rWa7N5AkPEeYZzMX42m2eGQptvsb4b2WbNZWFBrWWujcHt7SoDgTPQbpL5JtHNURNt7IjoiuByQp7zMeU7LU+XT7fJp99b5XNochE/zYnMGdCt4bwIKjwpQZ4+AXuIRp2xxSyt+y+iIVJVARh61lyCM1eErroP/AuXl0WpQRusou+igKNtnlLf5xt0RZf+oUHb3iPIKwx5AAUADEPsgGiiYPRC6ALlSCXoAwRPleHkEa45dd51jxz4ox96Z422+8Xbk2HKPCmTvkCBLWuMzyHDDu/WBQbbWfHqkIP8+kHBHII+LR7gnHh8Fjwq4GASxejGOAYrU6dqXhakTJW+l6uTAv111spx/hbzDH6H+jsR6R0Wsvydi5UerePMNfRAjEFqC05phcVaG6tAU6CIQDBTVfgfmutYcBfIickDgnSreK0Urb0NR+cBFq319GKkteyDLGTIBXBCiE42ps1K9gBuqF3+oeCGazb+Kqq/156wT/wQ=</diagram></mxfile>
Loading