Initial commit
diff --git a/includes/constants/class-wc-stripe-hong-kong-states.php b/includes/constants/class-wc-stripe-hong-kong-states.php
new file mode 100644
index 0000000..b2e8cce
--- /dev/null
+++ b/includes/constants/class-wc-stripe-hong-kong-states.php
@@ -0,0 +1,349 @@
+<?php
+
+if ( ! defined( 'ABSPATH' ) ) {
+	exit; // Exit if accessed directly.
+}
+
+/**
+ * Class WC_Stripe_Hong_Kong_States
+ *
+ * Contains a list of districts (equivalent to WC states) in Hong Kong used for normalization and validation purposes.
+ * This is necessary due to a bug in Apple Pay that's currently being worked on. Until
+ * that bug is fixed this workaround will be necessary.
+ *
+ * More info in pc4etw-bY-p2.
+ *
+ * @since 5.8.0
+ */
+class WC_Stripe_Hong_Kong_States {
+	// Source: https://www.rvd.gov.hk/doc/tc/hkpr13/06.pdf
+	const STATES = [
+		'hong kong',
+		'港島',
+
+		'central and western',
+		'中西區',
+
+		'kennedy town',
+		'shek tong tsui',
+		'sai ying pun',
+		'sheung wan',
+		'central',
+		'admiralty',
+		'mid-levels',
+		'peak',
+		'堅尼地城',
+		'石塘咀',
+		'西營盤',
+		'上環',
+		'中環',
+		'金鐘',
+		'半山區',
+		'山頂',
+
+		'wan chai',
+		'灣仔',
+
+		'causeway bay',
+		'happy valley',
+		'tai hang',
+		'so kon po',
+		"jardine's lookout",
+		'灣仔',
+		'銅鑼灣',
+		'跑馬地',
+		'大坑',
+		'掃桿埔',
+		'渣甸山',
+
+		'eastern',
+		'東區',
+
+		'tin hau',
+		'braemar hill',
+		'north point',
+		'quarry bay',
+		'sai wan ho',
+		'shau kei wan',
+		'chai wan',
+		'siu sai wan',
+		'天后',
+		'寶馬山',
+		'北角',
+		'鰂魚涌',
+		'西灣河',
+		'筲箕灣',
+		'柴灣',
+		'小西灣',
+
+		'southern',
+		'南區',
+
+		'pok fu lam',
+		'aberdeen',
+		'ap lei chau',
+		'wong chuk hang',
+		'shouson hill',
+		'repulse bay',
+		'chung hom kok',
+		'stanley',
+		'tai tam',
+		'shek o',
+		'薄扶林',
+		'香港仔',
+		'鴨脷洲',
+		'黃竹坑',
+		'壽臣山',
+		'淺水灣',
+		'舂磡角',
+		'赤柱',
+		'大潭',
+		'石澳',
+
+		'kowloon',
+		'九龍',
+
+		'yau tsim mong',
+		'油尖旺',
+
+		'tsim sha tsui',
+		'yau ma tei',
+		'west kowloon reclamation',
+		"king's park, mong kok",
+		'tai kok tsui',
+		'尖沙咀',
+		'油麻地',
+		'西九龍填海區',
+		'京士柏',
+		'旺角',
+		'大角咀',
+
+		'sham shui po',
+		'深水埗',
+
+		'mei foo',
+		'lai chi kok',
+		'cheung sha wan',
+		'shek kip mei',
+		'yau yat tsuen',
+		'tai wo ping',
+		'stonecutters island',
+		'美孚',
+		'荔枝角',
+		'長沙灣',
+		'石硤尾',
+		'又一村',
+		'大窩坪',
+		'昂船洲',
+
+		'kowloon city',
+		'九龍城',
+
+		'hung hom',
+		'to kwa wan',
+		'ma tau kok',
+		'ma tau wai',
+		'kai tak',
+		'ho man tin',
+		'kowloon tong',
+		'beacon hill',
+		'紅磡',
+		'土瓜灣',
+		'馬頭角',
+		'馬頭圍',
+		'啟德',
+		'何文田',
+		'九龍塘',
+		'筆架山',
+
+		'wong tai sin',
+		'黃大仙',
+
+		'san po kong',
+		'tung tau',
+		'wang tau hom',
+		'lok fu',
+		'diamond hill',
+		'tsz wan shan',
+		'ngau chi wan',
+		'新蒲崗',
+		'東頭',
+		'橫頭磡',
+		'樂富',
+		'鑽石山',
+		'慈雲山',
+		'牛池灣',
+
+		'kwun tong',
+		'觀塘',
+
+		'ping shek',
+		'kowloon bay',
+		'ngau tau kok',
+		'jordan valley',
+		'kwun tong',
+		'sau mau ping',
+		'lam tin',
+		'yau tong',
+		'lei yue mun',
+		'坪石',
+		'九龍灣',
+		'牛頭角',
+		'佐敦谷',
+		'觀塘',
+		'秀茂坪',
+		'藍田',
+		'油塘',
+		'鯉魚門',
+
+		'new territories',
+		'新界',
+
+		'kwai tsing',
+		'葵青',
+
+		'kwai chung',
+		'tsing yi',
+		'葵涌',
+		'青衣',
+
+		'tsuen wan',
+		'荃灣',
+
+		'lei muk shue',
+		'ting kau',
+		'sham tseng',
+		'tsing lung tau',
+		'ma wan',
+		'sunny bay',
+		'梨木樹',
+		'汀九',
+		'深井',
+		'青龍頭',
+		'馬灣',
+		'欣澳',
+
+		'tuen mun',
+		'屯門',
+
+		'tai lam chung',
+		'so kwun wat',
+		'tuen mun',
+		'lam tei',
+		'大欖涌',
+		'掃管笏',
+		'屯門',
+		'藍地',
+
+		'yuen long',
+		'元朗',
+
+		'hung shui kiu',
+		'ha tsuen',
+		'lau fau shan',
+		'tin shui wai',
+		'yuen long',
+		'san tin',
+		'lok ma chau',
+		'kam tin',
+		'shek kong',
+		'pat heung',
+		'洪水橋',
+		'廈村',
+		'流浮山',
+		'天水圍',
+		'元朗',
+		'新田',
+		'落馬洲',
+		'錦田',
+		'石崗',
+		'八鄉',
+
+		'north',
+		'北區',
+
+		'fanling',
+		'luen wo hui',
+		'sheung shui',
+		'shek wu hui',
+		'sha tau kok',
+		'luk keng',
+		'wu kau tang',
+		'粉嶺',
+		'聯和墟',
+		'上水',
+		'石湖墟',
+		'沙頭角',
+		'鹿頸',
+		'烏蛟騰',
+
+		'tai po',
+		'大埔',
+
+		'tai po market',
+		'tai po kau',
+		'tai mei tuk',
+		'shuen wan',
+		'cheung muk tau',
+		'kei ling ha',
+		'大埔墟',
+		'大埔',
+		'大埔滘',
+		'大尾篤',
+		'船灣',
+		'樟木頭',
+		'企嶺下',
+
+		'sha tin',
+		'沙田',
+
+		'tai wai',
+		'fo tan',
+		'ma liu shui',
+		'wu kai sha',
+		'ma on shan',
+		'大圍',
+		'火炭',
+		'馬料水',
+		'烏溪沙',
+		'馬鞍山',
+
+		'sai kung',
+		'西貢',
+
+		'clear water bay',
+		'tai mong tsai',
+		'tseung kwan o',
+		'hang hau',
+		'tiu keng leng',
+		'ma yau tong',
+		'清水灣',
+		'大網仔',
+		'將軍澳',
+		'坑口',
+		'調景嶺',
+		'馬游塘',
+
+		'islands',
+		'離島',
+
+		'cheung chau',
+		'peng chau',
+		'lantau island (including tung chung)',
+		'lamma island',
+		'長洲',
+		'坪洲',
+		'大嶼山(包括東涌)',
+		'南丫島',
+	];
+
+	/**
+	 * Checks if the given state is a valid region (equivalent to WC state) in Hong Kong.
+	 *
+	 * @param string $state  The state to be evaluated.
+	 * @return bool  True if the provided state is valid, false otherwise.
+	 */
+	public static function is_valid_state( $state ) {
+		return in_array( $state, self::STATES, true );
+	}
+}