锘??xml version="1.0" encoding="utf-8" standalone="yes"?> So now you have: The percent utilization will be Y / (X x C) * 100 娣誨姞緗戞ˉ 浣跨敤openvswitch寤虹珛緗戞ˉ錛宬vm浣跨敤錛屽懡浠ゅ涓嬶細 寤虹珛緗戞ˉbr #ovs-vsctl add-br br0 鎶奺th0(鐗╃悊鏈轟笂緗戠殑緗戝崱)娣誨姞鍒癰r0 #ovs-vsctl add-port br0 eth0 濡傛灉涓嶅嚭鎰忓鐨勮瘽鐜板湪鏈哄櫒灝變笉鑳戒笂緗戜簡錛屽彲浠ユ寜鐓т互涓嬫柟娉曡В鍐?/p> 鍒犻櫎eth0鐨勯厤緗?/p> #ifconfig eth0 0 涓篵r0鍒嗛厤ip #dhclient br0 鍥犱負鎴戜嬌鐢ㄧ殑鏄痙hcp鑾峰彇ip鐨勶紝鎵浠ユ墽琛屼簡姝ゅ懡浠わ紝濡傛灉浣犵殑ip鏄嚜宸辨墜鍔ㄩ厤緗殑錛岃鎶奺th0鐨勯厤緗啓鍒癰r0涓娿?/p>
]]>
]]>
import java.util.concurrent.*;
osx = ManagementFactory.getOperatingSystemMXBean();
cores = osx.getAvailableProcessors(); // Factorial to keep the process busy so we can see some actual activity
factorial = { n -> int fact = 1; int i = 1; while(i <= n) { i++; fact *= i; } return fact; }
long elapsedTime = -1, startTime = -1; long elapsedCpu = -1, startCpu = -1;;
for(i in 0..20) { startTime = System.nanoTime(); startCpu = osx.getProcessCpuTime(); CountDownLatch latch = new CountDownLatch(cores); for(x in 1..cores) { Thread.startDaemon() { factorial(1000000); latch.countDown(); } } latch.await(); elapsedTime = System.nanoTime()-startTime; elapsedCpu = osx.getProcessCpuTime()-startCpu; percUsage = (elapsedCpu / (elapsedTime* cores)) *100; println "Percent Usage:$percUsage %"; }
]]>
]]>
]]>
]]>
]]>
]]>
]]>
tip:
]]>
iso:
]]>
MD5Digest();
byte[] bytes = "111111".getBytes();
dig.update(bytes, 0, bytes.length);
byte[] md5 = new byte[dig.getDigestSize()];
dig.doFinal(md5, 0);
System.out.println(new String(Base64.encode(md5)));
1銆佸畼鏂規枃妗?鍩烘湰鐢ㄦ埛鎵嬪唽錛歨ttp://directory.apache.org/apacheds/basic-user-guide.html 涓昏浠嬬粛浜嗗畨瑁呬互鍙婂熀鏈搷浣溿佺櫥褰曠瓑銆?/p>
2銆佸畼鏂規枃妗?楂樼駭鐢ㄦ埛鎵嬪唽錛歨ttp://directory.apache.org/apacheds/advanced-user-guide.html 浠嬬粛浜嗕唬鐮佺紪璇戙佺郴緇熺粨鏋勩佹湇鍔¢厤緗互鍙婃湇鍔℃潈闄愮鐞嗭紝榪欓噷鍚愭Ы涓涓嬶紝鐪熺殑寰堥毦鎳傦紝騫朵笖鍚勭TODO錛?/p>
3銆佺湅璧鋒潵鍍忓畼鏂圭殑鏂囨。錛歨ttp://joacim.breiler.com/apacheds/book.html 浠嬬粛寰楀緢璇﹀敖錛屼緥瀛愪篃寰堜赴瀵屻?/p>
4銆佽闂帶鍒跺疄渚?nbsp;FR20_ApacheDS_Access_Control_Administration_The_X.500_Way.pdf
=============================================================================================================
甯哥敤鐨勫悕璇嶈В鏋愶細
DIT Directory Information Tree
AA administrative areas
AP administrative points
AAA autonomous administrative area 鏈夎嚜娌繪潈鐨勭鐞嗗尯鍩燂紝鎵鏈夌殑瀹炰綋鍧囩粺涓綆$悊
SAA specific administrative area 鐗瑰畾綆$悊鍖哄煙
IAA inner administrative area 鍐呴儴綆$悊鍖哄煙
SAP specific administrative point
ACI Access Control Information
Usually an entry is selected as the administrative point and marked with an operational attribute. The attributeType of the operational attribute is 'administrativeRole'.
閫氳繃娣誨姞涓涓彲閫夊睘鎬ф潵浣夸竴涓疄浣撴垚涓虹鐞嗙偣
ACSA access control specific area
=================================================================================================================
瀹炴垬婕旂粌
闇姹傦細
1銆丩DAP瓚呯駭綆$悊鍛橈紝綆$悊LDAP涓婄殑鎵鏈夋暟鎹紱
2銆佸尶鍚嶇敤鎴峰彲浠ユ煡鐪嬬敤鎴蜂俊鎭紱
3銆佺敤鎴峰垎涓哄紑鍙戙佹祴璇曞拰榪愮淮涓夌粍錛?/p>
4銆侀氳繃鐢ㄦ埛緇勬巿鏉?/p>
鎿嶄綔鎸囧崡錛?/p>
1銆佸畨瑁匒pacheDS鏈嶅姟绔紱
涓嬭澆鍦板潃錛?a target="_blank" style="color: #6a3906; text-decoration: none;">apacheds-2.0.0-M15-64bit.bin 涓嬭澆鍒扮洰褰?home/apacheds/
2銆佸畨瑁匒pache Directory Studio
鏈浣跨敤Eclipse鎻掍歡錛岃瑙?http://directory.apache.org/studio/installation-in-eclipse.html錛屼篃鏀寔Eclipse market瀹夎銆?/p>
3銆佽繛鎺ヤ笌閰嶇疆
鍒囨崲鍒癊clipse鐨凩DAP瑙嗗浘錛屾柊寤鴻繛鎺?/p>
hostname:199.155.122.90 port錛?0389 encryption method: nocryption 錛堜笉鍚屽姞瀵嗙畻娉曠鍙f敞鎰忥級
authentication method: simple user:uid=admin,ou=system passwd:secret 錛堥粯璁ょ殑鏈楂樻潈闄愮敤鎴鳳級
OpenConfiguration鍚敤Access Control錛岀鐢ㄥ尶鍚嶇櫥褰?/p>
閲嶅惎apacheds鏈嶅姟鐢熸晥
4銆佸垎鍖鴻緗?/p>
緋葷粺榛樿example鍒嗗尯錛屾垜浠垹闄や箣錛屽茍鏂板緩錛屾湰嬈″垱寤篸c=xxx.com
5銆佹柊寤簅u=users錛屾柊寤簅u=groups銆?/p>
//---
System.out.println(TimeZone.getDefault()); //
杈撳嚭褰撳墠榛樿鏃跺尯
final TimeZone zone = TimeZone.getTimeZone("GMT+8"); //
鑾峰彇涓浗鏃跺尯
TimeZone.setDefault(zone); //
璁劇疆鏃跺尯
System.out.println(TimeZone.getDefault()); //
杈撳嚭楠岃瘉
//---
闄や簡涓婇潰鐨勮В鍐蟲柟娉曞錛岃繕鍙互錛?/p>
鍦?/p>
TOMCAT
鐨?/p>
JAVA
榪愯鍙傛暟娣誨姞
-Duser.timezone=Asia/Shanghai
鎴栬咃紝濡傛灉鏈夊惎鍔ㄧ殑瀹氭椂鍣ㄦ垨棣栨鎵ц鐨勪唬鐮侊紝鍙互浣跨敤璇彞
System.setProperty("user.timezone","Asia/Shanghai");
鏉ヨ緗?/p>
浣嗘槸涓鴻В鍐蟲椂鍖洪棶棰橈紝
榪欐牱緙栫爜瀹炲湪澶儲錛?/p>
鎵浠ヤ綘瑕佺煡閬撳浣曚粠鏍規湰涓婅В鍐抽棶棰橈細
tomcat鐨刢atalina.sh:
JAVA_OPTS="$JAVA_OPTS -Duser.timezone=Asia/Shanghai"
寮鍙戠殑杞歡浜у搧鍦ㄤ氦浠樹嬌鐢ㄧ殑鏃跺欙紝寰寰浼氭巿鏉冧竴孌墊椂闂寸殑璇曠敤鏈燂紝榪欎釜鏃跺檒icense灝辨淳涓婄敤鍦轟簡銆備笉鍚屼簬鍦ㄤ唬鐮佷腑鐩存帴鍔犱笂鏃墮棿綰︽潫錛岄渶瑕侀噸鏂版巿鏉冪殑鏃跺欎嬌鐢╨icense鍙互閬垮厤淇敼婧愮爜錛屾敼鍔ㄩ儴緗詫紝鎺堟潈鏂圭洿鎺ョ敓鎴愪竴涓柊鐨刲icense鍙戦佺粰浣跨敤鏂規浛鎹㈡帀鍘熸潵鐨刲icense鏂囦歡鍗沖彲銆備笅闈㈠皢璁茶堪浣跨敤truelicense鏉ュ疄鐜發icense鐨勭敓鎴愬拰浣跨敤銆俆ruelicense鏄竴涓紑婧愮殑璇佷功綆$悊寮曟搸錛岃緇嗕粙緇嶈https://truelicense.java.net/
涓銆侀鍏堜粙緇嶄笅license鎺堟潈鏈哄埗鐨勫師鐞嗭細
1銆?鐢熸垚瀵嗛挜瀵癸紝鏂規硶鏈夊緢澶氥?/p>
2銆?鎺堟潈鑰呬繚鐣欑閽ワ紝浣跨敤縐侀挜瀵瑰寘鍚巿鏉冧俊鎭紙濡備嬌鐢ㄦ埅姝㈡棩鏈燂紝MAC鍦板潃絳夛級鐨刲icense榪涜鏁板瓧絳懼悕銆?/p>
3銆?鍏挜緇欎嬌鐢ㄨ咃紙鏀懼湪楠岃瘉鐨勪唬鐮佷腑浣跨敤錛夛紝鐢ㄤ簬楠岃瘉license鏄惁絎﹀悎浣跨敤鏉′歡銆?/p>
鎺ヤ笅鏉ユ槸鏈緥鍒朵綔license鐨勫叿浣撴楠わ細
浜屻佺涓姝ワ細浣跨敤keytool鐢熸垚瀵嗛挜瀵?/p>
浠ヤ笅鍛戒護鍦╠os鍛戒護琛屾墽琛岋紝娉ㄦ剰褰撳墠鎵ц鐩綍錛屾渶鍚庣敓鎴愮殑瀵嗛挜瀵瑰嵆鍦ㄨ鐩綍涓嬶細
1銆侀鍏堣鐢↘eyTool宸ュ叿鏉ョ敓鎴愮鍖欏簱錛氾紙-alias鍒悕 –validity 3650琛ㄧず10騫存湁鏁堬級
keytool -genkey -alias privatekey -keystoreprivateKeys.store -validity 3650
2銆佺劧鍚庢妸縐佸寵搴撳唴鐨勫叕鍖欏鍑哄埌涓涓枃浠跺綋涓細
keytool -export -alias privatekey -file certfile.cer -keystore privateKeys.store
3銆佺劧鍚庡啀鎶婅繖涓瘉涔︽枃浠跺鍏ュ埌鍏寵搴擄細
keytool -import -alias publiccert -file certfile.cer -keystore publicCerts.store
鏈鍚庣敓鎴愭枃浠秔rivateKeys.store銆乸ublicCerts.store鎷瘋礉鍑烘潵澶囩敤銆?/p>
涓夈佺浜屾錛氱敓鎴愯瘉涔︼紙璇ラ儴鍒嗕唬鐮佺敱鎺堟潈鑰呯嫭绔嬩繚綆℃墽琛岋級
1銆?棣栧厛LicenseManagerHolder.java綾伙細
package cn.melina.license; import de.schlichtherle.license.LicenseManager; import de.schlichtherle.license.LicenseParam; /** * LicenseManager?????? * @author melina */ public class LicenseManagerHolder { private static LicenseManager licenseManager; public static synchronized LicenseManager getLicenseManager(LicenseParam licenseParams) { if (licenseManager == null) { licenseManager = new LicenseManager(licenseParams); } return licenseManager; } }
2銆?鐒跺悗鏄富瑕佺敓鎴恖icense鐨勪唬鐮丆reateLicense.java錛?/p>
package cn.melina.license; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Properties; import java.util.prefs.Preferences; import javax.security.auth.x500.X500Principal; import de.schlichtherle.license.CipherParam; import de.schlichtherle.license.DefaultCipherParam; import de.schlichtherle.license.DefaultKeyStoreParam; import de.schlichtherle.license.DefaultLicenseParam; import de.schlichtherle.license.KeyStoreParam; import de.schlichtherle.license.LicenseContent; import de.schlichtherle.license.LicenseParam; import de.schlichtherle.license.LicenseManager; /** * CreateLicense * @author melina */ public class CreateLicense { //common param private static String PRIVATEALIAS = ""; private static String KEYPWD = ""; private static String STOREPWD = ""; private static String SUBJECT = ""; private static String licPath = ""; private static String priPath = ""; //license content private static String issuedTime = ""; private static String notBefore = ""; private static String notAfter = ""; private static String consumerType = ""; private static int consumerAmount = 0; private static String info = ""; // 涓轟簡鏂逛究鐩存帴鐢ㄧ殑API閲岀殑渚嬪瓙 // X500Princal鏄竴涓瘉涔︽枃浠剁殑鍥烘湁鏍煎紡錛岃瑙丄PI private final static X500Principal DEFAULTHOLDERANDISSUER = new X500Principal( "CN=Duke銆丱U=JavaSoft銆丱=Sun Microsystems銆丆=US"); public void setParam(String propertiesPath) { // 鑾峰彇鍙傛暟 Properties prop = new Properties(); InputStream in = getClass().getResourceAsStream(propertiesPath); try { prop.load(in); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } PRIVATEALIAS = prop.getProperty("PRIVATEALIAS"); KEYPWD = prop.getProperty("KEYPWD"); STOREPWD = prop.getProperty("STOREPWD"); SUBJECT = prop.getProperty("SUBJECT"); KEYPWD = prop.getProperty("KEYPWD"); licPath = prop.getProperty("licPath"); priPath = prop.getProperty("priPath"); //license content issuedTime = prop.getProperty("issuedTime"); notBefore = prop.getProperty("notBefore"); notAfter = prop.getProperty("notAfter"); consumerType = prop.getProperty("consumerType"); consumerAmount = Integer.valueOf(prop.getProperty("consumerAmount")); info = prop.getProperty("info"); } public boolean create() { try { /************** 璇佷功鍙戝竷鑰呯鎵ц ******************/ LicenseManager licenseManager = LicenseManagerHolder .getLicenseManager(initLicenseParams0()); licenseManager.store((createLicenseContent()), new File(licPath)); } catch (Exception e) { e.printStackTrace(); System.out.println("瀹㈡埛绔瘉涔︾敓鎴愬け璐?"); return false; } System.out.println("鏈嶅姟鍣ㄧ鐢熸垚璇佷功鎴愬姛!"); return true; } // 榪斿洖鐢熸垚璇佷功鏃墮渶瑕佺殑鍙傛暟 private static LicenseParam initLicenseParams0() { Preferences preference = Preferences .userNodeForPackage(CreateLicense.class); // 璁劇疆瀵硅瘉涔﹀唴瀹瑰姞瀵嗙殑瀵圭О瀵嗙爜 CipherParam cipherParam = new DefaultCipherParam(STOREPWD); // 鍙傛暟1,2浠庡摢涓狢lass.getResource()鑾峰緱瀵嗛挜搴?鍙傛暟3瀵嗛挜搴撶殑鍒悕;鍙傛暟4瀵嗛挜搴撳瓨鍌ㄥ瘑鐮?鍙傛暟5瀵嗛挜搴撳瘑鐮? KeyStoreParam privateStoreParam = new DefaultKeyStoreParam( CreateLicense.class, priPath, PRIVATEALIAS, STOREPWD, KEYPWD); LicenseParam licenseParams = new DefaultLicenseParam(SUBJECT, preference, privateStoreParam, cipherParam); return licenseParams; } // 浠庡閮ㄨ〃鍗曟嬁鍒拌瘉涔︾殑鍐呭 public final static LicenseContent createLicenseContent() { DateFormat format = new SimpleDateFormat("yyyy-MM-dd"); LicenseContent content = null; content = new LicenseContent(); content.setSubject(SUBJECT); content.setHolder(DEFAULTHOLDERANDISSUER); content.setIssuer(DEFAULTHOLDERANDISSUER); try { content.setIssued(format.parse(issuedTime)); content.setNotBefore(format.parse(notBefore)); content.setNotAfter(format.parse(notAfter)); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } content.setConsumerType(consumerType); content.setConsumerAmount(consumerAmount); content.setInfo(info); // 鎵╁睍 content.setExtra(new Object()); return content; } }
3銆?嫻嬭瘯紼嬪簭licenseCreateTest.java錛?/p>
package cn.melina.license; import cn.melina.license.CreateLicense; public class licenseCreateTest { public static void main(String[] args){ CreateLicense cLicense = new CreateLicense(); //鑾峰彇鍙傛暟 cLicense.setParam("./param.properties"); //鐢熸垚璇佷功 cLicense.create(); } }
4銆?鐢熸垚鏃朵嬌鐢ㄥ埌鐨刾aram.properties鏂囦歡濡備笅錛?/p>
##########common parameters########### #alias PRIVATEALIAS=privatekey #key(璇ュ瘑鐮佺敓鎴愬瘑閽ュ鐨勫瘑鐮侊紝闇瑕佸Ε鍠勪繚綆★紝涓嶈兘璁╀嬌鐢ㄨ呯煡閬? KEYPWD=bigdata123456 #STOREPWD(璇ュ瘑鐮佹槸鍦ㄤ嬌鐢╧eytool鐢熸垚瀵嗛挜瀵規椂璁劇疆鐨勫瘑閽ュ簱鐨勮闂瘑鐮? STOREPWD=abc123456 #SUBJECT SUBJECT=bigdata #licPath licPath=bigdata.lic #priPath priPath=privateKeys.store ##########license content########### #issuedTime issuedTime=2014-04-01 #notBeforeTime notBefore=2014-04-01 #notAfterTime notAfter=2014-05-01 #consumerType consumerType=user #ConsumerAmount consumerAmount=1 #info info=this is a license
鏍規嵁properties鏂囦歡鍙互鐪嬪嚭錛岃繖閲屽彧綆鍗曡緗簡浣跨敤鏃墮棿鐨勯檺鍒訛紝褰撶劧鍙互鑷畾涔夋坊鍔犳洿澶氶檺鍒躲傝鏂囦歡涓〃紺烘巿鏉冭呮嫢鏈夌閽ワ紝騫朵笖鐭ラ亾鐢熸垚瀵嗛挜瀵圭殑瀵嗙爜銆傚茍涓旇緗?/span>license鐨勫唴瀹廣?/span>
鍥涖佺涓夋錛氶獙璇佽瘉涔︼紙浣跨敤璇佷功錛夛紙璇ラ儴鍒嗕唬鐮佺粨鍚堥渶瑕佹巿鏉冪殑紼嬪簭浣跨敤錛?/p>
1銆?棣栧厛LicenseManagerHolder.java綾伙紝鍚屼笂銆?/p>
2銆?鐒跺悗鏄富瑕侀獙璇乴icense鐨勪唬鐮乂erifyLicense.java錛?/p>
package cn.melina.license; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import java.util.prefs.Preferences; import de.schlichtherle.license.CipherParam; import de.schlichtherle.license.DefaultCipherParam; import de.schlichtherle.license.DefaultKeyStoreParam; import de.schlichtherle.license.DefaultLicenseParam; import de.schlichtherle.license.KeyStoreParam; import de.schlichtherle.license.LicenseParam; import de.schlichtherle.license.LicenseManager; /** * VerifyLicense * @author melina */ public class VerifyLicense { //common param private static String PUBLICALIAS = ""; private static String STOREPWD = ""; private static String SUBJECT = ""; private static String licPath = ""; private static String pubPath = ""; public void setParam(String propertiesPath) { // 鑾峰彇鍙傛暟 Properties prop = new Properties(); InputStream in = getClass().getResourceAsStream(propertiesPath); try { prop.load(in); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } PUBLICALIAS = prop.getProperty("PUBLICALIAS"); STOREPWD = prop.getProperty("STOREPWD"); SUBJECT = prop.getProperty("SUBJECT"); licPath = prop.getProperty("licPath"); pubPath = prop.getProperty("pubPath"); } public boolean verify() { /************** 璇佷功浣跨敤鑰呯鎵ц ******************/ LicenseManager licenseManager = LicenseManagerHolder .getLicenseManager(initLicenseParams()); // 瀹夎璇佷功 try { licenseManager.install(new File(licPath)); System.out.println("瀹㈡埛绔畨瑁呰瘉涔︽垚鍔?"); } catch (Exception e) { e.printStackTrace(); System.out.println("瀹㈡埛绔瘉涔﹀畨瑁呭け璐?"); return false; } // 楠岃瘉璇佷功 try { licenseManager.verify(); System.out.println("瀹㈡埛绔獙璇佽瘉涔︽垚鍔?"); } catch (Exception e) { e.printStackTrace(); System.out.println("瀹㈡埛绔瘉涔﹂獙璇佸け鏁?"); return false; } return true; } // 榪斿洖楠岃瘉璇佷功闇瑕佺殑鍙傛暟 private static LicenseParam initLicenseParams() { Preferences preference = Preferences .userNodeForPackage(VerifyLicense.class); CipherParam cipherParam = new DefaultCipherParam(STOREPWD); KeyStoreParam privateStoreParam = new DefaultKeyStoreParam( VerifyLicense.class, pubPath, PUBLICALIAS, STOREPWD, null); LicenseParam licenseParams = new DefaultLicenseParam(SUBJECT, preference, privateStoreParam, cipherParam); return licenseParams; } }
3銆?嫻嬭瘯紼嬪簭licenseVerifyTest.java錛?/p>
package cn.melina.license; public class licenseVerifyTest { public static void main(String[] args){ VerifyLicense vLicense = new VerifyLicense(); //鑾峰彇鍙傛暟 vLicense.setParam("./param.properties"); //楠岃瘉璇佷功 vLicense.verify(); } }
4銆?楠岃瘉鏃朵嬌鐢ㄥ埌鐨凱roperties鏂囦歡濡備笅錛?/p>
##########common parameters########### #alias PUBLICALIAS=publiccert #STOREPWD(璇ュ瘑鐮佹槸鍦ㄤ嬌鐢╧eytool鐢熸垚瀵嗛挜瀵規椂璁劇疆鐨勫瘑閽ュ簱鐨勮闂瘑鐮? STOREPWD=abc123456 #SUBJECT SUBJECT=bigdata #licPath licPath=bigdata.lic #pubPath pubPath=publicCerts.store
鏍規嵁璇ラ獙璇佺殑properties鍙互鐪嬪嚭錛屼嬌鐢ㄨ呭彧鎷ユ湁鍏挜錛屾病鏈夌閽ワ紝騫朵笖涔熷彧鐭ラ亾璁塊棶瀵嗛挜搴撶殑瀵嗙爜錛岃屼笉鑳界煡閬撶敓鎴愬瘑閽ュ鐨勫瘑鐮併?/p>
浜斻佽鏄庯細
娉ㄦ剰瀹為檯鎿嶄綔涓紝鍏挜銆佺閽ャ佽瘉涔︾瓑鏂囦歡鐨勫瓨鏀捐礬寰勩?/p>
浠ヤ笂浠g爜闇瑕佺敤鍒皌ruelicense鐨勪竴浜涘寘錛屽彲浠ヨ嚜琛岀綉涓婃悳錛屼篃鍙互涓嬭澆鎴戠殑瀹屾暣宸ョ▼錛岄噷闈㈤檮甯︿簡鎵闇鐨刯ar鍖呫?/p>
浠ヤ笂涓や釜瀹屾暣宸ョ▼鎻愪緵涓嬭澆錛?a rel="nofollow" target="_blank" style="margin: 0px; padding: 0px; color: #3377aa; text-decoration: none;">http://download.csdn.net/detail/luckymelina/7141131
GOOD LUCK!灝忎紮浼翠滑鍔犳補錛佹榪庝笌鎴戜氦嫻併?/p>