Having fun with PARSENAME (SQL Spackle)

  • Hi Jeff,

    as always appreciate your responses & tips. I was being a bit short-sighted in that the app we use doesn't need the functionality to pick a specific part of the IP. And "dressing up" the bigint as a readable IP is done in the UI itself. So for us the bigint worked well

    Cheers

    Thierry

  • thierry.vandurme (1/17/2016)


    Hi Jeff,

    as always appreciate your responses & tips. I was being a bit short-sighted in that the app we use doesn't need the functionality to pick a specific part of the IP. And "dressing up" the bigint as a readable IP is done in the UI itself. So for us the bigint worked well

    Cheers

    Thierry

    I'm always curious as to why people do things the way they do so thank you very much for taking the time to explain. I appreciate it.

    --Jeff Moden


    RBAR is pronounced "ree-bar" and is a "Modenism" for Row-By-Agonizing-Row.
    First step towards the paradigm shift of writing Set Based code:
    ________Stop thinking about what you want to do to a ROW... think, instead, of what you want to do to a COLUMN.

    Change is inevitable... Change for the better is not.


    Helpful Links:
    How to post code problems
    How to Post Performance Problems
    Create a Tally Function (fnTally)

  • thierry.vandurme (1/15/2016)


    Nice article. May come in use one day so glad you shared that.

    Btw, I use bigint to store IP4 addresses (less space and able to use ORDER BY)

    Using a bigint is a waste of 4 bytes and unfortunately it doesn't make much sense ordering by the number as the byte order is reversed (small endian).

    😎

    Edit: the quote bug.

  • Eirikur Eiriksson (1/17/2016)


    thierry.vandurme (1/15/2016)


    Nice article. May come in use one day so glad you shared that.

    Btw, I use bigint to store IP4 addresses (less space and able to use ORDER BY)

    Using a bigint is a waste of 4 bytes and unfortunately it doesn't make much sense ordering by the number as the byte order is reversed (small endian).

    😎

    Edit: the quote bug.

    Heh... good stuff. A whole lot of people don't know about "Small Endian" storage. To your point, though, the sort order bytes should not reversed if you sort by value rather than by byte.

    --Jeff Moden


    RBAR is pronounced "ree-bar" and is a "Modenism" for Row-By-Agonizing-Row.
    First step towards the paradigm shift of writing Set Based code:
    ________Stop thinking about what you want to do to a ROW... think, instead, of what you want to do to a COLUMN.

    Change is inevitable... Change for the better is not.


    Helpful Links:
    How to post code problems
    How to Post Performance Problems
    Create a Tally Function (fnTally)

  • Jeff Moden (1/15/2016)


    thierry.vandurme (1/15/2016)


    Nice article. May come in use one day so glad you shared that.

    Btw, I use bigint to store IP4 addresses (less space and able to use ORDER BY)

    It'll be interesting how you pick parts of the address out during a search.

    If you really want to save some space, separate each octet out into a separate TINYINT column. That takes only 4 bytes total, is sortable, and is searchable without having to jump through hoops.

    I often store IPv4 addresses as INT, especially for logging where the cardinality can become extremely high and with a simple bit-bashing searching is not much of a problem. Another great plus is that leading zeros in the addresses are no problem, quite handy.

    😎

    A mockup from an old test bench:

    DECLARE @STRIP VARCHAR(15) = '013.065.072.059';

    SELECT

    IA.IP_ID

    ,IA.IP_NUM

    ,IA.IP_STR

    FROM dbo.TBL_IP_ADDRESS IA

    CROSS APPLY

    (SELECT

    CONVERT(INT,

    CONVERT(BINARY(1),CONVERT(TINYINT,PARSENAME(@STRIP,1),0),0)

    + CONVERT(BINARY(1),CONVERT(TINYINT,PARSENAME(@STRIP,2),0),0)

    + CONVERT(BINARY(1),CONVERT(TINYINT,PARSENAME(@STRIP,3),0),0)

    + CONVERT(BINARY(1),CONVERT(TINYINT,PARSENAME(@STRIP,4),0),0)

    ,0) AS IP_NUM

    ) AS X

    WHERE IA.IP_NUM = X.IP_NUM;

  • Jeff Moden (1/17/2016)


    Eirikur Eiriksson (1/17/2016)


    thierry.vandurme (1/15/2016)


    Nice article. May come in use one day so glad you shared that.

    Btw, I use bigint to store IP4 addresses (less space and able to use ORDER BY)

    Using a bigint is a waste of 4 bytes and unfortunately it doesn't make much sense ordering by the number as the byte order is reversed (small endian).

    😎

    Edit: the quote bug.

    Heh... good stuff. A whole lot of people don't know about "Small Endian" storage. To your point, though, the sort order bytes should not reversed if you sort by value rather than by byte.

    Sorting IPs stored as INT by the value gives a slightly funny sort order as it flips the sort order by the sign bit of the first byte which is the D Class Octet;-)

    😎

  • Eirikur Eiriksson (1/17/2016)


    Jeff Moden (1/17/2016)


    Eirikur Eiriksson (1/17/2016)


    thierry.vandurme (1/15/2016)


    Nice article. May come in use one day so glad you shared that.

    Btw, I use bigint to store IP4 addresses (less space and able to use ORDER BY)

    Using a bigint is a waste of 4 bytes and unfortunately it doesn't make much sense ordering by the number as the byte order is reversed (small endian).

    😎

    Edit: the quote bug.

    Heh... good stuff. A whole lot of people don't know about "Small Endian" storage. To your point, though, the sort order bytes should not reversed if you sort by value rather than by byte.

    Sorting IPs stored as INT by the value gives a slightly funny sort order as it flips the sort order by the sign bit of the first byte which is the D Class Octet;-)

    😎

    If you're sorting a BIGINT, I don't believe the sign bit will come into play at all for IP4 addresses.

    --Jeff Moden


    RBAR is pronounced "ree-bar" and is a "Modenism" for Row-By-Agonizing-Row.
    First step towards the paradigm shift of writing Set Based code:
    ________Stop thinking about what you want to do to a ROW... think, instead, of what you want to do to a COLUMN.

    Change is inevitable... Change for the better is not.


    Helpful Links:
    How to post code problems
    How to Post Performance Problems
    Create a Tally Function (fnTally)

  • Jeff Moden (1/17/2016)


    If you're sorting a BIGINT, I don't believe the sign bit will come into play at all for IP4 addresses.

    True but still one is sorting on [D][C][A] which doesn't make too much sense.

    😎

    The idea of storing each octet as a tinyint is quite neat, easily implemented as a persisted calculated column, here is a quick example with the usual data set generator.

    USE tempdb;

    GO

    SET NOCOUNT ON;

    --/*

    IF OBJECT_ID(N'dbo.TBL_IP_ADDRESS') IS NOT NULL DROP TABLE dbo.TBL_IP_ADDRESS;

    CREATE TABLE dbo.TBL_IP_ADDRESS

    (

    IP_ID INT IDENTITY(1,1) NOT NULL CONSTRAINT PK_DBO_TBL_IP_ADDRESS_IP_ID PRIMARY KEY CLUSTERED

    ,IP_NUM INT NOT NULL

    ,ACLS AS (CONVERT(TINYINT,(IP_NUM ) & 0xFF,0)) PERSISTED

    ,BCLS AS (CONVERT(TINYINT,(IP_NUM / 256) & 0xFF,0)) PERSISTED

    ,CCLS AS (CONVERT(TINYINT,(IP_NUM / 65536) & 0xFF,0)) PERSISTED

    ,DCLS AS (CONVERT(TINYINT,(IP_NUM / 16777216) & 0xFF,0)) PERSISTED

    );

    DECLARE @SAMPLE_SIZE INT = 5000000;

    ;WITH T(N) AS (SELECT N FROM ( VALUES (0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) AS X(N))

    , NUMS(N) AS (SELECT TOP(@SAMPLE_SIZE) 0 AS N FROM T T1,T T2,T T3,T T4,T T5,T T6,T T7,T T8,T T9)

    ,SAMPLE_DATA(FAKE_IP) AS

    (

    SELECT

    (CHECKSUM(NEWID())) AS FAKE_IP

    FROM NUMS NM

    )

    ,SPLIT_TO_OCTETS(IP_NUM) AS

    (

    SELECT

    IA.FAKE_IP AS IP_NUM

    FROM SAMPLE_DATA IA

    )

    INSERT INTO dbo.TBL_IP_ADDRESS(IP_NUM)

    SELECT

    SO.IP_NUM

    FROM SPLIT_TO_OCTETS SO

    WHERE ((SO.IP_NUM ) & 0xFF) > 0

    AND ((SO.IP_NUM / 256 ) & 0xFF) > 0;

    CREATE NONCLUSTERED INDEX NCLIDX_DBO_TBL_IP_ADDRESS_IP_NUM_INCL_IP_ID ON dbo.TBL_IP_ADDRESS(IP_NUM ASC) INCLUDE(IP_ID);

    CREATE NONCLUSTERED INDEX NCLIDX_DBO_TBL_ACLS_BCLS_CCLS_DCLS ON dbo.TBL_IP_ADDRESS(ACLS ASC, BCLS ASC, CCLS ASC, DCLS ASC) INCLUDE (IP_ID, IP_NUM);

    --*/

    Obviously we can search by a single IP on the numerical value

    DECLARE @STRIP VARCHAR(15) = '013.065.072.059';

    SELECT

    IA.IP_ID

    ,IA.IP_NUM

    FROM dbo.TBL_IP_ADDRESS IA

    CROSS APPLY

    (SELECT

    CONVERT(INT,

    CONVERT(BINARY(1),CONVERT(TINYINT,PARSENAME(@STRIP,1),0),0)

    + CONVERT(BINARY(1),CONVERT(TINYINT,PARSENAME(@STRIP,2),0),0)

    + CONVERT(BINARY(1),CONVERT(TINYINT,PARSENAME(@STRIP,3),0),0)

    + CONVERT(BINARY(1),CONVERT(TINYINT,PARSENAME(@STRIP,4),0),0)

    ,0) AS IP_NUM

    ) AS X

    WHERE IA.IP_NUM = X.IP_NUM;

    Now for a slightly more complex operation such as matching addresses to MS Azure data centres

    -- https://www.microsoft.com/en-us/download/confirmation.aspx?id=41653

    DECLARE @IPXML XML = '<AzurePublicIpAddresses xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <Region Name="europewest">

    <IpRange Subnet="40.112.124.0/24" />

    <IpRange Subnet="65.52.128.0/19" />

    <IpRange Subnet="94.245.97.0/24" />

    <IpRange Subnet="104.47.169.0/24" />

    <IpRange Subnet="104.214.240.0/24" />

    <IpRange Subnet="137.116.192.0/19" />

    <IpRange Subnet="157.55.8.96/27" />

    <IpRange Subnet="157.55.8.128/27" />

    <IpRange Subnet="157.55.8.160/28" />

    <IpRange Subnet="168.63.0.0/19" />

    <IpRange Subnet="168.63.96.0/20" />

    <IpRange Subnet="168.63.112.16/28" />

    <IpRange Subnet="168.63.112.64/26" />

    <IpRange Subnet="168.63.112.128/25" />

    <IpRange Subnet="168.63.113.0/24" />

    <IpRange Subnet="168.63.114.0/23" />

    <IpRange Subnet="168.63.116.0/22" />

    <IpRange Subnet="168.63.120.0/21" />

    <IpRange Subnet="193.149.80.0/22" />

    <IpRange Subnet="213.199.128.0/21" />

    <IpRange Subnet="213.199.136.0/22" />

    <IpRange Subnet="213.199.180.32/28" />

    <IpRange Subnet="213.199.180.112/28" />

    <IpRange Subnet="213.199.183.0/24" />

    <IpRange Subnet="23.97.128.0/17" />

    <IpRange Subnet="23.98.46.0/24" />

    <IpRange Subnet="23.100.0.0/20" />

    <IpRange Subnet="23.101.64.0/20" />

    <IpRange Subnet="40.114.128.0/24" />

    <IpRange Subnet="40.114.136.0/21" />

    <IpRange Subnet="40.114.144.0/21" />

    <IpRange Subnet="40.114.152.0/26" />

    <IpRange Subnet="104.40.128.0/17" />

    <IpRange Subnet="104.45.0.0/18" />

    <IpRange Subnet="104.45.64.0/20" />

    <IpRange Subnet="104.46.32.0/19" />

    <IpRange Subnet="137.117.128.0/17" />

    <IpRange Subnet="168.61.56.0/21" />

    <IpRange Subnet="191.233.64.0/18" />

    <IpRange Subnet="191.237.232.0/22" />

    <IpRange Subnet="191.239.200.0/23" />

    <IpRange Subnet="191.239.202.0/24" />

    <IpRange Subnet="191.239.203.0/27" />

    <IpRange Subnet="191.239.203.64/27" />

    <IpRange Subnet="193.149.84.0/22" />

    <IpRange Subnet="40.74.0.0/20" />

    <IpRange Subnet="40.74.16.0/20" />

    <IpRange Subnet="40.74.32.0/20" />

    <IpRange Subnet="40.74.48.0/20" />

    <IpRange Subnet="40.114.129.0/24" />

    <IpRange Subnet="40.114.130.0/23" />

    <IpRange Subnet="40.114.132.0/22" />

    <IpRange Subnet="40.114.152.64/26" />

    <IpRange Subnet="40.114.152.128/25" />

    <IpRange Subnet="40.114.153.0/24" />

    <IpRange Subnet="40.114.154.0/23" />

    <IpRange Subnet="40.114.156.0/22" />

    <IpRange Subnet="40.114.160.0/19" />

    <IpRange Subnet="13.69.40.48/28" />

    <IpRange Subnet="13.69.40.64/26" />

    <IpRange Subnet="13.69.40.128/25" />

    <IpRange Subnet="13.69.42.0/23" />

    <IpRange Subnet="13.69.44.0/22" />

    <IpRange Subnet="13.69.64.0/19" />

    <IpRange Subnet="13.73.128.16/28" />

    <IpRange Subnet="13.73.128.32/27" />

    <IpRange Subnet="13.73.128.64/26" />

    <IpRange Subnet="13.73.128.128/25" />

    <IpRange Subnet="13.73.130.0/23" />

    <IpRange Subnet="13.73.132.0/22" />

    <IpRange Subnet="13.73.168.112/28" />

    <IpRange Subnet="13.73.168.128/25" />

    <IpRange Subnet="13.73.170.0/23" />

    <IpRange Subnet="13.73.172.0/22" />

    <IpRange Subnet="13.80.32.16/28" />

    <IpRange Subnet="13.80.32.32/27" />

    <IpRange Subnet="13.80.32.64/26" />

    <IpRange Subnet="13.80.32.128/25" />

    <IpRange Subnet="13.80.34.0/23" />

    <IpRange Subnet="13.80.36.0/22" />

    <IpRange Subnet="13.80.89.16/28" />

    <IpRange Subnet="13.80.89.32/27" />

    <IpRange Subnet="13.80.89.64/26" />

    <IpRange Subnet="13.80.89.128/25" />

    <IpRange Subnet="13.80.91.16/28" />

    <IpRange Subnet="13.80.91.32/27" />

    <IpRange Subnet="13.80.91.64/26" />

    <IpRange Subnet="13.80.91.128/25" />

    <IpRange Subnet="13.80.92.0/22" />

    <IpRange Subnet="13.80.160.16/28" />

    <IpRange Subnet="13.80.160.64/26" />

    <IpRange Subnet="13.80.160.128/25" />

    <IpRange Subnet="13.80.161.0/24" />

    <IpRange Subnet="13.80.162.0/23" />

    <IpRange Subnet="13.80.164.0/22" />

    <IpRange Subnet="13.80.184.16/28" />

    <IpRange Subnet="13.80.184.32/27" />

    <IpRange Subnet="13.80.184.64/26" />

    <IpRange Subnet="13.80.184.128/25" />

    <IpRange Subnet="13.80.186.0/23" />

    <IpRange Subnet="13.80.188.0/22" />

    <IpRange Subnet="13.80.192.0/19" />

    <IpRange Subnet="13.80.224.0/21" />

    <IpRange Subnet="13.80.233.16/28" />

    <IpRange Subnet="13.80.233.32/27" />

    <IpRange Subnet="13.80.233.64/26" />

    <IpRange Subnet="13.80.233.128/25" />

    <IpRange Subnet="13.80.234.0/23" />

    <IpRange Subnet="13.80.236.0/22" />

    <IpRange Subnet="13.81.16.16/28" />

    <IpRange Subnet="13.81.16.32/27" />

    <IpRange Subnet="13.81.16.64/26" />

    <IpRange Subnet="13.81.16.128/25" />

    <IpRange Subnet="13.81.18.0/23" />

    <IpRange Subnet="13.81.20.0/22" />

    <IpRange Subnet="13.81.72.32/27" />

    <IpRange Subnet="13.81.72.64/26" />

    <IpRange Subnet="13.81.72.128/25" />

    <IpRange Subnet="13.81.75.0/24" />

    <IpRange Subnet="13.81.76.0/22" />

    <IpRange Subnet="13.81.128.0/19" />

    <IpRange Subnet="13.81.160.16/28" />

    <IpRange Subnet="13.81.160.32/27" />

    <IpRange Subnet="13.81.160.64/26" />

    <IpRange Subnet="13.81.160.128/25" />

    <IpRange Subnet="13.81.162.0/23" />

    <IpRange Subnet="13.81.164.0/22" />

    <IpRange Subnet="13.81.232.16/28" />

    <IpRange Subnet="13.81.232.32/27" />

    <IpRange Subnet="13.81.232.64/26" />

    <IpRange Subnet="13.81.232.128/25" />

    <IpRange Subnet="13.81.234.0/23" />

    <IpRange Subnet="13.81.236.0/22" />

    <IpRange Subnet="40.80.0.0/18" />

    <IpRange Subnet="40.82.0.0/16" />

    <IpRange Subnet="40.112.36.128/26" />

    <IpRange Subnet="40.112.96.0/20" />

    <IpRange Subnet="40.112.112.0/21" />

    <IpRange Subnet="40.112.120.0/22" />

    <IpRange Subnet="40.112.125.0/24" />

    <IpRange Subnet="40.112.126.0/23" />

    <IpRange Subnet="40.113.96.0/19" />

    <IpRange Subnet="40.113.128.0/18" />

    <IpRange Subnet="40.114.192.0/18" />

    <IpRange Subnet="40.115.0.0/18" />

    <IpRange Subnet="40.118.0.0/17" />

    <IpRange Subnet="104.46.16.0/21" />

    <IpRange Subnet="104.47.128.0/19" />

    <IpRange Subnet="104.47.160.0/21" />

    <IpRange Subnet="104.47.168.0/24" />

    <IpRange Subnet="104.47.170.0/23" />

    <IpRange Subnet="104.47.172.0/22" />

    <IpRange Subnet="104.47.176.0/20" />

    <IpRange Subnet="104.214.192.0/19" />

    <IpRange Subnet="104.214.224.0/20" />

    <IpRange Subnet="104.214.241.0/24" />

    <IpRange Subnet="104.214.242.0/23" />

    <IpRange Subnet="104.214.244.0/22" />

    <IpRange Subnet="104.214.248.0/21" />

    <IpRange Subnet="13.73.128.16/28" />

    <IpRange Subnet="13.73.128.32/27" />

    <IpRange Subnet="13.73.128.64/26" />

    <IpRange Subnet="13.73.128.128/25" />

    <IpRange Subnet="13.73.130.0/23" />

    <IpRange Subnet="13.73.132.0/22" />

    <IpRange Subnet="13.80.89.16/28" />

    <IpRange Subnet="13.80.89.32/27" />

    <IpRange Subnet="13.80.89.64/26" />

    <IpRange Subnet="13.80.89.128/25" />

    <IpRange Subnet="13.80.92.0/22" />

    <IpRange Subnet="13.73.168.128/25" />

    <IpRange Subnet="13.73.170.0/23" />

    <IpRange Subnet="13.73.172.0/22" />

    <IpRange Subnet="13.80.160.16/28" />

    <IpRange Subnet="13.80.160.64/26" />

    <IpRange Subnet="13.80.160.128/25" />

    <IpRange Subnet="13.80.161.0/24" />

    <IpRange Subnet="13.80.162.0/23" />

    <IpRange Subnet="13.80.164.0/22" />

    <IpRange Subnet="13.80.91.16/28" />

    <IpRange Subnet="13.80.91.32/27" />

    <IpRange Subnet="13.80.91.64/26" />

    <IpRange Subnet="13.80.91.128/25" />

    <IpRange Subnet="13.80.192.0/19" />

    <IpRange Subnet="13.80.224.0/21" />

    <IpRange Subnet="13.80.233.16/28" />

    <IpRange Subnet="13.80.233.32/27" />

    <IpRange Subnet="13.80.233.64/26" />

    <IpRange Subnet="13.80.233.128/25" />

    <IpRange Subnet="13.80.234.0/23" />

    <IpRange Subnet="13.80.236.0/22" />

    <IpRange Subnet="13.81.16.16/28" />

    <IpRange Subnet="13.81.16.32/27" />

    <IpRange Subnet="13.81.16.64/26" />

    <IpRange Subnet="13.81.16.128/25" />

    <IpRange Subnet="13.81.18.0/23" />

    <IpRange Subnet="13.81.20.0/22" />

    <IpRange Subnet="13.81.80.0/20" />

    <IpRange Subnet="13.81.96.0/19" />

    <IpRange Subnet="13.69.40.64/26" />

    <IpRange Subnet="13.69.40.128/25" />

    <IpRange Subnet="13.69.42.0/23" />

    <IpRange Subnet="13.69.44.0/22" />

    <IpRange Subnet="13.69.40.48/28" />

    <IpRange Subnet="13.80.184.16/28" />

    <IpRange Subnet="13.80.184.32/27" />

    <IpRange Subnet="13.80.184.64/26" />

    <IpRange Subnet="13.80.184.128/25" />

    <IpRange Subnet="13.80.186.0/23" />

    <IpRange Subnet="13.80.188.0/22" />

    <IpRange Subnet="13.80.184.16/28" />

    <IpRange Subnet="13.80.184.32/27" />

    <IpRange Subnet="13.80.184.64/26" />

    <IpRange Subnet="13.80.184.128/25" />

    <IpRange Subnet="13.80.186.0/23" />

    <IpRange Subnet="13.80.188.0/22" />

    <IpRange Subnet="13.81.232.16/28" />

    <IpRange Subnet="13.81.232.32/27" />

    <IpRange Subnet="13.81.232.64/26" />

    <IpRange Subnet="13.81.232.128/25" />

    <IpRange Subnet="13.81.234.0/23" />

    <IpRange Subnet="13.81.236.0/22" />

    <IpRange Subnet="13.81.232.16/28" />

    <IpRange Subnet="13.81.232.32/27" />

    <IpRange Subnet="13.81.232.64/26" />

    <IpRange Subnet="13.81.232.128/25" />

    <IpRange Subnet="13.81.234.0/23" />

    <IpRange Subnet="13.81.236.0/22" />

    <IpRange Subnet="13.69.64.0/19" />

    <IpRange Subnet="13.81.72.0/28" />

    <IpRange Subnet="13.81.72.32/27" />

    <IpRange Subnet="13.81.72.64/26" />

    <IpRange Subnet="13.81.72.128/25" />

    <IpRange Subnet="13.81.73.0/24" />

    <IpRange Subnet="13.81.75.0/24" />

    <IpRange Subnet="13.81.76.0/22" />

    <IpRange Subnet="13.81.128.0/19" />

    <IpRange Subnet="13.81.160.16/28" />

    <IpRange Subnet="13.81.160.32/27" />

    <IpRange Subnet="13.81.160.64/26" />

    <IpRange Subnet="13.81.160.128/25" />

    <IpRange Subnet="13.81.162.0/23" />

    <IpRange Subnet="13.81.164.0/22" />

    <IpRange Subnet="13.81.128.0/19" />

    <IpRange Subnet="13.81.160.16/28" />

    <IpRange Subnet="13.81.160.32/27" />

    <IpRange Subnet="13.81.160.64/26" />

    <IpRange Subnet="13.81.160.128/25" />

    <IpRange Subnet="13.81.162.0/23" />

    <IpRange Subnet="13.81.164.0/22" />

    <IpRange Subnet="13.69.0.0/19" />

    <IpRange Subnet="13.69.32.0/21" />

    <IpRange Subnet="13.69.40.0/27" />

    <IpRange Subnet="13.69.40.32/28" />

    <IpRange Subnet="13.69.41.0/24" />

    <IpRange Subnet="13.69.48.0/20" />

    <IpRange Subnet="13.69.96.0/19" />

    <IpRange Subnet="13.73.128.0/28" />

    <IpRange Subnet="13.73.129.0/24" />

    <IpRange Subnet="13.73.136.0/21" />

    <IpRange Subnet="13.73.144.0/20" />

    <IpRange Subnet="13.73.160.0/21" />

    <IpRange Subnet="13.73.168.0/26" />

    <IpRange Subnet="13.73.168.64/27" />

    <IpRange Subnet="13.73.168.96/28" />

    <IpRange Subnet="13.73.169.0/24" />

    <IpRange Subnet="13.73.176.0/20" />

    <IpRange Subnet="13.73.224.0/21" />

    <IpRange Subnet="13.80.0.0/19" />

    <IpRange Subnet="13.80.32.0/28" />

    <IpRange Subnet="13.80.33.0/24" />

    <IpRange Subnet="13.80.40.0/21" />

    <IpRange Subnet="13.80.48.0/20" />

    <IpRange Subnet="13.80.64.0/20" />

    <IpRange Subnet="13.80.80.0/21" />

    <IpRange Subnet="13.80.88.0/24" />

    <IpRange Subnet="13.80.89.0/28" />

    <IpRange Subnet="13.80.90.0/24" />

    <IpRange Subnet="13.80.91.0/28" />

    <IpRange Subnet="13.80.96.0/19" />

    <IpRange Subnet="13.80.128.0/19" />

    <IpRange Subnet="13.80.160.0/28" />

    <IpRange Subnet="13.80.160.32/27" />

    <IpRange Subnet="13.80.168.0/21" />

    <IpRange Subnet="13.80.176.0/21" />

    <IpRange Subnet="13.80.184.0/28" />

    <IpRange Subnet="13.80.185.0/24" />

    <IpRange Subnet="13.80.232.0/24" />

    <IpRange Subnet="13.80.233.0/28" />

    <IpRange Subnet="13.80.240.0/20" />

    <IpRange Subnet="13.81.0.0/20" />

    <IpRange Subnet="13.81.24.0/21" />

    <IpRange Subnet="13.81.32.0/19" />

    <IpRange Subnet="13.81.64.0/21" />

    <IpRange Subnet="13.81.160.0/28" />

    <IpRange Subnet="13.81.161.0/24" />

    <IpRange Subnet="13.81.168.0/21" />

    <IpRange Subnet="13.81.176.0/20" />

    <IpRange Subnet="13.81.192.0/19" />

    <IpRange Subnet="13.81.224.0/21" />

    <IpRange Subnet="13.81.232.0/28" />

    <IpRange Subnet="13.81.233.0/24" />

    <IpRange Subnet="13.81.240.0/20" />

    <IpRange Subnet="13.88.200.0/21" />

    <IpRange Subnet="13.93.0.0/20" />

    <IpRange Subnet="13.93.16.0/24" />

    <IpRange Subnet="13.93.17.0/28" />

    <IpRange Subnet="13.93.24.0/21" />

    <IpRange Subnet="13.93.32.0/20" />

    <IpRange Subnet="13.93.48.0/21" />

    <IpRange Subnet="13.93.56.0/24" />

    <IpRange Subnet="13.93.57.0/28" />

    <IpRange Subnet="13.93.64.0/19" />

    <IpRange Subnet="13.93.96.0/27" />

    <IpRange Subnet="13.93.97.0/24" />

    <IpRange Subnet="13.93.98.0/24" />

    <IpRange Subnet="13.93.104.0/21" />

    <IpRange Subnet="13.93.112.0/20" />

    <IpRange Subnet="13.94.128.0/19" />

    <IpRange Subnet="13.94.216.0/28" />

    <IpRange Subnet="13.94.217.0/24" />

    <IpRange Subnet="13.94.224.0/19" />

    <IpRange Subnet="13.95.0.0/19" />

    <IpRange Subnet="40.68.48.0/28" />

    <IpRange Subnet="40.68.49.0/24" />

    <IpRange Subnet="40.68.56.0/21" />

    <IpRange Subnet="40.68.64.0/19" />

    <IpRange Subnet="40.68.96.0/21" />

    <IpRange Subnet="40.68.104.0/28" />

    <IpRange Subnet="40.68.105.0/24" />

    <IpRange Subnet="40.68.112.0/20" />

    </Region>

    <Region Name="useast">

    <IpRange Subnet="23.96.0.0/18" />

    <IpRange Subnet="23.96.64.0/28" />

    <IpRange Subnet="23.96.64.64/26" />

    <IpRange Subnet="23.96.64.128/27" />

    <IpRange Subnet="23.96.64.160/28" />

    <IpRange Subnet="23.96.80.0/20" />

    <IpRange Subnet="23.96.96.0/19" />

    <IpRange Subnet="23.100.16.0/20" />

    <IpRange Subnet="23.101.128.0/20" />

    <IpRange Subnet="104.45.128.0/18" />

    <IpRange Subnet="104.45.192.0/20" />

    <IpRange Subnet="137.116.112.0/20" />

    <IpRange Subnet="137.117.32.0/19" />

    <IpRange Subnet="137.117.64.0/18" />

    <IpRange Subnet="137.135.64.0/18" />

    <IpRange Subnet="157.56.176.0/21" />

    <IpRange Subnet="168.61.32.0/20" />

    <IpRange Subnet="168.61.48.0/21" />

    <IpRange Subnet="168.62.32.0/21" />

    <IpRange Subnet="168.62.40.0/22" />

    <IpRange Subnet="168.62.44.0/23" />

    <IpRange Subnet="168.62.46.0/24" />

    <IpRange Subnet="168.62.47.0/27" />

    <IpRange Subnet="168.62.47.32/28" />

    <IpRange Subnet="168.62.47.96/27" />

    <IpRange Subnet="168.62.47.128/25" />

    <IpRange Subnet="168.62.48.0/20" />

    <IpRange Subnet="168.62.160.0/19" />

    <IpRange Subnet="23.98.45.0/24" />

    <IpRange Subnet="104.41.128.0/19" />

    <IpRange Subnet="138.91.96.0/25" />

    <IpRange Subnet="138.91.96.128/26" />

    <IpRange Subnet="138.91.96.192/28" />

    <IpRange Subnet="138.91.112.0/20" />

    <IpRange Subnet="191.234.32.0/19" />

    <IpRange Subnet="191.236.0.0/18" />

    <IpRange Subnet="191.238.0.0/22" />

    <IpRange Subnet="191.238.4.0/24" />

    <IpRange Subnet="191.238.6.0/26" />

    <IpRange Subnet="191.238.6.64/28" />

    <IpRange Subnet="191.238.7.0/24" />

    <IpRange Subnet="191.238.8.0/21" />

    <IpRange Subnet="191.238.16.0/20" />

    <IpRange Subnet="191.238.32.0/19" />

    <IpRange Subnet="40.76.0.0/20" />

    <IpRange Subnet="40.76.16.0/20" />

    <IpRange Subnet="40.76.32.0/20" />

    <IpRange Subnet="40.76.48.0/20" />

    <IpRange Subnet="13.68.163.64/26" />

    <IpRange Subnet="13.68.163.128/25" />

    <IpRange Subnet="40.76.64.0/18" />

    <IpRange Subnet="40.76.128.0/17" />

    <IpRange Subnet="40.114.0.0/17" />

    <IpRange Subnet="40.117.128.0/17" />

    <IpRange Subnet="40.121.0.0/16" />

    <IpRange Subnet="104.211.0.0/18" />

    <IpRange Subnet="191.237.0.0/19" />

    <IpRange Subnet="191.237.32.0/22" />

    <IpRange Subnet="191.237.36.0/23" />

    <IpRange Subnet="191.237.38.0/27" />

    <IpRange Subnet="191.237.39.0/24" />

    <IpRange Subnet="191.237.40.0/21" />

    <IpRange Subnet="191.237.48.0/20" />

    <IpRange Subnet="191.237.64.0/18" />

    <IpRange Subnet="13.72.88.64/26" />

    <IpRange Subnet="13.72.88.128/25" />

    <IpRange Subnet="13.72.92.0/22" />

    <IpRange Subnet="13.68.161.16/28" />

    <IpRange Subnet="13.68.161.32/27" />

    <IpRange Subnet="13.68.161.64/26" />

    <IpRange Subnet="13.68.161.128/25" />

    <IpRange Subnet="13.72.104.0/21" />

    <IpRange Subnet="13.72.120.16/28" />

    <IpRange Subnet="13.72.120.32/27" />

    <IpRange Subnet="13.72.120.64/26" />

    <IpRange Subnet="13.72.120.128/25" />

    <IpRange Subnet="13.72.122.0/23" />

    <IpRange Subnet="13.72.124.0/22" />

    <IpRange Subnet="13.72.91.0/24" />

    <IpRange Subnet="13.68.163.48/28" />

    <IpRange Subnet="13.68.128.0/19" />

    <IpRange Subnet="13.68.160.0/24" />

    <IpRange Subnet="13.68.161.0/28" />

    <IpRange Subnet="13.68.162.0/24" />

    <IpRange Subnet="13.68.163.0/27" />

    <IpRange Subnet="13.68.163.32/28" />

    <IpRange Subnet="13.68.165.0/25" />

    <IpRange Subnet="13.68.166.0/24" />

    <IpRange Subnet="13.68.167.0/25" />

    <IpRange Subnet="13.68.167.128/26" />

    <IpRange Subnet="13.68.167.192/27" />

    <IpRange Subnet="13.68.168.0/21" />

    <IpRange Subnet="13.68.176.0/20" />

    <IpRange Subnet="13.68.192.0/18" />

    <IpRange Subnet="13.72.64.0/20" />

    <IpRange Subnet="13.72.80.0/21" />

    <IpRange Subnet="13.72.88.0/26" />

    <IpRange Subnet="13.72.89.0/24" />

    <IpRange Subnet="13.72.90.0/24" />

    <IpRange Subnet="13.72.96.0/21" />

    <IpRange Subnet="13.72.112.0/21" />

    <IpRange Subnet="13.72.120.0/28" />

    <IpRange Subnet="13.72.121.0/24" />

    <IpRange Subnet="13.82.0.0/16" />

    <IpRange Subnet="13.90.0.0/19" />

    <IpRange Subnet="13.90.32.0/20" />

    <IpRange Subnet="13.90.48.0/28" />

    <IpRange Subnet="13.90.49.0/24" />

    <IpRange Subnet="13.90.56.0/21" />

    <IpRange Subnet="13.90.64.0/19" />

    <IpRange Subnet="13.90.96.0/21" />

    <IpRange Subnet="13.90.104.0/28" />

    <IpRange Subnet="13.90.105.0/24" />

    <IpRange Subnet="13.90.112.0/20" />

    <IpRange Subnet="13.90.128.0/19" />

    <IpRange Subnet="13.92.0.0/19" />

    <IpRange Subnet="13.92.32.0/20" />

    <IpRange Subnet="13.92.200.16/28" />

    <IpRange Subnet="13.92.202.0/24" />

    <IpRange Subnet="40.80.144.0/21" />

    <IpRange Subnet="40.85.160.0/19" />

    <IpRange Subnet="40.87.0.0/17" />

    <IpRange Subnet="40.112.48.0/20" />

    <IpRange Subnet="40.117.32.0/19" />

    <IpRange Subnet="40.117.64.0/18" />

    </Region>

    <Region Name="useast2">

    <IpRange Subnet="23.100.64.0/21" />

    <IpRange Subnet="23.101.144.0/20" />

    <IpRange Subnet="23.101.32.0/21" />

    <IpRange Subnet="137.116.0.0/18" />

    <IpRange Subnet="137.116.64.0/19" />

    <IpRange Subnet="137.116.96.0/22" />

    <IpRange Subnet="191.239.224.0/25" />

    <IpRange Subnet="193.149.64.0/21" />

    <IpRange Subnet="104.46.192.0/20" />

    <IpRange Subnet="23.102.204.0/22" />

    <IpRange Subnet="40.75.0.0/17" />

    <IpRange Subnet="40.84.0.0/17" />

    <IpRange Subnet="104.46.0.0/21" />

    <IpRange Subnet="104.46.96.0/19" />

    <IpRange Subnet="104.47.200.0/21" />

    <IpRange Subnet="104.209.128.0/17" />

    <IpRange Subnet="104.210.0.0/20" />

    <IpRange Subnet="191.236.192.0/18" />

    <IpRange Subnet="191.237.128.0/19" />

    <IpRange Subnet="191.237.160.0/22" />

    <IpRange Subnet="191.237.164.0/23" />

    <IpRange Subnet="191.237.168.0/21" />

    <IpRange Subnet="191.237.176.0/20" />

    <IpRange Subnet="23.102.206.144/28" />

    <IpRange Subnet="23.102.206.160/27" />

    <IpRange Subnet="23.102.206.192/26" />

    <IpRange Subnet="104.47.201.16/28" />

    <IpRange Subnet="104.47.201.32/27" />

    <IpRange Subnet="104.47.201.64/26" />

    <IpRange Subnet="104.47.201.128/25" />

    <IpRange Subnet="104.47.202.0/23" />

    <IpRange Subnet="104.47.204.0/22" />

    <IpRange Subnet="104.209.225.16/28" />

    <IpRange Subnet="104.209.225.32/27" />

    <IpRange Subnet="104.209.225.64/26" />

    <IpRange Subnet="104.209.225.128/25" />

    <IpRange Subnet="104.209.226.0/23" />

    <IpRange Subnet="104.209.228.0/22" />

    <IpRange Subnet="40.84.8.48/28" />

    <IpRange Subnet="40.84.8.64/26" />

    <IpRange Subnet="40.84.8.128/25" />

    <IpRange Subnet="40.84.10.0/23" />

    <IpRange Subnet="40.84.12.0/22" />

    <IpRange Subnet="40.84.32.0/19" />

    <IpRange Subnet="40.84.64.0/18" />

    <IpRange Subnet="25.66.8.0/21" />

    <IpRange Subnet="13.68.0.0/17" />

    <IpRange Subnet="13.77.64.0/18" />

    <IpRange Subnet="40.79.0.0/21" />

    <IpRange Subnet="40.79.8.0/27" />

    <IpRange Subnet="40.79.8.32/28" />

    <IpRange Subnet="40.79.8.64/27" />

    <IpRange Subnet="40.79.8.96/28" />

    <IpRange Subnet="40.79.9.0/24" />

    <IpRange Subnet="40.79.16.0/20" />

    <IpRange Subnet="40.79.32.0/20" />

    <IpRange Subnet="40.79.48.0/27" />

    <IpRange Subnet="40.79.48.32/28" />

    <IpRange Subnet="40.79.49.0/24" />

    <IpRange Subnet="40.79.56.0/21" />

    <IpRange Subnet="40.79.64.0/20" />

    <IpRange Subnet="40.79.80.0/21" />

    <IpRange Subnet="40.79.88.32/28" />

    <IpRange Subnet="40.79.89.0/24" />

    <IpRange Subnet="40.79.90.0/24" />

    <IpRange Subnet="40.79.91.0/28" />

    <IpRange Subnet="40.79.92.0/24" />

    <IpRange Subnet="40.79.93.0/28" />

    <IpRange Subnet="40.81.0.0/17" />

    <IpRange Subnet="40.123.16.0/27" />

    <IpRange Subnet="40.123.16.32/28" />

    <IpRange Subnet="40.123.17.0/24" />

    <IpRange Subnet="40.123.24.0/21" />

    <IpRange Subnet="40.123.32.0/20" />

    <IpRange Subnet="40.123.48.0/21" />

    <IpRange Subnet="40.123.120.0/21" />

    <IpRange Subnet="104.208.128.0/27" />

    <IpRange Subnet="104.208.128.32/28" />

    <IpRange Subnet="104.208.129.0/24" />

    <IpRange Subnet="104.208.136.0/21" />

    <IpRange Subnet="104.208.144.0/20" />

    <IpRange Subnet="104.208.160.0/21" />

    <IpRange Subnet="104.208.192.0/20" />

    <IpRange Subnet="104.208.208.0/24" />

    <IpRange Subnet="104.208.209.0/28" />

    <IpRange Subnet="104.208.216.0/21" />

    <IpRange Subnet="104.208.224.0/20" />

    <IpRange Subnet="104.208.240.0/21" />

    <IpRange Subnet="104.208.248.0/27" />

    </Region>

    <Region Name="uswest">

    <IpRange Subnet="23.100.32.0/20" />

    <IpRange Subnet="23.101.192.0/20" />

    <IpRange Subnet="104.45.208.0/20" />

    <IpRange Subnet="104.45.224.0/19" />

    <IpRange Subnet="137.116.184.0/21" />

    <IpRange Subnet="137.117.0.0/19" />

    <IpRange Subnet="137.135.0.0/18" />

    <IpRange Subnet="138.91.64.0/19" />

    <IpRange Subnet="157.56.160.0/21" />

    <IpRange Subnet="168.61.0.0/19" />

    <IpRange Subnet="168.61.64.0/20" />

    <IpRange Subnet="168.62.0.0/21" />

    <IpRange Subnet="168.62.8.0/22" />

    <IpRange Subnet="168.62.12.0/23" />

    <IpRange Subnet="168.62.14.0/24" />

    <IpRange Subnet="168.62.15.0/27" />

    <IpRange Subnet="168.62.15.32/28" />

    <IpRange Subnet="168.62.15.96/27" />

    <IpRange Subnet="168.62.15.128/25" />

    <IpRange Subnet="168.62.16.0/20" />

    <IpRange Subnet="168.62.192.0/19" />

    <IpRange Subnet="168.63.88.0/24" />

    <IpRange Subnet="23.99.64.0/19" />

    <IpRange Subnet="138.91.128.0/24" />

    <IpRange Subnet="138.91.129.0/26" />

    <IpRange Subnet="138.91.129.64/28" />

    <IpRange Subnet="138.91.136.0/21" />

    <IpRange Subnet="138.91.144.0/20" />

    <IpRange Subnet="138.91.160.0/19" />

    <IpRange Subnet="138.91.192.0/21" />

    <IpRange Subnet="138.91.224.0/19" />

    <IpRange Subnet="191.238.70.0/23" />

    <IpRange Subnet="13.83.32.0/24" />

    <IpRange Subnet="13.83.33.0/28" />

    <IpRange Subnet="13.83.40.0/21" />

    <IpRange Subnet="13.83.48.0/20" />

    <IpRange Subnet="13.83.64.0/21" />

    <IpRange Subnet="13.83.72.0/27" />

    <IpRange Subnet="23.99.0.0/19" />

    <IpRange Subnet="23.99.32.0/25" />

    <IpRange Subnet="23.99.32.128/28" />

    <IpRange Subnet="23.99.33.0/28" />

    <IpRange Subnet="23.99.34.0/23" />

    <IpRange Subnet="23.99.36.0/24" />

    <IpRange Subnet="23.99.37.0/26" />

    <IpRange Subnet="23.99.37.80/28" />

    <IpRange Subnet="23.99.37.96/27" />

    <IpRange Subnet="23.99.37.128/27" />

    <IpRange Subnet="23.99.37.176/28" />

    <IpRange Subnet="23.99.37.192/26" />

    <IpRange Subnet="23.99.38.0/24" />

    <IpRange Subnet="23.99.40.0/23" />

    <IpRange Subnet="23.99.42.0/24" />

    <IpRange Subnet="23.99.44.0/23" />

    <IpRange Subnet="23.99.46.0/24" />

    <IpRange Subnet="23.99.47.0/26" />

    <IpRange Subnet="23.99.47.64/28" />

    <IpRange Subnet="23.99.48.0/20" />

    <IpRange Subnet="40.75.128.0/17" />

    <IpRange Subnet="40.83.152.0/24" />

    <IpRange Subnet="40.83.153.0/28" />

    <IpRange Subnet="40.83.160.0/19" />

    <IpRange Subnet="40.83.227.0/27" />

    <IpRange Subnet="40.112.224.0/26" />

    <IpRange Subnet="65.52.112.0/20" />

    <IpRange Subnet="104.40.0.0/18" />

    <IpRange Subnet="104.40.64.0/19" />

    <IpRange Subnet="104.42.0.0/18" />

    <IpRange Subnet="104.42.64.0/20" />

    <IpRange Subnet="104.42.96.0/19" />

    <IpRange Subnet="104.209.16.0/23" />

    <IpRange Subnet="104.209.32.0/19" />

    <IpRange Subnet="104.210.32.0/19" />

    <IpRange Subnet="168.63.89.0/25" />

    <IpRange Subnet="168.63.89.128/26" />

    <IpRange Subnet="191.236.64.0/18" />

    <IpRange Subnet="191.239.0.0/18" />

    <IpRange Subnet="13.64.0.0/16" />

    <IpRange Subnet="13.73.32.0/19" />

    <IpRange Subnet="13.83.0.0/19" />

    <IpRange Subnet="13.83.33.16/28" />

    <IpRange Subnet="13.83.33.32/27" />

    <IpRange Subnet="13.83.33.64/26" />

    <IpRange Subnet="13.83.33.128/25" />

    <IpRange Subnet="13.83.34.0/23" />

    <IpRange Subnet="13.83.36.0/22" />

    <IpRange Subnet="13.83.72.32/27" />

    <IpRange Subnet="13.83.72.64/26" />

    <IpRange Subnet="13.83.72.128/25" />

    <IpRange Subnet="13.83.73.0/24" />

    <IpRange Subnet="13.83.74.0/23" />

    <IpRange Subnet="13.83.76.0/22" />

    <IpRange Subnet="13.83.80.0/20" />

    <IpRange Subnet="13.83.96.0/19" />

    <IpRange Subnet="13.83.128.0/17" />

    <IpRange Subnet="13.86.128.0/20" />

    <IpRange Subnet="13.86.144.0/28" />

    <IpRange Subnet="13.86.145.0/24" />

    <IpRange Subnet="13.86.152.0/21" />

    <IpRange Subnet="13.86.160.0/19" />

    <IpRange Subnet="13.86.192.0/21" />

    <IpRange Subnet="13.86.200.0/27" />

    <IpRange Subnet="13.86.201.0/24" />

    <IpRange Subnet="13.86.202.0/24" />

    <IpRange Subnet="13.86.208.0/20" />

    <IpRange Subnet="13.86.224.0/19" />

    <IpRange Subnet="13.87.128.0/19" />

    <IpRange Subnet="13.87.160.0/20" />

    <IpRange Subnet="13.87.176.0/28" />

    <IpRange Subnet="13.87.177.0/24" />

    <IpRange Subnet="13.87.184.0/21" />

    <IpRange Subnet="13.87.192.0/19" />

    <IpRange Subnet="13.87.224.0/21" />

    <IpRange Subnet="13.87.232.0/28" />

    <IpRange Subnet="13.87.233.0/24" />

    <IpRange Subnet="13.87.240.0/20" />

    <IpRange Subnet="13.88.0.0/19" />

    <IpRange Subnet="13.88.32.0/28" />

    <IpRange Subnet="13.88.33.0/24" />

    <IpRange Subnet="13.88.40.0/21" />

    <IpRange Subnet="13.88.48.0/20" />

    <IpRange Subnet="13.88.64.0/20" />

    <IpRange Subnet="13.88.80.0/21" />

    <IpRange Subnet="13.88.88.0/28" />

    <IpRange Subnet="13.88.89.0/24" />

    <IpRange Subnet="13.88.96.0/19" />

    <IpRange Subnet="13.88.128.0/20" />

    <IpRange Subnet="13.88.144.0/25" />

    <IpRange Subnet="13.88.144.128/26" />

    <IpRange Subnet="13.88.144.192/27" />

    <IpRange Subnet="13.88.145.0/25" />

    <IpRange Subnet="13.88.145.128/27" />

    <IpRange Subnet="13.88.146.0/24" />

    <IpRange Subnet="13.88.152.0/21" />

    <IpRange Subnet="13.88.160.0/19" />

    <IpRange Subnet="13.91.0.0/21" />

    <IpRange Subnet="13.91.8.0/28" />

    <IpRange Subnet="13.91.9.0/24" />

    <IpRange Subnet="13.91.16.0/20" />

    <IpRange Subnet="13.91.32.0/19" />

    <IpRange Subnet="13.91.152.0/28" />

    <IpRange Subnet="13.91.153.0/24" />

    <IpRange Subnet="13.91.160.0/19" />

    <IpRange Subnet="13.91.192.0/20" />

    <IpRange Subnet="40.78.0.0/17" />

    <IpRange Subnet="40.81.128.0/17" />

    <IpRange Subnet="40.112.128.0/18" />

    <IpRange Subnet="40.112.192.0/19" />

    <IpRange Subnet="40.112.224.64/26" />

    <IpRange Subnet="40.112.225.0/24" />

    <IpRange Subnet="40.112.232.0/21" />

    <IpRange Subnet="40.112.240.0/20" />

    <IpRange Subnet="40.118.128.0/17" />

    <IpRange Subnet="40.80.152.0/21" />

    <IpRange Subnet="40.83.128.0/20" />

    <IpRange Subnet="40.83.144.0/21" />

    <IpRange Subnet="40.83.153.16/28" />

    <IpRange Subnet="40.83.153.32/27" />

    <IpRange Subnet="40.83.153.64/26" />

    <IpRange Subnet="40.83.153.128/25" />

    <IpRange Subnet="40.83.154.0/23" />

    <IpRange Subnet="40.83.156.0/22" />

    <IpRange Subnet="40.85.144.0/20" />

    <IpRange Subnet="40.86.160.0/19" />

    <IpRange Subnet="40.112.224.128/25" />

    <IpRange Subnet="40.112.226.0/23" />

    <IpRange Subnet="40.112.228.0/22" />

    <IpRange Subnet="13.64.0.0/16" />

    <IpRange Subnet="13.73.32.0/19" />

    <IpRange Subnet="104.42.128.0/17" />

    </Region>

    <Region Name="usnorth">

    <IpRange Subnet="23.98.54.0/24" />

    <IpRange Subnet="23.100.72.0/21" />

    <IpRange Subnet="23.100.224.0/20" />

    <IpRange Subnet="40.116.0.0/28" />

    <IpRange Subnet="40.116.0.32/27" />

    <IpRange Subnet="40.116.1.0/24" />

    <IpRange Subnet="40.116.24.0/21" />

    <IpRange Subnet="40.116.32.0/21" />

    <IpRange Subnet="40.116.40.0/28" />

    <IpRange Subnet="40.116.40.32/27" />

    <IpRange Subnet="40.116.41.0/24" />

    <IpRange Subnet="40.116.64.0/20" />

    <IpRange Subnet="40.116.120.0/27" />

    <IpRange Subnet="40.116.120.32/28" />

    <IpRange Subnet="40.116.120.64/27" />

    <IpRange Subnet="40.116.120.96/28" />

    <IpRange Subnet="40.116.120.128/27" />

    <IpRange Subnet="65.52.0.0/19" />

    <IpRange Subnet="65.52.48.0/20" />

    <IpRange Subnet="65.52.106.16/28" />

    <IpRange Subnet="65.52.106.128/27" />

    <IpRange Subnet="65.52.106.240/28" />

    <IpRange Subnet="65.52.192.0/19" />

    <IpRange Subnet="65.52.232.0/21" />

    <IpRange Subnet="65.52.240.0/21" />

    <IpRange Subnet="157.55.24.0/21" />

    <IpRange Subnet="157.55.60.224/27" />

    <IpRange Subnet="157.55.73.32/28" />

    <IpRange Subnet="157.55.136.0/21" />

    <IpRange Subnet="157.55.160.0/20" />

    <IpRange Subnet="157.55.208.0/21" />

    <IpRange Subnet="157.55.252.0/22" />

    <IpRange Subnet="157.56.8.0/21" />

    <IpRange Subnet="157.56.24.160/27" />

    <IpRange Subnet="157.56.24.192/28" />

    <IpRange Subnet="157.56.28.0/22" />

    <IpRange Subnet="168.62.96.0/19" />

    <IpRange Subnet="168.62.224.0/20" />

    <IpRange Subnet="168.62.240.0/21" />

    <IpRange Subnet="168.62.248.0/22" />

    <IpRange Subnet="191.233.144.0/24" />

    <IpRange Subnet="207.46.192.0/24" />

    <IpRange Subnet="207.46.193.0/25" />

    <IpRange Subnet="207.46.193.144/28" />

    <IpRange Subnet="207.46.193.160/27" />

    <IpRange Subnet="207.46.193.192/26" />

    <IpRange Subnet="207.46.194.0/23" />

    <IpRange Subnet="207.46.196.0/23" />

    <IpRange Subnet="207.46.198.0/24" />

    <IpRange Subnet="207.46.199.0/26" />

    <IpRange Subnet="207.46.199.64/27" />

    <IpRange Subnet="207.46.199.128/25" />

    <IpRange Subnet="207.46.200.0/26" />

    <IpRange Subnet="207.46.200.64/28" />

    <IpRange Subnet="207.46.200.96/27" />

    <IpRange Subnet="207.46.200.128/25" />

    <IpRange Subnet="207.46.201.0/24" />

    <IpRange Subnet="207.46.202.0/24" />

    <IpRange Subnet="207.46.203.0/26" />

    <IpRange Subnet="207.46.203.128/26" />

    <IpRange Subnet="207.46.203.192/27" />

    <IpRange Subnet="207.46.204.0/22" />

    <IpRange Subnet="209.240.220.0/23" />

    <IpRange Subnet="23.96.176.0/20" />

    <IpRange Subnet="23.96.192.0/18" />

    <IpRange Subnet="23.98.48.0/27" />

    <IpRange Subnet="23.98.48.80/28" />

    <IpRange Subnet="23.98.48.96/27" />

    <IpRange Subnet="23.98.48.128/27" />

    <IpRange Subnet="23.98.48.160/28" />

    <IpRange Subnet="23.98.48.192/26" />

    <IpRange Subnet="23.98.49.0/24" />

    <IpRange Subnet="23.98.50.0/23" />

    <IpRange Subnet="23.98.52.0/23" />

    <IpRange Subnet="23.98.55.0/25" />

    <IpRange Subnet="23.98.55.128/27" />

    <IpRange Subnet="23.101.160.0/20" />

    <IpRange Subnet="191.233.168.0/21" />

    <IpRange Subnet="191.233.176.0/21" />

    <IpRange Subnet="191.236.128.0/18" />

    <IpRange Subnet="23.98.55.160/27" />

    <IpRange Subnet="23.98.55.192/26" />

    <IpRange Subnet="13.71.192.0/18" />

    </Region>

    <Region Name="europenorth">

    <IpRange Subnet="13.70.209.0/24" />

    <IpRange Subnet="40.113.24.0/24" />

    <IpRange Subnet="65.52.64.0/20" />

    <IpRange Subnet="65.52.224.0/21" />

    <IpRange Subnet="94.245.88.0/21" />

    <IpRange Subnet="94.245.104.0/21" />

    <IpRange Subnet="94.245.112.0/23" />

    <IpRange Subnet="94.245.114.64/26" />

    <IpRange Subnet="94.245.114.128/25" />

    <IpRange Subnet="94.245.115.0/24" />

    <IpRange Subnet="94.245.116.0/24" />

    <IpRange Subnet="94.245.117.0/26" />

    <IpRange Subnet="94.245.117.96/27" />

    <IpRange Subnet="94.245.117.128/25" />

    <IpRange Subnet="94.245.118.0/27" />

    <IpRange Subnet="94.245.120.0/25" />

    <IpRange Subnet="94.245.120.128/28" />

    <IpRange Subnet="94.245.120.160/27" />

    <IpRange Subnet="94.245.120.192/26" />

    <IpRange Subnet="94.245.121.0/24" />

    <IpRange Subnet="94.245.122.0/24" />

    <IpRange Subnet="94.245.123.0/25" />

    <IpRange Subnet="94.245.123.128/27" />

    <IpRange Subnet="94.245.123.176/28" />

    <IpRange Subnet="94.245.123.192/26" />

    <IpRange Subnet="94.245.124.0/22" />

    <IpRange Subnet="104.41.233.0/24" />

    <IpRange Subnet="137.116.224.0/19" />

    <IpRange Subnet="168.61.80.0/20" />

    <IpRange Subnet="168.61.96.0/19" />

    <IpRange Subnet="168.63.32.0/19" />

    <IpRange Subnet="168.63.64.0/20" />

    <IpRange Subnet="168.63.80.0/21" />

    <IpRange Subnet="168.63.92.0/22" />

    <IpRange Subnet="193.149.88.0/21" />

    <IpRange Subnet="23.100.48.0/20" />

    <IpRange Subnet="23.101.48.0/20" />

    <IpRange Subnet="23.102.0.0/18" />

    <IpRange Subnet="104.45.80.0/20" />

    <IpRange Subnet="104.45.96.0/19" />

    <IpRange Subnet="137.135.128.0/20" />

    <IpRange Subnet="137.135.160.0/19" />

    <IpRange Subnet="137.135.192.0/25" />

    <IpRange Subnet="137.135.192.128/28" />

    <IpRange Subnet="137.135.192.160/27" />

    <IpRange Subnet="137.135.192.192/26" />

    <IpRange Subnet="137.135.193.0/24" />

    <IpRange Subnet="137.135.194.0/23" />

    <IpRange Subnet="137.135.196.0/22" />

    <IpRange Subnet="137.135.200.0/21" />

    <IpRange Subnet="137.135.208.0/20" />

    <IpRange Subnet="137.135.224.0/19" />

    <IpRange Subnet="138.91.48.0/20" />

    <IpRange Subnet="191.235.128.0/18" />

    <IpRange Subnet="191.235.192.0/24" />

    <IpRange Subnet="191.235.193.0/26" />

    <IpRange Subnet="191.235.193.64/27" />

    <IpRange Subnet="191.235.193.96/28" />

    <IpRange Subnet="191.235.193.128/25" />

    <IpRange Subnet="191.235.194.0/23" />

    <IpRange Subnet="191.235.208.0/20" />

    <IpRange Subnet="191.235.255.0/26" />

    <IpRange Subnet="191.235.255.64/27" />

    <IpRange Subnet="191.235.255.128/25" />

    <IpRange Subnet="191.237.192.0/23" />

    <IpRange Subnet="191.237.194.0/24" />

    <IpRange Subnet="191.237.196.0/28" />

    <IpRange Subnet="191.237.208.0/20" />

    <IpRange Subnet="191.238.96.0/19" />

    <IpRange Subnet="191.239.208.0/20" />

    <IpRange Subnet="40.127.128.0/19" />

    <IpRange Subnet="40.127.160.0/19" />

    <IpRange Subnet="13.69.128.0/17" />

    <IpRange Subnet="13.70.192.0/20" />

    <IpRange Subnet="13.70.208.0/25" />

    <IpRange Subnet="13.70.208.128/27" />

    <IpRange Subnet="13.70.208.176/28" />

    <IpRange Subnet="13.70.208.192/26" />

    <IpRange Subnet="13.70.210.0/23" />

    <IpRange Subnet="13.70.212.0/22" />

    <IpRange Subnet="13.70.232.0/21" />

    <IpRange Subnet="13.70.240.0/20" />

    <IpRange Subnet="13.74.0.16/28" />

    <IpRange Subnet="13.74.0.32/27" />

    <IpRange Subnet="13.74.0.64/26" />

    <IpRange Subnet="13.74.0.128/25" />

    <IpRange Subnet="13.74.3.0/24" />

    <IpRange Subnet="13.74.4.0/22" />

    <IpRange Subnet="13.74.72.160/27" />

    <IpRange Subnet="13.74.72.192/26" />

    <IpRange Subnet="13.74.75.64/26" />

    <IpRange Subnet="13.74.75.128/25" />

    <IpRange Subnet="13.74.76.0/24" />

    <IpRange Subnet="13.74.77.16/28" />

    <IpRange Subnet="13.74.77.32/27" />

    <IpRange Subnet="13.74.77.64/26" />

    <IpRange Subnet="13.74.77.128/25" />

    <IpRange Subnet="13.74.79.16/28" />

    <IpRange Subnet="13.74.79.32/27" />

    <IpRange Subnet="13.74.79.64/26" />

    <IpRange Subnet="13.74.79.128/25" />

    <IpRange Subnet="13.74.144.0/20" />

    <IpRange Subnet="13.74.192.0/18" />

    <IpRange Subnet="13.79.0.0/17" />

    <IpRange Subnet="13.79.176.96/27" />

    <IpRange Subnet="13.79.176.128/25" />

    <IpRange Subnet="13.79.177.0/24" />

    <IpRange Subnet="13.79.178.0/23" />

    <IpRange Subnet="13.79.180.0/22" />

    <IpRange Subnet="13.79.184.0/21" />

    <IpRange Subnet="13.79.249.32/27" />

    <IpRange Subnet="13.79.249.64/26" />

    <IpRange Subnet="13.79.249.128/25" />

    <IpRange Subnet="13.79.251.0/24" />

    <IpRange Subnet="13.79.252.0/22" />

    <IpRange Subnet="40.74.144.0/20" />

    <IpRange Subnet="40.79.128.0/17" />

    <IpRange Subnet="40.85.0.0/17" />

    <IpRange Subnet="40.85.128.0/20" />

    <IpRange Subnet="40.87.128.0/19" />

    <IpRange Subnet="40.112.36.0/26" />

    <IpRange Subnet="40.112.64.0/19" />

    <IpRange Subnet="40.113.0.0/20" />

    <IpRange Subnet="40.113.16.0/21" />

    <IpRange Subnet="40.113.25.0/24" />

    <IpRange Subnet="40.113.26.0/23" />

    <IpRange Subnet="40.113.28.0/22" />

    <IpRange Subnet="40.113.32.0/19" />

    <IpRange Subnet="40.113.64.0/19" />

    <IpRange Subnet="40.115.96.0/19" />

    <IpRange Subnet="40.127.96.0/20" />

    <IpRange Subnet="40.127.192.0/18" />

    <IpRange Subnet="104.41.192.0/19" />

    <IpRange Subnet="104.41.224.0/21" />

    <IpRange Subnet="104.41.232.0/24" />

    <IpRange Subnet="104.41.234.0/23" />

    <IpRange Subnet="104.41.236.0/22" />

    <IpRange Subnet="104.41.240.0/20" />

    <IpRange Subnet="104.46.8.0/21" />

    <IpRange Subnet="104.46.64.0/19" />

    <IpRange Subnet="13.74.0.0/28" />

    <IpRange Subnet="13.74.1.0/24" />

    <IpRange Subnet="13.74.2.0/24" />

    <IpRange Subnet="13.74.8.0/21" />

    <IpRange Subnet="13.74.16.0/20" />

    <IpRange Subnet="13.74.32.0/19" />

    <IpRange Subnet="13.74.64.0/21" />

    <IpRange Subnet="13.74.72.0/25" />

    <IpRange Subnet="13.74.72.128/27" />

    <IpRange Subnet="13.74.73.0/24" />

    <IpRange Subnet="13.74.75.16/28" />

    <IpRange Subnet="13.74.75.32/27" />

    <IpRange Subnet="13.74.79.0/28" />

    <IpRange Subnet="13.74.80.0/20" />

    <IpRange Subnet="13.74.96.0/19" />

    <IpRange Subnet="13.74.128.0/20" />

    <IpRange Subnet="13.79.192.0/19" />

    <IpRange Subnet="13.79.224.0/20" />

    <IpRange Subnet="13.79.240.0/21" />

    <IpRange Subnet="40.69.0.0/19" />

    <IpRange Subnet="40.69.32.0/20" />

    <IpRange Subnet="40.69.48.0/28" />

    <IpRange Subnet="40.69.49.0/24" />

    <IpRange Subnet="40.69.56.0/21" />

    </Region>

    <Region Name="uscentral">

    <IpRange Subnet="23.100.80.0/21" />

    <IpRange Subnet="23.101.112.0/20" />

    <IpRange Subnet="168.61.128.0/17" />

    <IpRange Subnet="193.149.72.0/21" />

    <IpRange Subnet="23.100.240.0/20" />

    <IpRange Subnet="23.99.128.0/19" />

    <IpRange Subnet="23.99.160.0/22" />

    <IpRange Subnet="23.99.164.0/23" />

    <IpRange Subnet="23.99.166.0/24" />

    <IpRange Subnet="23.99.167.0/27" />

    <IpRange Subnet="23.99.168.0/23" />

    <IpRange Subnet="23.99.176.0/20" />

    <IpRange Subnet="23.99.192.0/18" />

    <IpRange Subnet="40.78.128.0/19" />

    <IpRange Subnet="40.113.192.0/20" />

    <IpRange Subnet="40.113.208.0/24" />

    <IpRange Subnet="40.113.209.0/28" />

    <IpRange Subnet="40.113.216.0/21" />

    <IpRange Subnet="40.113.224.0/20" />

    <IpRange Subnet="40.113.240.0/21" />

    <IpRange Subnet="40.113.248.0/24" />

    <IpRange Subnet="40.113.249.0/28" />

    <IpRange Subnet="104.43.128.0/17" />

    <IpRange Subnet="23.99.167.32/27" />

    <IpRange Subnet="23.99.167.64/26" />

    <IpRange Subnet="23.99.167.128/25" />

    <IpRange Subnet="23.99.170.0/23" />

    <IpRange Subnet="23.99.172.0/22" />

    <IpRange Subnet="40.78.160.0/19" />

    <IpRange Subnet="40.113.209.16/28" />

    <IpRange Subnet="40.113.209.32/27" />

    <IpRange Subnet="40.113.209.64/26" />

    <IpRange Subnet="40.113.209.128/25" />

    <IpRange Subnet="40.113.210.0/23" />

    <IpRange Subnet="40.113.212.0/22" />

    <IpRange Subnet="40.113.249.16/28" />

    <IpRange Subnet="40.113.249.32/27" />

    <IpRange Subnet="40.113.249.64/26" />

    <IpRange Subnet="40.113.249.128/25" />

    <IpRange Subnet="40.113.250.0/23" />

    <IpRange Subnet="40.113.252.0/22" />

    <IpRange Subnet="13.67.128.0/17" />

    <IpRange Subnet="13.86.0.0/17" />

    <IpRange Subnet="13.89.0.0/18" />

    <IpRange Subnet="13.89.64.0/28" />

    <IpRange Subnet="13.89.65.0/24" />

    <IpRange Subnet="13.89.72.0/21" />

    <IpRange Subnet="13.89.80.0/20" />

    <IpRange Subnet="13.89.96.0/19" />

    <IpRange Subnet="40.77.0.0/17" />

    <IpRange Subnet="40.83.0.0/18" />

    <IpRange Subnet="40.86.0.0/17" />

    <IpRange Subnet="40.122.0.0/16" />

    <IpRange Subnet="104.208.0.0/18" />

    </Region>

    <Region Name="asiaeast">

    <IpRange Subnet="23.98.32.0/21" />

    <IpRange Subnet="23.98.40.0/22" />

    <IpRange Subnet="23.100.88.0/21" />

    <IpRange Subnet="23.101.0.0/20" />

    <IpRange Subnet="65.52.160.0/19" />

    <IpRange Subnet="104.46.24.0/24" />

    <IpRange Subnet="104.46.26.0/24" />

    <IpRange Subnet="104.46.160.0/19" />

    <IpRange Subnet="111.221.64.0/22" />

    <IpRange Subnet="111.221.69.0/25" />

    <IpRange Subnet="134.170.192.0/21" />

    <IpRange Subnet="137.116.160.0/20" />

    <IpRange Subnet="168.63.128.0/19" />

    <IpRange Subnet="168.63.192.0/19" />

    <IpRange Subnet="207.46.87.0/24" />

    <IpRange Subnet="207.46.89.16/28" />

    <IpRange Subnet="207.46.95.48/28" />

    <IpRange Subnet="207.46.128.0/19" />

    <IpRange Subnet="13.70.0.0/18" />

    <IpRange Subnet="13.72.192.0/19" />

    <IpRange Subnet="13.75.0.0/17" />

    <IpRange Subnet="13.88.208.0/20" />

    <IpRange Subnet="23.97.64.0/20" />

    <IpRange Subnet="23.97.80.0/28" />

    <IpRange Subnet="23.98.44.0/24" />

    <IpRange Subnet="23.99.96.0/19" />

    <IpRange Subnet="23.102.224.0/19" />

    <IpRange Subnet="40.83.64.0/18" />

    <IpRange Subnet="104.46.25.0/24" />

    <IpRange Subnet="104.46.27.0/24" />

    <IpRange Subnet="104.208.80.0/20" />

    <IpRange Subnet="104.208.96.0/19" />

    <IpRange Subnet="191.234.2.16/28" />

    <IpRange Subnet="191.234.2.32/27" />

    <IpRange Subnet="191.234.2.64/26" />

    <IpRange Subnet="191.234.2.128/26" />

    <IpRange Subnet="191.234.3.0/24" />

    <IpRange Subnet="191.234.16.0/20" />

    <IpRange Subnet="191.237.238.0/28" />

    <IpRange Subnet="191.237.238.32/27" />

    <IpRange Subnet="191.237.238.64/27" />

    <IpRange Subnet="191.237.238.112/28" />

    </Region>

    <Region Name="asiasoutheast">

    <IpRange Subnet="23.97.48.0/20" />

    <IpRange Subnet="23.100.112.0/21" />

    <IpRange Subnet="23.101.16.0/20" />

    <IpRange Subnet="104.43.41.0/24" />

    <IpRange Subnet="104.46.128.0/19" />

    <IpRange Subnet="104.215.201.0/24" />

    <IpRange Subnet="111.221.80.0/20" />

    <IpRange Subnet="111.221.96.0/20" />

    <IpRange Subnet="137.116.128.0/19" />

    <IpRange Subnet="138.91.32.0/20" />

    <IpRange Subnet="168.63.160.0/25" />

    <IpRange Subnet="168.63.160.128/27" />

    <IpRange Subnet="168.63.160.192/26" />

    <IpRange Subnet="168.63.161.0/24" />

    <IpRange Subnet="168.63.162.0/25" />

    <IpRange Subnet="168.63.162.128/27" />

    <IpRange Subnet="168.63.162.176/28" />

    <IpRange Subnet="168.63.162.192/26" />

    <IpRange Subnet="168.63.163.0/24" />

    <IpRange Subnet="168.63.164.0/22" />

    <IpRange Subnet="168.63.168.0/21" />

    <IpRange Subnet="168.63.176.0/20" />

    <IpRange Subnet="168.63.224.0/19" />

    <IpRange Subnet="207.46.48.0/21" />

    <IpRange Subnet="207.46.56.0/24" />

    <IpRange Subnet="207.46.58.0/24" />

    <IpRange Subnet="207.46.59.0/26" />

    <IpRange Subnet="207.46.59.128/25" />

    <IpRange Subnet="207.46.60.0/23" />

    <IpRange Subnet="207.46.62.0/24" />

    <IpRange Subnet="207.46.63.0/26" />

    <IpRange Subnet="207.46.63.80/28" />

    <IpRange Subnet="207.46.63.96/27" />

    <IpRange Subnet="207.46.63.128/25" />

    <IpRange Subnet="23.98.64.0/20" />

    <IpRange Subnet="168.63.90.0/27" />

    <IpRange Subnet="168.63.90.32/28" />

    <IpRange Subnet="168.63.90.64/27" />

    <IpRange Subnet="191.238.64.0/24" />

    <IpRange Subnet="207.46.224.0/20" />

    <IpRange Subnet="13.67.0.0/17" />

    <IpRange Subnet="13.76.0.0/16" />

    <IpRange Subnet="104.43.0.0/28" />

    <IpRange Subnet="104.43.1.0/24" />

    <IpRange Subnet="104.43.8.0/21" />

    <IpRange Subnet="104.43.16.0/20" />

    <IpRange Subnet="104.43.32.0/21" />

    <IpRange Subnet="104.43.64.0/20" />

    <IpRange Subnet="104.43.80.0/27" />

    <IpRange Subnet="104.43.120.0/28" />

    <IpRange Subnet="104.43.121.0/24" />

    <IpRange Subnet="104.215.128.0/19" />

    <IpRange Subnet="104.215.160.0/28" />

    <IpRange Subnet="104.215.161.0/24" />

    <IpRange Subnet="104.215.168.0/21" />

    <IpRange Subnet="104.215.176.0/20" />

    <IpRange Subnet="104.215.192.0/21" />

    <IpRange Subnet="104.215.224.0/20" />

    <IpRange Subnet="104.215.240.0/25" />

    <IpRange Subnet="104.215.240.128/27" />

    <IpRange Subnet="104.215.240.160/28" />

    <IpRange Subnet="104.215.240.192/27" />

    <IpRange Subnet="104.215.248.0/21" />

    </Region>

    <Region Name="ussouth">

    <IpRange Subnet="23.98.174.0/24" />

    <IpRange Subnet="23.98.208.0/23" />

    <IpRange Subnet="40.84.240.0/24" />

    <IpRange Subnet="65.52.32.0/21" />

    <IpRange Subnet="65.54.48.0/22" />

    <IpRange Subnet="65.54.52.0/26" />

    <IpRange Subnet="65.54.52.64/27" />

    <IpRange Subnet="65.54.52.128/25" />

    <IpRange Subnet="65.54.53.0/24" />

    <IpRange Subnet="65.55.80.0/21" />

    <IpRange Subnet="65.55.88.0/22" />

    <IpRange Subnet="65.55.92.0/23" />

    <IpRange Subnet="65.55.94.0/24" />

    <IpRange Subnet="65.55.95.0/26" />

    <IpRange Subnet="65.55.95.64/27" />

    <IpRange Subnet="65.55.95.128/25" />

    <IpRange Subnet="70.37.48.0/20" />

    <IpRange Subnet="70.37.64.0/19" />

    <IpRange Subnet="70.37.96.0/20" />

    <IpRange Subnet="70.37.112.0/22" />

    <IpRange Subnet="70.37.116.0/23" />

    <IpRange Subnet="70.37.118.0/24" />

    <IpRange Subnet="70.37.119.128/26" />

    <IpRange Subnet="70.37.119.224/27" />

    <IpRange Subnet="70.37.120.0/22" />

    <IpRange Subnet="70.37.124.0/23" />

    <IpRange Subnet="70.37.126.0/26" />

    <IpRange Subnet="70.37.126.64/27" />

    <IpRange Subnet="70.37.126.128/27" />

    <IpRange Subnet="70.37.126.192/26" />

    <IpRange Subnet="70.37.127.0/26" />

    <IpRange Subnet="70.37.127.240/28" />

    <IpRange Subnet="70.37.160.0/21" />

    <IpRange Subnet="104.47.208.0/23" />

    <IpRange Subnet="157.55.80.0/21" />

    <IpRange Subnet="157.55.103.32/27" />

    <IpRange Subnet="157.55.153.224/28" />

    <IpRange Subnet="157.55.176.0/20" />

    <IpRange Subnet="157.55.192.0/21" />

    <IpRange Subnet="157.55.200.0/22" />

    <IpRange Subnet="168.62.128.0/19" />

    <IpRange Subnet="13.65.0.0/16" />

    <IpRange Subnet="13.66.32.0/19" />

    <IpRange Subnet="13.66.64.0/18" />

    <IpRange Subnet="23.98.128.0/19" />

    <IpRange Subnet="23.98.160.0/25" />

    <IpRange Subnet="23.98.160.128/27" />

    <IpRange Subnet="23.98.160.160/28" />

    <IpRange Subnet="23.98.160.208/28" />

    <IpRange Subnet="23.98.160.224/27" />

    <IpRange Subnet="23.98.161.0/24" />

    <IpRange Subnet="23.98.162.0/28" />

    <IpRange Subnet="23.98.162.32/28" />

    <IpRange Subnet="23.98.162.64/26" />

    <IpRange Subnet="23.98.162.128/27" />

    <IpRange Subnet="23.98.162.176/28" />

    <IpRange Subnet="23.98.162.192/26" />

    <IpRange Subnet="23.98.164.0/23" />

    <IpRange Subnet="23.98.167.0/24" />

    <IpRange Subnet="23.98.169.0/24" />

    <IpRange Subnet="23.98.170.0/28" />

    <IpRange Subnet="23.98.170.32/27" />

    <IpRange Subnet="23.98.170.64/26" />

    <IpRange Subnet="23.98.170.128/25" />

    <IpRange Subnet="23.98.171.0/24" />

    <IpRange Subnet="23.98.173.0/24" />

    <IpRange Subnet="23.98.175.0/24" />

    <IpRange Subnet="23.98.176.0/20" />

    <IpRange Subnet="23.98.192.0/25" />

    <IpRange Subnet="23.98.210.0/23" />

    <IpRange Subnet="23.98.212.0/22" />

    <IpRange Subnet="23.98.216.0/21" />

    <IpRange Subnet="23.98.255.0/27" />

    <IpRange Subnet="23.98.255.32/28" />

    <IpRange Subnet="23.98.255.64/26" />

    <IpRange Subnet="23.100.120.0/21" />

    <IpRange Subnet="23.100.192.0/19" />

    <IpRange Subnet="23.101.176.0/20" />

    <IpRange Subnet="23.102.128.0/18" />

    <IpRange Subnet="40.74.160.0/20" />

    <IpRange Subnet="40.74.192.0/18" />

    <IpRange Subnet="104.44.128.0/19" />

    <IpRange Subnet="104.210.128.0/19" />

    <IpRange Subnet="104.210.184.0/21" />

    <IpRange Subnet="104.210.192.0/19" />

    <IpRange Subnet="104.214.0.0/17" />

    <IpRange Subnet="191.238.136.0/21" />

    <IpRange Subnet="191.238.144.0/20" />

    <IpRange Subnet="191.238.160.0/19" />

    <IpRange Subnet="191.238.224.0/19" />

    <IpRange Subnet="13.66.0.0/19" />

    <IpRange Subnet="40.74.176.0/20" />

    <IpRange Subnet="40.80.160.0/19" />

    <IpRange Subnet="40.80.192.0/18" />

    <IpRange Subnet="40.84.128.0/18" />

    <IpRange Subnet="40.84.192.0/19" />

    <IpRange Subnet="40.84.224.0/20" />

    <IpRange Subnet="40.84.241.16/28" />

    <IpRange Subnet="40.84.241.32/27" />

    <IpRange Subnet="40.84.241.64/26" />

    <IpRange Subnet="40.84.241.128/25" />

    <IpRange Subnet="40.84.242.0/23" />

    <IpRange Subnet="40.84.244.0/22" />

    <IpRange Subnet="40.86.136.0/21" />

    <IpRange Subnet="40.86.144.0/20" />

    <IpRange Subnet="40.124.0.0/18" />

    <IpRange Subnet="104.215.64.0/18" />

    <IpRange Subnet="13.84.0.16/28" />

    <IpRange Subnet="13.84.0.32/27" />

    <IpRange Subnet="13.84.0.64/26" />

    <IpRange Subnet="13.84.0.128/25" />

    <IpRange Subnet="13.84.2.0/23" />

    <IpRange Subnet="13.84.4.0/22" />

    <IpRange Subnet="13.84.56.0/21" />

    <IpRange Subnet="13.84.64.0/18" />

    <IpRange Subnet="13.84.128.0/17" />

    <IpRange Subnet="13.85.0.0/16" />

    </Region>

    <Region Name="japanwest">

    <IpRange Subnet="23.98.56.0/26" />

    <IpRange Subnet="23.98.56.64/27" />

    <IpRange Subnet="23.98.56.96/28" />

    <IpRange Subnet="23.98.56.128/26" />

    <IpRange Subnet="23.100.104.0/21" />

    <IpRange Subnet="138.91.16.0/20" />

    <IpRange Subnet="191.233.32.0/19" />

    <IpRange Subnet="191.237.236.0/24" />

    <IpRange Subnet="191.238.80.0/20" />

    <IpRange Subnet="104.46.224.0/20" />

    <IpRange Subnet="40.74.64.0/20" />

    <IpRange Subnet="40.74.80.0/20" />

    <IpRange Subnet="40.74.96.0/19" />

    <IpRange Subnet="40.74.128.0/20" />

    <IpRange Subnet="40.80.64.0/18" />

    <IpRange Subnet="40.80.128.0/20" />

    <IpRange Subnet="104.214.128.0/19" />

    <IpRange Subnet="104.215.0.0/18" />

    <IpRange Subnet="191.238.68.0/26" />

    <IpRange Subnet="191.238.69.0/24" />

    <IpRange Subnet="191.239.96.0/19" />

    </Region>

    <Region Name="japaneast">

    <IpRange Subnet="23.98.57.0/25" />

    <IpRange Subnet="23.98.57.128/27" />

    <IpRange Subnet="23.100.96.0/21" />

    <IpRange Subnet="138.91.0.0/20" />

    <IpRange Subnet="191.234.138.0/24" />

    <IpRange Subnet="104.46.208.0/20" />

    <IpRange Subnet="13.71.128.0/18" />

    <IpRange Subnet="13.73.0.0/19" />

    <IpRange Subnet="13.78.0.0/17" />

    <IpRange Subnet="23.102.64.0/20" />

    <IpRange Subnet="23.102.80.0/24" />

    <IpRange Subnet="40.115.128.0/17" />

    <IpRange Subnet="104.41.160.0/19" />

    <IpRange Subnet="191.237.240.0/26" />

    <IpRange Subnet="191.237.240.64/28" />

    <IpRange Subnet="191.237.241.0/24" />

    </Region>

    <Region Name="brazilsouth">

    <IpRange Subnet="23.97.96.0/20" />

    <IpRange Subnet="23.97.112.0/25" />

    <IpRange Subnet="23.97.112.128/28" />

    <IpRange Subnet="104.41.0.0/20" />

    <IpRange Subnet="104.41.16.0/26" />

    <IpRange Subnet="104.41.16.64/27" />

    <IpRange Subnet="104.41.17.0/24" />

    <IpRange Subnet="104.41.18.0/23" />

    <IpRange Subnet="104.41.24.0/21" />

    <IpRange Subnet="104.41.32.0/19" />

    <IpRange Subnet="191.232.32.0/21" />

    <IpRange Subnet="191.237.248.0/21" />

    <IpRange Subnet="191.239.240.0/20" />

    <IpRange Subnet="104.41.16.96/27" />

    <IpRange Subnet="104.41.16.128/25" />

    <IpRange Subnet="104.41.20.0/22" />

    <IpRange Subnet="191.232.40.0/21" />

    <IpRange Subnet="191.232.48.0/20" />

    </Region>

    <Region Name="australiaeast">

    <IpRange Subnet="13.70.64.0/18" />

    <IpRange Subnet="13.72.224.0/19" />

    <IpRange Subnet="13.73.192.0/20" />

    <IpRange Subnet="13.75.128.0/17" />

    <IpRange Subnet="23.101.208.0/20" />

    <IpRange Subnet="40.78.192.0/19" />

    <IpRange Subnet="40.126.224.0/19" />

    <IpRange Subnet="104.46.29.0/24" />

    <IpRange Subnet="104.46.30.0/23" />

    <IpRange Subnet="104.46.240.0/20" />

    <IpRange Subnet="104.209.80.0/20" />

    <IpRange Subnet="104.210.64.0/18" />

    <IpRange Subnet="191.238.66.0/25" />

    <IpRange Subnet="191.238.66.128/27" />

    <IpRange Subnet="191.238.66.160/28" />

    <IpRange Subnet="191.238.67.0/24" />

    <IpRange Subnet="191.239.64.0/19" />

    </Region>

    <Region Name="australiasoutheast">

    <IpRange Subnet="13.70.128.0/18" />

    <IpRange Subnet="13.73.96.0/19" />

    <IpRange Subnet="13.77.0.0/18" />

    <IpRange Subnet="23.101.224.0/19" />

    <IpRange Subnet="40.78.224.0/19" />

    <IpRange Subnet="40.115.64.0/19" />

    <IpRange Subnet="40.127.64.0/19" />

    <IpRange Subnet="104.46.28.0/24" />

    <IpRange Subnet="104.209.64.0/20" />

    <IpRange Subnet="191.239.160.0/19" />

    <IpRange Subnet="191.239.192.0/25" />

    <IpRange Subnet="191.239.192.128/27" />

    <IpRange Subnet="191.239.192.160/28" />

    <IpRange Subnet="191.239.192.192/27" />

    <IpRange Subnet="191.239.193.0/24" />

    <IpRange Subnet="191.239.194.0/24" />

    <IpRange Subnet="191.239.195.0/28" />

    </Region>

    <Region Name="indiacentral">

    <IpRange Subnet="104.211.64.0/28" />

    <IpRange Subnet="104.211.65.0/24" />

    <IpRange Subnet="104.211.72.0/21" />

    <IpRange Subnet="104.211.80.0/20" />

    <IpRange Subnet="104.211.96.0/21" />

    <IpRange Subnet="104.211.104.0/26" />

    <IpRange Subnet="104.211.104.64/27" />

    <IpRange Subnet="104.211.104.96/28" />

    <IpRange Subnet="104.211.64.16/28" />

    <IpRange Subnet="104.211.64.32/27" />

    <IpRange Subnet="104.211.64.64/26" />

    <IpRange Subnet="104.211.64.128/25" />

    <IpRange Subnet="104.211.66.0/23" />

    <IpRange Subnet="104.211.68.0/22" />

    <IpRange Subnet="104.211.104.112/28" />

    <IpRange Subnet="104.211.104.128/25" />

    <IpRange Subnet="104.211.105.0/24" />

    <IpRange Subnet="104.211.106.0/23" />

    <IpRange Subnet="104.211.108.0/22" />

    <IpRange Subnet="104.211.112.0/20" />

    <IpRange Subnet="104.47.210.0/23" />

    <IpRange Subnet="13.71.0.0/18" />

    </Region>

    <Region Name="indiawest">

    <IpRange Subnet="104.211.128.0/28" />

    <IpRange Subnet="104.211.129.0/24" />

    <IpRange Subnet="104.211.136.0/21" />

    <IpRange Subnet="104.211.144.0/20" />

    <IpRange Subnet="104.211.160.0/21" />

    <IpRange Subnet="104.211.168.0/27" />

    <IpRange Subnet="104.211.168.32/28" />

    <IpRange Subnet="104.211.168.64/27" />

    <IpRange Subnet="104.211.128.16/28" />

    <IpRange Subnet="104.211.128.32/27" />

    <IpRange Subnet="104.211.128.64/26" />

    <IpRange Subnet="104.211.128.128/25" />

    <IpRange Subnet="104.211.130.0/23" />

    <IpRange Subnet="104.211.132.0/22" />

    <IpRange Subnet="104.211.168.48/28" />

    <IpRange Subnet="104.211.168.96/27" />

    <IpRange Subnet="104.211.168.128/25" />

    <IpRange Subnet="104.211.169.0/24" />

    <IpRange Subnet="104.211.170.0/23" />

    <IpRange Subnet="104.211.172.0/22" />

    <IpRange Subnet="104.211.176.0/20" />

    <IpRange Subnet="104.47.212.0/23" />

    </Region>

    <Region Name="indiasouth">

    <IpRange Subnet="104.211.192.0/28" />

    <IpRange Subnet="104.211.193.0/24" />

    <IpRange Subnet="104.211.200.0/21" />

    <IpRange Subnet="104.211.208.0/20" />

    <IpRange Subnet="104.211.224.0/21" />

    <IpRange Subnet="104.211.232.0/26" />

    <IpRange Subnet="104.211.232.64/27" />

    <IpRange Subnet="104.211.232.96/28" />

    <IpRange Subnet="104.211.232.128/27" />

    <IpRange Subnet="104.211.192.16/28" />

    <IpRange Subnet="104.211.192.32/27" />

    <IpRange Subnet="104.211.192.64/26" />

    <IpRange Subnet="104.211.192.128/25" />

    <IpRange Subnet="104.211.194.0/23" />

    <IpRange Subnet="104.211.196.0/22" />

    <IpRange Subnet="104.211.232.112/28" />

    <IpRange Subnet="104.211.232.160/27" />

    <IpRange Subnet="104.211.232.192/26" />

    <IpRange Subnet="104.211.233.0/24" />

    <IpRange Subnet="104.211.234.0/23" />

    <IpRange Subnet="104.211.236.0/22" />

    <IpRange Subnet="104.211.240.0/20" />

    <IpRange Subnet="104.47.214.0/23" />

    <IpRange Subnet="13.71.64.0/18" />

    </Region>

    </AzurePublicIpAddresses>';

    DECLARE @timer TABLE (T_TEXT VARCHAR(100) NOT NULL, T_TS DATETIME2(7) NOT NULL DEFAULT (SYSDATETIME()));

    DECLARE @INT_BUCKET INT = 0;

    INSERT INTO @timer(T_TEXT) VALUES('IP RANGE MATCH');

    ;WITH BASE_DATA AS

    (

    SELECT

    REGION.DATA.value('@Name','VARCHAR(100)') AS REGION

    ,IPRANGE.DATA.value('@Subnet','VARCHAR(20)') AS IP_RANGE

    FROM @IPXML.nodes('AzurePublicIpAddresses/Region') AS REGION (DATA)

    CROSS APPLY REGION.DATA.nodes('IpRange') AS IPRANGE(DATA)

    )

    ,IP_RANGE_DETAIL AS

    (

    SELECT

    BD.REGION

    ,BD.IP_RANGE

    ,SUBSTRING(BD.IP_RANGE,1,CHARINDEX(CHAR(47),BD.IP_RANGE,1)-1) AS RANGE_START

    ,POWER(2,32 - CONVERT(INT,SUBSTRING(BD.IP_RANGE,CHARINDEX(CHAR(47),BD.IP_RANGE,1)+ 1,2))) AS NUM_HOSTS

    FROM BASE_DATA BD

    )

    ,RANGE_IP_PARSED AS

    (

    SELECT

    IRD.REGION

    ,IRD.IP_RANGE

    ,IRD.RANGE_START

    ,PARSENAME(IRD.RANGE_START,4) AS ACLS

    ,PARSENAME(IRD.RANGE_START,3) AS BCLS

    ,PARSENAME(IRD.RANGE_START,2) AS CCLS

    ,PARSENAME(IRD.RANGE_START,1) AS DCLS

    ,IRD.NUM_HOSTS

    ,IRD.NUM_HOSTS / POWER(256,2) AS BRANGE

    ,IRD.NUM_HOSTS / 256 AS CRANGE

    ,IRD.NUM_HOSTS % 256 AS DRANGE

    FROM IP_RANGE_DETAIL IRD

    )

    SELECT

    @INT_BUCKET = IA.IP_NUM

    FROM dbo.TBL_IP_ADDRESS IA

    INNER JOIN RANGE_IP_PARSED RIP

    ON IA.ACLS = RIP.ACLS

    AND IA.BCLS = RIP.BCLS

    AND IA.CCLS BETWEEN RIP.CCLS AND RIP.CCLS + RIP.CRANGE

    AND IA.DCLS BETWEEN CASE

    WHEN RIP.DRANGE > 0 THEN RIP.DCLS

    ELSE 0

    END

    AND CASE

    WHEN RIP.DRANGE > 0 THEN RIP.DCLS + RIP.DRANGE

    ELSE 255

    END

    ;

    INSERT INTO @timer(T_TEXT) VALUES('IP RANGE MATCH');

    SELECT

    T.T_TEXT

    ,DATEDIFF(MICROSECOND,MIN(T.T_TS),MAX(T.T_TS)) AS DURATION

    FROM @timer T

    GROUP BY T.T_TEXT

    ORDER BY DURATION;

    On my old 2nd gen i5 laptop matching 5,000,000 IPv4 addresses to MS Azure Data Centres IP ranges takes less than two seconds

    T_TEXT DURATION

    ----------------- -----------

    IP RANGE MATCH 1346077

    Edit: Typo

  • Must be getting tired, just realized that the XML shredding was heavily affecting the timing, adding a table for the ip ranges brings the matching of the 5 million down to 0.6 sec, interested to see any text based IP address matching to IP ranges performing like this, Jeff do you hold any aces up your sleeve?

    😎

    T_TEXT DURATION

    ------------------- -----------

    IP RANGE MATCH 581033

  • Indeed, we've been using the custom application for years now (and it was tested thoroughly before it went into production) and never had issues with ordering (nor performance).

    Btw, I know about little and big endian... well that's to say I read about it loooong time ago (possibly when I was still programming C, I cannot even remember :)). Anyway, I'm not shy to admit you guys are out of my league so given your great tips I'm sure we'll use those when the need for a new version arises. Thanks!

    Thierry

  • It sounds like your BIGINT idea was a great success and it doesn't sound like you ran into any form of endian problems because of it. Thanks again for the feedback, Thierry.

    Just for my learning, can you explain what the front end is doing to setup the BIGINT IPs up for display? It may help me help others in the future.

    --Jeff Moden


    RBAR is pronounced "ree-bar" and is a "Modenism" for Row-By-Agonizing-Row.
    First step towards the paradigm shift of writing Set Based code:
    ________Stop thinking about what you want to do to a ROW... think, instead, of what you want to do to a COLUMN.

    Change is inevitable... Change for the better is not.


    Helpful Links:
    How to post code problems
    How to Post Performance Problems
    Create a Tally Function (fnTally)

  • Sure, at the risk of getting shot because of bad coding 😉

    We have two helper functions converting from/to long/ip.

    We subscribe to the datagrid's CellFormatting event and change the long to an IP for display.

    The underlying value in the datagrid is still of type long and so default sorting just works.

    I think these helper functions are now deprecated and you need to add a directive to the code to ignore the warnings about that.

    As I said, this code was written long time ago, but for us it still does the job today.

    Btw, check the remarks section for https://msdn.microsoft.com/en-us/library/tdx10bbd(v=vs.110).aspx

    It talks about endian stuff 🙂

    Here's the code (I hope this displays somewhat readable):

    public static long IPAddressToLong(string ipAddress)

    {

    return (long)(uint)System.Net.IPAddress.NetworkToHostOrder((int)System.Net.IPAddress.Parse(ipAddress).Address);

    }

    public static string LongToIPAddress(long ipAddress)

    {

    return new System.Net.IPAddress((uint)System.Net.IPAddress.HostToNetworkOrder((int)ipAddress)).ToString();

    }

    void ipDataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)

    {

    if (ipDataGridView.Columns[e.ColumnIndex] == ipaddressColumn)

    {

    e.Value = Helper.Convert.LongToIPAddress((long)e.Value);

    }

    }

    Regards,

    Thierry

  • thierry.vandurme (1/18/2016)


    Sure, at the risk of getting shot because of bad coding 😉

    We have two helper functions converting from/to long/ip.

    We subscribe to the datagrid's CellFormatting event and change the long to an IP for display.

    The underlying value in the datagrid is still of type long and so default sorting just works.

    I think these helper functions are now deprecated and you need to add a directive to the code to ignore the warnings about that.

    As I said, this code was written long time ago, but for us it still does the job today.

    Btw, check the remarks section for https://msdn.microsoft.com/en-us/library/tdx10bbd(v=vs.110).aspx

    It talks about endian stuff 🙂

    Regards,

    Thierry

    Network endian-ness is predominantly big-endian and the method NetworkToHostOrder will swap the byte order to small-endian. This tells me that you are storing the IPs as big-endian bigint with the first four bytes set to zero which makes sense as otherwise they could not be sorted.

    😎

  • thierry.vandurme (1/18/2016)


    I think these helper functions are now deprecated and you need to add a directive to the code to ignore the warnings about that.

    Thanks, Thierry.

    Heh... deprecation. It's amazing to me that so many useful things have been deprecated for something "better". There used to be a thing called "sp_MakeWebtask" you would simply pass the text of a query to and it would make beautiful pages. It could even use templates. That was deprecated and finally removed from SQL Server in favor of the "much better" SSRS which, as you know, requires a whole 'nuther language to use and is comparatively extremely slow... slow enough where a lot of people actually stand up a separate box for it and then have to copy data to it so that the "money maker" database isn't slowed down by reporting requests.

    Any idea what they want you to use instead of what sounds like a wonderful helper function?

    --Jeff Moden


    RBAR is pronounced "ree-bar" and is a "Modenism" for Row-By-Agonizing-Row.
    First step towards the paradigm shift of writing Set Based code:
    ________Stop thinking about what you want to do to a ROW... think, instead, of what you want to do to a COLUMN.

    Change is inevitable... Change for the better is not.


    Helpful Links:
    How to post code problems
    How to Post Performance Problems
    Create a Tally Function (fnTally)

  • Eirikur Eiriksson (1/18/2016)


    Network endian-ness is predominantly big-endian and the method NetworkToHostOrder will swap the byte order to small-endian. This tells me that you are storing the IPs as big-endian bigint with the first four bytes set to zero which makes sense as otherwise they could not be sorted.

    😎

    I guess I'm missing something here, Eirikur. If you remove the dots from a properly formed IP address (each octet containing 3 display digits) and convert that string to an Integer value, you still end up with a 12 digit Integer value. A 4 digit Integer is only capable of a 10 digit value and, of course, the leading digit will not exceed "1". What conversion are you using where the first 4 bytes of a big endian integer would all be zeroed out for a 12 digit IP address that's been converted to an Integer value?

    --Jeff Moden


    RBAR is pronounced "ree-bar" and is a "Modenism" for Row-By-Agonizing-Row.
    First step towards the paradigm shift of writing Set Based code:
    ________Stop thinking about what you want to do to a ROW... think, instead, of what you want to do to a COLUMN.

    Change is inevitable... Change for the better is not.


    Helpful Links:
    How to post code problems
    How to Post Performance Problems
    Create a Tally Function (fnTally)

Viewing 15 posts - 16 through 30 (of 36 total)

You must be logged in to reply to this topic. Login to reply